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
1 | ldi temp,120 ;Interrupt bei 120 |
2 | out OCR1A, temp |
Das musst du in TCNT0 laden.
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ß
@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ß
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
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 ??
Ä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ß
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.
@Traver Rec. Timer 0 kann extern getaktet werden ist ja OK, aber es gibt kein Vergleichsregister OCR wie im Timer 1
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.