Forum: Mikrocontroller und Digitale Elektronik atmega168 timer0 läuft nicht an


von Peter V. (peter65)


Angehängte Dateien:

Lesenswert?

Hallo,
bei meinem Programm läuft der Timer0 im AVR-Studio nicht an.
Der Timer soll einen Output Compare A Match Interupt auslösen,
über diesen sollen dann LED`s durchgeschaltet werden.
Das Programm ist noch lange nicht fertig.
Was ist falsch, was hab ich vergessen?
Beim starten des Programms im AVR-Studio erscheint folgende 
Fehlermeldung:

error: Operand 1 out of range: 0x6e

Gruß Peter

von spess53 (Gast)


Lesenswert?

Hi

>Beim starten des Programms im AVR-Studio erscheint folgende
>Fehlermeldung:

>error: Operand 1 out of range: 0x6e

Da steht aber auch noch eine Zeilennummer dabei.

>  ldi temp,0b00000010    ; Maske für Timer0 Output Compare A
>  out timsk0,temp      ; setzen
>  ldi temp,0b10000000    ; Compare A Match 64
>  out ocr0a,temp

'TIMSK0' ist nicht mit 'out TIMSK0' zu erreichen.

Geht nur mit 'sts TIMSK0,temp'

MfG Spess

von Hannes Lux (Gast)


Lesenswert?

Mach mal einen Doppelklick auf die Fehlermeldung, dann springt der 
Cursor im Editor auf die Zeile mit dem Fehler. Dann hole Dir mit F1 
Hilfe zum ASM-Befehl und schau dort nach, welche Wertebereiche die 
zugehörigen Operanden haben und welchen Du überschritten hast.

...

von Peter V. (peter65)


Lesenswert?

Danke schon mal, das mit dem sts statt out war die Fehlermeldung.

Der Timer läuft aber noch nicht an, irgendetwas fehlt da noch.

von spess53 (Gast)


Lesenswert?

Hi

>Der Timer läuft aber noch nicht an, irgendetwas fehlt da noch.

Das ist eine sehr schwammige Fehlerbeschreibung. Genau wie:

>Beim starten des Programms im AVR-Studio erscheint folgende
>Fehlermeldung:

Mit der AVR-Studio kann man den Controller Programmieren oder die 
Simulation starten.

Woran erkennst du, das der Timer nicht läuft. Deine Interruptroutine 
macht doch nichts.
Das 'cli' und 'sei' in der ISR kannst du dir sparen. Das passiert 
sowieso. Sichere lieber die Register richtig:

blabla:  push temp
         in temp, SREG
         push temp
         ....
         pop temp
         out SREG, temp
         pop temp
         reti

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

>Der Timer läuft aber noch nicht an, irgendetwas fehlt da noch.

Richtig

>  ldi temp,0b00000001  ; zum debugen prescaler 0 0b00000001"
>  out tccr0A,temp    ; in Timer/Counter Controll Register

Der Prescaler wird im Register TCCR0B eingestellt

MfG Spess

von Peter V. (peter65)


Lesenswert?

Hallo Spess,

das Programm läuft im Moment nur im Simulator.
Wenn der Timer läuft, sollte mann das in tcnt0 sehen können.
Da seh ich aber nichts.
Wofür ist beim Register sichern der erste push-befehl ? der erste pop 
Befehl ?
Ich lese doch das Statusregister in temp (int temp,sreg) und packe es 
auf den Stack (pusch temp), zum Schluß hole ich es vom Stack (pop temp) 
und
schreibe es ins Statusregister zurück (out sreg,temp).
Seh ich das falsch?

Bin ca. 22:00 wieder da.
Gruß und Danke Peter

von spess53 (Gast)


Lesenswert?

Hi

>Wofür ist beim Register sichern der erste push-befehl ? der erste pop
>Befehl ? Ich lese doch das Statusregister in temp (int temp,sreg) und packe >es 
auf den Stack (pusch temp), zum Schluß hole ich es vom Stack (pop temp)
>und schreibe es ins Statusregister zurück (out sreg,temp). Seh ich das >falsch?

Der erste push-Befehl sichert 'temp' und der letzte pop-Befehl holt es 
wieder zurück. Der Rest ist wie bei dir.

Da du nicht weisst, wann der Interrupt zuschlägt sollten alle 
verwendeten Register gesichert werden.
Es kann ja sein, das du gerade außerhalb der ISR 'temp' verwendest, wenn 
der Interrupt kommt. Durch 'in temp, SREG' in der ISR wird es verändert. 
Das Programm macht dann mit einem falschen Wert weiter. Kann ganz 
lustige Effekte haben.

MfG Spess

von Peter V. (peter65)


Lesenswert?

DA hast du recht, das hab ich nicht bedacht. Danke dafür.
Fällt dir noch etwas ein, warum der Timer nicht läuft?
Ich habe ein ähnliches Programm auf einem ATMJega 162 geschrieben, da 
geht es einwandfrei, da konnte ich auch timsk mit out ansprechen.
Gruß Peter

von spess53 (Gast)


Lesenswert?

Hi

>Fällt dir noch etwas ein, warum der Timer nicht läuft?

Siehe 20:38

MfG Spess

von Peter V. (peter65)


Lesenswert?

Oh man, das hab ich übersehen.
Danke Dir.
Gruß Peter

von spess53 (Gast)


Lesenswert?

Hi

No problem.

MfG Spess

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.