Forum: Compiler & IDEs Atmega168 / Atmega8 Timer Interrupt


von TOO0M (Gast)


Lesenswert?

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

von holger (Gast)


Lesenswert?

>#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.

von TOO0M (Gast)


Lesenswert?

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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

>    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

von TOO0M (Gast)


Lesenswert?

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.

von holger (Gast)


Lesenswert?

>aber mit dem atmega8 fällt mir nichts mehr ein.

WGM12 in TCCR1B auch setzen für CTC?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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

von TOO0M (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.