Forum: Mikrocontroller und Digitale Elektronik Digitaluhr atmega8


von Tobias D. (okar)


Lesenswert?

Nabend,
ich versuche gerade eine Digitaluhr mit einem atmega zu realisieren.
Ich will über den Timer0 alle Sekunde einen Interrupt auslösen, welcher 
dann die Zeit hochzählt und entsprechend ausgibt.
Irgendwie funktioniert nichtmal dieser Interrupt. Wenn ich in der 
endlosschleife immer die Sekunden ausgeben lasse (PORTD geht an 7seg 
anzeigen) so verändern diese ihren Wert nie. also geh ich davon aus, 
dass der Interrupt nie ausgelöst wird, bzw aus irgend einem Grund meine 
ISR nicht aufgerufen wird.
Ich benutze hier:
"ISR(TIMER1_OVF_vect) {", diese sollte ja eigentlich nach jedem overflow 
von Timer1 aufgerufen werden.
Es wär echt super wenn ihr mal drüberschauen könntet. Ich finde den 
Fehler beim besten Willen nicht.(Ich hocke da schon n kleines Weilchen 
dran und habe schon das ein oder andere ausprobiert)
danke schonmal!!!!

hier der Code:
http://ubuntuusers.de/paste/218296/
es ist sehr viel auskommentiert, weil ich das ein oder andere 
ausprobiert habe.

von Thilo M. (Gast)


Lesenswert?

Hab' ich's übersehen oder hast du vergessen OCR1B zu beschreiben?
Ich kenne die Taktfrequenz nicht, aber davon abhängig muss ja der Teiler 
und das Register gesetzt werden.

Achso: der Overflow-INT ist ja dafür auch nicht geeignet, da muss der 
Output-Compare-INT 'ran.

von Tobias D. (okar)


Lesenswert?

wieso ist der Overflow-INT ungeeignet?
In diesem Turtorial:
http://www.mikrocontroller.net/articles/DCF77-Funkwecker_mit_AVR
wird dieser auch für eine Uhr benutzt.
Derzeit bekomme ich irgendwie überhaupt keinen Interrupt, das verwirrt 
mich sehr. Also ich habe mal in die ISR ein "PORTD=9" geschrieben, aber 
dies wird irgendwie nie ausgeführt, also bekomme ich keinen Interrupt.
Prescaler sollte ja mit:         "TCCR1B |= (1<<CS12);" gesetzt sein.

von Thilo M. (Gast)


Lesenswert?

Welchen Quarz benutzt du eigentlich?
Sind die Fuses richtig gesetzt? => 'externer Quarz'

von Εrnst B. (ernst)


Lesenswert?

Versuch mal deine sekunden-Variable volatile zu deklarieren, kann gut 
sein das der Compiler in main die Zugriffe darauf alle wegoptimiert hat, 
weil der Wert aus seiner Sicht konstant ist.

von Tobias D. (okar)


Lesenswert?

ich benutze einen externen Quarzoszillator. Die fuses sollten richtig 
gesetzt sein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.