Forum: Mikrocontroller und Digitale Elektronik Wie einen ds1307 an einem atmega32 Programmieren


von Alexander (Gast)


Lesenswert?

Hallo,
ich bin Schüler und habe mir ein meiner Freizeit eine Art 
Rasenmäherroboter gebaut. Als Vorlage diente mir dieses Projekt 
http://www.tomanja.de/robitobi/index.htm

http://www.tomanja.de/robitobi/download/RobiTobi-gesamt_v1.1.pdf

Lieder habe ich nicht viel Ahnung vom Programmieren. Mir geht es 
Hauptsächlich ums Löten und zum Bau des gesamten Fahrzeugs.

Jetzt habe ich alles zusammen gelötet und das Hauptprogramm für den 
Atmega via  isp Programmer und eXtreme Burner - AVR aufgespielt. Leider 
macht mir mein ds1307 Probleme. Da dieser noch nicht beschrieben ist und 
somit noch nicht richtig läuft kann mein Hauptprogramm darauf nicht 
zugreifen.
Jetzt habe ich mir das Beispiel aus Bascom mal angeschaut aber daraus 
werde ich auch nicht schlauer. Desweiteren benötige ich das Programm als 
.hex um es mit eXtreme Burner brennen zu können.

Als Zeitbaustein habe ich dieses Bauteil verbaut.
http://www.ebay.de/itm/I2C-RTC-DS1307-AT24C32-Real-Time-Clock-Realtime-Module-Batterie-for-AVR-ARM-PIC-/320854497094?pt=Bauteile&hash=item4ab46b1746#ht_4412wt_1344

Angeschlossen sind die Sda und Scl Ausgänge an den Pins 22,23 des 
Atemegas. und natürlich die Stromversorung. :)

Kann mir jemand weiterhelfen welche Programm ich brauche und wie ich 
mein Bauteil beschreiben kann ??

Vielen Dank schonmal

von Nico (nico123)


Lesenswert?

Einen DS1307 programmiert man nicht, das ist eine Real Time Clock die 
dir Zeit und Datum ausgibt! Diese hat zwar auch einen integrierten 
Eeprom, aber den wirst Du wohl nicht benötigen.
Was hast Du überhaupt damit von, wozu brauchst Du die Zeit oder ein 
Datum in einem Rasenmäher?

von Uwe (de0508)


Lesenswert?

Hallo Alexander,

lass Dich nicht ärgern !

Der DS1307 muss einmalig initialisiert werden, das mache ich so;

Im Register 0x00 - Sekunden - ist das Bit 7 = 0 zu setzen.

Im Register 0x02 - Stunden - stelle ich noch die Zeit auf 24 Stunden: 
Bit 6 = 0

Da ich die Zeit per 1 Sek. Interrupt auslesen möchte, setze ich noch:

Im Register 0x07 - REG_CONTROL - dieses Byte: (OPTION_SQWE | OPTION_HZ1)

#define OPTION_HZ1 0b00000000
#define OPTION_SQWE OPTION_SQWE

Danach kann man die aktuelle Zeit und das Datum einstellen...

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.