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 '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 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







Zitieren

Lesezeichen