PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nach jeder Änderung der Sekunde andere Variable hochzählen.



Accenter
07.07.2010, 09:59
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?

Jaecko
07.07.2010, 11:28
Im einfachsten Fall:

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

reinhars
07.07.2010, 11: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

Accenter
07.07.2010, 11:45
Danke für die Tipps. Das mit dem SQW wäre natürlich perfekt. Hast du da eventuell einen Beispielcode für mich?

reinhars
07.07.2010, 11:56
Der hier müsste es sein:

'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)

Accenter
07.07.2010, 12:43
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.

reinhars
07.07.2010, 13:19
Wie sind die Stacks dimensioniert? Zu kleine Stacks können zu komischen Verhalten bei Interrupts führen.

Accenter
07.07.2010, 13:34
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.