Forum: Mikrocontroller und Digitale Elektronik I2C RAM gesucht


von Purzel (Gast)


Lesenswert?

Hi allerseits!

ich bastel gerade eine schaltung, in der ein PIC ca. 10x pro Sekunde
einen 4-byte-Messwert erfasst und abspeichern muß.
Das Problem ist nur, dass man diesen Meßwert auch nach Unterbrechung
der Versorgungsspannung noch braucht. Nun ist die Frage, wie und wo ich
diese 4 bytes abspeicher!?!?
1.) Wenn ich ein EEPROM nehme, so sind die 1.000.000 Erase/Write-Cycles
die so ein EEPROM mit sich machen lässt ziemlich schnell erreicht,
außerdem dauert das schreiben wahrscheinlich zu lange...
2.) ich versorge den Pic ständig (z.b. über eine Batterie) mit strom,
damit er die Bytes im RAM behält und nicht resettet wird
(irgendwie gefällt mir diese lösung nicht. Da ich den PIC nicht in den
Sleepmode schicken kann, ist mir der Standby-Strom eigentlich zu
hoch.)
3.) Optimal wäre ein I2C NV-RAM, welches dann mit einer Batterie
gepuffert wird. Aber ich konnte bisher kein I2C RAM finden :(
für einen parallelen Rambaustein hab ich nicht genügend ports.

Tja, das sind bisher meine ideen...hoffe irgendjemandem hier fällt noch
etwas besseres ein!

...dankeschön!

gruß,
Daniel

von thkais (Gast)


Lesenswert?

Noch viel einfacher: Du bedenkst nicht, das ein Controller verdammt
schnell ist. Das heißt: Du speicherst Deine Meßwert im internen RAM des
Controllers (der PIC hat doch so etwas, oder?) und wenn ein Stromausfall
sich ankündigt, wird einfach alles ins EEPROM geschoben.
Wenn Du den Controller mit einem mittleren Kondensator abpufferst (Du
brauchst maximal 10ms Zeit - mit viel Reserve), kannst Du das ohne
Probleme realisieren.
Es gibt schon einiges zu diesem Thema z.B:
http://www.mikrocontroller.net/forum/read-1-122529.html#122853
http://www.mikrocontroller.net/forum/read-1-114166.html#114175
http://www.mikrocontroller.net/forum/read-1-111919.html#112050

von Purzel (Gast)


Lesenswert?

hey dankeschön, da is ja ne menge nützliches dabei!

jau, der PIC hat auch ein EEPROM (zumindest der typ, den ich benutze).
Allerdings braucht der angeblich ca. 8ms / Byte... aber wenn man den
Kondensatorwert richtig wählt, wird der wohl die 32ms durchhalten...

werde ich mal testen!

gruß,
daniel

von Torsten (Gast)


Lesenswert?

Andere Möglichkeit ist ein FRAM von Ramtron, gibts mit 64 KBit oder
jetzt auch 256 KBit.
Hat eine SPI Schnittstelle und ist ein NVRAM.
Hab sehr gute Erfahrungen damit.

Mit einem EEPROM geht dasaber auch. Man kann es in eine Art Ringpuffer
schreiben. Also jeder neue Messwert an die nächste Position im EEPROM.
Sobald er voll ist, fängt man wieder vorn an. Und hat damit noch eine
Art Logbuch.

Tschau
Torsten

von Bitmonster (Gast)


Lesenswert?

> Mit einem EEPROM geht dasaber auch. Man kann es in eine Art
Ringpuffer
> schreiben. Also jeder neue Messwert an die nächste Position im
EEPROM.
> Sobald er voll ist, fängt man wieder vorn an. Und hat damit noch
eine
> Art Logbuch.

Auf diese Art schont man auch das EEPROM, weil nicht immer auf die
gleiche Stelle geschrieben wird

von Peter Kasi (Gast)


Lesenswert?

Schau auch mal nach RTC's die können meist auch noch zusätzlich ein
paar Bytes in batteriegepuffertem RAM ablegen. Und zusätzlich kriegste
auch noch ne Uhr ;)

von Malte Marwedel (Gast)


Lesenswert?

@Torsten:
Verkauft irgendein Laden in DE die FRAMs oder gibt es die nur als
Samples direkt von Ramtron?

von Torsten (Gast)


Lesenswert?

Oh, hmm, erwischt...
Das kann ich dir leider gar nicht sagen. Wir verbauen die in unseren
Geräten, aber wer dafür der Distributor ist, kann ich leider nicht
sagen.

Ich versuch es nächste Woche mal rauszufinden.

Tschau
Torsten

von Purzel (Gast)


Lesenswert?

hi.

also das mit der RTC (DS1302) hatte ich mir auch schon überlegt...aber
die sind ziemlich teuer :-/
außerdem hoffe ich immer noch auf eine Lösung ohne Batterie, da die
Schaltung möglichst wartungsarm für die Ewigkeit sein sollte...

Der EEPROM Ringpuffer gibt mir grad ein paar rätsel auf:
Okay, wenn ich für jeden messwert eine neue speicherzelle beschreibe,
so lässt sich die lebensdauer deutlich vervielfachen, das sehe ich ein.
aber ich muß doch auch irgendwo noch hinschreiben, wo der letzte
Messwert hingeschrieben wurde, oder hab ich grad einen riesen
gedankenfehler? und da die Adresse immer an die gleiche stelle abgelegt
werden sollte... naja, haben wir nix gewonnen :(
...aber bitte korrigiert mich, wenn ich mich hier irre!

Die FRAMs von Ramtron sind eigentlich genau das, was ich gesucht habe!
Besten Dank, Thorsten! Habe mir da gleich mal samples bestellt. Es gibt
die ja freundlicherweise auch mit i2C interface, also optimal für meine
Schaltung :)

Ich werde mich aber noch mit der Kondensator-Lösung befassen und da mal
ein paar tests durchführen. Sollte dies zuverlässig funktionieren, käme
man damit natürlich am kostengünstigsten und am kompaktesten weg.

Ich danke allen schonmal für die guten Tips!

gruß,
daniel

von Torsten (Gast)


Lesenswert?

Echt mit I2C? wusste ich noch nicht. Cool

Bei dem EEPROM haste recht. Ein paar Steine liegen da im Weg.
Wenn man immer die gleiche Datensatzlänge hat, genügt eine Endekennung.
Das kann ein Wert sein, der niemals in den Messdaten auftreten kann,
also vielleicht 0xFF oder was auch immer.
Wenn die Datensatzlänge variiert, dann muss man noch eine Startkennung
hinzufügen, sozusagen ein kleines Protokoll.
Wenn das System startet, wird dann erst der EEPROM nach der Endekennung
durchsucht, und schon hat man die Adresse wo der nächste Wert gepeichert
wird.

Ist nicht die eleganteste Lösung, funktioniert aber ;-)

MfG
Torsten

von Matthias (Gast)


Lesenswert?

Hi

@thkais
Der µC ist zwar sehr schnell. Ein EEPROM aber vergleichsweise sehr
langsam. Die üblichen internen EEPROM's haben meist keinen Page-Mode.
Damit lassen sich nur einzelne Bytes schreiben. Und das dauert bei den
PIC's pro Byte schon mind. 4ms (bei den AVR's sogar 8ms). Damit sind
deine 10ms für 4 Byte wesentlich zu wenig. Ich würde mindestens 25ms
für 4Byte ansetzen. Diese Zeit zu überbrücken erfordert unter Umständen
schon ganz ordentlich Brummer von C's.

Matthias

von thkais (Gast)


Lesenswert?

OK, hast recht mit den Zeiten - ich hatte noch die 4ms für eine ganze
Page bei den I²C-EEProms im Kopf.
Aber 25ms sind doch nix. Schon die Netzspannung hat eine Zykluszeit von
20ms - so groß müssen die Kondensatoren da auch nicht sein. Das kann man
auch ausrechnen - aber heute abend nicht mehr.

von Matthias (Gast)


Lesenswert?

Hi

aus
Q = I * t und  C = Q / U

C = (I * t) / U

Kommt jetzt eben auf den Strom und die erlaubte minimale Spannung an.
Bei 20mA und ein paar Volt Spannungsdifferenz kein Problem. Bei 100mA
und nur einem Volt sinds schon 2500µF.

Matthias

von Purzel (Gast)


Lesenswert?

das klingt ja ganz gut soweit. Die sache mit dem dicken kondensator werd
ich mal näher erforschen...
ist es denn sinnvoll, den kondensator VOR den Spannungsregler zu
setzen, um eine konstante Spannung zu garantieren? Wie hoch ist der
Verluststrom eines 78L05?
Der Nachteil dieser Variante wäre allerdings, dass ich dann 2
Spannungsregler brauche, da der Rest der Schaltung sich mit ~300mA ganz
gut bedient...aber das lässt sich noch verkraften.

gruß,
daniel

von Peter D. (peda)


Lesenswert?

Du kannst auch einfach einen externen EEPROM anschließen, z.B. 24C16.

Der erlaubt ein Blockschreiben und läuft bis runter zu 1,8V.

Damit mußt Du nur 6 Bytes senden (2 Adresse + 4 Daten), was bei 400kHz
I2C-Baudrate etwa 0,14ms dauert.

Den Schreibzyklus (10ms) macht er dann intern.

D.h. der Kondensator muß nur so groß sein, um den PIC für 0,14ms zu
versorgen und dann noch für 10ms >1,8V an den EEPROM zu liefern.


Peter

von Marcel Meyer (Gast)


Lesenswert?

wie wärs, mit nem kleinen goldcap, 1F und man braucht sich um eigentlich
nichts mehr gedanken machen, und klein sind die auch noch

von Matthias (Gast)


Lesenswert?

Hi

Goldcaps haben reichlich Innenwiderstand. Um die 30 Ohm sind bei 1F
völlig normal. Das kann, je nach Strombedarf der Schaltung,für ganz
ordentlich Spannungsabfall sorgen.

Matthias

von Michael (Gast)


Lesenswert?

Hallo,
ich hab eben mal nachgerechnet:
Datenaufkomen 40 Byte / Sekunde
2400 Byte / Minute
144000 / Stunde
3.456.000 / Tag
Wenn du jetzt wir Peter vorgeschlagen hat ein EEPROM nimmst,
meinetwegen ein 24C64, hast du 16KByte nimmst und immer hintereinander
hereinschreibst, beschreibst du das EEPROM 210 mal am Tag. Teilst du
jetzt die typischen 1.000.000 Schreib-Läschzyklen durch 210, kommst du
auf 4761 Tage. Das entspricht bei 365 Tagen / Jahr ziemlich genau 13
Jahre. Von ST Mikrochip gibt es EEPROMS, die einen Bereich haben, der
bis zu 10.000.000 gelöscht/beschrieben werden kann.24LC65 ist so ein
Typ. Dort kannst du die aktuelle Adresse oder so etwas
mitprotokollieren. Ich hoffe, meine Rechnung enthält keinen Fehler.
Michael

von Matthias (Gast)


Lesenswert?

Hi

dazu kommt noch das man die garantierten Schreibzyklen oftmals deutlich
überschreiten kann ohne das gleich was schief geht.

Ich hab hier mal einen Test mit einem ATMega8 gemacht. Dessen EEPROM
ist mit max. 100k Schreibzyklen angegeben. Das erste gekippte Bit gabs
nach 4,6M Schreibzyklen.

Matthias

von Purzel (Gast)


Lesenswert?

Hallo Leute!

Nochmal ein ganz großes dankeschön für die vielen guten antworten.
Ich habe mir das alles nochmal durch den kopf gehen lassen.
Heraus kam, dass ich wohl auch mit durchschnittlichen 500 Schreibzyklen
pro Tag auskommen werde, worauf hin sich ein kontinuierliches Schreiben
der Messwerte in den EEPROM doch eher anbietet, als das ganze aufwendig
mit weiteren externen Komponenten zu lösen, nur um das EEPROM zu
schonen. Außerdem ist ein 24C01 deutlich billiger als ein großer
Kondensator + zusätzlichem Spannungsregler. Das Dumme ist auch, dass
ich keinen Interrupt des uCs für die Spannungsabfallerkennung opfern
kann/möchte. Wenn ich nun auch noch die vorgeschlagene
Ringpuffer-Technik verwende, wäre das Gerät praktisch wartungsfrei für
die Ewigkeit! ...und das bei nur einer zusätzlichen externen
Komponente.


Gruß,
Daniel

von FranzK (Gast)


Lesenswert?

Hallo,

es gibt da ja auch noch die Touch-Memories von Dallas Typen DS 19xx.
Die Dinger bestehen aus nem SRAM mit Puffer-Batterie. Speichergrößen
von 512 Bit bis 64kBit. Vielleicht ist das auch noch eine Alternative.
Ach ja die Dinger werden über das 1-Wire Protokoll von Dallas
angesprochen. Die Batterie garantiert eine Lebenszeit von über 10
Jahren!

Gruß Franz

von Marcus M. (Gast)


Lesenswert?

Hallo FRank,

hast Du die Dinger mal eingesetzt?
Falls ja, könntest Du mir mal kurz beschreiben, wie die Funktionieren?
Ist die Batterie nun immer dabei oder muß die extern sein, IMHo sind
davon einige sogar seriell angesteuert. Hast Du da mal eine gute
Übersicht zur Hand? Ich werd einfach nicht schlau drauß, welche nun
welche Zusatzbeschaltung brauchen. Ansonsten wäre das nämlich genau
dass, was ich suche!

Danke Marcus

von FranzK (Gast)


Lesenswert?

Hallo,

also selbst getestet habe ich die noch nicht.
Ich hatte aber vor einigen Tagen ein Buch in der Hand, in dem die
Touch-Memories über One-Wire als Lern-Beispiel in Assembler beschrieben
waren.
Als ich dein Posting sah, habe ich mir gedacht vielleicht paßt das ja.
Zur  Batterie: In dem Buch (leider nur Infos aus 3. Hand) stand das die
RAMs mit ner eingebauten 3V Litium-Zelle gespeißt werden. Die haben sich
da auf die Typen DS 1991 -DS1996 bezogen (die brauchen wohl nix an
externer Beschaltung außer halt dem einen "One-Wire").
Das ganze gibt es dann wohl noch als EPROM aber leider nicht als
EEPROM. Die EPROMS heißen DS198X.

Gruß Franz

von Dr. G. Reed (Gast)


Lesenswert?

irgendwo von Atmel oder Microchip gibts eine Application Note, in der 
für solche Fälle ein Ringpuffer verwendet wird.
Damit werden jedesmal andere EEprom Zellen beschrieben, was die 
Lebensdauer erhöht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.