Mhhhh hab das jetzt so erweitert:
void gettime(void)
{
uint8_t a;
i2c_start_wait(0xA0);
i2c_write(0);
i2c_write(0x40);
i2c_stop();
i2c_start_wait(0xA0);
i2c_write(2);
i2c_rep_start(0xA1);
for (a=0;a<3;a++){
i2ctime[a] = i2c_readAck();
}
i2c_stop();
i2c_start_wait(0xA0);
i2c_write(0);
i2c_write(0);
i2c_stop();
}
es besteht aber leider immer noch das Problem:
Beim ersten auslesen ist die Uhrzeit (Stunden) z.B.
0 (richtig)
beim 2.Mal
45
dann wieder
0
und dann wieder
45
(könnte auch 145 sein hab da ich meine Urzeit auf 2 Stellen begrenze
damit ich ggf ne 0 ranhängen kann)
Kann das villeicht an dem Timing von der i2c Library liegen die hab ich
durch ein "paar" nops provesorisch an meinen 16Mhz Quarz angepasst:
;***********************************************************************
**
; delay half period
; For I2C in normal mode (100kHz), use T/2 > 5us
; For I2C in fast mode (400kHz), use T/2 > 1.3us
;***********************************************************************
**
.stabs "",100,0,0,i2c_delay_T2
.stabs "i2cmaster.S",100,0,0,i2c_delay_T2
.func i2c_delay_T2 ; delay 5.0 microsec with 4 Mhz crystal
i2c_delay_T2: ; 4 cycles
rjmp 1f ; 2 "
1: rjmp 2f ; 2 "
2: rjmp 3f ; 2 "
3: rjmp 4f ; 2 "
4: rjmp 5f ; 2 "
5: rjmp 6f ; 2 "
6: nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
nop ; 1 "
ret ; 3 "
.endfunc ; total 80 cyles = 5.0 microsec with 16 Mhz crystal * 4 =
80
Es gibt doch bestimmt noch andere i2c Routinen von einem anderen
programmierer oder?