www.mikrocontroller.net

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


Autor: Peter Volkmer (peter65)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Peter Volkmer (peter65)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Volkmer (peter65)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Volkmer (peter65)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

Siehe 20:38

MfG Spess

Autor: Peter Volkmer (peter65)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh man, das hab ich übersehen.
Danke Dir.
Gruß Peter

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

No problem.

MfG Spess

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.