Nun habe ich heute mal alle Kabel getauscht, und das Breadboard entfernt, um auch diese Fehlerquellen ausschließen zu können.
Dann habe mal den Scanner ausprobiert, und der zeigt mir auch 2 Devices an..
0x68 für die RTC
0x50 ... Ich glaube das ist der Speicher auf der RTC. Irgendwas hatte ich mal gelesen das man da ein paar Bytes Speichern kann?
Leider zeigt die Uhr Nicht wirklich was an. Die 165/165/165 45:165:165 bekomme ich auch wenn die RTC gar nicht am Board dran hängt.
Ich würde also meinen das die gar nicht gefunden wird.
Da ich im Fritzing das LCD mit dem SPI Anschluss sowie die RTC irgendwie nicht gefunden habe habe ich mal ein paar Bilder gemacht.
www.corsmeyer.de/user/arduino/RTCProblem.jpg
Brauche ich vielleicht 4,7K Pullups? Ich dachte die bräuchte man nur beim 1-Wire?
// LCD
#include "U8glib.h"
U8GLIB_ST7920_128X64 u8g(52, 51, 53, U8G_PIN_NONE );// SPI Com: SCK = en = 30, MOSI = rw = 32, CS = di = 31
int count = 0;
//RTCModule
#include "Wire.h"
#define DS1307_ADDRESS 0x68
byte zero = 0x00; //workaround for issue #527
void setup(void) {
Serial.begin(9600);
// ******* Hatte ich Vergessen!
Wire.begin();
}
void loop(void) {
u8g.firstPage();
do {
draw();
Serial.println(printDate());
} while( u8g.nextPage() );
delay(5);
}
void draw(void) {
u8g.setFont(u8g_font_4x6);
u8g.setPrintPos(0, 6);
int LineNumber = 0;
LineNumber++;u8g.setPrintPos(0, 6*LineNumber); u8g.print("Temperatur View ");
LineNumber++;
LineNumber++;u8g.setPrintPos(0, 6*LineNumber); u8g.print("Vorlauf =+32 C |");
LineNumber++;u8g.setPrintPos(0, 6*LineNumber); u8g.print("Ruecklauf =+27 C |");
LineNumber++;u8g.setPrintPos(0, 6*LineNumber); u8g.print("Aussen =- 3 C |");
LineNumber++;u8g.setPrintPos(0, 6*LineNumber); u8g.print("Solar =+14 C |");
LineNumber++;u8g.setPrintPos(0, 6*LineNumber); u8g.print("W.Wasser =+40 C |");
LineNumber++;u8g.setPrintPos(0, 6*LineNumber); u8g.print("Licht =" + (String)analogRead(7));
LineNumber++;u8g.setPrintPos(0, 6*LineNumber); u8g.print(printDate());
LineNumber++;u8g.setPrintPos(0, 6*LineNumber); u8g.print(count);
count++;
}
String 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());
String DTString =(String)LeadZero(monthDay) + "/" +
(String)LeadZero(month) + "/" +
(String)LeadZero(year) + " " +
(String)LeadZero(hour) + ":" +
(String)LeadZero(minute) + ":" +
(String)LeadZero(second);
return DTString;
}
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 setDateTime( byte monthDay,byte month,byte year , byte hour,byte minute, byte second, byte weekDay){
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();
}
void setDateTime(){
byte second = 00; //0-59
byte minute = 17; //0-59
byte hour = 23; //0-23
byte weekDay = 2; //1-7
byte monthDay = 01; //1-31
byte month = 01; //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();
}
String LeadZero(int Number){
String ReturnNumber = (String)Number;
if (Number <= 9){
ReturnNumber = "0" + (String)Number;
}
//Serial.println(ReturnNumber);
return ReturnNumber;
}
... so an dieser Stelle brech ich mal ab...
Ich Dummdussel habe das Wire.begin() im Setup vergessen. (Ich schweige und versinke im Boden..)
Ich poste das Bild und den Code trotzdem, vielleicht Interessierts ja noch andere.
Vielen, vielen Dank für den Beistand, und gelernt habe ich trotzdem viel dabei..
Grüsse,
Gerrit