Forum: Compiler & IDEs DS1307 mit Peter Fleury Library


von Joel B. (jeybee666)


Lesenswert?

Guten Tag,

Ich habe eine DS1307 RTC, ein EEprom und ein LM75 Temperatursensor an 
einem ATmega16 angeschlossen. Als Lib nehme ich die I2C Library von 
Peter Fleury. Das Auslesen des Temperatursensors, so wie das Beschreiben 
und das Auslesen des EEproms funktionieren ohne Probleme.
Nun wollte ich die DS1307 in Betrieb nehmen. Als erstes habe ich mich 
etwas mit dem Datenblatt beschäftigt, um die Funktionen und 
Eigenschaften der RTC kennen zu lernen. Jedoch weiss ich noch immer 
nicht, wie ich die RTC beschreiben und auslesen kann. Auch google 
brachte keine brauchbaren ergebnisse, da meistens eigene Libs verwendet 
werden. Auch bei myAVR, wo ich die Komponenten gekauft habe, konnte ich 
keine brauchbare Source finden.

Hat jemand einen kleinen Sourcecode, der auf der Peter Fleury library 
basier?
Oder kann mir wenigstens jemand Step-by-Step erklären, was ich für Bytes 
zum RTC über den TWI schiken muss?



Gruss JeyBee66

von GG (Gast)


Lesenswert?

Servus,

habe mal eine DS1307 Lese- und Schreibroutine zusammen kopiert:
Beachte nur die Reihenfolge , die I2C- Befehle sind nicht aus der Lib
von Peter Fleury

i2c_start(ds1307+I2C_WRITE);   // set device address and write mode
i2c_write(0x00);
i2c_rep_start(ds1307+I2C_READ);    // setze Leserister-Adresse
sekunde= i2c_readAck();            // höherwertiges Byte, Daten auslesen
minute= i2c_readAck();         // LSB auswerten niederwertiges Byte
stunde = i2c_readAck();        // höherwertiges Byte, Daten auslesen
tagnr = i2c_readAck();         // LSB auswerten niederwertiges Byte
tag = i2c_readAck();           // höherwertiges Byte, Daten auslesen
monat= i2c_readAck();          // LSB auswerten niederwertiges Byte
jahr= i2c_readNak();  //*Nak!! LSB auswerten niederwertiges Byte
i2c_stop();


ret = i2c_start(ds1307+I2C_WRITE);  // set device address and write mode
i2c_write(0x00);                       // Startadresse
i2c_write(0x00);                       // sekunde
i2c_write(0x05);                       // minute
i2c_write(0x57);                       // stunde
i2c_write(0x06);                       // tagnr
i2c_write(0x30);                       // tag
i2c_write(0x12);                       // monat)
i2c_write(0x05);                       // jahr
i2c_write(0x90);                       // Sekundentakt
i2c_stop();                            // Bus stop

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.