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 '19200Code:'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







Zitieren

Lesezeichen