-
-
Erfahrener Benutzer
Begeisterter Techniker
Hallo Experten,
habe Problem mit Fortschreiben gelöst aber nur mit Byte-Variablen.
Nun meine Bitte für Hilfe. Wie kann ich auch Single-Variablen speichern und lesen.
Finde einfach keine Lösung. Hier mein Code.
'****************** Test-Platine *************************
'* ist ein Testmodul für Data extern EEprom als Speicher *
'* am I²C Bus ein 24c64 angeschlossen zum speichern *
'* und lesen der Variablen *
'* *
'* 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
$lib "i2c_TWI.lib"
Config Twi = 100000 ' Takt 100kHz
Const 24c64w = &B10100000
Const 24c64r = &B10100001
Dim Adresse As Word
Dim Adresse_l As Byte At Adresse Overlay
Dim Adresse_h As Byte At Adresse + 1 Overlay
Dim Wert As Byte
Dim Aktionen As Byte 'nur für Test
'!!!!! ist nur für Test mit Taster !!!!
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
'+++ zu Test ob I²C Hardware OK ist +++
Gosub I2c_test
'++++++++++++++++++++++++++++++++++++++
'------- nach Reset lesen ---------------------------------------
For Adresse = 1 To 6
I2cstart
I2cwbyte 24c64w
I2cwbyte Adresse_h
I2cwbyte Adresse_l
I2cstart
I2cwbyte 24c64r
I2crbyte Wert , Nack
I2cstop
Print "Adresse >" ; Adresse ; "< ist mit >" ; Wert ; "< gelesen!"
Next
'+++++++++ Hauptschleife ++++++++++++++++
Do
'--- hier zu Daten schrieben ----
If Taster_s = 0 Then 'wenn Taste gedrückt schreiben
Waitms 100 'nur für Test
Incr Aktionen
Gosub Schreiben
End If
'--- hier zu Daten lesen --------
If Taster_l = 0 Then 'wenn Taste gedrückt lesen
Waitms 100 'nur für Test
Gosub Lesen
End If
Loop
'++++++++++++++++++++++++++++++++++++++++
End 'end program
' ################################################## ###########################
Lesen:
Print ""
Print "EEPROM auslesen..."
Print ""
'Input "Speicherbereich angeben: " , In_s
'Adresse = Val(in_s)
For Adresse = 1 To 6
I2cstart
I2cwbyte 24c64w
I2cwbyte Adresse_h
I2cwbyte Adresse_l
I2cstart
I2cwbyte 24c64r
I2crbyte Wert , Nack
I2cstop
Print "Adresse >" ; Adresse ; "< ist mit >" ; Wert ; "< gelesen!"
Next
Return
' ################################################## ###########################
Schreiben:
Print ""
Print "EEPROM beschreiben..."
Print ""
For Adresse = 1 To 6
I2cstart
I2cwbyte 24c64w
'!!! für Test !!!!!!!!!!!!!!!!!!!!
If Adresse = 1 Then Wert = Aktionen
If Adresse = 2 Then Wert = 110
If Adresse = 3 Then Wert = 120
If Adresse = 4 Then Wert = 130
If Adresse = 5 Then Wert = 140
If Adresse = 6 Then Wert = 150
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
I2cwbyte Adresse_h
I2cwbyte Adresse_l
I2cwbyte Wert
I2cstop
Print "Adresse >" ; Adresse ; "< wurde mit >" ; Wert ; "< belegt!"
Next
Return
'-----------------------------------------------------
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 = 24c64w Then
Print "gefunden " ; Hex(chipaddress) ; " b " ; Bin(chipaddress)
End If
End If
Next
Waitms 200
I2cstop
Return
'---------------------------------------------------------
Für jeglichen Hinweis bin ich sehr Dankbar.
Mfg
fredred
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen