- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 20

Thema: I2C Eeprom ST 24C64

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    Home
    Beiträge
    213

    I2C Eeprom

    Hallo Forum Mitglieder und Gäste
    Guten Tag Searcher,

    nun können wir das Thema beenden. Habe alles im Griff.
    In mein aktuellem Projekt werden nun alle Variablen automatisch in Eeprom geschrieben und nach bedarf an Excel übergeben, für Auswertungen und grafische Abbildungen. Bild nur mal so im Anhang gelegt. Sehr aufwendige VBA da auch SD-Karten-Daten eingelesen werden können.
    Natürlich bin ich auch, im nachhinein interessiert, für Optimierung oder Anregungen.
    Somit erlaube ich mich, meine Test-Demo für I²C- Eeprom, mit zu senden.

    Code:
    '******************  Test-Demo  **************************
    '* ist ein Testmodul für Data extern EEprom als Speicher *
    '*   am I²C Bus ein 24c64 angeschlossen zum speichern    *
    '*          und lesen der Variablen                      *
    '*  alle Variablen werden als Strings konvertiert.       *
    '*  somit unabhänig von Daten-Typ. Auch lange Texte sind *
    '*              kein Problem mehr.                       *
    '*  Die Variablen können mit Hyperterminal_Log als CSV   *
    '*    für Auswertungen an EXCEL übergeben werden        *
    '*    oder nur auf LCD usw.                              *
    '*********************************************************
    Code:
    
    $regfile "m32def.dat"
    $crystal = 16000000
    $hwstack = 32
    $swstack = 32
    $framesize = 40
    $baud = 19200                                               '19200
    
    'gibt den Erstellungszeitpunkt im europäischen Format DD-MM-YY hh:nn:ss
    'und die Code-Version auf Hyperterminal 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
    'nur nötig wenn eine Var den Typ Single hat.
    Config Single = Scientific , Digits = 2                     '2 Nachkommastellen oder wie auch immer
    Config Base = 0
    '#### Eeprom Konstanten festlegen ###########
    Const Dev_addr_write = &B10100000                           'EEPROM Schreibadresse  (ST24C64)
    Const Dev_addr_read = &B10100001                            'EEPROM Leseadresse
    Const Stringanz = 6                                         'String Var Anzahl
    Const Stringmax = 8                                         'für jedes String 8 Byte reserviert.
    Const Speichervol = 16000                                   'maximale Speichergröße in Byte
    '############################################
    
    '!!!!!!! Übergabe von Konstanden NICHT ändern !!!!!!!!!!
    Const Byteschleife = Stringanz + 1                          'bedingt durch String
    Const Stringab = Stringmax + 1
    Dim Aktschleife As Word
    Aktschleife = Stringanz * Stringmax
    Aktschleife = Aktschleife + 9                               'ist Summe aller Byte + String Endzeichen
    '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Dim Mem_addr As Word                                        'Adress Zähler
    Dim J As Byte                                               'Laufvariable für Byte Schleife
    Dim Mem_addr_low_byte As Byte At Mem_addr Overlay           'da Eeprom > 8kByte aufteilen
    Dim Mem_addr_high_byte As Byte At Mem_addr + 1 Overlay
    Dim Aktionen As Word                                        'Schreib-Zähler
    Dim Aktionenl As Word                                       'Lese-Zähler
    
    Dim S As Byte                                               'Laufvariable für for-next Schleife schreiben
    Dim Number_from_rs(byteschleife) As String * Stringab       'Array der Schreib-Variablen
    Dim Four_byte_var_write As String * Stringmax
    Dim Byte_var_write(stringmax) As Byte At Four_byte_var_write Overlay       ' Elemente Arrayindex
    Dim L As Word                                               'Zyklus fortschreiben lesen                                            'alle Single_Variablen auslesen
    Dim Four_byte_var_read As String * Stringmax
    Dim Byte_var_read(stringmax) As Byte At Four_byte_var_read Overlay       ' Elemente, Arrayindex
    Dim Spst As Word
    '!!!!! 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
    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
    '++++++++++++++++++++++++++++++++++++++
    'Gosub Lesen                                                'nach Reset erstmal lesen
    
    '### hier werden die Variablen für EEprom-Test festgelegt ##########
         Dim Datum As String * Stringmax
         Dim Zeit As String * Stringmax
         Dim Var2 As String * Stringmax
         Dim Var3 As String * Stringmax
         Dim Var4 As String * Stringmax
         Dim Var5 As String * Stringmax
         Dim Var6 As String * Stringmax
    '+++ Beispiel für Single ++++++
         Dim Temperatur1 As Single
            Temperatur1 = 19.66
         Var2 = Str(temperatur1)                                'Single als String übergeben
    '+++++++++++++++++++++++++++++++
    Mem_addr = 0                                                ' Sicher ist Sicher
    '**** Hauptschleife ****
    Do
    'für Test einfach mal so
         Datum = "07.11.13"
         Zeit = "15:10:00"
         'Var2 = "100.10"                                        'ist ausgeblendet da Beispiel aktiv
         Var3 = "200.20"
         Var4 = "300.30"
         Var5 = "fredred"
         Var6 = "Test-OK"
    
    'Aktionen mit Taster in Echt durch Ereignis ersetzen zB. Timer
    Debounce Taster_s , 0 , Schreiben , Sub                     'entprellen
    Debounce Taster_l , 0 , Lesen , Sub
    '(
     '--- 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
    '**** END Hauptsschleife ****
    
    '### BEGINN in ext EEPROM schreiben (byte write method) ###
    Schreiben:
     '--- für Test ---
      Print "Byte der Var-Variablen schreiben  " ; "Aktionen  " ; Aktionen
      Print
     '----------------
      Mem_addr = Aktionen * Aktschleife                         'step Aktionen
    'LED Anzeige wenn Eeprom gelesen werden sollte
        If Mem_addr >= 226 Then Eepvoll = 1                     '226 ist nur ein Beispiel kann auch [Speichervol- xxx] sein
     For S = 0 To Stringanz                                     'for-next mit 0 beginnen da Base = 0
        If S = 0 Then Number_from_rs(0) = Datum
        If S = 1 Then Number_from_rs(1) = Zeit
        If S = 2 Then Number_from_rs(2) = Var2
        If S = 3 Then Number_from_rs(3) = Var3
        If S = 4 Then Number_from_rs(4) = Var4
        If S = 5 Then Number_from_rs(5) = Var5
        If S = 6 Then Number_from_rs(6) = Var6
        Four_byte_var_write = Number_from_rs(s)                 'String Variable L schreiben
        For J = 0 To Byteschleife                               'Laufschleife 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
    '--- nur für Test ---
           Print "Var-Variable   " ; S ; " =  Adresse " ; Mem_addr ; "  Bytewert  " ; Byte_var_write(j)
    '--------------------
        Next J
    '--- nur für Test ---
           Print "!!  Ausgabe  !!  " ; Four_byte_var_write
           Print
    '---------------------
     Next S
      Incr Aktionen                                             'nächsten Schreibzyklus anstoßen
    Return
    '### ENDE ext EEPROM schreiben ###
    
    '-----------------------------------------------------------
    '### BEGINN aus ext.EEPROM lesen  ###
    Lesen:
       Mem_addr = 0                                             'da Variable auch für schreiben gesetz ist zum lesen zurück setzen.
       Aktionenl = 0
    For Mem_addr = Aktionenl To Speichervol                     'ist max Byte für Eeprom
    '--- nur für Test ---
     ' Print "Byte der 6 Var-Variablen lesen " ; "Zyklus  " ; Aktionenl
     ' Print
    '--------------------
      For L = 0 To Stringanz
        For J = 0 To Byteschleife                               'Laufschleife lesen
          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
            Waitms 10
          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
    '--- nur für Test ---
      ' Print "Var_Variable  " ; L ; "  = Byte " ; Mem_addr ; "  Bytewert  " ; Byte_var_read(j)
    '--------------------
       Next J
    '### BEGINN Terminal_log Ausgabe für Auswertungen in Excel ###
    '### CSV Trenzeichen ist [;] ###
            Print Four_byte_var_read ; ";" ;
      'Daten wurden gesichert
        Eepvoll = 0                                             'LED aus
    'schreiben beginnt wieder ab Adr 0. Rest bleib erhalten.
        Aktionen = 0
    'wenn -NAN dann Auslesung beenden(soll nicht unbeschriebenen Speicher lesen)
        If Four_byte_var_read = "" Then
            Return
        End If
      Next L
         Print Chr(10)                                          'wird benötigt für CSV(Zeilenumbruch nach Zyklus)
            Incr Aktionenl                                      'Lesezyklus hochzählen bis -Nan
      Next Mem_addr
    Return
    '#### ENDE ext.EEPROM lesen ####
    
    '-----------------------------------------------------
    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 = Dev_addr_write Then
        Print "gefunden  " ; "h  " ; Hex(chipaddress) ; "   b " ; Bin(chipaddress)
        Print "ist ein ST24C64 Adr 000"
        End If
      'hier können noch weitere I²C IC Teilnehmer abgefragt werden.
    '(
     If Chipaddress = xxx Then
        Print "gefunden  " ; "h  " ; Hex(chipaddress) ; "   b " ; Bin(chipaddress)
      End If
    ')
      End If
     Next
        Return



    Danke an alle für Hilfe und verbleibe bis zum nächstem Problem
    Mit freundlichen Grüßen





  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    Home
    Beiträge
    213
    Hallo Leute,

    Theorie OK und Praxis zeigt, nicht alles ist OK
    Erfahrung:
    Nach Einsockeln eines „jungfräulichen“ Eeprom, war eine kleine Optimierung nötig.
    Eeprom lesen immer bis zum Ende des Speichers, sollt doch nicht sein.
    Die [var_read] ist ja werkseitig immer 255, somit noch dies eingefügt und Abfragen höher gelegt.

    If Four_byte_var_read = "" Or Byte_var_read(j) = 255 Then
    Nun wird lesen beendet, wenn Speicherplatz „leer „

    Auch nach Auslesung des Eeprom wieder von Adr 0 zu beschreiben, war Dumm, nun wird [Mem_Addr] schreiben erst auf 0 gesetzt, wenn [Speichervoll]. Gleiches gilt auch beim Schreiben. Somit erhalten alle Speicherplätze die gleiche „Lebensdauer“


    Nun der aktuelle Code.


    Code:
    '******************  Test-Demo  **************************
    '* ist ein Testmodul für Data extern EEprom als Speicher *
    '*   am I²C Bus ein 24c64 angeschlossen zum speichern    *
    '*          und lesen der Variablen                      *
    '*  alle Variablen werden als Strings konvertiert.       *
    '*  somit unabhänig von Daten-Typ. Auch lange Texte sind *
    '*              kein Problem mehr.                       *
    '*  Die Variablen können mit Hyperterminal_Log als CSV   *
    '*    für Auswertungen an EXCEL übergeben werden         *
    '*    oder nur auf LCD usw.                              *
    '*********************************************************
    Code:
    
    $regfile "m32def.dat"
    $crystal = 16000000
    $hwstack = 32
    $swstack = 32
    $framesize = 40
    $baud = 19200                                               '19200
    
    'gibt den Erstellungszeitpunkt im europäischen Format DD-MM-YY hh:nn:ss
    'und die Code-Version auf Hyperterminal 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
    'Hinweis: Diese Einstellung reserviert ein paar ROM-Speicher mehr..
    'nur nötig wenn eine Var den Typ Single hat. Die letzte Stelle wird gerundet.
    'Format für Single zwei Nachkommastellen
    Config Single = Scientific , Digits = 2                     '2 Nachkommastellen oder wie auch immer
    Config Base = 0                                             'alle Zähler mit 0 beginnen
    'mehrer unterschiedliche I²C IC am Bus "anzuhängen" ist mit Dev_addr Select kein Problem.
    '#### Eeprom Konstanten festlegen ###########
    Const Dev_addr_write = &B10100000                           'EEPROM Schreibadresse  (ST24C64)
    Const Dev_addr_read = &B10100001                            'EEPROM Leseadresse (ST24C64)
    Const Stringanz = 6                                         'String Var Anzahl
    Const Stringmax = 8                                         'für jedes String 8 Byte reserviert.
    Const Speichervoll = 16000                                  'maximale Speichergröße in Byte (zB.ST24C64)
    '############################################
    '!!!!!!! Übergabe von Konstanden NICHT ändern !!!!!!!!!!
    Const Byteschleife = Stringanz + 1                          'bedingt durch String
    Const Stringab = Stringmax + 1
    Dim Aktschleife As Word
    Aktschleife = Stringanz * Stringmax
    Aktschleife = Aktschleife + 9                               'ist Summe aller Byte + String Endzeichen
    '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Dim Mem_addr As Word                                        'Adress Zähler
    Dim J As Byte                                               'Laufvariable für Byte Schleife
    Dim Mem_addr_low_byte As Byte At Mem_addr Overlay           'da Eeprom > 8kByte aufteilen
    Dim Mem_addr_high_byte As Byte At Mem_addr + 1 Overlay
    Dim Aktionen As Word                                        'Schreib-Zähler
    Dim Aktionenl As Word                                       'Lese-Zähler
    
    Dim S As Byte                                               'Laufvariable für for-next Schleife schreiben
    Dim Number_from_rs(byteschleife) As String * Stringab       'Array der Schreib-Variablen
    Dim Four_byte_var_write As String * Stringmax
    Dim Byte_var_write(stringmax) As Byte At Four_byte_var_write Overlay       ' Elemente Arrayindex
    Dim L As Word                                               'Zyklus fortschreiben lesen                                            'alle Single_Variablen auslesen
    Dim Four_byte_var_read As String * Stringmax
    Dim Byte_var_read(stringmax) As Byte At Four_byte_var_read Overlay       ' Elemente, Arrayindex
    '!!!!! 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
    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
    '++++++++++++++++++++++++++++++++++++++
    'Gosub Lesen                                                'nach Reset erstmal lesen
    
    '### hier werden die Variablen für EEprom-Test festgelegt ##########
         Dim Datum As String * Stringmax
         Dim Zeit As String * Stringmax
         Dim Var2 As String * Stringmax
         Dim Var3 As String * Stringmax
         Dim Var4 As String * Stringmax
         Dim Var5 As String * Stringmax
         Dim Var6 As String * Stringmax
    '+++ Beispiel1 für Single ++++++
         Dim Temperatur1 As Single
            Temperatur1 = 19.55                                 'sind 4Byte
         Var2 = Str(temperatur1)                                'Single als String übergeben
    '+++++++++++++++++++++++++++++++
    '+++ Beispiel2 für Single ++++++
         Dim Temperatur2 As Single
            Temperatur2 = -3.55                                 'sind 4Byte
         Var3 = Str(temperatur2)                                'Single als String übergeben
    '+++++++++++++++++++++++++++++++
    Mem_addr = 0                                                ' Sicher ist Sicher
    '**** Hauptschleife ****
    Do
    'für Test einfach mal so
         Datum = "01.02.14"
         Zeit = "15:10:00"
         'Var2 = "100.10"                                        'ist ausgeblendet da Beispiel aktiv
         'Var3 = "123456"                                        'ist ausgeblendet da Beispiel aktiv
         Var4 = "300.30"
         Var5 = "fredred"
         Var6 = "Test-OK"
    
    'Aktionen mit Taster in Echt durch Ereignis ersetzen zB. Timer
    Debounce Taster_s , 0 , Schreiben , Sub                     'entprellen
    Debounce Taster_l , 0 , Lesen , Sub
    '(
     '--- 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
    '**** END Hauptsschleife ****
    
    '### BEGINN in ext EEPROM schreiben (byte write method) ###
    Schreiben:
     '--- für Test ---
      Print "Byte der Var-Variablen schreiben  " ; "Aktionen  " ; Aktionen
      Print
     '----------------
      Mem_addr = Aktionen * Aktschleife                         'step Aktionen
    'LED Anzeige wenn Eeprom gelesen werden sollte
        If Mem_addr >= 626 Then Eepvoll = 1                     '626 ist nur ein Beispiel kann auch [Speichervol- xxx] sein
     For S = 0 To Stringanz                                     'for-next mit 0 beginnen da Base = 0
        If S = 0 Then Number_from_rs(0) = Datum
        If S = 1 Then Number_from_rs(1) = Zeit
        If S = 2 Then Number_from_rs(2) = Var2
        If S = 3 Then Number_from_rs(3) = Var3
        If S = 4 Then Number_from_rs(4) = Var4
        If S = 5 Then Number_from_rs(5) = Var5
        If S = 6 Then Number_from_rs(6) = Var6
         Four_byte_var_write = Number_from_rs(s)                'String Variable S schreiben
        For J = 0 To Byteschleife                               'Laufschleife 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
    '--- nur für Test ---
           Print "Var-Variable   " ; S ; " =  Adresse " ; Mem_addr ; "  Bytewert  " ; Byte_var_write(j)
    '--------------------
        Next J
    '--- nur für Test ---
           Print "!!  Ausgabe  !!  " ; Four_byte_var_write
           Print
    '---------------------
     Next S
     
    'ist Speicher am Ende dann wieder von vorn
       If Mem_addr = Speichervoll Then
    'schreiben beginnt wieder ab Adr 0. Rest bleib erhalten.
          Aktionen = 0
       End If
      Incr Aktionen                                             'nächsten Schreibzyklus anstoßen
    Return
    '### ENDE ext EEPROM schreiben ###
    
    '-----------------------------------------------------------
    '### BEGINN aus ext.EEPROM lesen  ###
    Lesen:
       Mem_addr = 0                                             'da Variable auch für schreiben gesetz ist zum lesen zurück setzen.
       Aktionenl = 0                                            'starte Lesung bei Adr 0
    For Mem_addr = Aktionenl To Speichervoll                    'ist max Byte für Eeprom
    '--- nur für Test ---
     ' Print "Byte der 6 Var-Variablen lesen " ; "Zyklus  " ; Aktionenl
     ' Print
    '--------------------
      For L = 0 To Stringanz
        For J = 0 To Byteschleife                               'Laufschleife lesen
          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
            Waitms 10
          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
    '--- nur für Test ---
      ' Print "Var_Variable  " ; L ; "  = Byte " ; Mem_addr ; "  Bytewert  " ; Byte_var_read(j)
    '--------------------
     'wenn -NAN dann Auslesung beenden(soll nicht unbeschriebenen Speicher lesen)
        If Four_byte_var_read = "" Or Byte_var_read(j) = 255 Then
            Return
        End If
      Next J
    '### BEGINN Terminal_log Ausgabe für Auswertungen in Excel ###
    '### CSV Trenzeichen ist [;] ###
         Print Four_byte_var_read ; ";" ;
      'Daten wurden gelesen
        Eepvoll = 0                                             'LED aus
    'Nach Zwischenauslesung Speicherbereich fortsschreiben soll ja nicht
    'immer die gleichen Zellen besschreiben("Lebensdauer")
        If Mem_addr = Speichervoll Then
    'schreiben beginnt wieder ab Adr 0. Rest bleib erhalten.
           Aktionen = 0
        End If
      Next L
          Print Chr(3)                                          'wird benötigt für CSV(End Off Text nach Zyklus)
            Incr Aktionenl                                      'Lesezyklus hochzählen bis -Nan
     Next Mem_addr
    Return
    '#### ENDE ext.EEPROM lesen ####
    
    '-----------------------------------------------------
    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 = Dev_addr_write Then
        Print "gefunden  " ; "h  " ; Hex(chipaddress) ; "   b " ; Bin(chipaddress)
        Print "ist ein ST24C64 Adr 000"
        End If
      'hier können noch weitere I²C IC Teilnehmer abgefragt werden.
    '(
     If Chipaddress = xxx Then
        Print "gefunden  " ; "h  " ; Hex(chipaddress) ; "   b " ; Bin(chipaddress)
        Print "ist ein ICxxx Adr xxx"
      End If
    ')
      End If
     Next
        Return



    Wird wohl nicht der letzte sein
    PS. Bin gerate dabei 2 * ST24C512 am Bus als Massenspeicher zu „hängen“.

    Mit freundlichen Grüßen
    fredred



Ähnliche Themen

  1. Smartcard - FUN2 mit AT90S8515 und 24C64 EEPROM - Wie jetzt?
    Von Lovebongo im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 7
    Letzter Beitrag: 24.01.2008, 11:58
  2. 24c64 Eeprom Problem
    Von Rohbotiker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 20.01.2008, 13:15
  3. PIC18F4550 und 24C64 über I2C
    Von TheScientist im Forum PIC Controller
    Antworten: 0
    Letzter Beitrag: 23.07.2007, 16:29
  4. Erledigt: EEPROM 24C64 Probleme
    Von N8Surfer im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 11.12.2006, 14:34
  5. Wiedermal Problem mit 24C64 EEPROM
    Von basil_05 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 20.06.2006, 01:15

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress