Hallo zusammen,
ich habe für ein Projekt einen PCF8583 eingebunden. Ich habe
Schwierigkeiten mit der Definition der Register. Im Datenblatt steht das
auch nicht so genau. Ich benötige quasi eine Tabelle welches Bit,
welche Infos bereithält. Auf diese Sache mit den Einer- und Zehnerwerten
bin ich natürlich auch schon gekommen, aber momentan bekomme ich Minuten
größer 60...
Zum Dekodieren habe ich folgende Funktionen entwickelt, da muss irendwo
was nicht stimmen:
1 | char * I2CreadDateTime (void) {
|
2 | unsigned char i;
|
3 |
|
4 | I2CstartCondition();
|
5 | I2CsendByte (WRITE_PCF);
|
6 | I2CsendByte (0x02);
|
7 |
|
8 | I2CstartCondition();
|
9 | I2CsendByte(READ_PCF);
|
10 | for (i = 0; i < 5; i++)
|
11 | data[i] = I2CgetByte();
|
12 | I2CstopCondition();
|
13 | return &data;
|
14 | }
|
15 |
|
16 | void I2CwriteDateTime (char myData[]) {
|
17 | unsigned char i;
|
18 |
|
19 | I2CstartCondition();
|
20 | I2CsendByte (WRITE_PCF);
|
21 | I2CsendByte (0x02);
|
22 |
|
23 | for (i = 0; i < 5; i++)
|
24 | I2CsendByte (myData[i]);
|
25 | I2CstopCondition();
|
26 | }
|
27 |
|
28 | char * I2CgetDaTime() {
|
29 | char out[18];
|
30 | uint8_t year;
|
31 | uint8_t month;
|
32 | uint8_t day;
|
33 | uint8_t hour;
|
34 | uint8_t min;
|
35 | uint8_t sec;
|
36 |
|
37 | I2CreadDateTime();
|
38 | sec = (data[0] & 0x0f) + 10*((data[0] >> 4) & 0x07);
|
39 | min = (data[1] & 0x0f) + 10*((data[1] >> 4) & 0x07);
|
40 | hour = (data[2] & 0x0f) + 10*((data[2] >> 4) & 0x03);
|
41 | day = (data[3] & 0x0f) + 10*((data[3] >> 4) & 0x03);
|
42 | month = (data[4] & 0x0f) + 10*((data[4] >> 4) & 0x03);
|
43 | year = ((data[3] >> 6) & 0x03);
|
44 |
|
45 | sprintf(out,"%02d:%02d:%02d",hour,min,sec);
|
46 | return &out;
|
47 |
|
48 |
|
49 | }
|
50 |
|
51 | void I2CsetTime(uint8_t hour, uint8_t min, uint8_t sec) {
|
52 | data[0] = (sec % 10) | (((sec/10)*10)<<4);
|
53 | data[1] = (min % 10) | (((min/10)*10)<<4);
|
54 | data[2] = (hour % 10) | (((hour/10)*10)<<4);
|
55 |
|
56 | I2CwriteDateTime(&data);
|
57 |
|
58 | }
|
hab ich irgendwelche Bits verschoben?
Danke
Schorsch