mikrocontroller.net

Forum: Compiler & IDEs Atmega168 / Atmega8 Timer Interrupt


Autor: TOO0M (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: TOO0M (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TOO0M (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>aber mit dem atmega8 fällt mir nichts mehr ein.

WGM12 in TCCR1B auch setzen für CTC?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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_Fun...

Autor: TOO0M (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.