Uhrenquarz an Atmega8

Gast #2696401
Lesenswert?
• ▲
▼
Hallo,

Ich habe ein Problem mit der Nutzung eines Uhrenquarzes 32...kHz

Habe Prescaler und TCNT2 auf gegebene Werte gesetzt sowie das Bit AS2 im 
Register ASSR. Habe keine Kondensatoren an den Eingängen, das Bit für 
die internen Kondensatoren ist doch standardmäßig gesetzt?

Habe ich etwas vergessen oder warum läuft der Timer noch nicht einmal 
an???

Danke im Voraus.
Gast #2696457
Lesenswert?
• ▲
▼
Hi

Sieh dir mal die Umschaltung in den Async Mode im Datenblatt an:

Asynchronous
Operation of
Timer/Counter2

....
1. Disable the Timer/Counter2 interrupts by clearing OCIE2 and TOIE2
2. Select clock source by setting AS2 as appropriate
3. Write new values to TCNT2, OCR2, and TCCR2
4. To switch to asynchronous operation: Wait for TCN2UB, OCR2UB, and 
TCR2UB
5. Clear the Timer/Counter2 Interrupt Flags
6. Enable interrupts, if needed
.....

MfG spess
Gast #2696473
Lesenswert?
• ▲
▼
void isr_init(void)
{
  //OCIE2 and TOIE2 bereits 0
  ASSR = (1<<AS2);

  TCCR2 = (1<<CS22)|(1<<CS21);
  TCNT2 = 128;

  while((1<<TCN2UB)||(1<<OCR2UB)||(1<<TCR2UB)){} //Warten

  TIMSK |= (1<<TOIE2);
  sei();

}

So geht es immer noch nicht.
Gast #2696489
Lesenswert?
• ▲
▼
void isr_init(void)
{
  //OCIE2 and TOIE2 bereits 0
  ASSR = (1<<AS2);

  TCCR2 = (1<<CS22)|(1<<CS21);
  TCNT2 = 128;
  while((ASSR &(1<<TCN2UB))||(ASSR &(1<<OCR2UB))||(ASSR &(1<<TCR2UB))){} 
//Warten

  TIMSK |= (1<<TOIE2);
  sei();
}

Nun scheint er dauerhaft in der Warteschleife hängen zu bleiben, auch 
wenn ich die 3 Bedingungen negiere.
Gast #2696550
Lesenswert?
• ▲
▼
Meine Güte, habe es nun alles nach Anleitung wie folgt im Programm:

void isr_init(void)
{
    //Disable timer2 interrupts
    TIMSK  = 0;
    //Enable asynchronous mode
    ASSR  = (1<<AS2);
    //set initial counter value
    TCNT2=0;
    //set prescaler
    TCCR2 = (1<<CS22)|(1<<CS21);
    //wait for registers update
    while (!(ASSR & ((1<<TCN2UB)|(1<<TCR2UB))));
    //clear interrupt flags
    TIFR  = (1<<TOV2);
    //enable TOV2 interrupt

TIMSK |= (1<<TOIE2);
sei();

}

Er zählt trotzdem noch nicht!

Antwort schreiben

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.

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.