- posted
17 years ago
Atmega128 i zegar M41T00 - problem
- Vote on answer
- posted
17 years ago
Odpowiem sobie sam, bo znalazlem rozwiazanie. Atmaga musi wyslac sygnal ACK po odebraniu kazdego bajtu, czyli trzeba ustawic bit TWEA w TWCR. Inaczej RTC mysli, ze nie chcemy od niego kolejnych bajtow danych i konczy transmisje. Poprawiona procka jest ponizej. Pozdrawiam /PM PS: moze komus sie to przyda ;)
I2C_Read_Word:
push tmp
START
WAIT
ldi tmp,(ADDRRTC|SDA_W) ;send RTC Address STS TWDR,tmp ldi tmp,(1<<TWINT)|(1<<TWEN) STS TWCR,tmp
WAIT
pop tmp STS TWDR,tmp ;send Word Address ldi tmp,(1<<TWINT)|(1<<TWEN) STS TWCR,tmp
WAIT
START
WAIT
ldi tmp,(ADDRRTC|SDA_R) ;send RTC Address STS TWDR,tmp ldi tmp,(1<<TWINT)|(1<<TWEN) STS TWCR,tmp
WAIT
ldi tmp,(1<<TWINT)|(1<<TWEN|1<<TWEA) ;<to wlasnie ta linijka zostala poprawiona STS TWCR,tmp
WAIT
LDS tmp,TWDR ;bajt odczytany push tmp ldi tmp,(1<<TWINT)|(1<<TWEN) STS TWCR,tmp
WAIT
STOP
LDS tmp2,TWDR ;bajt odczytany pop tmp
ret