mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Alarmfunktion der RTC 8564


Autor: matt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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_r...

Autor: Erich Floh (fler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Silvan König (silvan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Erich Floh (fler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ja gelesen hätte ich jedoch habe ich trotzdem keinen erfolg.
Hier der Code villeicht habe ich etwasübersehen.
RTC_ADDR ist A2
void rtc_auslesen(TWI_Master_t *twi)

{

     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);


    while (twiMaster.status != TWIM_STATUS_READY) {
      /* Wait until transaction is complete. */
    }
    // Datum,Uhrzeit aus RTC

    TWI_MasterWriteRead(&twiMaster,RTC_ADDR,0,0,7); 
//TWI_MasterWriteRead hier read!
    while (twiMaster.status != TWIM_STATUS_READY) {
      /* Warten bis complete. */
    }

    rtc_buf.sekunde  = rtc_bcd_to_hex(twiMaster.readData[0]);   //sek
    rtc_buf.minute   = rtc_bcd_to_hex(twiMaster.readData[1]);   //minute
    rtc_buf.stunde   = rtc_bcd_to_hex(twiMaster.readData[2]);   //stunde
    rtc_buf.w_tag    = rtc_bcd_to_hex(twiMaster.readData[3]);   //tag in 
der Woche
    rtc_buf.tag      = rtc_bcd_to_hex(twiMaster.readData[4]);   //tag
    rtc_buf.monat    = rtc_bcd_to_hex(twiMaster.readData[5]);   //monat
    rtc_buf.jahr     = rtc_bcd_to_hex(twiMaster.readData[6]);   //jahr

Autor: Silvan König (silvan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erich Floh schrieb:
> uint8_t start_adresse[1];
>     start_adresse[0]=0x00;
>     start_adresse[1]=0x02;

Fehler 1:
uint8_t start_adresse[2];  //2 statt 1
start_adresse[0] = 0x00;
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.

Autor: Erich Floh (fler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Silvan König (silvan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

#define READ 0x01
#define RTC_ADDR 0xA2
[...]
TWI_MasterWriteRead(&twiMaster,  RTC_ADDR|READ  ,0,0,7);
[...]

Autor: Erich Floh (fler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Silvan König (silvan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Erich Floh (fler)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Anbei der Schaltplan.
Laut Osci bekomme ich kein ACK vom RTC.

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.