Hallo, ich habe ein kleines Problem mit dem Timer1 ich will das er bei 0 Startet und dann hoch zählt bis zum dem im Timer1 gespeicherten Wert. Dazwischen soll er den Compare1A erreichen und einen Interrupt auslösen. Also Timer1 = 0 /timer1=Compare1A > Compare1_ISR / Timer läuft weiter / Timer1 Compare à Timer1 ISR à Timer1 = 0 beginnt von vorne. Das Port setzten und Löschen im ISR ist nur zum testen da soll später was anderes passieren deswegen ist auch kein PWM möglich da ich die beiden ISR dann noch brauche. Der Timer sollte dann bei Timer1 IRQ automatisch auf 0 gesetzt werden. Set Tccr1b.3 Ist bestimmt eine Kleinigkeit was ich vergessen oder falsch verstanden habe. Kann mir jemand auf die Sprünge helfen. Danke Nicklas $regfile = "m32def.dat" $crystal = 16000000 $baud = 19200 Config Portb.3 = Output Config Portd.6 = Output Config Portd.7 = Output Config Portb.0 = Input 'Taster vom Incrementgeber Config Portb.1 = Input 'Incrementgeber Config Portb.2 = Input 'Incrementgeber Dim A As Word A = 15000 Set Timsk.2 Set Timsk.3 'Set Timsk.4 Set Tccr1b.3 On Int2 Increment_isr Enable Int2 Config Int2 = Rising Enable Interrupts Cursor Off Compare1a = A On Compare1a Compare1: 'On Compare1b Compare2: On Timer1 _timer1: Timer1 = 65000 Set Tccr1b.0 Do Cls Locate 1 , 1 Lcd A Locate 2 , 1 Lcd B Compare1a = A Waitms 100 Loop Compare1: Portb.3 = 1 Return _timer1: Portb.3 = 0 Return Increment_isr: If Pinb.2 = 1 Then If Pinb.1 = 0 Then A = A + 100 End If If Pinb.1 = 1 Then A = A - 100 End If End If Return
> ich will das er bei 0 Startet und dann hoch zählt bis zum dem im > Timer1 gespeicherten Wert. Timer1 (tcnt1h:tcnt1l) ist der Zähler, du kannst also nicht bis zu seinem "gespeicherten Wert" zählen lassen. Nimm das Datenblatt des Mega32 (Complete-Version Seite 84 bis 111) und schau dir die Funktionsweise des Timers an. Da gibt es zwei Compare-Registerpaare (Datenblatt Seite 109), in die du Vergleichswerte schreiben kannst und mit denen du Interrupts auslösen kannst (und somit ISRs aufrufen kannst). Zusätzlich gibt es noch den Überlauf-Interrupt und den Input-Capture-Interrupt. Alles für Timer1 und bei geschickter Programmierung (wenn man den Timer frei durchlaufen lässt) alle gleichzeitig nutzbar. Um den Timer1 erstmal zu starten, musst du einen geeigneten Vorteiler einschalten. Dies geschieht durch Setzen der entsprechenden Bits in TCCR1B (Datenblatt Seite 108). Damit ein Interrupt ausgelöst wird, müssen die entsprechenden Bits in TIMSK gesetzt werden (Datenblatt Seite 110). Zusätzlich ist im SREG das Interrupt-Flag zu setzen, in ASM macht das der Befehl SEI. > Dazwischen soll er den Compare1A erreichen und einen Interrupt > auslösen. Das kann er machen... ...
Hallo, Da habe ich mich vielleicht ein bisserl unglücklich ausgedrückt. Ich habe das schon denke ich richtig Verstanden. Der Timer Zählt schon hoch und wird vom Clock "gespeist" Set Tccr1b.0 Sollte den Timer1 mit ungeteilten CLK versorgen. Das freigeben der IRQ habe ich auch gesehen: Set Timsk.2 Bit 2 TOIE1: Timer/Counter1, Overflow Interrupt Enable Set Timsk.3 Bit 3 OCIE1B: Timer/Counter1, Output Compare B Match Interrupt Enable Set Tccr1b.3 Zugewiesenen Pin deaktivieren SEI wird von BASCOM generiert mit dem Befehl enable Interrupts Also das hilft noch nicht wirklich weiter
und was willst du nun wirklich machen? irgendwie verstehe ich dein Problem nicht so ganz. Übrigens ist dein Programm nicht wirklich übersichtlich durch die vielen Zwischenräume...
Sorry wegen den Leerzeilen ist beim Kopieren irgendwie falsch Formatiert worden. Ich will? was will ich eigentlich ;-) Timer1 soll bei 0 anfangen und aufwärts zählen und dabei 2 Interrupts auslösen 0 Interrupt Interrupt 0 Im ersten Interrupt soll weiter nix passieren außer die ISR aufrufen, im zweiten soll dann wieder eine isr aufgerufen werden und der Timer wieder bei 0 anfangen. Mehr soll es gar net sein ;-)
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.