Forum: Mikrocontroller und Digitale Elektronik PCF8583


von boris (Gast)


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

von boris (Gast)


Lesenswert?

Kann mir da jemand weiterhelfen?

MfG,
Boris

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.