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
Hardware/Software-I2C? Sprache? In C: temp=i2c_read(ack bzw nack);
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.