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
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
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
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
> 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
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 ;)
@Torsten: Verkauft irgendein Laden in DE die FRAMs oder gibt es die nur als Samples direkt von Ramtron?
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
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
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
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
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.
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
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
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
wie wärs, mit nem kleinen goldcap, 1F und man braucht sich um eigentlich nichts mehr gedanken machen, und klein sind die auch noch
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
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
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
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.