Hallo Searcher
Hallo Forum,
nun bin trotz Hilfe am Ende.
Nochmals mein letzter Versuch gekürzt nur mal die 6 Single schreiben und lesen ohne Fortschreibung.
In der Hoffnung mein Code ist nun besser lesbar. Stelle ich diesen noch mal ab
Code:
$regfile "m32def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 40
$baud = 19200 '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
'Format für Single zwei Nachkommastellen
Config Single = Scientific , Digits = 2
'###############################################################################
Config Base = 0 'Array Indexe beginnen mit 0
Const Dev_addr_write = &B10100000 'EEPROM Schreibadresse
Const Dev_addr_read = &B10100001 'EEPROM Leseadresse
'Const Mem_addr_first_store_loc = 0 'Auf EEPROM Seitenanfang legen, im folgenden PRG keinen roll over produzieren!
Dim J As Byte 'Laufvariable für for-next Schleife Single
Dim Mem_addr_first_store_loc As Word
Dim Mem_addr As Word
Dim Mem_addr_low_byte As Byte At Mem_addr Overlay
Dim Mem_addr_high_byte As Byte At Mem_addr + 1 Overlay
Dim Z As Byte 'Anzahl der Single_Variablen schreiben
Dim Number_from_rs232(6) As Single 'Array der 6 Schreib-Variablen
Dim Four_byte_var_write As Single
Dim Byte_var_write(3) As Byte At Four_byte_var_write Overlay '4 Elemente, Arrayindex von 0 bis 3
Dim L As Byte 'alle Single_Variablen auslesen
Dim Number_from_rl232(6) As Single
Dim Four_byte_var_read As Single
Dim Byte_var_read(3) As Byte At Four_byte_var_read Overlay '4 Elemente, Arrayindex von 0 bis 3
Dim Aktionen As Byte 'nächsten Schreibzyklus vortschreiben
'!!!!! 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
Gosub Lesen 'nach Reset erstmal lesen
Do
'--- hier zum Daten schrieben --------
If Taster_s = 0 Then 'wenn Taste gedrückt schreiben
Waitms 100 'nur für Test
Gosub Schreiben
End If
'--- hier zum Daten lesen ------------
If Taster_l = 0 Then 'wenn Taste gedrückt lesen
Waitms 100 'nur für Test
Gosub Lesen
End If
Loop
'### BEGINN ext. EEPROM schreiben (byte write method) ###
Schreiben:
Print "Byte der 6 Single-Variablen schreiben"
Print
Mem_addr_first_store_loc = Aktionen * 1 '24 = 6 Singles * 4 Byte (ein Single belegt 4 Byte)
For Z = 0 To 5 'for-next mit 0 beginnen lassen
If Z = 0 Then Number_from_rs232(0) = 100.10
If Z = 1 Then Number_from_rs232(1) = 200.20
If Z = 2 Then Number_from_rs232(2) = 300.30
If Z = 3 Then Number_from_rs232(3) = 400.40
If Z = 4 Then Number_from_rs232(4) = 500.60
If Z = 5 Then Number_from_rs232(5) = 600.60
Four_byte_var_write = Number_from_rs232(z) 'Single Variable Z schreiben
Mem_addr = Mem_addr_first_store_loc 'Speicheradresse für ext. EEPROM initialisieren
For J = 0 To 3 'Laufschleife um 4 Bytes zu schreiben
I2cstart
I2cwbyte Dev_addr_write 'Sendet ext. EEPROM Adresse zum Schreiben
I2cwbyte Mem_addr_high_byte 'Sendet Speicher-Schreibadresse
I2cwbyte Mem_addr_low_byte 'Sendet Speicher-Schreibadresse
I2cwbyte Byte_var_write(j) 'Sendet Datenbyte
I2cstop
Mem_addr = Mem_addr + 1 'Schreibadresse mit jedem Schleifendurchlauf erhöhen
Waitms 10 'Warten auf ext. EEPROM
Print "Single-Variable " ; Z ; " = Adresse " ; J ; " Bytewert " ; Byte_var_write(j)
Next J
Print "!! Ausgabe !! " ; Four_byte_var_write
Print
Next Z
Incr Aktionen 'nächsten Schreibzyklus anstoßen
'### ENDE ext. EEPROM schreiben (byte write method) ###
Return
' Eergebnis: sieht doch Gut aus.
'(
Byte der 6 Single-Variablen schreiben
Single-Variable 0 = Adresse 0 Bytewert 51
Single-Variable 0 = Adresse 1 Bytewert 51
Single-Variable 0 = Adresse 2 Bytewert 200
Single-Variable 0 = Adresse 3 Bytewert 66
!! Ausgabe !! 100.10
Single-Variable 1 = Adresse 0 Bytewert 51
Single-Variable 1 = Adresse 1 Bytewert 51
Single-Variable 1 = Adresse 2 Bytewert 72
Single-Variable 1 = Adresse 3 Bytewert 67
!! Ausgabe !! 200.20
Single-Variable 2 = Adresse 0 Bytewert 102
Single-Variable 2 = Adresse 1 Bytewert 38
Single-Variable 2 = Adresse 2 Bytewert 150
Single-Variable 2 = Adresse 3 Bytewert 67
!! Ausgabe !! 300.30
Single-Variable 3 = Adresse 0 Bytewert 51
Single-Variable 3 = Adresse 1 Bytewert 51
Single-Variable 3 = Adresse 2 Bytewert 200
Single-Variable 3 = Adresse 3 Bytewert 67
!! Ausgabe !! 400.40
Single-Variable 4 = Adresse 0 Bytewert 205
Single-Variable 4 = Adresse 1 Bytewert 76
Single-Variable 4 = Adresse 2 Bytewert 250
Single-Variable 4 = Adresse 3 Bytewert 67
!! Ausgabe !! 500.60
Single-Variable 5 = Adresse 0 Bytewert 102
Single-Variable 5 = Adresse 1 Bytewert 38
Single-Variable 5 = Adresse 2 Bytewert 22
Single-Variable 5 = Adresse 3 Bytewert 68
!! Ausgabe !! 600.60
')
'### BEGINN ext. EEPROM lesen (random address read method) ###
Lesen:
Print "Byte der 6 Single-Variablen lesen"
Print
For L = 0 To 5 'Step 4 'hier mein Versuch 10 Aktionen lesen
Mem_addr = L 'Mem_addr_first_store_loc 'Leseadresse für ext. EEPROM initialisieren
For J = 0 To 3 'Laufschleife um 4 Bytes zu schreiben
I2cstart
I2cwbyte Dev_addr_write 'Sendet ext. EEPROM Adresse zum Schreiben
I2cwbyte Mem_addr_high_byte 'Sendet Speicher-Leseadresse
I2cwbyte Mem_addr_low_byte 'Sendet Speicher-Leseadresse
I2cstart 'zweites Start ohne vorheriges Stop (siehe Datenblatt "random address read")
I2cwbyte Dev_addr_read 'Sendet ext. EEPROM Adresse zum Lesen
I2crbyte Byte_var_read(j) , Nack 'Liest Datenbyte
I2cstop
Mem_addr = Mem_addr + 1 'Leseadresse mit jedem Schleifendurchlauf erhöhen
Waitms 10
Print "Single_Variable " ; L ; " = Adresse " ; J ; " Bytewert " ; Byte_var_read(j)
Next J
'Mem_addr_first_store_loc = L (auskommentiert)
'### BEGINN SW UART Ausgabe ###
Print "!! Ausgabe !! " ; Four_byte_var_read 'Single paßt nicht zu vorher geprinteten Mem_addr
Print
Next L
'zurück setzen
Aktionen = 0 'alle Aktionen wurden ausgelesen.
Return
'########ENDE ext. EEPROM lesen (random address read method)
' Eergebnis: Ist doch Müll
'(
Byte der 6 Single-Variablen lesen
Single_Variable 0 = Adresse 0 Bytewert 102
Single_Variable 0 = Adresse 1 Bytewert 38
Single_Variable 0 = Adresse 2 Bytewert 22
Single_Variable 0 = Adresse 3 Bytewert 68
!! Ausgabe !! 600.60 [ist die letze Variable aber weningsten schon mal ein Wert]
Single_Variable 1 = Adresse 0 Bytewert 38
Single_Variable 1 = Adresse 1 Bytewert 22
Single_Variable 1 = Adresse 2 Bytewert 68
Single_Variable 1 = Adresse 3 Bytewert 0
!! Ausgabe !! 0.0
Single_Variable 2 = Adresse 0 Bytewert 22
Single_Variable 2 = Adresse 1 Bytewert 68
Single_Variable 2 = Adresse 2 Bytewert 0
Single_Variable 2 = Adresse 3 Bytewert 0
!! Ausgabe !! 0.0
Single_Variable 3 = Adresse 0 Bytewert 68
Single_Variable 3 = Adresse 1 Bytewert 0
Single_Variable 3 = Adresse 2 Bytewert 0
Single_Variable 3 = Adresse 3 Bytewert 0
!! Ausgabe !! 0.0
Single_Variable 4 = Adresse 0 Bytewert 0
Single_Variable 4 = Adresse 1 Bytewert 0
Single_Variable 4 = Adresse 2 Bytewert 0
Single_Variable 4 = Adresse 3 Bytewert 7
!! Ausgabe !! 96.30E-36
Single_Variable 5 = Adresse 0 Bytewert 0
Single_Variable 5 = Adresse 1 Bytewert 0
Single_Variable 5 = Adresse 2 Bytewert 7
Single_Variable 5 = Adresse 3 Bytewert 134
!! Ausgabe !! -25.39E-36
')
Vielen Dank für die aufwendigen Hilfeleistungen.
Nehme nach wie vor an der IC ST24C64 will mich narren.
Mit freundlichen Grüßen
fredred
Lesezeichen