-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: EEPROM spinnt

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

    EEPROM spinnt

    Anzeige

    Hallo alle zusammen.

    Da ich noch einen alten 24C01 mit 128 Byte Speicher rumliegen hatte, wollte ich mal testen, ob ich den zu laufen bekommen. Ich ahbs schon geschaft Daten zu schreiben und zu lesen.
    Es kommt nur leider irgendwie nicht so richtig das raus, was ich auch hineingeschrieben habe.

    Mein Quelltext sieht wie folgt aus:
    Code:
    $regfile = "m16def.dat"
    $crystal = 16000000
    $baud = 38400
    
    Config Sda = Portc.1
    Config Scl = Portc.0
    Config I2cdelay = 10
    
    Dim A As Byte
    Dim B As Byte
    Dim Lesen As Byte
    Dim I As Byte
    
    Do
    
    '---- schreibe in EEprom ----
    
    For A = 1 To 16
    
    I2cstart
    I2cwbyte &HA0
    I2cwbyte A
    For I = 1 To 8
    I2cwbyte A
    Next I
    I2cstop
    Waitms 10
    Next A
    
    
    '--- lesen vom EEprom ----
    For B = 1 To 16
    
    I2cstart
    I2cwbyte &HA0
    I2cwbyte B
    
    I2cstart
    I2cwbyte &HA1
    For I = 1 To 7
    I2crbyte Lesen , Ack
    Printbin Lesen
    Next I
    I2crbyte Lesen , Nack
    Printbin Lesen
    I2cstop
    
    Waitms 50
    Next B
    Wait 2
    
    Loop
    
    End
    Ich schreibe also jeweils acht mal hintereinander die binären werte von 1 bis 16 in das EEPROM.
    Raus bekomme ich aber folgendes:
    Code:
    007 007 007 007 007 007 007 015 007 007 007 007 007 007 015 015 007 007 007 007 007 015 015 015 007 007 007 007 015 015 015 015 007 007 007 015 015 015 015 015 007 007 015 015 015 015 015 015 007 015 015 015 015 015 015 015 015 015 015 015 015 015 015 015 015 015 015 015 015 015 015 016 015 015 015 015 015 015 016 016 015 015 015 015 015 016 016 016 015 015 015 015 016 016 016 016 015 015 015 016 016 016 016 016 015 015 016 016 016 016 016 016 015 016 016 016 016 016 016 016 016 016 016 016 016 016 016 016
    Das ist ja nun nicht ganz das, was ich mir vorgestellt hatte. Sieht irgendwie recht wild aus.

    Hab vielleicht jemand ne Ahnung woran das liegen könnte. Ich muss zugeben, dass ich zum ersten mal mit nem EEPROM arbeite. Ist da eventuell ein Fehler in meinem Quelltext? Es kommt immer nur das richtige raus, wenn ich 128 mal den selben Wert ins EEPROM lade.

    Ich bin euch für jeden Tipp dankbar!

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    06.01.2009
    Ort
    NS
    Beiträge
    7
    Ich sehe jetzt nichts was auffällig wäre das da was falsch wäre.
    Ich wüsste jetzt auch nicht ob die 10ms schreibzugriff für jeden geschriebenen Byte zählt.
    Versuch doch erstmal die Bytes einzeln zu schreiben
    Code:
    $regfile = "m16def.dat"
    $crystal = 16000000
    $baud = 38400
    
    Config Sda = Portc.1
    Config Scl = Portc.0
    Config I2cdelay = 10
    
    Dim A As Byte
    Dim B As Byte
    Dim Lesen As Byte
    
    Do
    
    '---- schreibe in EEprom ----
    
    For A = 1 To 16
    
    I2cstart
    I2cwbyte &HA0      ' Adressieren
    I2cwbyte A            ' Speicheradresse
    I2cwbyte A            ' Databyte
    I2cstop
    Waitms 10
    Next A
    
    
    '--- lesen vom EEprom ----
    For B = 1 To 16
    
    I2cstart
    I2cwbyte &HA0
    I2cwbyte B
    
    I2cstart
    I2cwbyte &HA1
    I2crbyte Lesen , Nack
    Printbin Lesen
    I2cstop
    
    Waitms 50
    Next B
    Wait 2
    
    Loop
    
    End

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2006
    Beiträge
    169
    hm... ok, hab ich probiert.

    jetzt kommen zumindest schon mal die Werte von 1 bis 16 raus.

    Aber ich würde doch ganz gern das gesamte EEPROM beschreiben.


    Ich habe jetzt mal alle 8 Byte aller 16 auf 0 gesetzt und dann ausgelesen. Es kamen lauter Nullen.
    Dann habe ich das erste Byte jeder Page auf A(siehe Quelltext) gesetzt und jeweils zwei Byte pro Page ausgelesen. Es hätte also 1 0 2 0 3 0 usw. rauskommen müssen. Es kam aber wieder nur Mist raus.

    Könnte das vielleicht daraufhinweisen, dass in der Routine zum Auslesen vielleicht ein Fehler steckt?

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2006
    Beiträge
    169
    Hmm... da keiner einen Fehler im Code zu finden scheint und da vielleicht auch gar kein Fehler steckt, ist das zwar einerseits gut, bringt mich aber der Lösung meines Problems leider nicht näher.
    Ist es eventuell möglich, dass der EEPROM selber defekt ist? Aber würde sich dann nicht gar nichts mehr tun?
    Ich hab auch leider grad keinen anderen da, dass ich es mit einem anderen probieren könnte.
    An der Verbindung mit dem AVR kanns nicht liegen oder? Ich hab SCL und SDA über je einen 4,7k Widerstand mit +5V verbunden. Der Widerstand passt doch so oder?
    Ansonsten würde mir echt nicht mehr einfallen, woran es noch liegen könnte.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2006
    Beiträge
    169
    Hallo.
    Ich habe mir jetzt einen anderen EEPROM besorgt. Bei diesem habe ich exakt das selbe Problem.
    Ich versteh einfach nicht, warum da immer so ein Mist rauskommt und nicht die werte, die ich gespeichert habe.
    Irgendwie scheint beim Lesen oder schreiben ein Fehler zu liegen, so dass der Chip immer in ne falsche Page springt oder so.
    Ich verzweifle hier bald. Es will und will einfach nicht funktionieren und ich finde absolut keinen Fehler.

    Hat von euch noch jemand einen schlauen Einfall, woran es liegen könnte? Was mache ich falsch?

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164
    Prüf mal die Pageeinstellung gemäss Datenblatt.

    Diese Inner-Schleife:
    For I = 1 To 8
    I2cwbyte A
    Next I
    wird da nicht funktionieren.

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.03.2006
    Beiträge
    200
    Wenn kein Fehler im Quelltext, dann schaue mal ob BrownOutDetection in den Fusebits gesetzt ist.
    Scheint ein beliebter Fehler zu sein.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.08.2006
    Beiträge
    169
    Danke für den Tipp, aber leider hat auch das Setzen des Fusebits für die BrownOutDetection keinerlei Verbesserung gebracht.



    Prüf mal die Pageeinstellung gemäss Datenblatt.

    Diese Inner-Schleife:
    For I = 1 To 8
    I2cwbyte A
    Next I
    wird da nicht funktionieren.
    Wie meinst du das, ich seh da keinen Fehler. Lasse mich natürlich gern eines besseren belehren.

  9. #9
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Hallo!

    Ich habe mich vor zig Lahren mit beschreiben von EPROMs und EEPROMs beschäftigt und kann mir nur errinern, dass jedes Byte nach dem Schreiben durchs Lesen verifiziert werden soll und das Schreiben des Bytes so lange wiederholt werden muß, bis die Verifizierung erfolgreich ist.

    Das nächste Byte soll erst nach erfolgreicher Verifizierung ins EEPROM geschrieben werden. Die maximale Anzahl der Schreibfersuche (25?) soll nach dem Datenblatt festgelegt werden um die fehlerhafte Bausteine zu erkennen.

    Im Code habe ich vereinfachten PAD (Programmablaufdiagramm) skizziert.

    Sollte sich in der Zwischenzeit etwas geändert haben, ist mein Beitrag hinfällig.

    MfG
    Code:
                       Adresse festlegen
                       Byte festlegen
       +-----------------> V
       |       +-----> Byte Schreiben
       |       |       Byte lesen
       |   +---|---< j Geschriebenes=Gelesenes?
       |   |   |           n
       |   |   |           V
       |   |   +---< n Anzahl der Schrebbefehle=Max.? j -> fehlerhaft
       |   |
       |   +---------> Nächste Adresse
       |               Adresse=Max? j -> fertig
       |                   n
       |                   V            
       |               Nächstes Byte
       +-----------------< V

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164
    Du musst beim Schreiben evtl Pausen dazwischen setzen gemäss Datenblatt.

    mfg

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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