Re: Uhrenbaustein PCF8583 Kategorie: I²C-Bus (von Kai - 26.01.2009 20:57) | ||
Als Antwort auf Re: Uhrenbaustein PCF8583 von Kai - 22.01.2009 17:22 | ||
| ||
> > Hallo > > > > ich habe so meien Schwierigkeitenn mit dem Uhrenbaustein PCF8583 mit dem ich eine Wochenzeitschaltuhr > > realisieren mu�. > > Leider finde ich kein Beispei im Netz. > > > > Hat vieleicht jemand ein Beispiel für das Programieren des Bausteinstein wie das Einstellen derr aktuellen Zeit > > sowie für das Auslesen der aktuellen Tageszeit... > > > > > > Hallo Thomas, > > leider kann ich dir auch nicht weiterhelfen, da ich ebenfalls Probleme mit dem PCF8583 habe. Mir fehlt noch > das Verständnis für die Kommunikation, daher antwortet mir die UHr nur Unsinn. Ich benutze den Baustein > seit 2 Jahren problemlos mit einer C2, aber da isteine gute Library vorhanden. Heute fand ich einen Beitrag > hier im Forum wo ein ToKu schrieb er habe eine Library dafür geschrieben, vieleicht hilft er uns. > Ich werde ihm mal eine e-mail schicken. > > Gru� Kai Schau Dir mal das hier an, zum Auslesen funktioniert das bei mir. Gesetzt habe ich den Baustein aber noch mit der C2. Das Jahr übrigens wurde dort in den Ram geschrieben (0x10). da es nicht im PCF steht. Du kannst jedoch von Adresse (0x05) das Schaltjahr und die folgenden lesen (vergleiche Datenblatt) und nach einer �nderung im Register das Jahr neu berechnen und neu schreiben, wenn das dann klappt. char zeile1[8], zeile2[8]; byte minute, stunde, sekunde; byte tag, monat, jahr; //--------------------------------------------------------------------------------- void main (void) { LCD_Init(); LCD_ClearLCD(); I2C_Init(I2C_100kHz); AbsDelay(100); do { sekunde=Read_PCF(0x02) ; // Sekunden minute=Read_PCF(0x03); // Minuten stunde=Read_PCF(0x04); stunde= stunde & 0x3F; // Stunden mit Bitmaske tag=Read_PCF(0x05); tag= tag & 0x3F; // Tag mit Bitmaske monat=Read_PCF(0x06); monat=monat & 0x1F; // Monat mit Bitmaske jahr=Read_PCF(0x10); // Jahr im RAM gespeichert Msg_WriteHex(sekunde); Msg_WriteChar(9); // Kontrollausgabe am PC Msg_WriteHex(minute); Msg_WriteChar(9); // mit Tab Msg_WriteHex(stunde); Msg_WriteChar(9); Msg_WriteHex(tag); Msg_WriteChar(9); Msg_WriteHex(monat); Msg_WriteChar(9); Msg_WriteHex(jahr); Msg_WriteChar(13); // neue Zeile sekunde=((sekunde>>4)*10)+ (sekunde &0x0F); // Hex in Dezimal minute=((minute>>4)*10)+ (minute &0x0F); stunde=((stunde>>4)*10)+ (stunde &0x0F); tag=((tag>>4)*10)+ (tag &0x0F); monat=((monat>>4)*10)+ (monat &0x0F); jahr=((jahr>>4)*10)+(jahr & 0x0F); Display_Buffer_Set(); LCD_CursorOff(); LCD_CursorPos(0x00+4); LCD_WriteText(zeile1); LCD_CursorPos(0x40+4); LCD_WriteText(zeile2); AbsDelay(1000); } while(1); } void Display_Buffer_Set(void) { char sep[2]; sep=":"; Str_WriteWord(stunde,10,zeile1,0,2); // LCD erste Zeile xx:xx:xx Str_Copy(zeile1,sep,STR_APPEND); Str_WriteWord(minute,10,zeile1,STR_APPEND,2); Str_Copy(zeile1,sep,STR_APPEND); Str_WriteWord(sekunde,10,zeile1,STR_APPEND,2); sep="."; Str_WriteWord(tag,10,zeile2,0,2); // LCD zweite Zeile xx.xx.xx Str_Copy(zeile2,sep,STR_APPEND); Str_WriteWord(monat,10,zeile2,STR_APPEND,2); Str_Copy(zeile2,sep,STR_APPEND); Str_WriteWord(jahr,10,zeile2,STR_APPEND,2); } byte Read_PCF(byte adr) { byte PCF_DATA; I2C_Start(); I2C_Write(0xA2); //Adresse des PCF 8583 (Pin A0 =1/ ist Pin A1=0 dann 0xA0*) I2C_Write(adr); //Adresse des zu lesenden Byte I2C_Stop(); I2C_Start(); I2C_Write(0xA3); //Adresse des PCF mit Lesebit gesezt (* 0xA1) PCF_DATA=(I2C_Read_NACK()); //lesen des Bytes Adresse adr I2C_Stop(); return PCF_DATA; // return I2C Data Register } | ||
Antwort schreiben Antworten: Re: Uhrenbaustein PCF8583 (von ThomasJ - 12.02.2009 12:17) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum