Show Posts
Pages: 1 ... 49 50 [51] 52 53 ... 76
751  International / Deutsch / Re: Probleme eines Anfängers :) on: November 30, 2011, 01:22:37 pm
Ich glaube du unterschätz den Atemga in Sachen speed. Ich habe eine Nixiuhr mit einer 4 Schieberegister und eine Multiplex schaltung ingestam 11k Code und ich habe ein Zykluszeit von 1-1,2ms das heist die Loop wir 800-1000 pro Sekunde ausgeführt!
752  International / Deutsch / Re: Probleme eines Anfängers :) on: November 29, 2011, 03:16:06 pm
Lieber maverick Die Uhr schreibt alles in Buchstaben aus deswegen ist die Sache auch etwas komplizierter

also:
Es ist zwanzig vor sieben
am Dienstag den 29.11.2011

Und den Geburtag der hinterlegten zeigt diese auch an mit 14 Tage vorlauf .
Also nicht einfach so Zahlen anzeigen. Ausserdem sollte das Stellen dann auch komfortabel sein wenn man schon mal ein 40*2 Display hat
also oben in der Zeile steht was man gearde stellen kann und unten sieht man das.
753  International / Deutsch / Re: Probleme eines Anfängers :) on: November 29, 2011, 12:14:49 pm
Die Funktionen dazu
Code:
[code]
void MinutetoText(int m){
  if (m >=5&&m<10){
    lcd.print(MinArray[2]);    // fuenf
    lcd.print(MinArray[1]);    // nach
  }
  if (m >=10&&m<15){
    lcd.print(MinArray[3]);    // zehn
    lcd.print(MinArray[1]);    // nach
  }
  if (m >=15&&m<20){
    lcd.print(MinArray[4]);    // viertel
    lcd.print(MinArray[1]);    // nach
  }
  if (m >=20&&m<25){
    lcd.print(MinArray[5]);    // zwanzig
    lcd.print(MinArray[1]);    // nach
  }
  if (m >=25&&m<30){
    lcd.print(MinArray[2]);    // fuenf
    lcd.print(MinArray[0]);    // vor
    lcd.print(MinArray[6]);    // halb
  }
  if (m >=30&&m<35){
    lcd.print(MinArray[6]);    // halb
  }
  if (m >=35&&m<40){
    lcd.print(MinArray[2]);    // fuenf
    lcd.print(MinArray[1]);    // nach
    lcd.print(MinArray[6]);    // halb
  }
  if (m >=40&&m<45){
    lcd.print(MinArray[5]);    // zwanzig
    lcd.print(MinArray[0]);    // vor
  }
  if (m >=45&&m<50){
    lcd.print(MinArray[4]);    // viertel
    lcd.print(MinArray[0]);    // vor
  }
  if (m >=50&&m<55){
    lcd.print(MinArray[3]);    // zehn
    lcd.print(MinArray[0]);    // nach
  }
  if (m >=55&&m<=59){
    lcd.print(MinArray[2]);    // fuenf
    lcd.print(MinArray[0]);    // vor
  }
}

void HourtoText(int h){
  if (h>12){
    h=h-12;
  }
  if (h==0){
    h=h+12;
  }
  if (mm>=25){
    if (h==12){
      lcd.print(StdArray[0]);
    }
    else
      lcd.print(StdArray[h]);
  }
  else{
    lcd.print(StdArray[h-1]);
  }
  if (mm<5){
    lcd.print(" UHR");
  } 
}

void WeekdaytoText(int d){
  lcd.print(TagArray[d-1]);
  if(setmode==0){
    lcd.print(" DEN ");
  }
}

void printDate2(){
  if (Tag<10){
    lcd.print("0");
  }
  lcd.print(Tag);
  lcd.print(".");
  if(Monat<10){
    lcd.print("0");
  }
  lcd.print(Monat);
  lcd.print(".");
  lcd.print(Jahr);
  lcd.print(" ");
}

void printTime(int x,int y){
  lcd.setCursor(x, y);
  if (hh<10){
    lcd.print("0");
  }
  lcd.print(hh);
  lcd.print(":");
  if(mm<10){
    lcd.print("0");
  }
  lcd.print(mm);
  lcd.print(":");
  if (ss<10){
    lcd.print("0");
  }
  lcd.print(ss);
}

void printDate(int x,int y){
  lcd.setCursor(x, y);
  if (Tag<10){
    lcd.print("0");
  }
  lcd.print(Tag);
  lcd.print(".");
  if(Monat<10){
    lcd.print("0");
  }
  lcd.print(Monat);
  lcd.print(".");
  lcd.print(Jahr);
  lcd.print(" ");
}

void printTemp(int x,int y, int z){
  int First;
  int Last;
  lcd.setCursor(x,y);
  Last=z%10;
  First=(z-Last)/10;
  lcd.print(First);
  lcd.print(".");
  lcd.print(Last);
  lcd.print(" Grad");

}

int get_TEMP(){                               // Funktion Einlesen Lambda
  long TEMPY;
  long TEMPX;
  long TEMPact;
  long TEMPdis;
  TEMPact=analogRead(temp);                  // Einlesen des Lambdaistwertes
  TEMPX=TEMPact*10*0.2;                        // Filter neuer Lesewert mit 20% pro Zyklus
  TEMPY=TEMPlast*10*0.8;
  TEMPdis=(TEMPX+TEMPY)/10;
  TEMPlast=TEMPdis;
  return TEMPdis;
}


void checkBday(){
  for (int i=0;i<=4;i++){
    TempTag=Datum[i]%100;
    TempMon=(Datum[i]-TempTag)/100; 
    if ((TempMon-Monat)==0&&check==true){
      RestTage=TempTag-Tag;
      if (RestTage<=14&&RestTage>=1){
        Pointer=i;
        check=false; 
      }
    }
  }
}
[/code]
754  International / Deutsch / Re: Probleme eines Anfängers :) on: November 29, 2011, 12:13:17 pm
Hier mal ein Schnipsel einer Uhr die die Zeit in klarem Text auf ein Diplay zeigt und entsprechenden Seiten zum Stellen der einzelenen Sachen (die RTC Funktionen habe ich nicht mitkopiert)
Main Loop
Code:
void loop() {
  tempist=get_TEMP();                           // einlesen Temperatur Istwert
  T1Read=digitalRead(Taster1);                  // Taster 1
  T2Read=digitalRead(Taster2);                  // Taster 2
  ssIn=digitalRead(RTCPuls);
  digitalWrite(13,ssIn);
  if (T1Read==false&&LT1Read==true){  // Taster muss gedrückt sein und darf vorher nicht gedrückt sein
    LT1Read=false;                    // Hilfmerker zum einmal ausführen
    setmode=setmode++;                // Erhöhen des Setmode zum Stellen 1=Std 2=Minuten 3=Tag 4=Monat 5=Jahr 0=Normalbetrieb
    Buttonmillis=millis();
    kopieren=false;
    lcd.clear();
    if (setmode>=7){
      lcd.clear();
      setmode=0;
      run=true;
    }  
  }
  if (T1Read==true&&LT1Read==false){
    LT1Read=true;
  }
  if (T2Read==false&&LT2Read==true&&setmode>0){   // Taster muss gedrückt sein und darf vorher nicht gedrückt sein
    LT2Read=false;                                // Hilfmerker zum einmal ausführen
    Wert=Wert++;                                  // Erhöhen des Setmode 1=Std 2=Minuten 3=Tag 4=Monat 5=Jahr 0=Normalbetrieb
    Buttonmillis=millis();  
  }
  if (T2Read==true&&LT2Read==false){
    LT2Read=true;
  }
  if (millis()-Buttonmillis>=7500&&setmode>0){      // Rücksetzen nach 7,5 Sekunden
    setmode=0;
    run=true;  
  }
  if (ssIn==true&&lssIn==false){
    ++ss;
    if (DR==true){
      DateRead();
      DR=false;
    }
    if (ss==60){
      ss=0;
      mm=mm+1;
    }
    if (mm>=60){                                    //=> dann hier weiter (zählen) der Sekunden/Minuten/Stunden
      mm=0;
      hh=hh++;
      oncehh=false;
    }
    if (hh>=24){
      hh=0;
      DR=true;
    }
    lssIn=true;
  }
  if (ssIn==false&&lssIn==true){
    lssIn=false;
  }

  switch (setmode){
  case 0:
    lcd.setCursor(0,0);
    lcd.print("ES IST "); // Bis Position 6,0
    lcd.setCursor(7,0);
    if (mm!=lmm || run==true){
      hh=HourRead();                                // RTC Funktion lesen der aktuellen zeit Stunden
      mm=MinuteRead();                              // RTC Funktion lesen der aktuellen zeit Minuten
      ss=SecondRead();                              // RTC Funktion lesen der aktuellen zeit Sekunden  
     check=true;
      lcd.clear();
      lcd.setCursor(7,0);
      MinutetoText(mm);
      HourtoText(hh);
      //  DatetoText
      lcd.setCursor(0,1);
      lcd.print("AM ");
      WeekdaytoText(WTag);
      printDate2();
      lmm=mm;
      run=false;
    }
    printTemp(31,0,tempist);
    break;
  case 1:
    if (kopieren==false){                                    // Einmaliges Kopieren des Istwertes in den Encoderarbeitswert nach aufruf dieses Setmodes
      Wert=hh;                                               // Schreiben des Istwertes in den Arbeitswert
      kopieren=true;                                         // Merker setzten zum einmaligen ausführen
    }
    if(hh!=Wert){                                         // Wenn der Stundewert über den Encoder verändert wurde
      if (Wert>=24){                                      // Abfang überlauf nach oben größer 23 Uhr
        Wert=0;
      }
      hh=Wert;                                            // Schreiben des Arbeitswertes in den neuen Istwert
      RTC_Set_Time();                                     // Schreiben der neuern Werte in die RTC
    }
    lcd.setCursor(0,0);
    lcd.print("STELLEN STUNDEN                         ");
    break;
  case 2:
    if (kopieren==false){                                    // Einmaliges Kopieren ders Istwertes in den Encoderarbeitswert nach aufruf dieses Setmodes
      Wert=mm;                                            // Schreiben des Istwertes in den Arbeitswert
      kopieren=true;                                         // Merker setzten zum einmaligen ausführen
    }
    if(mm!=Wert){                                         // Wenn der Stundewert über den Encoder verändert wurde
      if (Wert>=60){                                      // Abfang überlauf nach oben größer 23 Uhr
        Wert=0;
      }
    }
    mm=Wert;                                            // Schreiben des Arbeitswertes in den neuen Istwert
    RTC_Set_Time();
    lcd.setCursor(0,0);
    lcd.print("STELLEN MINUTEN                        ");
    break;
  case 3:
    if (kopieren==false){                                    // Einmaliges Kopieren ders Istwertes in den Encoderarbeitswert nach aufruf dieses Setmodes
      Wert=Tag;                                            // Schreiben des Istwertes in den Arbeitswert
      kopieren=true;                                         // Merker setzten zum einmaligen ausführen
    }
    if(Tag!=Wert){                                         // Wenn der Stundewert über den Encoder verändert wurde
      if (Wert>31){                                      // Abfang überlauf nach oben größer 23 Uhr
        Wert=1;
      }
    }
    Tag=Wert;          
    RTC_Set_Date();    
    lcd.setCursor(0,0);
    lcd.print("STELLEN TAG                            ");
    break;
  case 4:
    if (kopieren==false){                                    // Einmaliges Kopieren ders Istwertes in den Encoderarbeitswert nach aufruf dieses Setmodes
      Wert=Monat;                                            // Schreiben des Istwertes in den Arbeitswert
      kopieren=true;                                         // Merker setzten zum einmaligen ausführen
    }
    if(Monat!=Wert){                                         // Wenn der Stundewert über den Encoder verändert wurde
      if (Wert>12){                                      // Abfang überlauf nach oben größer 23 Uhr
        Wert=1;
      }
    }
    Monat=Wert;
    RTC_Set_Date();
    lcd.setCursor(0,0);
    lcd.print("STELLEN MONAT                          ");
    break;
  case 5:
    if (kopieren==false){                                    // Einmaliges Kopieren ders Istwertes in den Encoderarbeitswert nach aufruf dieses Setmodes
      Wert=Jahr;                                            // Schreiben des Istwertes in den Arbeitswert
      kopieren=true;                                         // Merker setzten zum einmaligen ausführen
    }
    if(Jahr!=Wert){                                         // Wenn der Stundewert über den Encoder verändert wurde
      if (Wert>2019){                                      // Abfang überlauf nach oben größer 23 Uhr
        Wert=2011;
      }

    }
    Jahr=Wert;
    RTC_Set_Date();
    lcd.setCursor(0,0);
    lcd.print("STELLEN JAHR                           ");
    break;  
  case 6:
    if (kopieren==false){                                    // Einmaliges Kopieren ders Istwertes in den Encoderarbeitswert nach aufruf dieses Setmodes
      Wert=WTag;                                            // Schreiben des Istwertes in den Arbeitswert
      kopieren=true;                                         // Merker setzten zum einmaligen ausführen
    }
    if(WTag!=Wert){                                         // Wenn der Stundewert über den Encoder verändert wurde
      lcd.clear();
      if (Wert>7){                                        // Abfang überlauf nach oben größer 23 Uhr
        Wert=1;
      }
    }
    WTag=Wert;
    RTC_Set_Date();
    lcd.setCursor(0,0);
    lcd.print("STELLEN WOCHENTAG  ");
    lcd.print(Name[Pointer]);
    lcd.print(" NOCH ");
    lcd.print(RestTage);
    lcd.print(" TAGE ");
    break;  

  }
  if (setmode>=1){
    printTime(0,1);
    printDate(9,1);
    WeekdaytoText(WTag);
  }
  if (test==true){

  }
  checkBday();
}
755  International / Deutsch / Re: Probleme eines Anfängers :) on: November 28, 2011, 03:40:41 pm
Also ich arbeite bei "Displaymenüs" immer mit switchcase. In dem Switchcase hinterlegt du dann die einzelnen Seiten. Du kannst dann innerhalb der Siwtchcases dann deine Displayausgabe gestalten und außerhalb der Cases die Werte verarbeiten. Wie du deine Displayseiten umschaltest ist ja dann dir überlassen :-)
756  International / Deutsch / Re: Button Hold on: November 28, 2011, 02:48:43 am
Ich glaube in diesem Programm ist genau das vorhanden was du brauchst wobei du dann nihct an das Türklopfen verwendest sondern deine Button
http://grathio.com/2009/11/secret_knock_detecting_door_lock/
757  International / Deutsch / Re: Starker Motortreiber on: November 26, 2011, 01:16:16 pm
Hier stehen zwei verscheidene "Interessen" gegenüber also
-besserer Wirkungsgrad (geringer Verluste im Motor) kontra "akkustischem Komfort"
d.h. bnei Taktfrequenzen unterhalb 16kHz bist sehr stark im Hörbaren Bereich was je nach Frequenz sehr unangenehm ist. Ich sehe zu das ich im 4 kHz bereich bei meinen Antrieben auf der Arbeit bleibe, weil dies noch am "angenehmsten" ist. Nimmst du aber höhere Frequenzen  sind die Verluste im Motor höher und der Mosfet hat u.U. höhere Temperaturen (aufgrunde der Höheren Schaltfrequenz).
Wenn du sowieso erstmal die orginalen PWMs vom Arudiono nimmst hast du glaube ich 500Hz/1kHz taktfrequnzen (die zum Testen erstmal vollkommen ausreichen). Die Taktfrequenz kannst du nachher im durch ändern dcer Prescaler ändern.
Zu den Mosfet est gibt bei vielen Serien schon Isolierte Mosfets.
758  International / Deutsch / Re: wo in München? on: November 25, 2011, 12:35:42 pm
Schaur mal hier,
Vielleicht kann man da sogar ein Sammelbestellung machen.
http://www.allesplatte.de/calculator
Bei 5 Platten 20*20cm wäre man schon bei ca 27€







Tante Edith meinte:Preis reinschreiben
759  International / Deutsch / Re: Starker Motortreiber on: November 24, 2011, 02:33:04 pm
Also wenn du einen starke H-Brücke incl Ansteuerung haben willst bist du mit dem
HIP4082 und 4*IRFZ44R kommst du auf 50A ansteuerung und maximale Taktfrequenz von 200kHz 
760  International / Deutsch / Re: Teilbereich spannungsmessung on: November 22, 2011, 02:56:26 pm
Hier eine Lösung mit Zener Diode (wobei diese hier ein Temperatur Stabilisierte sein muss)
Mit der Schaltung im Anhang könntest du deine Spannung über den Widerstand messen. (Wahlweise die Zenerspannung auch erhöhen) Wenn du deinen Hub unter 1V bekommst schaltest du die Analog Refrence auf 1,1V und dann hast du auch noch ne Gut auflösung
761  International / Deutsch / Re: Heartbeat on: November 21, 2011, 10:34:34 am
Das Delay ist nur für euch da :-).
Ich nehme das Array und lasse es durch Up(gesetzt durch die RTC) einmal durchlaufen und dann wartet es auf einen neuen Impuls (RTC gibt jede Sekunde 1 Impuls) was jeder draus macht ist jedem Überlassen.
Es geht in erster Linie um das doppelpulsen : smiley-money smiley-money
762  International / Deutsch / Re: Heartbeat on: November 21, 2011, 12:59:41 am
Genauso. Es ist ein Doppelblinken mit Fadeeffect also es sieht "lebendig" aus und nicht "digital".  smiley
763  International / Deutsch / Heartbeat on: November 20, 2011, 05:16:40 pm
Ich braucht gerade mal eine LED die im Herzschlagtakt schlägt.
Da ich keinen schönen Code gefunden habe schrieb ich mit mal eben selbst was.
Im Array kann man die "Art"schön betimmen.
 Poste ich hier mal meinen Heartbeat via PWM an Pin 10

Code:
unsigned long lmillis;
byte i=0;
boolean up=true;
byte Fadearray[]={
     0,  2,  4,  8, 12, 20, 32, 44, 56, 68,
    80, 92,104,116,128,140,152,164,176,188,
   200,212,224,236,255,240,210,180,150,120,
    90, 60, 40, 25, 25, 40, 60, 90,120,150,
   180,210,240,255,230,205,180,155,130,105,
    80, 55, 30, 20, 16,  8,  4,  2,  0};

void setup(){
  pinMode(10,OUTPUT);
}

void loop(){
  if (millis()-lmillis>=11){
    if (i==58){
      up=false;
      delay(550);
      i=0;
    }
    i++;
    analogWrite(10,Fadearray[i]); 
    lmillis=millis();
  }
}

Gruß
Volvodani
764  International / Deutsch / Re: Arduino selber bauen - wie programmieren? on: November 20, 2011, 07:53:22 am
Der kleine Programmer aus myavr ist jeden Euro wert (und das sind noch nicht mal viele). Ich habe nur Positive Erfahrungen damit gemacht. Kleine änderung in der IDE und du brauchst noch nicht mal einen Bootloader und spart dann platz auf dem µC
765  International / Deutsch / Re: Was passiert bei falscher Pinbelegung? on: November 19, 2011, 12:32:58 pm
Genauso sieht es aus. Im Grunde muss man halt nur aufpassen das kein zu hoher STrom fließt bzw eine zu hohe Spannung anliegt. Ich persöhnlich nutze wenn ich höhere Spannungen überwache als 5V trotz Vorteiler immer noch eine 5,1V Z-Diode  (Eingänge sind bis max 5,5V "belastbar"). Dann ist man noch sicherer.
Pages: 1 ... 49 50 [51] 52 53 ... 76