Fehler im Betrieb

Gast #3565293
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
Gast
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".
Gast
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 );
        }
      }
Gast
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;
                  ^^^^^  ^^^^^
                  |||||  |||||
Gast
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
Angehängte Dateien:
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.