www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer0 überlauf


Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe hier aus dem Forum das unten aufgeführte Programm und will es auf 
dem Tiny26 laufen lassen, nur löst der Interrupt beim Timerüberlauf 
nicht aus..wo ist hier der Fehler



.include"tn26def.inc"

.def temp = r16
.def leds = r17


.org 0x0000
  rjmp   main
.org OVF0addr
  rjmp  timer0_overflow

main:
    ldi temp,(RAMEND)
    out SP,temp

    ldi  temp,  0xFF
    out  DDRB,  temp

    ldi  leds,  0xFF

    ldi  temp,  0b00000001
    out  TCCR0,  temp

    ldi  temp,  0b00000001
    out  TIMSK,  temp

    sei

loop:  rjmp   loop


timer0_overflow:
    out  PORTB,  leds
    com  leds
    reti

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ingo Laabs wrote:

> Habe hier aus dem Forum das unten aufgeführte Programm und will es auf
> dem Tiny26 laufen lassen, nur löst der Interrupt beim Timerüberlauf
> nicht aus..wo ist hier der Fehler
> ...
>     ldi  temp,  0b00000001
>     out  TIMSK,  temp

Das Bit TOIE0 ist zu setzen. Das Makro dafür steht in "tn26def.inc" und 
es wird so angewendet:

    ldi  temp,  (1<<TOIE0) ; 0b00000001
    out  TIMSK, temp

Die Werte für den Prescaler

>    ldi  temp,  0b00000001
>    out  TCCR0,  temp

habe ich nicht kontrolliert. Vom Sourcecode her könnte dort das gleiche 
Problem vorliegen. Lässt man die 0b00000001 dort stehen und simuliert 
man mit 4 Mhz im AVR Studio, geht PORTB nach 68,25 µs dauerhaft auf 
HIGH.

Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bewirkt den aber:

ldi  temp,  0b00000001
out  TIMSK,  temp

und:

ldi  temp,  (1<<TOIE0)
out  TIMSK, temp

nicht dasselbe ? in beiden Fällen wird das entsprechende Bit doch 
gesetzt.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch doch mal einen Vorteiler von 1024.

ldi temp, 0b00000101
out TCCR0, temp

Bei einem Vorteiler von 1 wirste die LED´s nich einmal flackern sehen.

Ansonsten probier mal Dein Programm im Simulator.

Mfg, tom.

Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich teste das Programm ja im Simulator nur wird bein Timerüberlauf die 
Interruptroutine nicht angesprungen .....und das war ja ursprünglich 
meine Frage. Mit dem Mega8 funktioniert die Sache im Simulator, nur wenn 
ich den Tiny26 im Simulator verwende nicht.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TOIEO das InterruptBit für Timer0 liegt auf bit1 im TIMSK, nicht auf 
bit0.
Deswegen hatte der Stefan Recht.

Entweder:
  ldi  temp,  (1<<TOIE0)
  out  TIMSK, temp

oder:
  ldi temp, 0b00000010
  out TIMSK, temp

Dann gehts.

Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ohhh..rotwerd
Blick ins Datenblatt hätte wohl genügt, schätze ich. Beim Mega8 ist das 
TOIE0 Bit an Stelle 0 und beim Tiny26 ist es an Stelle 1 im TIMSK 
Register.

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.