Hallo mikrocontroller.net Besucher! Ich bin neu bei den Atmel Controllern und hab einige Anlaufschwierigkeiten, Ich Studieren Elektrotechnik an der FH Bonn-Rhein_Sieg. Also: AT90USB162 Timer0 bei Überlauf Interrupt, sw hochzählen und ausgeben. #include <avr/io.h> #include <avr/signal.h> //#include <avr/interrupt.h> #ifndef F_CPU #define F_CPU 3686400UL #endif #include <util/delay.h> volatile unsigned char sw=0; //global variable SIGNAL(SIG_OVERFLOW0) //ISR for timer0 overflow { sw++; PORTB=sw; // PORTB bits 4 to 7: leds TCNT0 = 112; //set the reload value } int main (void){ DDRB=0xff; //set PORTB as output PORTB=0x00; DDRC=0x00; //set PORTC as input with pull ups PORTC=0xff; TCNT0 = 112; //set the reload value TCCR0B |= (1<<CS02) | (1<<CS00);//prescaler clk/1024 TIMSK0 |= (1<<TOIE0); //overflow interrupt enable sei(); //global Interrupt enable while(1){ PORTB=sw; } } Mach ich hier grundsätzlich was falsch? Beispiele aus der Codesammlung halfen mir irgendwie nicht weiter. Es ist ein Quarz angeschloßen und die Hardware funktioniert auch sonst. Vielen Dank für eure Hilfe! Zibi
zibi dziubek schrieb: > Mach ich hier grundsätzlich was falsch? Kommt drauf an. Was soll den passieren? Was passiert statt dessen? Gab es eine Warnung vom Compiler? Hast du im Simulator schon mal probiert, ob die Konfig-Bits richtig gesetzt werden und die ISR angesprungen wird?
Ich benutze AVR Studio 6 und hier wird eine Simulation für den AT90USB162 nicht unterstützt: Start Debugging(F5) -> AVR Simulator -> AT90USB162 Support: No Bei Überlauf des Timer0 soll die ISR Rourine ausgeführt werden in der sw++; PORTB=sw; gesetzt wird. Hiermit sollte einfach anhand von 4 leds an PORTB überprüft werden, ober der Timer0 läuft.
zibi dziubek schrieb: > Hiermit sollte einfach anhand von 4 leds an PORTB überprüft werden, ober > der Timer0 läuft. Also geht alles.
Wenn es gehen würde, würde ich nicht um Hilfe bitten. Keine der leds blinkt somit gehe ich davon aus, dass die ISR nicht angelaufen wird. Hat den jemand von euch schon timer der AT90xxxxxx benutzt? Muss etwas spezielles beachtet werde im Vergleich zu den atmegas?
Dreh mal bei deinem Compiler den Warninglevel hoch, bzw. sieh die die Warnings an.
1 | c:/winavr-20090313/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>." |
2 | ../Timer_90_USB.c:11: warning: 'SIG_OVERFLOW0' appears to be a misspelled signal handler |
es ist nie eine gute Idee, Warnings zu ignorieren. Die erste ist harmlos, die zweite aber nicht.
Dank Karl Heinz! Hab jetzt das Warning gegoogled: Nicht wie in meinen Buch zu finden SIGNAL(SIG_OVERFLOW0){ } sondern: ISR(TIMER0_OVF_vect){ } muss verwendet werden.
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.