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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren