-
-
Erfahrener Benutzer
Begeisterter Techniker
Bascom i²c eeprom 24c265
Hallo Forum,
habe von „Rage_Empire“ ein guten Code gefunden wie ein I²C Eeprom St24c64 beschreiben und gelesen werden kann. Mit Input Eingabe für eine Singlevariable alles bestens. Siehe dessen Code. Aber nun mein Problem...
Möchte 6 Singlevariablen mit 1.Tastendruck schreiben und mit 2. Tastendruck diese anhängen. Aber das Anhängen(Fortschreiben) sowie lesen bringt nur den Inhalt des ersten Tastendruck.Nach ca. 800 Versuche fast ans Aufgeben. Denn in mein aktuelles Projekt mit Mega32 den int. Eeprom, sogar mit Strings, zu beschreiben und lesen funktioniert.Bin für jeglichen Hinweis dankbar
Mit freundlichen Grüßen
fredred
-
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