- LiFePO4 Speicher Test         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17

Thema: EEPROM spinnt

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2006
    Beiträge
    169
    Anzeige

    E-Bike
    Ich hab es jetzt mit Pausen versucht, aber auch das änderte überhaupt nichts. Ich glaube auch nicht, dass beim Lesen oder Schreiben Fehler auftreten, dass also falsche Werte ins EEPROM geschrieben oder gelesen werden.

    Hir nochmal mein aktueller Quellcode:
    Code:
    $regfile = "m16def.dat"
    $crystal = 16000000
    $baud = 38400
    
    Config Sda = Portc.1
    Config Scl = Portc.0
    Config I2cdelay = 20
    
    Dim A As Byte
    Dim B As Byte
    Dim Lesen(8) As Byte
    Dim I As Byte
    Dim X As Byte
    Dim Schreiben(8) As Byte
    Dim Temp As Byte
    
    I2cinit
    
    Do
    X = 1
    
    '---- schreibe in EEprom ----
    For A = 1 To 16
    I2cstart
    Waitms 5
    I2cwbyte &HA0
    Waitms 5
    I2cwbyte A
    Waitms 5
    For I = 1 To 8
    I2cwbyte X
    Waitms 5
    Incr X
    Next I
    I2cstop
    Waitms 20
    Next A
    
    
    '--- lesen vom EEprom ----
    For B = 1 To 16
    I2cstart
    Waitms 5
    I2cwbyte &HA0
    Waitms 5
    I2cwbyte B
    Waitms 5
    
    I2cstart
    Waitms 5
    I2cwbyte &HA1
    Waitms 5
    For I = 1 To 7
    I2crbyte Lesen(i) , Ack
    Waitms 5
    Next I
    I2crbyte Lesen(8) , Nack
    Waitms 5
    I2cstop
    Waitms 50
    
    For I = 1 To 8
      Temp = B * 8
      Temp = Temp - 8
      Temp = Temp + I
      Schreiben(i) = Temp
    Next I
    'Printbin Schreiben(1)
    Printbin Lesen(1)
    
    Next B
    Wait 2
    
    Loop
    End
    Und hier mal das, was ich dann beim lesen erhalte: (jede Zeile entspricht einer Page zu je 8 Byte)
    Code:
    051 052 053 054 055 056 049 114
    052 053 054 055 056 049 114 115
    053 054 055 056 049 114 115 116
    054 055 056 049 114 115 116 117
    055 056 049 114 115 116 117 118
    056 049 114 115 116 117 118 119
    049 114 115 116 117 118 119 120
    114 115 116 117 118 119 120 113
    115 116 117 118 119 120 113 121
    116 117 118 119 120 113 121 122
    117 118 119 120 113 121 122 123
    118 119 120 113 121 122 123 124
    119 120 113 121 122 123 124 125
    120 113 121 122 123 124 125 126
    113 121 122 123 124 125 126 127
    121 122 123 124 125 126 127 128
    Für mich sieht das so aus, als würde der EEPROM beim Lesen oder Schreiben "verrutschen". Wie finde ich denn heraus, ob der Fehler beim Lesen oder beim Schreiben liegt, oder ob möglicherweise beide Routinen fehlerhaft sind?

    Ich danke euch für eure bisherige Hilfe, auch wenn der Fehler noch immer nicht beseitigt ist.
    Bin auch weiterhin für jeden Tipp dankbar.

  2. #12
    Zugegeben, mit BASCOM-AVR habe ich mich noch nicht groß beschäftigt, aber bereits länger mit Bascom 8051. Da gab es Probleme, wenn innerhalb der I2C-Routine etwas anderes gemacht wurde. Deswegen ist es vielleicht den Versuch wert, die Adress- und Werteberechnungen vor i2cstart ablaufen zu lassen. Auch ist meines Wissens nur nach der kompletten Übertragung eine Pause von 10 ms nötig, nicht zwischendurch. Viel Erfolg
    dolivo

  3. #13
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.09.2004
    Beiträge
    264
    Ich habe mich kürzlich mit dem Lesen/Schreiben auf ein 24LC256 beschäftigt und ähnliche Probleme gehabt. Das Schreiben im Page-Write-Modus hat einwandfrei funktioniert. Das Lesen jedoch nicht. Mit Bascom habe ich es nicht geschafft, ein Byte über I2C zu lesen und direkt auf dem LCD darzustellen (inzwischen klarer, ich nutze nämlich ein I2C-LCD).
    Ich lese nun die gesamte page in eine indizierte variable ein und lasse sie dann anzeigen. Das funktioniert einwandfrei:

    Code:
    I2cstop
    I2cstart
    I2cwbyte Sollwegspeicherwr
    I2cwbyte 32
    I2cwbyte 0
    I2cstop
    I2cstart
    I2cwbyte Sollwegspeicherrd
    For I = 1 To 40
    I2crbyte Ascizeichen(i) , Ack
    Next
    I2cstop
    
    For I = 1 To 40
    Lcd Chr(ascizeichen(i) )
    Next
    mfg

    Stefan

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2006
    Beiträge
    169
    Hallo Suggarman,
    Danke für den Tipp. Trotzdem ist mir dein Code etwas unklar.
    So wie ich das verstehe Schreibst du eine 0 in die 32. Page und ließt dann die ersten 40 Zeichen der Page aus.
    Die Ausleseroutine scheint mir aber laut Datenblatt nicht so ganz zu stimmen.
    Müsste es nicht in etwa so aussehen:
    Code:
    I2cstop
    I2cstart
    I2cwbyte Sollwegspeicherwr
    I2cwbyte 32
    I2cwbyte 0
    I2cstop
    
    I2cstart
    I2cwbyte Sollwegspeicherwr
    I2cwbyte 32
    
    I2cstart
    I2cwbyte Sollwegspeicherrd
    For I = 1 To 40
    I2crbyte Ascizeichen(i) , Ack
    Next
    I2cstop
    
    For I = 1 To 40
    Lcd Chr(ascizeichen(i) )
    Next
    Korrigiert mich bitte, wenn ich da falsch liegen sollte.

  5. #15
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.09.2004
    Beiträge
    264
    Das 25LC256 besitzt 32768 byte Speicher oder 512 Pages a 64 byte.
    Zur Adressierung muss man erst das highbyte und dann das lowbyte übertragen. 32/0 ist also 32*256+0 = 8192 oder 8192/64 = Page 128. Das ist also eine beliebige Adresse des Speichers. Der Code ist so in Ordnung.

    mfg

    Stefan

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2006
    Beiträge
    169
    Ok, danke Stefan. Da lag ich wohl falsch.
    Ich habe meinen Code nun genauso gestaltet wie deine Vorgabe, doch es hat sich nichts geändert. Ich erhalte weiterhin exakt die selbe Ausgabe.
    Ich weiß einfach nicht, wo ich noch nach dem Fehler suchen soll.

    Ich danke euch riesig für eure Unterstützung bei der Lösung des Problems.

  7. #17
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.09.2004
    Beiträge
    264
    Ich weiß einfach nicht, wo ich noch nach dem Fehler suchen soll.
    Mal abgesehen davon, dass das Teil für´s Museum ist....

    Ich habe mir gerade mal das Datenblatt angesehen. Dieser Baustein wird nicht über eine Adresse angesprochen und funktioniert bestimmt nicht richtig mit anderen I2C-Bausteinen zusammen.
    Das Teil kann nur 128 byte speichern. Deine Adresse "A0" ist schon außerhalb des Bereiches. Außerdem kann das Ding nur einen "4-byte-page-write", du versuchst aber mehr hineinzuschreiben.
    Mein Rat: Deckel auf, Baustein rein, Deckel zu
    Kauf dir für kleines Geld einen neuen I2C-Speicher.

    mfg

    Stefan

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress