PCF8583

Gast #170615
Lesenswert?

Hi,

habe einen Philips PCF8583 Echtzeituhrbaustein. Die Zeit ist
mittlerweile funktionsfähig, allerdings habe ich Probleme mit dem
Datum. Mein Compiler (Keil µVision) kann damit nichts wirklich
anfangen. Kann mir jemand weiterhelfen:

struct date        // Struct für das Datum
  {
  uchar tag;
  uchar monat;
  int jahr;
  };

uchar DectoHex(uchar value);
uchar HextoDec(uchar value);
void get_datum(struct date *t);
void set_datum(struct date *t);


void get_datum(struct date *t)
  {
  volatile uchar temp;
  volatile uchar temp1;
  volatile uchar temp2;
  volatile uchar temp3;
  volatile uchar jahrtemp;
  volatile int t_jahr;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x05);
  i2c_start();
  i2c_schreiben(0xa1);
  temp=i2c_lesen(1);
  i2c_stop();
  temp1=temp&0x0f;
  temp2=temp&0x30;
  temp3=temp&0xc0;
  temp3=temp3>>6;
  temp2=temp2>>4;
  temp=temp1 + ( 10*temp2);
  t->tag=temp;
  jahrtemp=temp3;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x06);
  i2c_start();
  i2c_schreiben(0xa1);
  temp=i2c_lesen(1);
  i2c_stop();
  temp1=temp&0x0f;
  temp2=temp&0x10;
  temp2=temp2>>4;
  temp=temp1 + ( 10*temp2);
  t->monat=temp;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x2f);
  i2c_start();
  i2c_schreiben(0xa1);
  temp=i2c_lesen(1);
  i2c_stop();
  temp1=temp;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x3f);
  i2c_start();
  i2c_schreiben(0xa1);
  temp=i2c_lesen(1);
  i2c_stop();
  temp2=temp;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x4f);
  i2c_start();
  i2c_schreiben(0xa1);
  temp=i2c_lesen(1);
  i2c_stop();
  temp3=temp;
  t_jahr=(temp1*100)+temp2;
  if (temp3==jahrtemp) t->jahr=t_jahr;
    else
      {
      t_jahr++;
      t->jahr=t_jahr;
      temp2=t_jahr%100;
      temp1=t_jahr/100;
      i2c_start();
      i2c_schreiben(0xa0);
      i2c_schreiben(0x2f);
      i2c_schreiben(temp1);
      i2c_schreiben(temp2);
      i2c_schreiben(jahrtemp);
      i2c_stop();
      };
  }

void set_datum(struct date *t)
  {
  volatile uchar temp;
  volatile uchar temp1;
  volatile uchar temp2;
  volatile uchar temp3;
  volatile uchar speicher1;
  volatile uchar speicher2;
  volatile uchar jahrt;
  temp=t->tag;
  temp1=temp/10;
  temp2=temp%10;
  temp3=(temp1<<4)|temp2;
  temp=t->jahr;
  temp2=temp%4;
  jahrt=temp2;
  temp2=<6;
  speicher1=temp2|temp3;
  temp3=get_wochentag();
  temp3=<5;
  temp=t->monat;
  temp1=temp/10;
  temp2=temp%10;
  temp1=<4;
  speicher2=temp1|temp2|temp3;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x05);
  i2c_schreiben(speicher1);
  i2c_schreiben(speicher2);
  i2c_stop();
  temp=t->jahr;
  temp1=temp/100;
  temp2=jahr%100;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x2f);
  i2c_schreiben(temp1);
  i2c_schreiben(temp2);
  i2c_schreiben(jahrt);
  i2c_stop();
  }

Weitere Informationen finden sich unter
http://www.semiconductors.philips.com/pip/PCF8583.html

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren