- 12V Akku mit 280 Ah bauen         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17

Thema: i²c eeprom 24c265

  1. #11
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    Anzeige

    Praxistest und DIY Projekte
    Kein prob. Mußt halt nur aufpassen, daß dir kein langer Interrupt wärend des lesens oder schreibens reinrauscht...ansonsten mußt disable / enable Interrupts einbinden. Brauchste aber im normalfall aber nicht. Was jedoch noch nicht vorhanden ist ist eine Fehlerauswertung und ein Verify. Das könnte man evtl. hier noch erweitern.
    Wollte den Source schon im Download-Verzeichnis zu verfügung stellen, jedoch will ich diesen noch etwas ausfeilen.

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    13.12.2005
    Ort
    Sachsen
    Beiträge
    17
    das mit den interrupts muß ich noch verbessern.
    Habe mein Programm jetzt mal so verändert, daß auf knopfdruck von adresse 120 bis 640 in einer-Schritten word-Variablen in den ROM geschrieben werden. gleich danach werden alle wieder ausgelesen...
    kommt ein Interrupt dazwischen, sind die Werte der dem Interrupt nachfolgenden ca 100 adressen verkorkst...
    Bei disable Interrupts vorher springt mein Programm aber trotzdem in die Timer-Int - Routine des T1 (Sekundenblinker)
    naja... mit 20er blöcke gehts. oder ich probier mal die Pagewrite-Variante
    Kannst mich ja mal auf dem laufenden halten, was deine Bemühungen angeht.
    Bis denne

  3. #13
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    Zitat Zitat von lanpc5
    in einer-Schritten word-Variablen in den ROM geschrieben werden.
    ...und das soll funktionieren? Ein Word besteht aus 2 Bytes.....also in einerschritten überschreibst du jedesmal was. Richtig wären 2er schritte, aber wenn du das über die eead-Variable machst (wie ich schon beschrieben hab) wird die Automatisch um 2 erhöt. Ich benutze oft die EEad-Variable um ganze Datenströme zu speichern und laden.

    Mit Disable Interrupts kann kein Interrupt mehr erfolgen (Du deaktivierst alle Globalen Interrupts damit), da muß dir was anderes reinhauen. Mit dem Simulator ist es hier jedoch schlecht, da dieser keine ext.EEproms simulieren kann.

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    13.12.2005
    Ort
    Sachsen
    Beiträge
    17
    ...und das soll funktionieren? Ein Word besteht aus 2 Bytes.....also in einerschritten überschreibst du jedesmal was.

    Hihi... das war ja das eigentlivhe, was mich so gewundert hat...
    wenn ich z.B. auf Adresse 320 ein WORD mit Wert z.B. 254 schreibe , danach auf 321 WORD mit zb. 520, sollte beim Auslesen von Adresse 320 was anderes als 254 kommen... aber was liest der aus?... genau, 254...
    Normal wäre ja mit 2er-Schritten, habe aber einfach mal den einer-Schritt probiert... hat mich auch überascht.
    (hab auch auf z.B. 430 eine 0 und auf 429 eine 32321 geschrieben... das selbe, haben sich nicht beeinflusst... )

  5. #15
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.07.2004
    Beiträge
    274
    Hi,

    sagt mal funktioniert es auch wenn ich zwei 24C256 an den Bus anschließe? Musste ich zum Schreiben/Auslesen dann die letzte Adresse des ersten EEPROMS n+1 nehmen? oder muss da in den Const 24c256 = was anderes stehen?

    Weil wenn das gehen würde, wäre das Riesenplatz für nen Datenlogger in meinem Heli

    Grüße
    Alex

  6. #16
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    Home
    Beiträge
    213

    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

  7. #17
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    Home
    Beiträge
    213
    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

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad