Guten Tag,
komme nicht zum Erfolg. Nun bin ich langsam ans aufgeben.
Vermute ich verstehe Overlay nicht richtig oder der IC Eeprom (ST24c64) ist eigenwillig mit Adressierung der Speicherzuordnung.
Nochmals kurz meine Endvision. 6 Single-Variablen speichern dann nach nächster Aktion die nächsten 6 Single-Variablen anhängen usw. und dann auf Befehl kompletten Speicherbereich printen lassen.
Nur zum Verständnis vorab ein Printauszug dank Hilfe.
Gleichen String hintereinander speichern dann auslesen.
'ist Test Single-Variable
Four_byte_var_wr = 500.1
Siehe Code
Byte-Wert 205
Byte-Wert 12
Byte-Wert 250
Byte-Wert 67
geschrieben 500.10
gelesen 23.69E-39
gelesen 6.25E-36
Nun der Code.
Code:
$regfile "m32def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 40
$baud = 19200
Code:
'gibt den Erstellungszeitpunkt im europäischen Format DD-MM-YY hh:nn:ss
'und die Code-Version aus.
Print " "
Print "erstallt am : " ; Version(1)
Print "Version Code : " ; Version(3)
Print " "
Waitms 100
$lib "i2c_TWI.lib" 'hardware I²C einbinden
Config Twi = 100000 ' Takt 100kHz
Const 24c64w = &B10100000
Const 24c64r = &B1010000
'Format für Single zwei Nachkommastellen
Config Single = Scientific , Digits = 2
Dim Adresse As Word 'ist Adresszähler für Eeprom
Dim Adresse_l As Byte At Adresse Overlay
Dim Adresse_h As Byte At Adresse + 1 Overlay
Dim I As Byte 'Laufvariable für for-next Schleife
Dim Four_byte_var_wr As Single 'Single Variable für Write belegt vier Byte
Dim Byte_var_write(4) As Byte At Four_byte_var_wr Overlay 'Array mit vier mal ein Byte liegt über der Write-Single
Dim Four_byte_var_rd As Single 'Single Variable für Read belegt vier Byte
Dim Byte_var_read(4) As Byte At Four_byte_var_rd Overlay 'Array mit vier mal ein Byte liegt über der Read-Single
'ist Test Single-Variable
Four_byte_var_wr = 500.1 '&H1A2B3C4D 'dezimal = 439041101 (irgendeine Zahl)
Do
'********* schreiben **************
For Adresse = 1 To 8 Step 4 'Adressbereich festlegen
I2cstart
Adresse_h = High(adresse)
Adresse_l = Low(adresse)
I2cwbyte 24c64w
I2cwbyte Adresse
I2cwbyte Adresse_h
I2cwbyte Adresse_l
I2cstop
I2cstart
For I = 1 To 4 'die vier Bytes der Single Variablen zum EEPROM schreiben
I2cwbyte Byte_var_write(i) ',(ack , Nack)
Waitms 10 'etwas Zeit geben
Print "Byte-Wert " ; Byte_var_write(i) 'Byte anzeigen ist OK
Next I
I2cstop
'++++ ausgeben +++++++++
'!!dieses Print macht kein Sinn Variable ist vor Do schon festgelegt!!
Print "geschrieben " ; Four_byte_var_wr
'+++++++++++++++++++++++
Next Adresse
Wait 2 ' nur für Test
'********** lesen ****************
For Adresse = 1 To 8 Step 4 'Adressbereich festlegen
I2cstart
Adresse_h = High(adresse)
Adresse_l = Low(adresse)
I2cwbyte 24c64w
I2cwbyte Adresse_h
I2cwbyte Adresse_l
I2cstop
I2cstart
For I = 1 To 4
I2crbyte Byte_var_read(i) , Nack 'die vier Bytes der Single Variablen vom EEPROM lesen
Waitms 10 'etwas Zeit geben
Next I
I2cstop
'++++ ausgeben ++++
Print "gelesen " ; Four_byte_var_rd
'++++++++++++++++++
Next Adresse
Loop
End
Danke an alle Helfer und besonders an Markus Fulde.
fredred
Lesezeichen