Forum: Mikrocontroller und Digitale Elektronik Problem mit DS1371 RTC nach Wake-Up


von André W. (sefiroth)


Lesenswert?

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!

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
Noch kein Account? Hier anmelden.