www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Digitaluhr atmega8


Autor: Tobias Domhan (okar)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thilo M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobias Domhan (okar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wieso ist der Overflow-INT ungeeignet?
In diesem Turtorial:
http://www.mikrocontroller.net/articles/DCF77-Funk...
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.

Autor: Thilo M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen Quarz benutzt du eigentlich?
Sind die Fuses richtig gesetzt? => 'externer Quarz'

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobias Domhan (okar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich benutze einen externen Quarzoszillator. Die fuses sollten richtig 
gesetzt sein.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.