- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 8 von 8

Thema: 24C02 EEPROM - tatsächlich Speichergröße?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.04.2005
    Ort
    Süddeutschland
    Alter
    36
    Beiträge
    13

    24C02 EEPROM - tatsächlich Speichergröße?

    Anzeige

    Powerstation Test
    Guten Tag,

    Ich benutze einen 24L02 EEPROM um die Daten von einem LM75 zu speichern. Das funktioniert auch wunderbar, nur irgendwie erschließt sich mir die speicherbare Datenmenge nicht so wirklich. Der IC ist mit 2 Kbit Speicher ausgestattet, was ja 256 Byte entsprechen sollten, richtig? Vom LM75 erhalte ich für Temperatur und Nachkommastelle zusammen 2 Byte, d.h. ich dürfte auf dem EEPROM maximal 128 Datensätze speichern können. Tatsächlich kann ich aber exakt 250 Datensätze speichern. Warum ist das so?

    Grüße

    Marc

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    59
    Beiträge
    1.080
    Tja, was soll man sagen? Irgendwo muss der Fehler stecken, und das dein 24L02 doppel soviel Kapazität hat wie angegeben, ist unwahrscheinlich

    Ich vermute daher, das du zwar fleissig speichern kannst, davon aber nur jeweile 1 Byte gesichert wird und das zweite Byte vom nachfolgenden Satz wieder überschrieben wird. ... oder sowas in der Art.

    Das LM75 gibt die Temperatur als 9 Bit aus, also eigentlich viel genauer, als es diese überhaupt messen kann. (+-2-3 Grad lt. Datenblatt). Eigentlich müßte es doch sowieso genügen, die oberen 8 Bit als ein Byte zu sichern. (hab das Datenblatt des LM75 nur mal kurz überflogen, also nicht hauen, wenn ich Schnulli geschrieben hab^^)

    Gruß MeckPommER
    Mein Hexapod im Detail auf www.vreal.de

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.04.2005
    Ort
    Süddeutschland
    Alter
    36
    Beiträge
    13
    Hallo MeckPommER,

    "leider" fehlen beim Abfragen der Daten keine Informationen, d.h. ein Überschreiben ist ausgeschlossen. Das Highbyte des LM75 gibt die Temperatur in ganzen Grad an, das 7. Bit des Lowbyte ist für die Nachkommastelle zuständig. Ist es 1, gibt's ne ",5", ansonsten nicht. Da ich die Bytes dann per I²C weiterschicke, sollte doch jeweils ein Byte "verschwendet" werden, auch wenn eigentlich kein ganzes Byte nötig wäre (Bsp: Temperatur ist 25, was 11001 enstpricht, und somit 3 Bits übrig wären). Oder wird da aufgefüllt? Dann könnte ich es mir das durchaus vorstellen. Dagegen spricht aber, dass beim wiederauslesen per I²C keine Daten durcheinandergeworfen sind, d.h. die Daten müssen wohl Byteweise ankommen, würden die Bytes beim schreiben aufgefüllt müsste doch nichts gescheites dabei rauskommen, oder? Schon seltsam die ganze Sache, irgendwo ist da ein Denkfehler begraben....

    Gruß

    Marc

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Hi Marc,

    Du könntest ja einmal versuchen, ein bestimmtes Muster auf den EEPROM zu "brennen", z. Bsp ein uint8_t hochzählen und draufschreiben.
    Wenn du dann die komplette Folge wieder auslesen kannst, hast du einen Zauber-EEPROM, ansonsten ein Problem.

    mfG
    Markus

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    Du könntest uns ja mal zeigen wie Du die Adresse im EEprom berechnest, dann sehen wir gleich wo der Zusatzspeicher herkommt.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    28.04.2005
    Ort
    Süddeutschland
    Alter
    36
    Beiträge
    13
    Guten Abend,

    Code:
      
    (...)
     I2cstart
       I2cwbyte Lm75slaveread
       I2crbyte Lm75high , Ack
       I2crbyte Lm75low , Nack
       I2cstop
    
       If Lm75high > 127 Then
          Temperatur = Lm75high And 127
          Temperatur = Not Temperatur
          Incr Temperatur
       Else
          Temperatur = Lm75high
       End If
    
    
    If A <= 250 Then
       I2cstart
       I2cwbyte Eepromw
       I2cwbyte A
       I2cwbyte Temperatur
       I2cwbyte Lm75low
       I2cstop
    End If
    A = A + 2
    (...)
    Dass A <= 250 sein muss habe ich durch einfaches trial and error rausgefunden, wenn A 251 wird kommt es zum Überlauf. Später im Programm geb ich das Ergebnis noch per UART aus, deshalb kann ich das sagen und nachvollziehen. Mit Lm75low lese ich die Nachkommastelle aus und speichere sie direkt ins EEPROM, die Umwandlung in den ",5" String erfolgt erst anschließend, nachdem ich die Daten wiederausgelesen hab, tut also nichts zur Sache. Die Anweisung A = A + 2 selbstverständlich deshalb, weil ich zwei Bytes schreibe.

    Wie gesagt, das ganze funktioniert einwandfrei, nur steig ich nicht hinter die Datenmenge. Eigentlich könnte mir das solange es funktioniert ja egal sein, nur macht es die ganze Sache nicht mehr berechenbar. Und bei einem späteren 256 Kbit Speicher ist ausprobieren langwierig und nicht gerade der Lebensdauer förderlich....

    Grüße

    Marc

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Das mit dem 250 weiss ich jetzt auch ned,
    in den 02 passen normal 256 Bytes,
    Du zählst bei der Adresse immer +2,
    also sinds bei Dir 250/2, kommt auf so ca. 125 !

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    28.04.2005
    Ort
    Süddeutschland
    Alter
    36
    Beiträge
    13
    klingt in der Tat logisch, damit wär wohl der größte Teil des Denkfehlers ausgebuddelt Jetzt wäre nur noch interessant zu wissen warum ich nur bis 250 und nicht bis 256 (bzw. 255 wenn ich bei 0 Anfange) komme.

    Dennoch Danke schonmal!

    Marc

Berechtigungen

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

12V Akku bauen