Ich habe ein Problem mit meinem Programm. Das Ziel ist es, mit dem µC
auf einem LCD einen Countdown zu machen. Startwert lässt sich mittels
Taster einstellen und der Countdown lässt sich starten. Er zählt auch
genau jede Sekunde runter...aber immer um 9 Werte. Bin mir sicher es ist
ein billiger Fehler, aber ich komm einfach nicht drauf.
Hier der Programmausschnitt:
if((time-((time/100)*100))==0) //ersetzt Modulu (alle 100 mal OK)
{
sprintf(s,"%02d",start); //startwert wird formatiert in string
geschrieben
lcd_string(s); //string wird am LCD ausgegeben(lcd-routines.h)
lcd_setcursor(6,2); //Position wird neu gesetzt
if(start>0) start--; //FEHLERHAFTE ZEILE
}
time...alle 10ms wird time von timer1 um 1 erhöht
start...Startwert, der im ext. Interrupt festgelegt wird. Danach im
Programm nur in dem Programmausschnitt verwendet
Hab schon versucht time statt start auszugeben..100,200,300..und das
alle Sekunden...sollte auch so sein. Es liegt ganz sicher an 'start--'
Bitte um Hilfe!
LG. Error404
>if(start>0) start--; //FEHLERHAFTE ZEILE >Es liegt ganz sicher an 'start--' Nö, daran liegt es mit Sicherheit nicht. Das Problem ist woanders in deinem Code.
Woran denn? Wenn ich time anstatt start ausgebe, dann wird jede Sekunde ein vielfaches von 100 ausgegeben, da heißt, dass alles im if genau jede Sekunde aufgerufen wird. Start wird sonst nirgendwo angerührt. Wo sollte der Fehler liegen?
Florian Moser schrieb: > if((time-((time/100)*100))==0) //ersetzt Modulu (alle 100 mal OK) Warum so kompliziert, wenns auch einfach geht? if ((time % 100) == 0)
Die If-Abfrage ist für jeweils 10ms wahr. Wenn der gezeigte Code-Schnipsel in einer Schleife immer wieder aufgerufen wird, schafft er es den Wert von "start" mehrmals zu dekrementieren.
Nur um zu versuchen, ob es am Modulu liegt. Wenn time unter 100 liegt, dann ist der Wert mit Modulu nicht das, was er sein sollte.
Wieso alle 10ms? der timer1 braucht genau 10ms bis er den wert 20000 erreicht. dann wird time um 1 erhöht. Das heißt... wenn time ein Vielfaches von 100 ist, ist 1s vergangen...und nicht 10ms
Aber bis "time" auf 101 erhöht wird dauert es 10ms. Und während dieser Zeit kann das Programm immer wieder in die if-Abfrage gelangen und "start--" ausführen. Ich gehe davon aus, dass der gezeigte Code-Schnipsel in einer Schleife wiederholt wird.
Stimmt! Genau! Soweit hab ich garnicht gedacht. Ist eine einfach while(1) Schleife. Hast du vielleicht einen Lösungsvorschlag? DANKE!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.