mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tímer Interrupt Problem


Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe hier dem Timer 1 beim Tiny26 programmiert und er sollte eigentlich 
wenn er bei 120 angelangt ist einen Interrupt auslösen..habe ich hier 
was vergessen ??


.include"tn26def.inc"
.def temp = r16
.def leds = r17
.org 0x0000 rjmp main
.org OVF1addr rjmp timer1_overflow

main:

ldi temp,RAMEND
out SP,temp

ldi temp, 0xFF
out DDRB,temp

ldi leds, 0xFF

ldi temp,1<<CS10
out TCCR1B, temp


ldi temp,1<<TOIE1
out TIMSK, temp

ldi temp,120    ;Interrupt bei 120
out OCR1A, temp

sei

loop: rjmp loop

timer1_overflow:
out PORTB, leds
com leds
ldi temp,0
out TCNT1,temp

reti

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ldi temp,120    ;Interrupt bei 120
out OCR1A, temp

Das musst du in TCNT0 laden.

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,
also XOR !
Du benutzt den Timer1 Overflow INT-Vektor. Setzt aber das Register 
OCR1A, welches für den CTC Modus, bzw. PWM gedacht ist.
Also entweder benutzt du dan auch den CTC Modus (würde ich tun) und 
benutzt deren INT-Vektor, oder du setzt TCNT1 entsprechend.

Gruß

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jens : dann muss er aber auch den Timer0 benutzen, wenn er das in TCNT0 
schreibt. Zudem würde dann der INT nach 124 Takten und nicht nach 120 
ausgelöst werden. Also besser 124 reinschreiben.

Gruß

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo hast ja recht :)

Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hatte jetzt irgendwie das falsche Programm drinne.
Also nochmal:
Ich möchte einen vergleich mit dem OCR1A (und nicht den Timer mit dem 
Wert 120 starten) machen was ja auch geling in dem mir das Bit OCF1A im 
TIFR Register auch gesetzt wird, wenn die 120 erreicht ist. Nur wie 
werte ich das jetzt aus.
Um der Frage vorzubeugen ich habe das Programm nich in ein Projekt 
eingebunde, ich will nur die Arbeitsweise von Timer 1 im Tiny26 kennen 
lernen.

.include"tn26def.inc"

.def temp = r16
.def leds = r17

.org   0x000       rjmp main
.org  INT0addr    rjmp noch_nichts
.org  PCI0addr      rjmp noch_nichts
.org  OC1Aaddr    rjmp timer1_overflow
.org  OC1Baddr    rjmp noch_nichts
.org  OVF1addr    rjmp timer1_overflow
.org  OVF0addr    rjmp noch_nichts
.org  USI_STARTaddr  rjmp noch_nichts
.org  USI_OVFaddr    rjmp noch_nichts
.org  ERDYaddr    rjmp noch_nichts
.org  ACIaddr    rjmp noch_nichts
.org  ADCCaddr    rjmp noch_nichts

main:

ldi temp,RAMEND
out SP,temp

ldi temp, 0xFF
out DDRB,temp

ldi leds, 0xFF

ldi temp,1<<CS10
out TCCR1B, temp


;ldi temp,(1<<TOIE1)
;out TIMSK, temp

ldi temp,(1<<OCIE1B)  ;setzt jetzt OCF1A im TIFR bei MATCH
out TIMSK, temp

ldi temp,120           ;Interrupt bei 120
out OCR1A, temp

sei

loop: rjmp loop

timer1_overflow:
out PORTB, leds
com leds
ldi temp,0
out TCNT1,temp
reti

noch_nichts:
reti

Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sooo..nachdem jetzt alles funzt..das Programm erspare ich jetzt mal, die 
Profis hier werden ja wohl wissen wie es geht (ich weiß es jetzt auch 
aber vom Profi bin ich noch meilenweit entfernt) will ich den Timer 
jetzt mal extern Takten aber so wie ich das sehe, ist das mit Timer 1 
bein Tiny26 nicht möglich...oder ??

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähm, wie kommst du denn jetzt darauf ???
Der Timer benutzt die Taktquelle, die in den Fuses eingestellt sind, 
also entweder internen RC-O. oder externen Quarz, ...

Gruß

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
T0 kann extern getaktet werden.

Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmm..das meinte ich jetzt nicht.
Meinte eigentlich, dass ich externe Impulse zählen will, so wie es beim 
Timer 0 über den T0 Pin möglich ist..habe ich wohl etwas 
missverständlich geschrieben.

Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Traver Rec.
Timer 0 kann extern getaktet werden ist ja OK, aber es gibt kein 
Vergleichsregister OCR wie im Timer 1

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.