-
-
Neuer Benutzer
Öfters hier
Datum einstellen mit Atmega168 und DS1307 funktioniert nicht
Hallo,
ich programmiere mit winAVR (Workpad von myAVR mit winAVR-Compiler).
Ich habe folgendes Problem:
Ich kann per I2C den DS1307 ansprechen und die Uhrzeit (Sekunde, Minute, Stunde) ab Adresse 0 programmieren.
Nach Umwandlung der Sekunde, Minute und Stunde nach BCD funktioniert folgender Code:
twiStop();
twiAdr=DevDS1307;
myWait_ms(10);
twiStop();
myWait_ms(5);
twiStart();
myWait_ms(5);
twiWriteByte(DevDS1307,1);
myWait_ms(5);
twiWriteByte(0,1); // Adress-Byte 0 mit Akn
myWait_ms(5);
twiWriteByte(mySeconds1,1); // Adresse 0: Sekunden-Byte mit Akn
myWait_ms(5);
twiWriteByte(myMinute1,1); // Adresse 1: Minuten-Byte mit Akn
myWait_ms(5);
twiWriteByte(myHours1,1); // Adresse 2: Stunden-Byte mit Akn
myWait_ms(5);
twiStop();
Wenn ich die Adresse auf 3 Mit Wochentag bzw. 4 ohne Wochentag einstelle , funktioniert i.d.R. nur das Jahr korrekt. Der Tag und der Monat lassen sich mit Glück auf jeweils 1 einstellen. Höhere Werte werden nicht umgesetzt.
twiAdr=DevDS1307;
myWait_ms(10);
twiStop();
myWait_ms(5);
twiStart();
myWait_ms(5);
twiWriteByte(DevDS1307,1);
myWait_ms(5);
twiWriteByte(3,1); //Adress-Byte 3 mit Akn
myWait_ms(5);
twiWriteByte(3,1); //Adresse 3: Dummy Wochentag mit Akn
myWait_ms(5);
twiWriteByte(myDay1,1); //Adresse 4: Tag-Byte mit Akn
myWait_ms(5);
twiWriteByte(myMonth1,1); //Adresse 5: Monat-Byte mit Akn
myWait_ms(5);
twiWriteByte(myYear1,1); //Adresse 6: Jahr-Byte mit Akn
myWait_ms(5);
//twiWriteByte(0,1); // Statusregister (egal) mit Akn
//myWait_ms(5);
twiStop();
Mit folgenden Werten funktioniert es z.B. nicht.
uint8_t myDay1=4;
uint8_t myMonth1=3;
uint8_t myYear1=9;
Da alle Werte <10 sind, liegen diese folglich bereits im BCD-Format vor.
Die Wartezeiten (myWait_ms(5)
sind nur testweise eingebaut. Ich habe praktisch alles versucht, doch es funktioniert einfach nicht.
So habe ich z.B. die Uhr angehalten (Adresse 0 und Bit 7 auf 1) und dann versucht, das Datum einzustellen. Oder aber statt einer Byte-Adresse eine Word-Adresse angegeben. Alles ohne Erfolg!.
Wenn ich die Uhr auf 23:59:59 stelle, dann springt das Datum automatisch um. Wenn es auf 1.1.2009 war, springt es auf 0.1.2009!!! zurück. Wenn es auf 0.1.2009 stand, springt es auf den 1.1.2009.
Ich habe den DS1307-Chip auch schon gewechselt, doch es half nichts.
Der Chip ist korrekt mit einem Uhrenquarz verbunden und an eine zusätzliche Pufferbatterie mit 3,2 V angeschlossen (natürlich neben der normalen 5V stabilisierten Stromversorgung).
Hat jemand eine Idee, woran es liegen könnte?
Danke für Eure Mühe,
Bernd Apitz
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen