Ich versuche, das interne RTCC zum Laufen zu bringen, aber es scheint nicht zu funktionieren.
Was ich benutze-
und mit folgendem Code:
void main() {
char txt[7];
//Setup RTC
T1CON.T1OSCEN = 1;
delay_ms(50);
RTCCFG.RTCWREN = 1;
PADCFG1.RTSECSEL1 = 1;
PADCFG1.RTSECSEL0 = 0;
RTCCFG.RTCEN = 1;
RTCCFG.RTCPTR1 = 0;
RTCCFG.RTCPTR0 = 0;
//Set analog ports as Digital
ANCON0 = 0x1F;
ANCON1 = 0x1F;
I2C1_Init(400000);
Oled_Init();
Oled_FillScreen(0x00);
while(1){
IntToStr(RTCVALH, txt);
Oled_Text(txt,0,2);
IntToStr(RTCVALL, txt);
Oled_Text(txt,0,4);
delay_mS(1000);
}
}
RTCVALH und RTCVALL sollten Minuten und Sekunden anzeigen. Aber ihre Werte ändern sich überhaupt nicht. Sie zeigen konstante Werte von 56 und 50.
Welche Schritte übersehe ich?
Ich glaube, Sie müssen RTCCFG.RTCWREN = 0 setzen; nachdem Sie mit dem Schreiben fertig sind. Das Datenblatt erwähnt es unter Abschnitt 17.2.7 WRITE LOCK
Stellen Sie sicher, dass Ihre Konfigurationsbits zum Einstellen der RTC-Taktquelle korrekt sind. Die dafür verantwortlichen Bits sind das RTCOSC-Bit in der CONFIG3L.
EDIT: RTCWREN kann nicht einfach auf eins gesetzt werden. Sie sollten die im Datenblatt angegebene Reihenfolge einhalten
Suraj Bhawal
Verriegelung