www.mikrocontroller.net

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


Autor: André Wippich (sefiroth)
Datum:

Bewertung
0 lesenswert
nicht 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
while (twi_get_twi_state() != TWI_IDLE)         // Auf freien Bus warten
      { 
        NOP();
      }

      u8_TWI_TX_Data[0] = 0x04;                  // Watchdog Alarm Counter Register auswählen
      u8_TWI_TX_Data[1] = (CYCLE >> 0) & 0xFF;  // Alarm Zeit Byte 0
      u8_TWI_TX_Data[2] = (CYCLE >> 8) & 0xFF;  // Alarm Zeit Byte 1
      u8_TWI_TX_Data[3] = (CYCLE >> 16) & 0xFF;  // Alarm Zeit Byte 2
      u8_TWI_TX_Data[4] = 0b01001001;                  // Alarm Countdown aktivieren
      u8_TWI_TX_Data[5] = 0b00000000;                  // Interrupt Flag zurücksetzen
      twi_master_transmit_data (I2C_RTC_SLAVE_ADRESS, 6);
      
      while (twi_get_twi_state() != TWI_IDLE)         // Auf freien Bus warten (Übertragung abgeschlossen)
      { 
        NOP();
        
      }

Wäre sehr dankbar, wenn mir jemand weiterhelfen könnte, der sich mit der 
RTC schon beschäftigt hat... Danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.