www.mikrocontroller.net

Forum: GCC Atmega168 / Atmega8 Timer Interrupt


Autor: TOO0M (Gast)
Datum:

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
Autor: holger (Gast)
Datum:

>#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.
Autor: TOO0M (Gast)
Datum:

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.
Autor: Stefan B. (stefan) Benutzerseite
Datum:

>    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
Autor: TOO0M (Gast)
Datum:

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.
Autor: holger (Gast)
Datum:

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

WGM12 in TCCR1B auch setzen für CTC?
Autor: Stefan B. (stefan) Benutzerseite
Datum:

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_Fun...
Autor: TOO0M (Gast)
Datum:

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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net