Hallo, ich muß gleich vorweg sagen, dass ich beim Programmieren der Controller nicht sehr erfahren bin. Dies ist eines meiner ersten Projekte. Der Controller soll als Stundenzähler für eine Heizkanone dienen. Mittels Schlüsselschalter können die einzelen Benutzer die Heizung einschalten und die Betriebsstunden werden pro Person gezählt. Werden zwei Schlüssel gedreht, wird die Zeit entsprechend gerechnet. Werden drei Schlüssel gedreht, läuft die Zeit auf ein gemeinschafts Konto. Soweit läuft die ganze Sache auch ganz gut. Folgendes Problem tritt erst nach einigen Stunden auf. Es werden falsche Werte berechnet, angezeigt und in den Speicher geschrieben. z.B: spring der Minutenzähler auf werte über 60, oder die Anzeige im Display verschiebt sich. Vielleicht hat jemand einen Tip für mich, ich weiß jedenfalls nicht mehr weiter. Mfg Martin
Hi, Zeile 42? uint16_t Stunden5_ee EEMEM;? Der Fehler tritt glaube ich auch auf wenn keiner der Schlüsser eingeschalten ist. Werd ich aber gleich noch mal cheken. Mfg Martin
cap schrieb: > z.B: spring der Minutenzähler auf werte über 60 Das solltest du vermeiden, indem du schon in dem Moment, wo er auf 60 schaltet, ihn automatisch auf 00 zurücksetzt und dafür den Stundenzähler um eins erhöhst. In der Fachsprache heißt das "Übertrag".
Hab ich das nicht? if (Minuten1 > 59) { Stunden1 = Stunden1 + 1; Minuten1 = 0; if ((Stunden1 > 0) && (Stunden1 < 999)) { eeprom_write_word(&Stunden1_ee,eeprom_read_word(&Stunden1_ee) + 1 ); } }
Bei dem Programm das du gepostet hast wird kein Fehler auftreten. Da kommt gar nicht erst durch den Compiler;) int tast0, tast1, tast2, tast2, tast3, tast4, tast5, tast6, tast7; ^^^^^ ^^^^^ ||||| |||||
Wenn man Code mit copy und 6x paste erstellt, dann kann man sich auch überlegen, ob eine Schleife sinnvoll ist. Hier einmal ein erster Ansatz. Stichworte: Array (Feld, Datenfeld), For-Schleife
cap schrieb: > Hab ich das nicht?
1 | |
2 | if (Minuten1 > 59) |
3 | {
|
4 | Stunden1 = Stunden1 + 1; |
5 | Minuten1 = 0; |
6 | if ((Stunden1 > 0) && (Stunden1 < 999)) |
7 | {
|
8 | eeprom_write_word(&Stunden1_ee,eeprom_read_word(&Stunden1_ee) + 1 ); |
9 | }
|
10 | }
|
Auf jeden Fall nicht im EEPROM.
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.