Hi Leute! Wollte mir mal zum Verständnis einen Timer in WinAVR debuggen. Wenn ich folgenden Code mit dem AVR 2313 anschauen möchte, läuft zwar der Debugger, nur die Timer Routine (ISR) wird nicht angesprungen. Weiß jemand was ich falsch gemacht hab?? 1000 Dank im Voraus!!!! #ifndef F_CPU #define F_CPU 3686400 #endif #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> int sekunde=0; ISR (TIMER1_COMP1_vect) { sekunde++; } static void initTimer(void) { TCCR1B = 1<<WGM12 | 1<<CS10; // divide by 1 // clear on compare OCR1A = 10 ; // Output Compare Register TCNT1 = 0; // Timmer startet mit 0 TIMSK = 1<<OCIE1A; // beim Vergleichswertes Compare Match } void main(void){ int sekunde=0; DDRB=0xff; initTimer(); for(;;){ PORTB=sekunde; } }
Darüber hinaus: 1) volatile 2) Ein Interrupt alle 10 Takte ist völlig illusorisch.
Danke für eure Antworten! Zu 1) - OK, hab den Code angepaßt. ZU 2) - ok, hab ich auch angepaßt Trotzdem läuft's im Debugger nicht. Ich möchte eigentlich nur mal einen Timer zum laufen bringen, der auf das ISR-Event reagiert.... Mein Code steigt im Debugger nach einmaligem Durchlauf einfach aus... Hat jemand ein Codebeispiel für einen Tiny2313, bei dem auf ein Timer-Interrupt reagiert wird? Das Problem ist, daß im GCC-Tutorial nicht auf die A + B Register beim Tiny2313 eingegangen wird. Danke schonmal!!!!! ------------Code----------- #ifndef F_CPU #define F_CPU 3686400 #endif #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> volatile uint16_t sekunde=0; ISR (TIMER1_COMP1_vect) { sekunde++; } static void initTimer(void) { TCCR1B = 1<<WGM12 | 1<<CS10; // divide by 1 // clear on compare OCR1A = 10 ; // Output Compare Register TCNT1 = 0; // Timmer startet mit 0 TIMSK = 1<<OCIE1A; // beim Vergleichswertes Compare Match } void main(void){ int sekunde=0; DDRB=0xff; initTimer(); sei(); for(;;){ PORTB=sekunde; } }
ES FUNKTIONIERT!!!! Oh mann - hab in der .h Datei vom anderen 2313-iC nachgeschaut!! Danke Stefan für den Tip!! Jetzt muß ich nur noch rauskriegen, warum PortB nicht hochzählt. Hab's auch schon mit 'nem 8-Bit Int probiert - geht aber nicht..... Hast du da evtl. auch noch ein Tip für mich?? :-) Danke nochmal!!!!!
Martin Preisler schrieb:
> Hast du da evtl. auch noch ein Tip für mich?? :-)
Schau dir mal an, wieviele Variablen namens 'Sekunde' du im Programm
hast.
Ich lang' mir gleich an's Hirn!! Oh mann!! Das ist ja fast peinlich!! Ich danke euch!!! ;-) Viele Grüße Martin
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.