I2C mit AVR-GCC :-(

Gast #74881
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren