Spara till eepromet när spänningen slås av?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
simon78
Inlägg: 1091
Blev medlem: 8 juni 2004, 11:05:51
Ort: Vinninga/Lidköping
Kontakt:

Spara till eepromet när spänningen slås av?

Inlägg av simon78 »

Jag har snart byggt färdigt en flödesmätare för att mäta bensinförbrukningen i båten. (inte min båt än, vet inte om jag orkar bygga en för diesel än.)

Mätaren har en resetknapp som man kan nollställa förbrukat antal liter med, lämpligen vid tankning. Då kan man lätt hålla koll på hur mycket man tankat, eller hur mycket bränsle som gick åt när man lånade ut båten etc.

Hursomhelst, när man går ifrån båten vill man bryta huvudströmen. Men, man vill ändå behålla tank-minnet. Jag ser ett antal lösningar, men vet inte vad som kan funka bäst. Man skulle ju kunna koppla förbi huvudströmmen, med nackdelen att apparaten alltid är på, och när man grejjar med elen (rätt så ofta enl. erfarenhet) så kan minnet försvinna. Man skulle ju också kunna spara till eepromet i processorn kontinuerligt, men jag vet inte riktigt när. eepromet har ju ett begränsat antal skrivningar. Man skulle ju också kunna ha ett backupbatteri som låter processorn hålla minnet under tiden den inte används. Eller kanske en kondensator som håller lite laddning, tillräckligt länge för att hinna spara till eepromet. Men hur ska processorn få reda på att spänningen är frånkopplad?

Vad tror ni är den enklaste/billigaste/bästa lösningen?
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Vad för processor?

Om den har någon sorts komparator eller ADC så är det ju ganska enkelt att låta den mäta matningen, och med komparatorn kan du nog få ett interrupt så att du kan spara till EEPROM:et så snabbt som möjligt. Mät alltså matningen vid ingången till kortet och efter den punkten sätter du t.ex. en diod och en halvstor konding så att det finns kvar ström några extra ms.
Användarvisningsbild
simon78
Inlägg: 1091
Blev medlem: 8 juni 2004, 11:05:51
Ort: Vinninga/Lidköping
Kontakt:

Inlägg av simon78 »

Det är en atmega48, så det finns adc, externa interrupter och pin-change-interrupter, som man kanske skulle kunna använda. Hur lång tid kan man tänka sig att kondingen håller? Jag funderar nämligen på hur ofta man behöver polla ADCn.
sodjan
EF Sponsor
Inlägg: 43244
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Du skulle kunna sätta ditt ett FRAM minne från Ramtron.
De fungerar som ett (externt) EEPROM med den skillnaden att
det skrivs snabbare och att det inte har några begränsningar
i antal skrivningar.

Eller fixa en avkänning när spänningen är på gång att
försvinna, och skriva till internt EEPROM då.
Antingen med special kretsar för det (Maxim har massor
av varianter) eller med en enkel diod/konding koppling.
Du behöver ju inte så många ms för att spara undan värden.

Du ska inte ha en funktion i applikationen som *pollar*
spänningen, du måste ju polla ganska ofta för att
vara på säkra sidan, och oftast kommer ju allt att vara OK.
Lösningen bör bygga på att processorn blir *avbruten* när
det är dags, t.ex med (om det finns) intern komparator.
Eller en extern komparator/opamp kopplad till en vanlig
interruptpinne.
Användarvisningsbild
simon78
Inlägg: 1091
Blev medlem: 8 juni 2004, 11:05:51
Ort: Vinninga/Lidköping
Kontakt:

Inlägg av simon78 »

ATMega48 hade visst en intern komparator. Det passar ju bra. Den kunde ju också trigga en interrupt, så det får nog bli den vägen. Vilken spänning ska jag mäta? Innan spänningsstab (12-14V) eller efter (5V)? Om jag mäter innan så måste jag ju spänningsdela ner till 5V för att inte grilla cpun, men jag får väl en tidigare indikation på att spänningen är borta/på väg ner? Mäter jag efter så blir ju hela livet enklare, slipper några motstånd och allt blir trevligare :) Jag antar att tiden räcker till givet att kondingen är tillräckligt stor?
sodjan
EF Sponsor
Inlägg: 43244
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Notera bara att du måste "isolera" processorn från spänningstabben
med en diod, och att denna diod kommer att dra ner spänningen till
processorn med ett diodframspänningsfall. Kanske får du även
komplettera med en extra "last" efter spänningsstabben (men
före dioden) för att snabbt "dra ner" 5V'en när spänningen bryts.
Det behöver sannolikt inte vara så mycket, kanske en LED eller
liknande.
Användarvisningsbild
simon78
Inlägg: 1091
Blev medlem: 8 juni 2004, 11:05:51
Ort: Vinninga/Lidköping
Kontakt:

Inlägg av simon78 »

Tackar för tipsen. Jag har kopplat upp allt enligt era beskrivningar och det verkar funka fint. Använder vcc till LCDn (tackar för den sodjan) som last för att dra ner spänningen. Sedan positiv input till comparatorn till +5v (innan dioden) och sedan negativ till efter dioden. Sedan triggas interrupten på fallande flank. Jag satten en liten konding mellan AIN1 och AIN0 för att den inte skulle triggas allt för många gånger på raken. Tackar för alla tips som sagt. Nu visade det sig att mitt avrlib inte stödjer eeprom till atmega48, blir att få kompilera om hela toolchainen, lär ju ta ett tag....
sodjan
EF Sponsor
Inlägg: 43244
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Nu visade det sig att mitt avrlib inte stödjer eeprom till atmega48,

Kan du inte bara lägga in lite inline-ASM, att skriva några bytes
till EEPROM borde inte bli så mycket kod (?).
Användarvisningsbild
simon78
Inlägg: 1091
Blev medlem: 8 juni 2004, 11:05:51
Ort: Vinninga/Lidköping
Kontakt:

Inlägg av simon78 »

Jo, jag kan ju manipulera registren direkt i C. Men, om det finns ett nyare avrlib som stödjer min processor så är det kanske klokt att installera det. Det har blivit lättare att kompilera toolchainen nu. Bara crossdev -t avr så installeras den...
Användarvisningsbild
simon78
Inlägg: 1091
Blev medlem: 8 juni 2004, 11:05:51
Ort: Vinninga/Lidköping
Kontakt:

Inlägg av simon78 »

Det gick ju på ett litet kick, kanske under en timme. Det är ju inte mycket för en gentoo-användare :)
Nu är prototypen klar. Tänkte göra den på ett prototypmönsterkort för enkelhetens skull. Lägger snart upp en projekttråd.
Skriv svar