- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 3 von 3

Thema: Timer Problem

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.03.2004
    Beiträge
    121

    Timer Problem

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo, ich habe ein problem mit dem timer1 im Mega8.

    Wenn ich den Timer mit START Timer1 starte und ihn später mit STOP Timer1 anhalte, läuft alles soweit wie gewollt. Beim zweiten stert läuft er auch bis zum Stop, und resetet den M8. Könnte mir bitte jemand helfen ?

    Code:
    If Taster3 = 0 And _tr = 0 Then
        _tr = 1
        Start Timer1
    End If
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    Timer_irq:
      Timer1 = Timervorgabe
    
       If Sekunde = 0 And Minute = 0 Then
    
          Stop Timer1
    
          Goto Done
       End If
    
       Sekunde = Sekunde - 1
          If Sekunde > 60 Then
             Sekunde = 59
             Minute = Minute - 1
          End If
    Return

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Ich kann zwar um diese Uhrzeit noch nicht 100% genau verstehen, was wann wie passieren soll - aber mir fällt in Deinem Code ein klassischer Fehler auf:



    Code:
    If Sekunde = 0 And Minute = 0 Then
          Stop Timer1
          Goto Done
    Dadurch verlässt der Controller die ISR, ohne über "return" gegangen zu sein. Das geht ein paar mal gut, aber irgendwann läuft der Stack über, weil immer nur was draufgepackt wird, aber nichts wieder runtergenommen wird. Das ist eine der sichersten methoden, ein Porgramm "aufzuhängen"

    Eine Lösung wäre, mit der If-Abfrage das Setzen eines Flag-Bits zu verbinden, die ISR ganz normal über Return zu beenden, und in der Hauptschleife eben dieses Flag abzufragen.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.03.2004
    Beiträge
    121
    Danke für deinen Tip. Ich habe nun die abfrage in die Hauptschleife gepackt und im Interrupt nur die sekunden runter gezählt. Läuft super....

    Code:
    Do
    .
    .
    .
    .
    If Sekunde = 0 And Minute = 0 Then
       Stop Timer1
       Goto Done
    End If
    .
    Loop
    .
    .
    .
    .
    .
    Timer_irq:
    
      Timer1 = Timervorgabe
       Decr Sekunde
          If Sekunde >= 255 And Minute > 0 Then
             Minute = Minute - 1
             Sekunde = 59
          End If
    
    Return

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test