zu erst ein schönes Weihnachtsfest euch allen!
Ich habe folgendes Problem:
nach langem suchen habe ich einen Code gefunden (unten) mit dem ich mein eeprom beschreiben und auch wieder auslesen kann.
Mir ist nur noch schleierhaft, wie ich die Speicherzellen/Speicherbereiche, also in hex, für jedes Byte der 64kbit ermitteln kann.
Und was sagt Ihr zu dem Code, gibt es eine bessere Methode, um über I2C auf ein eeprom zu zugreifen?
=>code bitte<= 
Code:
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600
$hwstack = 228
$swstack = 228
$framesize = 128
$lib "i2c_twi.lbx"
Config Twi = 400000 ' Init TWBR und TWSR
' TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart !
TWCR = &B00000100 ' nur TWEN setzen
'----------------- LCD Display an Port c =>Conector SV9-------------------------------------------------------------------------------------------------
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7 ' Pinbelegung "LCD-Port)"
' SV8 6 5 4 3 7 8 ' Pinbelegung SV9 Board
'------------------ DS1820 on pinA 0 (pull up)--------------------------------------------------------------------------------------------------------------------------------------
'
'--------- Eeprom Anschlüße ------
Config Sda = Portc.1 'SDA und SCL definieren
Config Scl = Portc.0
Const E_ctlw = &HA0
Const E_ctlr = &HA1
Dim E_ah As Byte
Dim E_al As Byte
Dim E_addr As Word
Dim E_dat As Byte
Dim Dat As Byte
Declare Sub E_write(byval E_addr As Word , Dat As Byte)
Declare Sub E_read(byval E_addr As Word , E_dat As Byte)
Declare Sub 24lc256_test
call 24lc256_test
end
' Routine to test the 24LC256
'
Sub 24lc256_test
'Test read and writes
Print "Testing I2C Eeprom"
Dat = 10
For E_addr = &H1000 To &H1010
Call E_write(e_addr , Dat)
Call E_read(e_addr , E_dat)
Print E_dat ; " ";
Incr Dat
Incr Dat
Incr Dat ' +1 +1 +1
Next E_addr
Print
Print "Here a counter should appear from 0, 3, 6, 9, 12, 15, 18,21, 24, 27 etc."
Print "End of Test"
End Sub
' Routine to write the 24LC256
'
Sub E_write(byval E_addr As Word , Dat As Byte)
E_ah = High(e_addr)
E_al = Low(e_addr)
I2cstart
I2cwbyte E_ctlw
I2cwbyte E_ah
I2cwbyte E_al
I2cwbyte Dat
I2cstop
Waitms 10
End Sub
' Routine to read the 24LC256
'
Sub E_read(byval E_addr As Word , E_dat As Byte)
E_ah = High(e_addr)
E_al = Low(e_addr)
I2cstart
I2cwbyte E_ctlw
I2cwbyte E_ah
I2cwbyte E_al
I2cstart
I2cwbyte E_ctlr
I2crbyte E_dat , Nack
I2cstop '
End Sub
Vielen Dank und gute und erholsame Feiertage!
MAT
Lesezeichen