Forum: Mikrocontroller und Digitale Elektronik I2C EEPROM sequentiell lesen/schreiben mit ATmega


von Claus (Gast)


Lesenswert?

Habe mal eine spezielle Frage zum schreiben und lesen eines I2C EEPROMs
(24C256) mit einem ATmega128.
Einzelne Bytes kann ich auf eine gezielte Adresse schreiben und auch
ein zeln wieder auslesen.
Laut Datenblatt des EEPROMs kann ich 64 Bytes in Folge senden und den
Speicher auch durchgehend auslesen. Doch nach jedem eingelesenen Byte
sendet mein µC immer ein NACK was bedeutet den Vorgang abzuschließen.
64 mal schreiben kann ich,doch wie kann ich meinem µC klar machen das
er durchgehend einlesen soll und kein NACK sondern ACK sendet?
Mal schauen

von crazy horse (Gast)


Lesenswert?

Hardware/Software-I2C? Sprache?
In C:

temp=i2c_read(ack bzw nack);

von Claus (Gast)


Lesenswert?

Ich schreibe i C und nutze die TWI Register im ATmega. INTs sind nicht
aktiviert.
~~~~~~~~~~~~~~~~~~~~~~
//EEPROM nochnals anspechen, jetzt LESEN-Modus

TWDR = EXT_EEPROM_ADR_READ;
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT)));
if((TWSR & 0xF8) != MR_SLA_ACK)
    error(ERR_NO_MR_SLA_ACK);

// Jetzt BYTE einlesen
TWCR = (1 << TWINT) | (1 << TWEN);
while(!(TWCR & (1<<TWINT)));
    readchar = TWDR;

if(((TWSR & 0xF8) != MR_DATA_ACK) && ((TWSR & 0xF8) != MR_DATA_NACK))
   error(ERR_NO_MR_SLA_ACK);
~~~~~~~~~~~~~~~~~
Daten werden immer brav eingelesen, aber immer ein NACK gesendet.

mal sehen

von crazy horse (Gast)


Lesenswert?

TWCR, bit6, TWEA.

von Claus (Gast)


Lesenswert?

Danke,
der Groschen ist gefallen
Gute Nacht

von Steffen Müller (Gast)


Lesenswert?

Hi,

bei mir ist leider kein Groschen gefallen. Ich bin I2C-Anfänger und
will auch einen 24C256 verwenden. Aber ich habe keine Ahnung, wo ich
anfangen soll und vor allen Dingen wie. Es wäre toll, wenn du mir
helfen könntest.

Steffen

von Robert Meisenbacher (Gast)


Lesenswert?

Hallo,

im TWI-Demo des AVR-LibC Manuals ist die I2C-Ansteuerung eines EEPROMs
sehr detailliert beschrieben.
Ich konnte als C-Anfänger den Code leicht auf 256kBit-EEPROMs
erweitern.(zusätzliche 8-Adressbits für EEPROM übertragen)

Robert

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.