Hallo, ich habe ein Problem mit der DS1371 Real-Time Clock.
Ich konfiguriere den DS1371 mit meinem AT90CAN128 per I²C, so dass der
/INT-Ausgang nach 5 Sekunden auf Low geht. Dies ist der Interrupt, der
meinen Controller aus dem Power Down Sleep Mode holen soll. Wenn dies
geschieht soll der AVR ein paar Sachen erledigen und sich dann wieder
schlafen legen, indem er die DS1371-Konfigurationsroutine nochmal
ausführt.
Das klappt aber immer nur ein mal. Die RTC wird auf 5 Sekunden gestellt,
der AVR legt sich schlafen, wird nach 5 Sekunden geweckt und dann
passiert gar nichts mehr. Auf den I²C Busleitungen sind dann
ununterbrochen Signale und meine I²C Funktion geht nicht mehr in den
Idle-Status über (= Übertragung beendet). Es scheint mir so, als würde
die RTC nicht mehr reagieren...
Geschieht während des Power Down Sleep Modus etwas mit der
TWI-Schnittstelle des AVRs, dass ich gesondert beachten oder abfangen
muss? Oder kann man die RTC1371 nicht mit dersleben Konfiguration erneut
beschrieben um den Timer zu resetten und den Interrupt-Ausgang
rückzusetzen?
Das ist die Konfigurations-Funktion, mit den Daten die ich dem DS1371
schicke
1 | while (twi_get_twi_state() != TWI_IDLE) // Auf freien Bus warten
|
2 | {
|
3 | NOP();
|
4 | }
|
5 |
|
6 | u8_TWI_TX_Data[0] = 0x04; // Watchdog Alarm Counter Register auswählen
|
7 | u8_TWI_TX_Data[1] = (CYCLE >> 0) & 0xFF; // Alarm Zeit Byte 0
|
8 | u8_TWI_TX_Data[2] = (CYCLE >> 8) & 0xFF; // Alarm Zeit Byte 1
|
9 | u8_TWI_TX_Data[3] = (CYCLE >> 16) & 0xFF; // Alarm Zeit Byte 2
|
10 | u8_TWI_TX_Data[4] = 0b01001001; // Alarm Countdown aktivieren
|
11 | u8_TWI_TX_Data[5] = 0b00000000; // Interrupt Flag zurücksetzen
|
12 | twi_master_transmit_data (I2C_RTC_SLAVE_ADRESS, 6);
|
13 |
|
14 | while (twi_get_twi_state() != TWI_IDLE) // Auf freien Bus warten (Übertragung abgeschlossen)
|
15 | {
|
16 | NOP();
|
17 |
|
18 | }
|
Wäre sehr dankbar, wenn mir jemand weiterhelfen könnte, der sich mit der
RTC schon beschäftigt hat... Danke!