Im einfachsten Fall:
if (sec_str != secstr_old) Then
.... was halt so zu machen ist...
sec_str_old = sec_str
EndIf
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?
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
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
Danke für die Tipps. Das mit dem SQW wäre natürlich perfekt. Hast du da eventuell einen Beispielcode für mich?
Der hier müsste es sein:
Aber nochmal überprüfen, nicht dass ich den für den DS1337 erwischt habe wo die Kommentare nicht stimmen.Code:'Oszilatorausgang des DS1307 auf 1 Hz setzen I2cstart I2cwbyte &B11010000 'DS1307 adresse I2cwbyte &B00000111 'Control register I2cwbyte &B10010000 '1 Hz ausgang einschalten I2cstop
Das mit dem Sekundentakt und Interrupt habe ich aber wieder verworfen, da ein Interrupt andere Kommunikationen stören kann. (RS232)
Wie sind die Stacks dimensioniert? Zu kleine Stacks können zu komischen Verhalten bei Interrupts führen.
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.
Lesezeichen