Hallo,

dank Deines Codes ,dachte ich die Lösung gefunden zu haben wie Strings, in ein I²C Eeprom ST 24c64 Wp geschrieben und gelesen werden können.
Lesen nur als Print ausgegeben .
Hier ist mein letzter Versuch Dein Code anzupassen und hoffe die Kommentare sind ausreichend für Hilfe.
In Echt wird Taste1 durch Ereignis ersetzt, wie es auch mit meinen Code für int. Eeprom, problemlos mit [Eram] funktioniert. Aber hier habe ich ein totales OUT im Kopf.

Vorab vielen Dank
Mit freundlichen Grüßen
fredred

'****************** Test-Platine *************************
'* ist ein Testmodul für Data extern EEprom als Speicher *
'* am I²C Bus ein ST24c64 angeschlossen zum speichern *
'* und lesen der Variablen *
'* kleine Platine nur an Klemme I²C anschließen *
'* *
'* alle Auswertungen für Test nur über Terminal anzeigen *
'************************************************* ********

$regfile "m32def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 40
$baud = 19200

'gibt den Erstellungszeitpunkt im europäischen Format DD-MM-YY hh:nn:ss aus
Print "Erstellt am " ; Version(1)
Print
Waitms 100



'------------------------------------------------------------------------------- Config TWI
$lib "i2c_TWI.lib"
Config Twi = 100000


'Const E_prom_w = &HAE 'Epromadresse 160 (A1/2/3 auf GND) schreiben
'Const E_prom_r = &HAF 'Epromadresse 160+1 für schreiben der Daten

Const E_prom_w = &B10100000
Const E_prom_r = &B10100001


'EEprom 24C32,24C128, 24C256 haben im Gegensatz zu den 24C16'er einen Adressraum von zwei Byte.
'Weil grösserer Speicherbereich im EEprom vorhanden ist Darum muss man den Adressbereich in High und Low Adressbereich
'trennen. (Zuerst High-Adressbereich schreiben und dann Low-Adressbereich)


Dim E_dat As Byte 'Zwischenspeicher der TWI-Daten
Dim E_str1 As String * 31 'String-Daten gefüllt als Adressüberlage beginnend bei E_str(1)
Dim E_str(31) As Byte At E_str1 Overlay 'Bytearray für die Daten aus dem EEPROM
Dim Idx1 As Byte , Str_z As Byte 'Zähler

Dim E_ah As Byte 'höherwertiges Byte der SpeicherAdresse (Adresse=Word)
Dim E_al As Byte 'niederwertiges Byte der SpeicherAdresse (Adresse=Word)
Dim E_addr As Word , Adr_1 As Word , Adr_2 As Word 'SpeicherAdresse EEprom
Dim E_dat_r As Byte 'Daten der zu lesenen Daten aus EEprom
Dim E_dat_w As Byte

Dim Tagzl(10)as Byte 'soll Tastendruck zählen

Declare Sub E_write(byval E_addr As Word , E_dat_w As Byte) 'Sub zum schreiben in EEprom mit Übergabe einer Kopie der Variable (Eaddr/E_dat_w)
Declare Sub E_read(byval E_addr As Word , E_dat_r As Byte) 'Sub zum lesen aus EEprom

'Sub zum Auslesen des EEPROM: Begin Adressbereich , Ende Adressbereich
Declare Sub E_red_hilfe(byval Adr_1 As Word , Byval Adr_2 As Word)

'!!!!! ist nur für Test mit Taster also anpassen !!!!
Config Pinc.3 = Input 'Taster für EEprom schreiben
Portc.3 = 1 'Port auf H schalten
Taster_s Alias Pinc.3 'Taster ein Namen geben

Config Pinc.2 = Input 'Taster für EEprom lesen
Portc.2 = 1 'Port auf H schalten
Taster_l Alias Pinc.2 'Taster ein Namen geben

Config Portc.4 = Output
Eepvoll Alias Portc.4 'LED-Warnung für EEprom voll
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!
Gosub I2c_test



'### hier werden die Variablen für EEprom-Test festgelegt ##########

Dim Var1 As String * 5
Dim Var2 As String * 5
Dim Var3 As String * 5
Dim Var4 As String * 5
Dim Var5 As String * 5
Dim Var6 As String * 5

Var1 = "Test"
Var2 = "1000"
Var3 = "2000"
Var4 = "3000"
Var5 = "4000"
Var6 = "5000"



Do

Waitms 200
'sind die Variablen die als String geschrieben/ gelesen werden sollen
E_str1 = Var1 + ";" + Var2 + ";" + Var3 + ";" + Var4 + ";" + Var5 + ";" + Var6


'(
'Begin Adressbereich , Ende Adressbereich , Anzeigeort für X auf dem LCD, - Y-Ort

Call E_red_hilfe(&H50 , &H67 , 2 , 3 ) ' Daten aus dem EEPROM ab Adresse &H50 bis &H67 holen und auf Linie X 2, Linie Y 3 schreiben
Call E_red_hilfe(&H68 , &H7F , 3 , 3 )
Call E_red_hilfe(&H80 , &H97 , 4 , 3 )
Call E_red_hilfe(&H98 , &HAF , 5 , 3 )
Call E_red_hilfe(&Hb0 , &HC7 , 6 , 3 )
')

'########## schreiben ###############################
' nach jedem Tastendruck String als Block anhängen
If Taster_s = 0 Then
' hier sollen die Blöcke angehangen werden aber wie???
'Incr Tagzl 'ist Tageszähler lesen
'???
E_dat_w = E_str1
Call E_write(e_addr , E_dat_w)
'???

'nach 10x von vorn überschreiben
'If Tagzl >= 10 Then Tagzl = 0
End If
'################################################# #####



'########## lesen ###############################
'wenn Taste gedrückt lesen
If Taster_l = 0 Then
Call E_read(e_addr , E_dat_r)

'jeden Block in eine neue Zeile printen aber wie???
' Print " gelesen " ; E_dat_r

End If
'#################################################
Loop

End


'////////////////// Subroutinen ////////////////////////////////////////////////
'///////////////////////////////////////////////////////////////////////////////
'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
' Routine to write the 24C65

Sub E_write(byval E_addr As Word , E_dat_w As Byte )
E_ah = High(e_addr) 'E_ah = EEprom high Adressbyte der jeweiligen Word-Adresse (H&10)
E_al = Low(e_addr) 'E_ah = EEprom low Adressbyte der jeweiligen Word-Adresse (H&10)
I2cstart 'Start I2C
I2cwbyte E_prom_w 'Sende Slave Adresse
I2cwbyte E_ah 'Sende Speicheradresse High
I2cwbyte E_al 'Sende Speicheradresse Low
I2cwbyte E_dat_w 'Sende Daten Werte
I2cstop 'Stop I2C
Waitms 10
Print "schreiben ";
Print "Addr " ; E_addr ; " Daten " ; Asc(e_dat_w) 'test

End Sub


'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
' Routine to read the 24C65

Sub E_read(byval E_addr As Word , E_dat_r As Byte)
E_ah = High(e_addr)
E_al = Low(e_addr)
I2cstart
I2cwbyte E_prom_w
I2cwbyte E_ah
I2cwbyte E_al
I2cstart
I2cwbyte E_prom_r
I2crbyte E_dat_r , Nack
I2cstop
Print "lesen ";
Print "Addr " ; E_addr ; " Daten " ; Asc(e_dat_r) 'test

End Sub

'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
'Routine to read a String from EEPROM and send to the GLCD
Sub E_red_hilfe(byval Adr_1 As Word , Byval Adr_2 As Word , Byval Line_x As Byte , Byval Line_y As Byte )
Idx1 = 1
For E_addr = Adr_1 To Adr_2 ' Adresse &H.. bis &H..
Call E_read(e_addr , E_dat) ' Daten aus Sub E_READ(BYVAL E_ADDR AS WORD , E_DAT_R AS BYTE) holen
E_str(idx1) = E_dat 'Daten in ein Bytearray schreiben
Incr Idx1 'Bytearray Speicherstelle erhöhen
Next E_addr 'nächste Adresse holen
Incr Str_z 'etwas zählen
'Lcdat Line_x , Line_y , E_str1 'Daten auf bestimmten Ort vom GLCD anzeigen lassen
End Sub


'####### I2C-Bus testen ################################################## #####
I2c_test:

Dim Busaddress As Byte
Dim Busaddress_read As Byte
Dim Chipaddress As Byte

Print "I2C Scan start"

'I²C Porterweiterung testen
'Alle Adresen Suche und Anzeigen
'Step 2 soll nur IC Adresse aufrufen für lesen
For Chipaddress = 0 To 254 Step 2 ' IC's am I²C-Bus erkennen
I2cstart 'send start
I2cwbyte Chipaddress 'sende Addresse auf Bus
If Err = 0 Then 'Chip gefunden
If Chipaddress = E_prom_w Then
Print "gefunden " ; "h " ; Hex(chipaddress) ; " b " ; Bin(chipaddress)
End If
If Err = 1 Then
Print " Addresse- oder Hardware- Fehler"
End If
End If
Next
Waitms 200
I2cstop
Return