I've now got the DS1307 going, showing time on the LCD and the monitor. There is clearly nothing fundamentally wrong, the monitor is fine, but there is a spurious barred character at the end oif the lower line of the LCD. There are two of them if the seconds are 0-9.
Here is the code
#include <LiquidCrystal.h>
#include "Wire.h"
#define DS1307_ADDRESS 0x68
LiquidCrystal lcd(8,9,16,5,6,7);
void setup(){
Wire.begin();
Serial.begin(9600);
lcd.begin(16, 2);
lcd.clear();
// Print a message to the LCD.
lcd.print("Today it is");
}
void loop(){
printDate();
delay(1000);
}
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);
byte zero = 0x00;
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());
lcd.setCursor(12, 0);
switch (weekDay) // Friendly printout the weekday
{
case 1:
lcd.print("MON ");
Serial.print("MON ");
break;
case 2:
lcd.print("TUE ");
Serial.print("TUE ");
break;
case 3:
lcd.print("WED ");
Serial.print("WED ");
break;
case 4:
lcd.print("THU ");
Serial.print("THU ");
break;
case 5:
lcd.print("FRI ");
Serial.print("FRI ");
break;
case 6:
lcd.print("SAT ");
Serial.print("SAT ");
break;
case 7:
lcd.print("SUN ");
Serial.print("SUN ");
break;
}
Serial.print(monthDay);
Serial.print("/");
Serial.print(month);
Serial.print("/");
Serial.print(year);
Serial.print(" ");
Serial.print(hour);
Serial.print(":");
Serial.print(minute);
Serial.print(":");
Serial.println(second);
lcd.setCursor(0,1);
lcd.print(monthDay);
lcd.print("/");
lcd.print(month);
lcd.print("/");
lcd.print(year);
lcd.print(" ");
lcd.print(hour);
lcd.print(":");
lcd.print(minute);
lcd.print(":");
lcd.println(second);
}
and here is a pic
I guess it fixes itself when when there are double digits all through, but I would like to know what is going on.....