mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit RTC DS1337C


Autor: Florian M. (skywalker79)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe ein Problem beim Beschreiben meiner Maxim RTC vom Typ DS1337C.

Wenn ich versuche, meine RTC zu beschreiben bekomme ich für die Stunden 
immer den Wert 00, für die Minuten den Wert 20 und Sekunden den Wert 10. 
Dabei ist es egal, welche Zeit ich auf die RTC aufspielen möchte. Ab dem 
Wochentag stimmen die eingestellten Werte komischerweise mit den 
programmierten Werten überein.

Als Beispiel zum Verdeutlichen:
ich möchte die Zeit 14:35:15 Freitag 10.08.07 auf die RTC schreiben.
Als Ergebnis nach dem Schreibvorgang liefert mir die RTC 00:20:10 
Freitag 10.08.07

Als Controller verwende ich einen ATMega128.

Im Anhang habe ich mal meinen C-Code für den TWI-Bus angehängt. Im 
Hauptprogramm wird das Beschreiben bzw. Auslesen der RTC einfach durch 
die Funktionen twi_test_schreiben(); bzw twi_test_lesen(); eingebunden.

Ich hoffe das mir jemand von euch bei meinem Problem helfen kann, da ich 
inzwischen schon leicht am Verzweifeln bin.

mit freundlichen Grüßen

Florian

Autor: Florian M. (skywalker79)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hat keiner eine Idee?

mfg Florian

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was sollen diese Zeilen in "void twi_test_schreiben(void)" bewirken?

i2c_start_wait(adresse+I2C_WRITE);
i2c_write(sek_adresse);
i2c_write(0x0E);
i2c_write(0x20);
i2c_write(0);

Du schreibst 0x0E in die Sekunden (ungültige BCD Zahl, vielleicht wird 
daraus die "10"), 0x20 in die Minuten und 0x00 in die Stunden... Das 
sieht sehr ähnlich aus wie das, was Du wieder ausliest.

Gruss,
Thorsten

Autor: Florian M. (skywalker79)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die Zeilen habe ich so aus dem Datenblatt für die RTC.
Aber hast recht, ohne die Zeilen
i2c_write(sek_adresse);
i2c_write(0x0E);
i2c_write(0x20);
funktioniert das schreiben der Zeit so, wie es soll.

Danke

mfg Florian

Autor: Artur Funk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin mir nicht sicher, aber probier mal folgendes:
void twi_test_schreiben(void)
{
  i2c_init();

  i2c_start_wait(adresse+I2C_WRITE);
  i2c_write(0x00);
   i2c_write(0x00);
  i2c_stop();

  i2c_start_wait(adresse+I2C_WRITE);
        i2c_write(0x00); // Adresspointer noch mal auf die Adr. 0 setzen
  i2c_write(sek_adresse);
   i2c_write(bcd_sekunden);
  i2c_write(bcd_minuten);
  i2c_write(bcd_stunden);
  i2c_write(wochentag);
  i2c_write(datum);
  i2c_write(monat);
  i2c_write(jahr);
        i2c_stop();
// Und was soll der Mist hier?
/*
  i2c_start_wait(adresse+I2C_WRITE);
  i2c_write(sek_adresse);
  i2c_write(0x0E);
  i2c_write(0x20);
  i2c_write(0);
*/

}


Außerdem sehe ich nicht, woe die BCD Umrechnung stattfindet. Zudem 
solltest du für den 24h Format vor der BCD Umrechnung das Byte mit 0x3f 
verknüpfen.

Autor: Florian M. (skywalker79)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Also die Umrechnung der Zeitwerte in BCD erfolgt momentan durch einfache
#define bcd_sekunden 0x00 usw.
einen Funktionstüchtigen Code um aus der über die UART empfangenen Zeit 
die BCD Zeit zu machen habe ich (die Funktion habe ich mit dem Oszi 
kontrolliert).
Der Fehler liegt tatsächlich in dem Teil, den ihr als Mist bezeichnet 
habt.
Dort habe ich fälschlicherweise noch einmal die Sekunden Adresse 
aufgerufen.
Ich habe einmal das Datenblatt angehängt, dass ihr nachvollziehen könnt, 
wieso ich auf diesen Mist gekommen bin.
Der entscheidende Codeteil ist auf Seite 4 unten.

mfg Florian

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian,
der Unterschied zum Code im Datenblatt ist:
i2c_write(sek_adresse);
Du instruierst die RTC, die folgenden Bytes an die Adresse für die 
Sekunden (0x00) zu schreiben. Der Code im Datenblatt hat 0x0e als 
Zieladresse (Control register).
Gruss,
Thorsten

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.