- LiFePO4 Speicher Test         
Ergebnis 1 bis 8 von 8

Thema: Nach jeder Änderung der Sekunde andere Variable hochzählen.

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    361

    Nach jeder Änderung der Sekunde andere Variable hochzählen.

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Habe in meinem Programm eine Uhrzeit die auf einem Display ausgegeben wird.

    LCD hour_str ; min_str ; sec_str

    Diese hole ich ständig aus einem DS1307 in der Hauptschleife. Da alle Timer schon mit aufgaben beauftragt sind möchte ich nun die Uhrzeit benutzen um zeitgesteuerte Aufgaben zu erledigen.

    Wie stelle ich es an, dass ich nach jeder veränderten Sekunde eine Variable hochzähle?

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Im einfachsten Fall:

    if (sec_str != secstr_old) Then
    .... was halt so zu machen ist...
    sec_str_old = sec_str
    EndIf
    #ifndef MfG
    #define MfG

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    11.02.2010
    Beiträge
    29
    vom ds1307 könntest du den SQW auf eine Sekunde einstellen und über einen Interrupt eine Variable hochzählen.
    Ich kann (wegen Bau eines Datenloggers) dir den ds1337 ans Herz legen. Hier kann man 2 Alarme nutzen. Einen verwende ich um eine Messung auszulösen, den nächsten benutze ich als timeout für den Powerdown wenn keine Bedienung erfolgt.

    Gruß Stefan

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    361
    Danke für die Tipps. Das mit dem SQW wäre natürlich perfekt. Hast du da eventuell einen Beispielcode für mich?

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    11.02.2010
    Beiträge
    29
    Der hier müsste es sein:
    Code:
      'Oszilatorausgang des DS1307 auf 1 Hz setzen
       I2cstart
          I2cwbyte &B11010000                                   'DS1307 adresse
          I2cwbyte &B00000111                                   'Control register
          I2cwbyte &B10010000                                   '1 Hz ausgang einschalten
       I2cstop
    Aber nochmal überprüfen, nicht dass ich den für den DS1337 erwischt habe wo die Kommentare nicht stimmen.

    Das mit dem Sekundentakt und Interrupt habe ich aber wieder verworfen, da ein Interrupt andere Kommunikationen stören kann. (RS232)

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    361
    Hab zur Zeit auch Anfängerprobleme mit RS232 also werd ich das mit dem (SQW) Interrupt wohl wieder verwerfen. Läuft nämlich immer noch nicht Rund der RS232 Empfang. Habe noch gelegentlich Abstürze wenn ich (Interrupt gesteurert) etwas empfange.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    11.02.2010
    Beiträge
    29
    Wie sind die Stacks dimensioniert? Zu kleine Stacks können zu komischen Verhalten bei Interrupts führen.

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    361
    Danke für deine Hilfe! Die Stacks hab ich schon extrem weit raufgeschraubt und hier auch schon viel experimentiert. Hab das Fehlverhalten jetzt schon lokalisiert glaube ich. Es kommt zu Abstürzen wenn zu lange Datenpakete ankommen. Ich muss einen Weg finden, dass diese ignoriert werden. Es sieht so aus als ob die Buffer überfüllt werden und das zum Absturz führt. Mein Watchdog löst dann aus.

Berechtigungen

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

Labornetzteil AliExpress