Timer1 Interrupt

Gast
Danke.
Ist aktiviert, da ich INT0 noch verwende.

Funzt jetzt auch, aber ich hab da irgendwas um die 10 sekunden.
sollte doch ansich 4 sekunden werden


11059200 / 1024 =

10800
ich zaehle bis 10799 hoch, das muesste doch ne sekunde sein
Gast
Der muss doch laufen.. ich hab da noch nen UART am laufen der auch 
saubere zeichen liefert.


Ext Crystal/Resonator High Freq startup 16K + 64 ms sind eingestellt.
Gast
>Der muss doch laufen.. ich hab da noch nen UART am laufen der auch
>saubere zeichen liefert.

Gibt es noch weitere wichtige Informationen?

>Funzt jetzt auch, aber ich hab da irgendwas um die 10 sekunden.
>sollte doch ansich 4 sekunden werden

Der Fehler liegt in Zeile 42 vom Code.
hallo

ich komme auch auf eine sekunde

du musst jedoch in der isr OCR1A = 10799; reinschreiben

#
1
ISR (TIMER1_COMPA_vect) {
2
OCR1A = 10799;
3
  lcd_putc('X');
4
}
5

6
// Timer init
7
OCR1A = 10799;
8
TCNT1 = 0;
9
TCCR1B |= (1<<CS12)|(1<<CS10); // 1024 pre
10
TIMSK |= (1<<OCIE1A);


mfg
Simon schrieb:

> ich zaehle bis 10799 hoch, das muesste doch ne sekunde sein

An sich schon.

Der Interrupt sollte bei 1 Sekunde kommen, kommt aber bei irgendwas um 
die 10 Sekunden. Macht einen Faktor so um die 10.
Dein AVR wird ab Werk mit ca. 1Mhz getaktet. Du hast einen Quarz drann 
der bei irgendwas um die 10Mhz liegt. Macht ebenfalls einen Faktor 10.
stimmt auch wieder, ich hätte es sowieso mit CTC mode gemacht (genauer), 
wenn du schon so arbeitest würde ich es so schreiben (meine methode)
1
ISR(TIMER1_OVF_vect) {
2
TCNT1 = 54737; //65536-10799
3
  lcd_putc('X');
4
}
5

6
// Timer init
7

8
TCNT1 = 54737;
9
TCCR1B |= (1<<CS12)|(1<<CS10); // 1024 pre
10
TIMSK |= (1<<TOIE1);

mfg
Gast
OCR1A = 10799;
TCNT1 = 0;
TCCR1B |= (1<<CS12)|(1<<CS10); // 1024 pre


Aber tue ich das hier nicht? ->
TIMSK |= (1<<OCIE1A);

er springt ja auch den COMPA vect an
versuchs mal mit dem ;-)
1
ISR(TIMER1_COMPA_vect){
2
  
3
    // dein code
4
    }
5

6
int main(void)
7
{
8
//Timer1 config anfang***********************************************
9
  TIMSK |= (1<<OCIE1A);        //Timer 1 Output Compare A Match Interrupt Enable
10
  OCR1A = 10799;             // von 0 bis zu diesem Wert wird gezählt => 1sek
11
  TCCR1B |= (1<<CS12) | (1<<CS10) |(1<<WGM12);  //CTC MODE & 1024Teiler  
12
     sei ();                //Globale Interrupts freigeben
13
//Timer1 config ende***************************************************
14

15

16
// restliche main blabla
17

18
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.