Teil 3/3
Die RTC befehle (wobei die hälfte nicht benutzt aus meinem andern Projekt)
/*
RTC Funktionen zur Steuerung der RTC DS1308
*/
void TimeRead(){
Wire.beginTransmission(RTC_ADDRESS);
Wire.send(0x00); // Pointer auf Sekunden
Wire.endTransmission();
Wire.requestFrom(RTC_ADDRESS, 3);
ss= bcdToDec(Wire.receive() & 0x7f);
mm= bcdToDec(Wire.receive());
hh= bcdToDec(Wire.receive());
}
void HourRead(){
Wire.beginTransmission(RTC_ADDRESS);
Wire.send(0x02); // Pointer auf Sekunden
Wire.endTransmission();
Wire.requestFrom(RTC_ADDRESS, 1);
hh= bcdToDec(Wire.receive());
//Serial.println("Stundenlesen");
}
void MinuteRead(){
Wire.beginTransmission(RTC_ADDRESS);
Wire.send(0x01); // Pointer auf Sekunden
Wire.endTransmission();
Wire.requestFrom(RTC_ADDRESS, 1);
mm= bcdToDec(Wire.receive());
//Serial.println("Minutenlesen");
}
void SecondRead(){
Wire.beginTransmission(RTC_ADDRESS);
Wire.send(0x00); // Pointer auf Sekunden
Wire.endTransmission();
Wire.requestFrom(RTC_ADDRESS, 1);
ss=bcdToDec(Wire.receive() & 0x7f);
//Serial.println("Sekundenlesen");
}
void RTC_Set(){
Wire.beginTransmission(RTC_ADDRESS);
Wire.send(0x00);
Wire.send(decToBcd(ss)); // 0 to bit 7 starts the clock
Wire.send(decToBcd(mm));
Wire.send(decToBcd(hh)); // If you want 12 hour am/pm you need to set
Wire.endTransmission();
}
byte decToBcd(byte val)
{
return ((val/10)<<4)+(val%10);
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return ((val>>4)*10)+val%16;
}
void SaveByte(byte x,byte y){ // Funktion SaveByte("Position","Daten") Daten in Byte Format
Wire.begin(); // Start I2C Kommunikation
Wire.beginTransmission(RTC_ADDRESS); // Beginn Kommunikation auf Adresse 0x68
Wire.send(x+7); // Speicher Register Adresse+0x07
Wire.send(y); // zu Speicherndes Byte
Wire.endTransmission();
}
byte ReadByte(byte x){ // Funktion ReadByte ("Position") Daten in Byte Format
byte z;
Wire.beginTransmission(RTC_ADDRESS);
Wire.send(x+7);
Wire.endTransmission();
Wire.requestFrom(RTC_ADDRESS, 1);
z=Wire.receive();
return z;
}
Ich nutze die 0023 IDE weil mich die änderungen der 1.0 bzüglich I2C ankotzen. Ich kann nicht einefach 0x00 als Adresse angeben man muss das bei der 1.0 über ein zusätzliche Variable machen.
Ich habe sämtliche andeungen gemach und den Code soweit zusammenestrichen das ich von 10800bytes auf 9384bytes