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); }; }
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?
@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?
Sollte anscheinend wirklich funktionieren. Das werde ich auch mal testen müssen. Ich kann dir bei deinem Problem leider nicht weiterhelfen.
Habe einen ATmega8 mit C programmiert und der timer2 läuft immer schon über!
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..
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.