Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > > 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 > > } > > > > Hallo Kai, > vielen Dank für das Beispiel > > Info für alle die es benutzen wollen > Bitte die Definition auf char zeile1[9], zeile2[9]; ändern > > Gruß Thomas