Gast
#222687
Hi ich möchte einen AT24FC256 mit einem ATMEGA8535 ansteuern. Ich habe in anderen Beiträgen hier mitbekommen, dass wenn man einen größeren AT24FC... verwendet das, das Adressbyte um eins erhöht werden muss. Was bedeutet die für diese beiden Funktionen? Kann ich dann aus dem unsigned char bausteinadresse ein unsigned int bausteinadresse machen? Wie lautet für den AT24FC256 die Bausteinadresse? void ee24c02_write (unsigned char bausteinadresse,speicherplatz,wert) { unsigned char header; i2c_bus_start(); header=(bausteinadresse<<1); header=(header&0x0E); //0000$111$0b header=(header|0xA0); //1010$000$0B //Bausteincode nach I2C für EEPROM (1010) //Adresse von 24C02 auf bausteinadresse eingestellt und //24C02 zum schreiben (0) auffordern i2c_byte_write(header); i2c_ack_slave(); //Baustein(SLAVE) muss im ACK-Slot die //SDA-Leitung herunterziehen //jetzt wird der Wert für den Speicherplatz für das nachfolgende Datenbyte gesendet i2c_byte_write(speicherplatz); i2c_ack_slave(); //Baustein(SLAVE) muss im ACK-Slot die //SDA-Leitung herunterziehen //jetzt wird das Datenbyte geschrieben i2c_byte_write(wert); i2c_ack_slave(); //Baustein(SLAVE) muss im ACK-Slot die //SDA-Leitung herunterziehen i2c_bus_stop(); } //---------------------------------------------------------------------- ----------- unsigned char ee24c02_read(unsigned char bausteinadresse,speicherplatz) { unsigned char header,wert; i2c_bus_start(); header=(bausteinadresse<<1); header=(header&0x0E); //0000$111$0b header=(header|0xA0); //1010$000$0B //Bausteincode nach I2C für EEPROM (1010) //Adresse von 24C02 auf bausteinadresse eingestellt und //24C02 zum schreiben (0) auffordern i2c_byte_write(header); i2c_ack_slave(); //Baustein(SLAVE) muss im ACK-Slot die //SDA-Leitung herunterziehen //jetzt wird die Speicher-Adresse geschrieben aus der dann gelesen wird i2c_byte_write(speicherplatz); i2c_ack_slave(); //Baustein (SLAVE) muss im ACK-Slot die //SDA-Leitung herunterziehen i2c_bus_start(); //nach dem Protokoll für Random Adress Read //zuerst wird wieder der Bausteincode,Adresse und R/W geschrieben i2c_bus_start(); header=(bausteinadresse<<1); header=(header&0x0E); //0000$111$0b header=(header|0xA1); //1010$000$1B //Bausteincode nach I2C für EEPROM (1010) //Adresse von 24C02 auf bausteinadresse eingestellt und //24C02 zum lesen (1) auffordern i2c_byte_write(header); i2c_ack_slave(); //Baustein (SLAVE) muss im ACK-Slot die //SDA-Leitung herunterziehen wert=i2c_byte_read(); //jetzt wird der Speicherwert gelesen i2c_nack_master(); //Baustein muss im ACK-Slot die //SDA-Leitung hochhalten i2c_bus_stop(); return(wert); }