Hallo,
ich will die RTC 8564 von Epson in Betrieb nehmen. Uhrzeit stellen und
lesen funktioniert schon problemlos, aber anscheinend habe die
Konfiguration der Alarmfunktion noch nicht verstanden. Wenn ich z.B. um
17.02 einen Alarminterrupt bekommen will, setze ich im Kontrollregister
2 das Bit 1 (AIE). Bei Minuten und Stundenalarm stelle ich die Zeit ein
und setze das AE-Flag:
writeiic(0x01,0x02);
writeiic(0x09,(2 | 0x80));
writeiic(0x0A,(17 | 0x80));
Ich bekomme aber weder einen Interrupt auf dem Oszi, noch wird das AF
gesetzt. Was mache ich falsch?
matt
Datenblatt:
http://www.epsondevice.com/www/PDFS/epdoc.nsf/WE_rtc/4E5D74F3C1258E4049256A7F0003BAB0?OpenDocument
Hallo
Dein Beitrag ist schon etwas älter aber vielleicht hast du nun schon
deine lösung.
Ich möchte auch einen rtc8564JE in betrieb nehmen jedoch habe ich das
Problem das ich keine antwort vom RTC bekomme.
Nun bin ich mir nicht sicher ob ich einen SW-Fehler habe oder ob mein IC
tot ist.
Ich schreibe zuerst 0x02 auf die adresse 0xA2 und dann lese ich 7byte
ein.
Aber wie gesagt keine Antwort.
Der IC ist noch im Jungfräulichen zustand damit meine ich, das ich noch
keine zeit auf den RTC geschrieben habe.
Aber er sollte dann von 00:00:00 weglaufen oder?
Könnte mir hier jemand helfen?
Der Master ist ein Xmega128A1
Erich Floh schrieb:> Dein Beitrag ist schon etwas älter aber vielleicht hast du nun schon> deine lösung.
Der Beitrag ist von 2004, dass heißt er ist brandaktuell! ;-)
Ich hab das Datenblatt mal überflogen. Hast du dir in dem Datenblatt die
Erklärung zum I²C Bus durchgelesen?
Du musst zuerst die Adresse der RTC auf den Bus schreiben und dann die
Registeradresse und zum Schluss die Daten.
Erich Floh schrieb:> uint8_t start_adresse[1];> start_adresse[0]=0x00;> start_adresse[1]=0x02;
Fehler 1:
1
uint8_tstart_adresse[2];//2 statt 1
2
start_adresse[0]=0x00;
3
start_adresse[1]=0x02;
Fehler 2:
Erich Floh schrieb:> TWI_MasterWriteRead(&twiMaster,RTC_ADDR,0,0,7);
Ich denke daran liegt es: Wenn ich das richtig interpretiere schickt die
Funktion zuerst die Adresse der RTC auf den Bus, dann die Adresse des
Registers, und liest dieses dann aus. RTC_ADDR ist die Adresse der RTC
und die erste Null die Adresse des Registers.
Poste bitte mal die Funktionsdefinition.
Hallo
void rtc_auslesen(TWI_Master_t *twi) // DS1338 auslesen und Datum und
Uhrzeit speichern
{
uint8_t start_adresse[1];
start_adresse[0]=0x00;
start_adresse[1]=0x02;
// Leseadresse nach RTC schreiben
// TWI_MasterWrite(&twiMaster,RTC_ADDR,start_adresse,2);
+++Hier wird die SlaveAdresse und StartRegister 2 Byte geschrieben
// while (twiMaster.status != TWIM_STATUS_READY) {
/* Wait until transaction is complete. */
// }
TWI_MasterWriteRead(&twiMaster,RTC_ADDR,0,0,7);
//TWI_MasterWriteRead hier read!
while (twiMaster.status != TWIM_STATUS_READY) {
/* Wait until transaction is complete. */
}
++Hier wird SlaveAdresse,0 sendedaten, 0 SchreibLänge,7 Leselänge)
In diesem Fall wird bei dieser Funktion nicht geschrieben sondern nur
gelesen.
Ich habe das datenblatt abermald durchgesehen aber ich denke es liegt
nicht an der SW sondern am IC.
Mir ist noch bekannt von Irgend einem RTC das man ein bit setzen muss
damit er lauft sonst steht er.
Ist das bei dem auch so?
Fehler gefunden - es liegt an der Software:
http://www.e-lab.de/downloads/DOCs/RTC8564.pdf
Da hätte ich früher dran denken müssen:
unten auf Seite 8 steht, dass das Bit 0 in der Adresse der RTC sich
ändert, je nach dem, ob du schreiben oder lesen willst.
Also:
lesen: 0b10100011 (0xA3)
schreiben: 0b10100010 (0xA2)
Hallo
Nein das ist nicht der Fehler.
Das ist in der TWI_writeRead funktion enthalten.
Je nachdem Welche Transaktion durchgeführt wird wird das 8. bit 0 oder 1
gesetzt.
mfg
Erich Floh schrieb:> Nein das ist nicht der Fehler.> Das ist in der TWI_writeRead funktion enthalten.> Je nachdem Welche Transaktion durchgeführt wird wird das 8. bit 0 oder 1> gesetzt.
Mist. Es hätte so einfach sein können.
Erich Floh schrieb:> Mir ist noch bekannt von Irgend einem RTC das man ein bit setzen muss> damit er lauft sonst steht er.
Das hab ich wohl überlesen. Dieses Bit existiert. "Stop" im "Control 1"
Register (Adresse 0x00).
Wenn ich das richtig sehe überschreibst du das Register in der Funktion
TWI_MasterWrite() aber mit 0x00. Also sollte die RTC laufen.
Wie hast du denn die RTC angeschlossen?