doch, das geht.
0b1010 //highteil der Devivceadresse
xxx //lowteil der deviceadresse, hat verschiedene Funktionen.
Teilweise abhängig von der Hardwareverschaltung des Chips
(Adresseingänge), teilweise als weiteres Adressbit(s) genutzt
x schreib/lese bit.
Und wenn nun beim 24C02 A0,A1 und A2 auf Masse liegen, brauchst du als
Device-Adresse 0xA0 bzw 0xA1
Das Problem bei dir: du sendest device-Adresse, high-Adresse,
low-Adresse.
Der 2402 bekommt aber nur ein Byte Adresse - mehr braucht man ja für 256
Byte auch nicht.
Du musst also das Programm entsprechend ändern, dass nur ein Byte
Adresse gesendet wird.
//Random Byte Write
uint8_t AT24WriteByte(uint16_t dataaddress, uint8_t data)
{
uint8_t deviceaddress = AT24Addr;
uint8_t SLA_W = deviceaddress + AT24Command;
AT24Poll(0);
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while ((TWCR & 0x80)!= 0x80);
TWDR = SLA_W;
TWCR = (1<<TWINT) | (1<<TWEN);
while ((TWCR & 0x80)!= 0x80);
if (TWSR != 0x18){
return 1;
//Keine Antwort vom EEPROM
}
TWDR = ((dataaddress>>8)&0xFF);
//hier nur den lowteil senden
//was soll eigentlich &0xFF?? Bringt gar nichts
//das zweite Adressbyte muss entfallen
//beim Lesen analog verfahren