Forum: Mikrocontroller und Digitale Elektronik Problem mit Counterwert von Timer


von Ruediger (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe ein Problem mit der Initialisierung von Timer0 beim 90AT2313.
Mit dem TCNT0-Register (Counterwert) müsste ich doch eigentlich die
Frequenz an den Port-B-Ausgängen verändern können (siehe Programm).
Allerdings ändert sich die Frequenz nicht, egal was ich für einen Wert
lade. Eine Veränderung vom Teilerwert im TCCR0 ändert meine Frequenz,
der Interrupt ist also offenbar ok. Wer kann mir hier weiterhelfen?

Danke und Gruß

von Toto (Gast)


Lesenswert?

Hi

Du änderst den Startwert des Timers aber nur in der Initialisierung.
Wenn dein Interrupt einmal durchgelaufen ist läuft der Timer ganz
normal von 0 bis 255.
Versuch mal den Startwert des Timers in der Interruptroutine neu zu
setzen.
Also so ungefähr:

timer:inc r17
out PORTB,r17
ldi r16,0b11110000
out TCNT0,r16; Counterwert laden
reti

Ich weiss nicht welchen Vorteiler du genommen hast aber wenn er zu
niedrig ist wirst du bei der hohen Taktfrequenz auch keine grossen
Unterschiede sehen.Wenn der AVR von 0 bis 255 bei z.B 8MHZ zählt oder
von 100 bis 255 macht dann Zeitlich keinen sichtbaren Unterschied wenn
du LED's am Port verwendest.

Hoffe ich konnte helfen

von Ruediger (Gast)


Lesenswert?

Hallo,

ich lade den Counterwert jetzt zusätzlich in der Interruptroutine.
Funktioniert nun einwandfrei.

Danke für die Hilfe!

von crazy horse (Gast)


Lesenswert?

aber Vorsicht, immer das SREG sichern.
bei Einfachst-ISR-Programmen kann es auch ohne gut gehen. Aber man
sollte sich das gar nicht erst angewöhnen, darauf zu verzichten. Wenn
doch aus Zeitgründen mal drauf verzichtet werden soll, dieses gut
kommentieren, nach ein paar Monaten weisst du es sonst nicht mehr.
Standardprogrammteile dafür:
meist reserviere ich mir ein eigenes Register:
.equ sreg_bak=R1

ISR:
in sreg_bak, sreg
.
.
out sreg, sreg_bak
reti

Alternative:
push r1 (oder irgendein anderes)
in r1, sreg
.
,
out sreg, r1
pop r1
reti

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.