Forum: Mikrocontroller und Digitale Elektronik Timer1 funktioniert nicht?


von hundvdf (Gast)


Angehängte Dateien:

Lesenswert?

Hi,
ich hab ein kleine Problem mit meinem Timer 1. Ich will einfach
sekunden zählen lassen und diese über LEDs anzeigen. Im
AVR-Studio-Simulator funktionierts, da zählt er die Sekunden hoch, aber
im AVR nicht. Ich hab nen 8515er und wenn ichs mit dem Timer0 mache,
dann funktionierts. Ich muss aber den Timer1 dazu nehmen, da ich später
zwei unabhängige Timer brauche. Kann es sein, dass im AVR der Timer1
defekt ist und nur der TIM0 funktioniert? Oder hab ich im Code was
vergessen, was das Studio ignoriert, der AVR aber nicht?

thx für Antworten
hundvdf

von Remo (Gast)


Lesenswert?

Dein Fehler steckt hier:

loop1:
  in temp,TCNT1H

Du mußt immer zuerst das lowbyte lesen und anschliessend das high byte,
sonst liest du immer den gleichen alten Wert aus dem internen
temporaeren Register.
Richtig also:
loop1:
  in temp,TCNT1L
  in temp,TCNT1H

Dieses Verhalten kann der Simulator nicht nachstellen und simuliert die
heile Welt, aber eben nicht das was im AVR wirklich passiert.

Auszug aus dem Datenblatt:
"TCNT1 Timer/Counter1 Read:
When the CPU reads the low byte TCNT1L, the data of the low byte TCNT1L
is sent to the CPU and the data of the high
byte TCNT1H is placed in the TEMP register. When the CPU reads the data
in the high byte TCNT1H, the CPU receives
the data in the TEMP register. Consequently, the low byte TCNT1L must
be accessed first for a full 16-bit register read
operation."

ciao
Remo

von ...HanneS... (Gast)


Lesenswert?

Und dann solltest du in der ISR noch das SREG sichern und
wiederherstellen...

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.