Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

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
Ich nutze:
CC-Pro 128 Application Board, Pro-Bot128
> > 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)