PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C EEPROM 24LC256 Probleme



masabuana
23.07.2007, 13:58
Hallo

Ich versuche nun schon länger verzweifelt Word Werte in einem 24LC256 zu speichern. Das ganze läuft zwar unter Testbedingungen ( Zahl von 1 bis 100 schreiben und danach einlesen) aber in meinem Anwendungsfall komme ich einfach auf keine Lösung.

Das ganze soll folgendermaßen aussehen(grob):




Goto Lesen

'Hauptschleife:
Do
If Schreibbedingung Goto Schreiben
Loop


Schreiben:
Wert soll im EEPROM gespeichert werden.
Wert soll im EEPROM an nächster speicherstelle gespeichert werden.
Wenn EEPROM voll beginne an erster Speicherstelle.
usw.

Lesen:
Wert lesen der als letztes geschrieben wurde

Meine Fragen:
1. Wie kann ich das ganze realisieren? Welche Adressen muss ich wie hochzählen etc.?
2. Wieviele solcher werte kann ich im 24LC256 speichern bis er einmal voll ist? (16000???).

Danke für eure Hilfe

Rofo88
23.07.2007, 14:18
Du Schreibts was von Word-Werten aber gleichzeitig von 0-100 (Byte)??

Wie man mit dem EEPROM arbeitet kannst Du hier nachlesen : https://www.roboternetz.de/wissen/index.php/Bascom_und_I2C_EEprom

masabuana
23.07.2007, 14:30
Das ganze läuft zwar unter Testbedingungen ( Zahl von 1 bis 100 schreiben und danach einlesen) aber in meinem Anwendungsfall komme ich einfach auf keine Lösung.


Ich sag ja dass in diesem Fall wo ich die ganze sache in einer Schleife laufen lass funktioniert es! Soweit kann ich alleine schon denken und Suchfunktion benutzen... Um mein Problem nochmal ganz klar zu machen:

Woher weiss ich wenn ich z.B. nach Stromweg wieder einschalte wo ich 1. meinen Wert lesen muss und 2. wo ich weiterschreibe. Das ganze soll sozusagen wie ein Endlosbandrecorder funktionieren.

Rofo88
23.07.2007, 16:04
Da wirst Du wohl eine Datenzuordnungstabelle basteln müssen in der steht wo Du zuletzt gespeichert und gelesen hast. Das könnte man z.B. in den ersten 2 Bytes des EEproms machen und da immer die Adresse ablegen wo zuletzt gespeichert wurde. Hat den Nachteil das die ersten Bytes sehr oft beschrieben werden also müßte man den Speicherbereich größer machen über die ersten 100 Bytes z.B.

milkbubi
23.07.2007, 16:06
Hi,
also hab bisher noch nicht mit EPROMS gearbeitet aber kannst du nicht einfach eine Addresse reservieren, wo du dann deinen letzten Schreibvorgang speicherst (also die Addresse davon)? Dann könntst du vor dem nächsten Schreib/Lese-Vorgang einfach die Addresse auslesen und an der nächsten Stelle weiter schreiben bzw. an der Stelle lesen.

mfg milkbubi



edit: Da war wohl jemand schneller ^^

milkbubi
23.07.2007, 16:10
... also müßte man den Speicherbereich größer machen über die ersten 100 Bytes z.B.

Dann muss er doch wieder wissen, wo er gespeichert hat, wo er was gespeichert hat 8-[

Oder versteh ich das grad falsch?

Rofo88
23.07.2007, 16:18
@milkbubi

Das Problem is das man ja im EEprom ned unendlich oft Schreiben kann. Wenn man immer nur in die selbe Adresse schreibt wird die ja zuerst ausfallen. Also nimmt man einen größeren Bereich wo die letzten Adressdaten abgespeichert werden und wenn man neue Daten Speichert schreibt man die Aktuellen Daten in einen anderen Bereich (z.B. Byte 2-3) und löscht den alten Bereich (z.B.0-1). Hat man durch den Spannungsausfall die Schreibstelle im SRAM verloren sucht man halt die ersten 100Byte im EEPROM durch wo in denen ne Adresse steht. So kann man den Schreibzugriff etwas verteilen.

Eleganter wäre es den µC vor Spannungsausfall etwas zu schützen, dass er die Daten noch schnell Speichern kann wenn die Versorgungsspannung ausfällt. Dieses Thema wurde ja schon mehrmals im Roboternetz behandelt. Da könnte man dan immer einen festen Bereich nehmen der halt nur bei nem Spannungsausfall beschrieben wird.

masabuana
23.07.2007, 17:05
Ich hatte das ungefähr so gedacht:

Ich weiss dass mein zu speichernder Wert immer grösser wird. Beim auslesen
lese ich einfach jeden Wert aus und vergleiche ihn mit dem Vorgänger. Den größten Wert nehm ich und schreib ab da weiter.

masabuana
25.07.2007, 10:22
Kann mir dabei keiner behilflich sein?

milkbubi
27.07.2007, 00:11
Durch willst den ganzen Speicher durchforsten nach dem größten Wert? Ich weiß zwar nicht ob das so üblich ist aber wenn dus so machen willst dann mach es doch so wie du geschrieben hast. Oder hast du Probleme den größten Wert zu finden?

masabuana
27.07.2007, 09:37
Ich weiß in erster Linie nicht die Adressen...wie hoch zähle ich High Adresse bis überlauf und wie hoch kann ich Low adresse zählen. Irdgendwiekann ich das aus den Datenblättern nicht erkennen...

milkbubi
27.07.2007, 13:24
Oh sorry da kann ich dir auch nicht weiter helfen, wie gesagt mit eeproms hab ich mich noch nicht befasst.
Viel Erfolg.

mfg milkbubi