Forum: Mikrocontroller und Digitale Elektronik was ist indiesen timer falsch uund warum zähl er nicht gena


von patrick (Gast)


Lesenswert?

Hallo leute könnt mir sagen warum er nicht genau bis eine sekunde zählt 
und ein interrupt gibt wenn diese sekunde fertig ist????Was ist falsch 
und wie soll ich es dann machen oder ändern???

;Interrupt vom Timercounter 1 overflow der alle sekunden einschalten 
soll
;-------------------------------------------------------------------
.org 0x008
      rjmp lop
;Initialisieren des Timers und deklarieren wenn interrupt soll starten
;-----------------------------------------------------------------------
INIT:    ldi TEMP,0b00000000
      out TCCR1A,TEMP
                                      ldi TEMP,0b00000100
      out TCCR1B,TEMP


      ldi  TEMP,0b00000100
      out TIMSK,TEMP







von Maxim (Gast)


Lesenswert?

Poste doch mal das ganze Programm und gib die Quarzfrequenz und den uC 
an.

Zählt der gar nicht, viel zu schnell/langsam, oder weicht er geringfügig 
von einer Sekunde ab?

von patrick (Gast)


Angehängte Dateien:

Lesenswert?

es ist ein ATmeg8 und die quarzfrequenz beträgt 16Mhz!!
der programm ist jetzt ganz dabei!!
Danke!!
Warte auf antwort vielen dank noch

von Power (Gast)


Lesenswert?

Also
1. hast du einen Mega16 eingebunden,
2. musst du den Output-Compare-Interrupt von Timer 1 (16 bit) benutzen,
3. den CTC-Modus für den Timer 1 einschalten.

Lies dir das Datenblatt hierzu nochmal durch, dort ist alles gut 
beschrieben.

von patrick (Gast)


Lesenswert?

ja bin ich einverstanden aber verstehe nicht wie man den 
Output-Compare-Interrupt von Timer 1 (16 bit) benutzen,und wie man den 
CTC-Modus für den Timer 1 einschaltet.
könnte jemanden mir das zeigen,wie ich das mache!!!

von Power (Gast)


Lesenswert?

Datenblatt Mega8 Seite 99:
CTC-Modus ist das Bit 3 im TCCR1B (WGM12).
Mit TIMSK bit 4 ist der Output-Compare-INT eingeschaltet.
In TCCR1B CS10 und CS12 einschalten (Teiler /1024) um den Timer zu 
starten,
OCR1AH mit 0x3d und OCR1AL mit 0x08 beschreiben (15624).
Den Globalen INT einschalten (SREG Bit I) und es läuft!

Ich hab's in einem vorigen Thread von dir in C schon beschrieben.

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.