Hallo
ich brauche die adresse nicht aufteilen. wenn ich "i2cwbyte wordadresse" eingebe, funktioniert es.
Anscheinend hast du meinen rat doch nicht befolgt.
Code:
'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
I2cwbyte Ee_adresse 'write low adress
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
Lesezeichen