Guten Tag Searcher,
wie es aussieht wird der Eeprom dank deiner Hilfe, nach meinen Vorstellungen, beschrieben.
Aber das Entresultat sieht man nur beim auslesen(nach Reset). Ist meine persönliche Erfahrung. Dachte vor langer Zeit, alles im Griff zu haben aber die Auslesung kam nicht vom Eeprom sondern vom RAM.
So nun in der Hoffnung wir machen weiter bis zum Ziel.
Kommt schon wieder die nächste Aufgabe für dich.
Eeprom auslesen und meinen Code „hinzubiegen“.
In meinen Versuch wird zwar der Eeprom gelesen aber die Werte sind Expotential.
Somit nehme ich an die Ausleseadressen sind verschoben.
Im Code sollt somit für dich nur meine Dim’s und die Gosub lesen für Hilfe betrachtet werden.
Wie schon geschrieben benötige Hilfe zum lernen wie Single sauber in Adressbereiche des Eeproms geschrieben/gelesen werden können.
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 Mem_addr_first_store_loc As Word
Dim J As Byte 'Laufvariable für for-next Schleife Single
Dim Z As Byte 'Anzahl der Single_Variablen schreiben
Dim L As Byte 'alle Single_Variablen auslesen
Dim Aktionen As Byte 'nächsten Schreibzyklus vortschreiben
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 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 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 Number_from_rs232(6) As Single 'Array der 6 Schreib-Variablen
'!!!!! 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:
Mem_addr_first_store_loc = Aktionen * 24 '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
Next J
'!!! nüt für Test !!!
Print
Print "Aktionen " ; Aktionen
Print "Adressbereich ab " ; Mem_addr_first_store_loc
Print "Number written to ext. EEPROM: " ; Four_byte_var_write
'!!!!!!!!!!!!!!!!!!!!
Next Z
Incr Aktionen 'nächsten Schreibzyklus anstoßen
'### ENDE ext. EEPROM schreiben (byte write method) ###
Return
'### BEGINN ext. EEPROM lesen (random address read method) ###
Lesen:
For L = 0 To 240 Step 4 'hier mein Versuch 10 Aktionen lesen
Mem_addr = 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
Next J Mem_addr = Mem_addr + 1 'Leseadresse mit jedem Schleifendurchlauf erhöhen
Mem_addr_first_store_loc = L
'### BEGINN SW UART Ausgabe ###
Print
Print "Adressbereich ab " ; Mem_addr
Print "Number read from ext. EEPROM : " ; Four_byte_var_read
Next L
ENDE ext. EEPROM lesen (random address read method) Return
Bin schon wieder gespannt wo mein Denkfehler liegt.
Vorab vielen Dank
fredred
Lesezeichen