Gast
#74881
Hallo, ich benutze die I2C Routinen von http://www.mysunrise.ch/users/pfleury/avr-software.html. Klappt auch teilweise, aber... Jeder 2. Leseversuch geht in die hose! Da kommt nur FF raus! ---------------------- S C H N I P P ----------------- int main(void) { outp(0xFF, DDRB); outp(0xFF, DDRD); i2c_init(); outp(0x00,TCNT0); /* start value */ outp(0x03,TCCR0); sbi(TIMSK,TOIE0); sei(); while(1) { if (!read_ok) { i2c_start_wait(I2CADR + I2C_WRITE); i2c_write(0x00); i2c_rep_start(I2CADR + I2C_READ); // nun die nicht benutzten Adressen durchzählen for (unsigned int i=0; i < eeprom_cnt; i++) i2c_readAck(); // 5 Bytes einlesen for (unsigned int i=0; i < 5; i++) nextbytes[i] = i2c_readAck(); i2c_stop(); // eeprom zähler um 5 erhöhen eeprom_cnt = eeprom_cnt + 5; // flag auf "gelesen" setzen. read_ok = 1; } } } Das read_ok wird von einer Interrupt routine wieder auf 0 gesetzt und dann werden die weiteren 5 bytes eingelesen. Wie Gesagt, bytes 0-4 klappen einwandfrei, 5 - 9 ist ff und dass klappen die nächsten 5 wieder ?!??! Ich steh vor einem Rätsel! Das EEPROM ist ein 24C16. Gibt es noch eine Methode, das EEPROM direkt zu adressieren, das durchzählen ist mir etwas zeitaufwendig. Danke... Andreas