Drugi dzień walki ... powoli mam dość.
w datasheecie od 24FC.. piszą, że STOP na i2c po zapisie "initiates the internal write cycle and during this time, the 24XX1025 will not generate Acknowledge signals". po to oczywiscie, zeby poczekac z zabawą aż pamięc zapisze to co ma. Fajnie. Jest więc taki kawałek kodu, zerżnięty z jakiejś noty aplikacyjnej:
[tu jest zapis do pamięci]TWCR = _BV(TWINT) | _BV(TWSTO) | _BV(TWEN); /* send stop condition */
// ACK poll ack_poll: TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN); /* send start condition */ while ((TWCR & _BV(TWINT)) == 0) ; /* wait for transmission */
/* send SLA+W */ TWDR = sla | TW_WRITE; TWCR = _BV(TWINT) | _BV(TWEN); /* start transmission */ while ((TWCR & _BV(TWINT)) == 0) ; /* wait for transmission */ switch ((twst = TW_STATUS)) { case TW_MT_SLA_ACK: break; case TW_MT_SLA_NACK: goto ack_poll; }
TWCR = _BV(TWINT) | _BV(TWSTO) | _BV(TWEN); /* send stop condition */
klopot w tym, ze 24FC... zawsze generuje ACK pomimo, ze zapis do pamieci sie jeszcze nie skonczyl - po jednym zapisie następują następne zapisy lub odczyty, oczywiście przerywajac proces zapisu, wiec wciaz mam stare zawartosci komórek.
Kod zapisu jest poprawny, bo jak dam pętelkę wstrzymującą program po zapisie na kilkaset ms, to wszystko sie ładnie zapisuje. nie moge niestety zastosowac takiwgo czegos, bo program często pisze do pamięci a takie wstrzymywanie niefajnie na niego wpłynie ...
aha, na i2c jest tylko 24FC1025 i 2xPCF8574
help pliiiz ... bo strzele sobie w oko z gumy od gaci ... :-|
@