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ß
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
Hallo, ich lade den Counterwert jetzt zusätzlich in der Interruptroutine. Funktioniert nun einwandfrei. Danke für die Hilfe!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.