PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 24C02 EEPROM - tatsächlich Speichergröße?



nex
28.08.2008, 11:13
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

MeckPommER
28.08.2008, 12:15
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

nex
28.08.2008, 12:49
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

markusj
28.08.2008, 13:31
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

linux_80
28.08.2008, 18:07
Hallo,

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

nex
28.08.2008, 18:33
Guten Abend,



(...)
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

linux_80
28.08.2008, 21:29
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 !

nex
28.08.2008, 21:47
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