Hallo
Anscheinend hast du meinen rat doch nicht befolgt.ich brauche die adresse nicht aufteilen. wenn ich "i2cwbyte wordadresse" eingebe, funktioniert es.
I2cwbyte Ee_adresse 'write low adressCode:'Einstellen des I"C Buses +++++++++++++++++++++++++++++++++++++++++++++++++++++ Config Scl = Portd.6 'PIN für I2C Bus Config Sda = Portd.7 'Definition der Funktionen ++++++++++++++++++++++++++++++++++++++++++++++++++++ Declare Sub Read_byte(byval Ee_adresse As Byte) Declare Sub Write_byte(byval Ee_adresse As Word , Byval Ee_daten As Byte) Declare Sub Erase_eeprom(byval Ee_adresse As Word ) 'Routine zum schreiben von Daten in das EEPROM ++++++++++++++++++++++++++++++++ Sub Write_byte(byval Ee_adresse As Word , Byval Ee_daten As Byte) Disable Interrupts Print Ee_adresse Temp = High(ee_adresse) 'MSB von ee_adresse speichern I2cstart 'generate start I2cwbyte &B10100000 'write addres of24C65 I2cwbyte Temp 'write high adress I2cwbyte Ee_adresse 'write low adress I2cwbyte Ee_daten 'write daten I2cstop 'Stop senden zum schreiben Enable Interrupts End Sub 'Routine zum lesen von Daten aus dem EEPROM ++++++++++++++++++++++++++++++++++++ Function Read_byte(byval Ee_adresse As Byte) Disable Interrupts Temp = High(ee_adresse) 'MSB von ee_adresse speichern I2cstart 'generate start I2cwbyte &B10100000 'write addres of 24C65 I2cwbyte Temp 'write high adress I2cwbyte Ee_adresse 'write low adress I2cstart 'generate repeated start I2cwbyte &B10100001 'write read commando For C = 0 To 1000 I2crbyte Daten , Ack 'LSB von Spannung einlesen I2crbyte Temp , Ack 'MSB von Spannung einlesen Spannung = Temp * 256 'MSB an die richtige Stelle von Spannung setzen Spannung = Spannung + Daten 'LSB von Spannung dazu und fertig Print C ; "," ; Spannung 'Ausgeben Speicherstelle, Spannung Next C I2cstop Enable Interrupts End Function 'Routine zum löschen von Daten in dem EEPROM Dauer ca 5,5 Sek ++++++++++++++++++ Sub Erase_eeprom(byval Ee_adresse As Word ) Disable Interrupts For B = 0 To 8192 Step 64 '128 Page a 64 Byte löschen Temp = High(b) 'MSB von B speichern I2cstart 'generate start I2cwbyte &B10100000 'write addres of24C65 I2cwbyte Temp 'write high adress I2cwbyte B 'write low adress For C = 1 To 64 'Page weise beschreiben mit 255 I2cwbyte 255 Next C I2cstop 'Stop senden zum schreiben Waitms 40 '8 * 5 ms warten zum schreiben der Pages Next B Enable Interrupts End Sub
EE-adresse ist zwar als WORD definiert, beim schreiben werden aber nur die unteren 8 Bits gesendet, da der Befehl I2Cwbyte heißt. Daher der Umweg mit Temp = High(ee_adresse) .
In der Funktion Read_byte werden jetzt 1000 * 2 bytes ausgelsen, zusammen gesetzt in eine Word Variable und dann ausgegeben.
Erase_eeprom schreibt das ganze EEPROM mit 255 voll und zwar wird immer erst eine ganze Page geschrieben. Das geht dann schneller.
Hoffe der Code hilt dir etwas.
MFG
Dieter







Zitieren
Lesezeichen