/**************************************************************************************************** * RTC DS1307 mit LCD-Display * * 05.11.2011 Jürgen Mayer, DL8MA * * http://www.amateurfunk.de/dl8ma * * Dieser Beispielcode ist public domain * * Hardware: Arduino * Arduino SD Shield Plus mit DS1307 (www.avrcontrollers.com) * LCD-Shield */
#include "LCD4Bit_mod.h" #include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68 // I2C Adresse char buffer[20] = ""; // Speicherbereich für Datenkonvertierung LCD4Bit_mod lcd = LCD4Bit_mod(2); // LCD-Display /**************************************************************************************************** * Konvertierung BCD-kodierter Dezimalzahl */ byte bcdToDec(byte val) { return ( (val/16*10) + (val%16) ); }
/**************************************************************************************************** * Zeit und Datum aus DS1307 auslesen und konvertieren */ void getDateDs1307(int date[]) { Wire.beginTransmission(DS1307_I2C_ADDRESS); // I2C-Kommunikation im Schreibmodus starten Wire.send(0x00); // Registerzeiger auf 0 setzen Wire.endTransmission(); // I2C-Kommunikation beenden Wire.requestFrom(DS1307_I2C_ADDRESS, 7); // I2C-Kommunikation im Lesemodus starten date[ 0 ] = bcdToDec(Wire.receive() & 0x7f); // Sekunden date[ 1 ] = bcdToDec(Wire.receive()); // Minuten date[ 2 ] = bcdToDec(Wire.receive() & 0x3f); // Stunden date[ 3 ] = bcdToDec(Wire.receive()); // Wochentag date[ 4 ] = bcdToDec(Wire.receive()); // Tag date[ 5 ] = bcdToDec(Wire.receive()); // Monat date[ 6 ] = bcdToDec(Wire.receive()); // Jahr } /**************************************************************************************************** */ void setup() { Wire.begin(); // I2C-Bus einrichten lcd.init(); // LCD-Anzeige initialisieren lcd.clear(); lcd.printIn( "DS1307 - Uhr" ); }
/**************************************************************************************************** */ void loop() {
int datum[ 7 ]; getDateDs1307( datum ); // Datum und Uhrzeit aus DS1307 holen
lcd.cursorTo(2, 0); // Datum und Uhrzeit in 2. Zeile schreiben
if( datum[ 4 ] < 10 ) lcd.printIn( "0" ); lcd.printIn( itoa( datum[ 4 ], buffer, 10 ) ); lcd.printIn( "." ); if( datum[ 5 ] < 10 ) lcd.printIn( "0" ); lcd.printIn( itoa( datum[ 5 ], buffer, 10 ) ); lcd.printIn( "." ); /* if( datum[ 6 ] < 10 ) lcd.printIn( "0" ); lcd.printIn( itoa( datum[ 6 ], buffer, 10 ) ); */ lcd.printIn( " " );
if( datum[ 2 ] < 10 ) lcd.printIn( "0" ); lcd.printIn( itoa( datum[ 2 ], buffer, 10 ) ); lcd.printIn( ":" ); if( datum[ 1 ] < 10 ) lcd.printIn( "0" ); lcd.printIn( itoa( datum[ 1 ], buffer, 10 ) ); lcd.printIn( ":" ); if( datum[ 0 ] < 10 ) lcd.printIn( "0" ); lcd.printIn( itoa( datum[ 0 ], buffer, 10 ) ); lcd.printIn( " " );
delay(1000); // grobes Sekundenraster für Anzeige }
|