Für diejenigen, die wie ich Probleme mit dem Umgang mit I2C EEPROM haben hab ich mal mein Ergebniss hier rein gestellt, auf dass es anderen helfen möge.
Bausteine: 24c128 , 24c256
Code:Declare Sub Write_eeprom(byval Adresh As Byte , Byval Adresl As Byte , Byval Value As Byte) Declare Sub Read_eeprom(byval Adresh As Byte , Byval Adresl As Byte , Value As Byte) ' Adresse erzeugen: ' Pin A0 und A1 sind intern mit Pulldowns versehen, sind also ' wenn extern nicht beschaltet 0 ' Die Der Baustein halt serienmäßig die Adresse Binär: ' 1 0 1 0 0 A1 A0 R/W ' also, angenommen man möcht bei A0 = 0 und A1=0 schreiben: ' Adresse: 10100000 = 160 ' Lesen Adresse: 10100001 = 161 ' ' der 24c128 und 24c256 brauchen für die Adressierung 2 Byte ' Den High-Byte der Adresse und den Lowbyte der Adresse. ' Einfach, da die soviel Speicher habn :o) Const Addressw = 160 'slave write address Const Addressr = 161 'slave read address Dim B1 As Byte Dim Value As Byte 'dim byte dim Adresse as word at &HA0 ' Der Speicherbereich ist dem jeweiligen Baustein anzupassen, muß aber den overlayvariablen gleich sein Dim Adresh As Byte at &HA1 overlay 'Highbyte der Adresse Dim Adresl As Byte at &HA0 overlay 'Lowbyte der Adresse Dim A As Byte 'allgemeine Variable für Berechnungen For Adresse = 1 To 5 ' die ersten 5 Byte schreiben Value = Adresse + 100 'Beginnend mit Zahlenwert 105 um Verwechslungen zu vermeiden Call Write_eeprom(1 , Adresse , Value) 'Daten schreiben Next Adresse For Adresse = 1 To 5 'die geschriebenen 5 Byte auslesen Call Read_eeprom(1 , Adresse , Value) 'auslesen Print Value 'Ausgabe an UART Next Adresse Sub Write_eeprom(byval Adresh As Byte , Adresl As Byte , Value As Byte) I2cstart 'start condition I2cwbyte Addressw 'slave address I2cwbyte Adresh 'asdress H of EEPROM I2cwbyte Adresl 'asdress L of EEPROM I2cwbyte Value 'value to write I2cstop 'stop condition Waitms 10 'wait for 10 milliseconds End Sub Sub Read_eeprom(byval Adresh As Byte , Adresl As Byte , Value As Byte) I2cstart 'generate start I2cwbyte Addressw 'slave adsress I2cwbyte Adresh 'asdress H of EEPROM I2cwbyte Adresl 'asdress L of EEPROM I2cstart 'repeated start I2cwbyte Addressr 'slave address (read) I2crbyte Value , Nack 'read byte I2cstop 'generate stop End Sub ' Wires from the I2C address that are not connected will default to 0 in most cases! ' I2cstart 'start condition ' I2cwbyte &B1010_0000 'slave address ' I2cwbyte H 'high address ' I2cwbyte L 'low address ' I2cwbyte Value 'value to write ' I2cstop 'stop condition ' Waitms 10







Zitieren

Lesezeichen