mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega8; Internal Clock and RTC using 32kHz Crystal


Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche einen ATMega8 mit dem internen Oszillator zu betreiben.
Fuses: CKSEL2 und SUT0 (Das geht problemlos)

Zusätzlich möchte ich eine RTC mit Timer2 implementieren. Zu diesem
Zweck habe ich an XTAL1 und XTAL2 einen 32kHz Quarz und zwei 39pF Kond.
angeschlossen. (die internen Kond. Fuse CKOPT funktionieren ja irgendwie
nicht, siehe http://www.mikrocontroller.net/forum/read-1-179766.html#new
)

Das programm läuft bis zur Abfrage: while(ASSR & 0x07);
Kommentiere ich diese Zeile aus läuft das programm, aber TIM2_OVF wird
nie ausgeführt.

Source:
interrupt [TIM1_CAPT] void timer1_capt_isr(void){
    e2events++;
}
interrupt [TIM2_OVF] void timer2_overflow_isr(void){
    isrCnt++;
}
void main(void){

//RTC Init
    TIMSK &= ~((1<<TOIE2)|(1<<OCIE2));
    // Select the external clock source (Asyncronous Status Register)
    ASSR  |= (1<<AS2); // Set timer to be asynchronous
    // as the setting of the assr to asyncronus clock
    // might corrupt other registers they have to be reset
    // Reset the timer counter register
    TCNT2 = RESET;
    // 32768Hz / 256 = 128 -> prescaler 128 for 1 sec interr.
    // no prescaler for exactly 1/128 second interrupt => every 7.8125
ms
    TCCR2 |= ((1<<CS22)|(1<<CS20));
    // wait for the ASSR flags to be cleared, the registers are updated

    while(ASSR & 0x07);
    // clear the timer2 isr flags
    TIFR |= (1<<TOV2);
    // enable overflow interrupt
    TIMSK |= (1<<TOIE2);
// external isr init
    PORTB.0 = 1; //Pullup on
    TCCR1B |= (1<<NOISE_CANCEL);// Noise Canceler On, Timer1 Prescaler
1

    CAPTURE_FALLING_EDGE;        // Edge Select falling

  // Timer1 InputCapture Interrupt Enable for PWM Duty Cycle measuring
    TIMSK |= (1<<INPUT_CAPT_ISR);
    // Global enable interrupts
    #asm("sei")

    while(1){

        sprintf(line1, "Events: %u %u",e2events);
        sprintf(line2, "Timer2ISR: %u",isrCnt);
        RedrawDisplay();

        delay_ms(200);
    };
}

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe im Datenblatt gelesen, das wenn der interne Oszillator aktiv
ist, XTAL 1 und 2 als PB6 und PB7 verwendet werden können. Schließt das
nicht die gleichzeitige Verwendung des internen und des externen
Oszillators aus?

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hubert
Der externe 32kHz Quarz taktet nur Timer2 und nicht den Controller.
Der Controller wird mit dem internen Clock getacktet.

Wie würdest du eine RTC realisieren?

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sollte anscheinend wirklich funktionieren. Das werde ich auch mal testen
müssen. Ich kann dir bei deinem Problem leider nicht weiterhelfen.

Autor: andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe einen ATmega8 mit C programmiert und der timer2 läuft immer schon
über!

Autor: Mario (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe festgestellt, dass der interne Clock mit den CodevisionAVR Fuse
Einstellungen nicht läuft. Ich habe den Controller mit den Einstellungen
wie im Bild programmiert. Wenn ich am STK500 den Jumper XTAL1 (die
Clock-Source) entferne steht der Controller.

?????
Was soll ich da noch machen..

Autor: Marko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum benutzt du zur Fuse-Einstellung nicht das AVR-Studio ?
Ich hab die Fuses auch dort erst richtig hin bekommen,
da zu jedem Häkchen ne Erläuterung steht was macht

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.