Gast
#54590
Moin Moin Ich habe ein Problem mit der leidigen RTC. Ich nutze den AT90S8535 mit den TOSC Pins und einem 32768Hz Uhrenquarz. Leider kann ich den µc nicht davon überzeugen, dass er den Uhrenquarz als Clocksource nehmen soll. Wenn ich auf den 8MHz Quarz umschalte funktioniert alles wunderbar nur leider zu schnell und zu ungenau. Den Uhrenquarz habe ich schon ausgetauscht. Der scheidet also als Fehlerursache aus. Auch habe ich schon stundenlang mit den Registern (TIMSK, ASSR, TCCR2, TCNT2, usw.) rumgespielt. Allerdings ohne erfolg. Unten habe ich noch mal die von mir verwendeten Dokumente und Quelltextausschnitte von mir gepostet. Bei Google und hier findet man leider nicht so viel zu diesem Thema. Schönes Restwochenende Timo Ottersberg Application Note zum Thema RTC http://www.atmel.com/dyn/resources/prod_documents/DOC1259.PDF Datenblatt des AT90S8535 (Timer/Counter2 S.42 ff) http://www.atmel.com/dyn/resources/prod_documents/DOC1041.PDF #include <90s8535.h> #define AS2 3 #define TOIE2 7 #define OCIE2 8 // Timer 2 overflow Interrupt interrupt [TIM2_OVF] void timer2_ovf_isr(void){ mach_was(); } void main(void){ ... Ports initialisieren ... Timer/Counter initialisieren ... // Timer/Counter 2 initialisieren TIMSK &=~((1<<TOIE2)|(1<<OCIE2)); //Timer/Counter2 Interrupt abschalten ASSR |= (1<<AS2); //Als Quelle den externen Quarz wählen TCNT2 = 0x00; //Startwert 0x00 TCCR2 = 0x05; //Quarzfrequenz durch 128 teilen while(ASSR&0x07); //Warten bis TCCR2 geupdatet wurde TIMSK |= (1<<TOIE2); //Timer/Counter2 Interrupt aktivieren SREG=0x80; //Globale Interrupts anschalten // Global enable interrupts #asm("sei") while (1){ mach_was_anderes(); }; } Alle Werte scheinen mir während das Programm läuft korrekt zu sein. ASSR = 8 TIMSK = 128 TCNT2 = 0 //läuft natürlich nicht :-( TCCR2 = 5 SREG = 128