hallo ich habe folgendes problem mit einem atmega8. diese isr läuft auf einem atmega8 nicht. ********************************************* ISR (TIMER1_COMPA_vect) { LCD_update(); } void Timer_io_init (void) { TCCR1A |= (1 << WGM11) | (0 << WGM10) ; TCCR1B |= (1 << CS10) | (1 << CS11) | (1 << CS12); //CLOCKSOURCE; // Start timer 1. #if defined(TIMER1_SETUP_HOOK) TIMER1_SETUP_HOOK(); #endif // Clear TIMER1 on compare match, CK/1024 OCR1A = 7; MCUCR = (1 << SE); // TCNT1 Compare Match IRQ app. 60 Hz using 1MHz TIMSK = (1 << OCIE1A); sei (); } diese routine läuft auf einem atmega168 ohne probleme. ****************************************************** ISR (TIMER0_COMPA_vect) { LCD_update(); } void Timer_io_init (void) { TCCR0A = (1 << WGM01); /*CLOCKSOURCE;*/ TCCR0B =(1 << CS00) | (1 << CS02); /* * Start timer 1. */ #if defined(TIMER0_SETUP_HOOK) TIMER0_SETUP_HOOK(); #endif MCUCR = (1 << SE); // TCNT1 Compare Match IRQ app. 60 Hz using 1MHz OCR0A = 7; MCUCR = (1 << SE); // TCNT1 Compare Match IRQ app. 60 Hz using 1MHz clock TIMSK0 = (1 << OCIE0A); sei (); } kann mir einer verraten wieso die routine auf dem einen atmega168 läuft und auf dem atmega8 nicht. habe timer1/2 ausprobiert, aber es will kein timer laufen. die fuses sind wie werkseinstellung.fhb:0xd9 flb:0xe1 für eure hilfe schon mal im voraus vielen dank
>#endif MCUCR = (1 << SE); // TCNT1 Compare Match IRQ app. 60 Hz using
Immer wieder die gleichen Fehler.
Copy und paste von irgendeinem Code der
so nicht funktioniert.
Ps: Lern erst mal deine Muttersprache.
lieber holger bevor du andere berichtigst solltet du erstmal genau lesen. der fehler ist im oberen teil des source code und nicht im unteren. die stelle auf die du anspielst ist mir beim copieren in diesen beitrag entstanden. wie gesagt die untere routine läuft. ps. erst genau lesen, dann schreiben.
> TCCR1B |= (1 << CS10) | (1 << CS11) | (1 << CS12); >... > // Clear TIMER1 on compare match, CK/1024 ^^^^^^^ Passt nicht. Siehe Table 40 im Atmega8 Datenblatt > ps. erst genau lesen, dann schreiben. ps. erst genau lesen, dann fragen. SCNR
hallo Stefan zu diesem abschnitt: > TCCR1B |= (1 << CS10) | (1 << CS11) | (1 << CS12); >... > // Clear TIMER1 on compare match, CK/1024 ^^^^^^^ Passt nicht. Siehe Table 40 im Atmega8 Datenblatt ich habe schon alle kombinationen von CS10-CS12 ausprobiert. das problem ist, das die isr überhaupt nicht angesprungen wird. wie schon oben geschrieben, auf einem atmega168 läuft die routine entsprechend abgeändert. ich vermute das ich ein register-bit beim wechsel vom atmega168 zum atmega8 übersehen habe. die beschreibungen (erklärungen) im source code sind nicht aktuell. deshalb beachtet sie einfach nicht, ich hätte sie besser gelöscht. mich interessiert nur wie bei einem atmega8 der timer mit einem compare interrupt läuft. ich benötige auch keinen externen pin (OC1A). nur die isr routine soll bei einem compare angesprungen werden. ich habe auch schon die routine auf einen overflow interrupt gesetzt, geht aber auch nicht. im moment habe ich so den eindruck als das bei einem atmega8 gar kein timer funktioniert.ich habe schon einen atmega16, atmega168 mit timer programmiert und liefen ohne probleme. aber mit dem atmega8 fällt mir nichts mehr ein.
>aber mit dem atmega8 fällt mir nichts mehr ein.
WGM12 in TCCR1B auch setzen für CTC?
Der Timer1 funktioniert. Hier ein frisches Beispiel extra für dich mit 12 MHz und zwei LEDs zum Blinken an PD5 und PD6: http://www.mikrocontroller.net/articles/Pollin_Funk-AVR-Evaluationsboard#Timer1_Interrupt
erstmal danke für eure hilfe. habe das problem gefunden. beim compilieren wurde eine datei nicht neu mit compiliert. in der war die funktion, die in der isr aufgerufen wurde. ich hatte beim suchen des fehlers in der datei eine änderung vorgenommen, dadurch wurde sie neu compiliert und alles lief.
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.