Forum: Compiler & IDEs I2C mit AVR-GCC :-(


von Andreas Böhme (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.