Realtimclock

Mein zweites Selbstbauprojekt.

DS1307 Shield für Arduino

 

Anschluss siehe Bild, ganz einfach.
Pin 1 und 2 an den Quarz, Pin 3 Batterie +

Pin 4 Masse PIN 5 und 6 an Arduino wie im Bild. PIN 7 Clock out, hier nicht beschaltet. Pin 8 +5V ohne die geht es nicht.

Das Programm benutzt schon mein 3 Draht LCD Display.  Also bitte dem Libaryeintrag ändern. Oder ganz rausnehmen. Die Befehle sind dann von lcd.print auf serialprint zu ändern für eine Ausgabe auf den Seriallen Monitor. Weiterhin kann man auf <10 abfragen und dann bei den Zahlen eine Vorlaufnull erzeugen. Beispiele gibt es im Netz genug.

//Arduino 1.0+ Only
//Arduino 1.0+ Only

#include "Wire.h"
#define DS1307_ADDRESS 0x68
#include <LiquidCrystal595.h>
LiquidCrystal595 lcd(7,8,9);     // datapin, latchpin, clockpin
byte zero = 0x00; //workaround for issue #527


void setup(){
  Wire.begin();
  Serial.begin(9600);
  lcd.begin(16,2);
  lcd.clear();
// setDateTime(); //MUST CONFIGURE IN FUNCTION
}

void loop(){
  printDate();
  delay(1000);
}

/*void setDateTime(){

  byte second =      45; //0-59
  byte minute =      34; //0-59
  byte hour =       12; //0-23
  byte weekDay =     1; //1-7
  byte monthDay =    3; //1-31
  byte month =       3; //1-12
  byte year  =       13; //0-99

  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero); //stop Oscillator

  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(weekDay));
  Wire.write(decToBcd(monthDay));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));

  Wire.write(zero); //start

  Wire.endTransmission();

}*/

byte decToBcd(byte val){
// Convert normal decimal numbers to binary coded decimal
  return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val)  {
// Convert binary coded decimal to normal decimal numbers
  return ( (val/16*10) + (val%16) );
}

void printDate(){

  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.read());
  int minute = bcdToDec(Wire.read());
  int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
  int monthDay = bcdToDec(Wire.read());
  int month = bcdToDec(Wire.read());
  int year = bcdToDec(Wire.read());

  //print the date EG   3/1/11 23:59:59
  lcd.setCursor(0,1);
  lcd.print(month);
  lcd.print("/");
  lcd.print(monthDay);
  lcd.print("/");
  lcd.print(year);
  lcd.setCursor(0,2);
  lcd.print(" ");
  lcd.print(hour);
  lcd.print(":");
  lcd.print(minute);
  lcd.print(":");
  lcd.println(second);

}

Schaltplan :

DS1307 RTC an Arduino