Sida 1 av 1

Spara variabler i PIC

Postat: 16 oktober 2005, 14:40:13
av cosmox
Hej!

Hur sparar jag inställningar (olika variabler) på enklaste sättet när spänningen kopplas ifrån?
Finns det något bra minne med batteri?

/Hampus

Postat: 16 oktober 2005, 14:56:48
av bengt-re
Det finns ju EEprom i picarna som är perfekt till detta. Lite olika mycket i olika varianter, men de flesta har iaf något.

Postat: 16 oktober 2005, 15:10:59
av cosmox
Tack för snabbt svar!

I bland hjälper det att läsa lite...
Jag var lite nervös pga att jag trodde man var tvungen att skriva ASM för att göra det.
(skriver i crownhills basic compiler)

Det var ju jätte enkelt!
EWRITE och EREAD. lättare kan det nog inte bli. :)

/Hampus

Postat: 16 oktober 2005, 15:24:41
av sodjan
Men problemet är ju inte skrivningen till EEPROM'et i sig, utan att veta när spänningen (kommer att) kopplas från. Hur har du löst det ?

Observera även EEPROM- endurance och -refresh. Du säger inte vilken processor du använder (skulle ha varit med så klart), men för 16F628A är det parametrar D120 - D124. Ligger du under dessa värden, så är det bara att köra, annars får du ta hänsyn till det...

Postat: 16 oktober 2005, 15:30:39
av bengt-re
Ja, som sagt. EEprom håller inte hur många omskrivningar som helst (även om det är MÅNGA) och försvinner spänningen när man skriver kan det bli lite skit av det hela.. ;) Beroende på hur seriöst projektet är så kan det vara risker man kan acceptera, men glöm det inte om funktionen är viktig. Finns säkert bättre sätt, men en lösning är att övervaka matningsspänningen och ge larm till uP när spänningen börjar falla så att man får ett kontrollerat avslut. För har man en kondesator till matningen så har man alltid ett antal klockcyklar på sig innan skiten dör...

Postat: 16 oktober 2005, 15:41:59
av cosmox
PICen jag använder är en 16F877.
Skrivningen till EEPROMet ska bara ske efter att man har gått in i men meny och sedan tryckt på spara.
Så det är ingen kontinuerlig skrivning till det.
Det borde väl funka, eller?

Det är inte mycket data som ska skrivas (max 8*8 bitar skulle jag tro).

Vad är parameter D120?


EDIT:
Den går inte på batteri så jag är inte så orolig för att spänningen dör, men det kan ju såklart hända.
Jag provar och sätter en extra konding bredvid iaf.
Vilken storlek bör den ha?

EDIT igen:
Hur lång tid tar det att skriva 8 bitar till EEPROMet?

/Hampus

Postat: 16 oktober 2005, 15:49:47
av sodjan
Är det verkligen en 16F877 ? Inte en 16F877A ??

> Det borde väl funka, eller?

Det är bara du som vet vad som funkar i din applikation...

> Vad är parameter D120?

Jag hittar D120 i databladen för både 16F877 och 16F877A.
Vad var oklart ?

Postat: 16 oktober 2005, 15:51:05
av sodjan
> Hur lång tid tar det att skriva 8 bitar till EEPROMet?

Se D122.

Postat: 16 oktober 2005, 16:03:52
av cosmox
Det är en 877A.
Jag missade vart D120 fanns i databladet, men nu har jag hittat det.
Menar dom alltså tiden det tar att skriva en byte till EEPROM i D122?

/Hampus

Postat: 16 oktober 2005, 16:17:47
av sodjan
Jo, man skriver ju ett byte i taget till EEPROM arean (till skillnad från Flash arean där man skriver 4 "program words" i taget), så D122 måste gälla för skrivning av en byte.

Tiden i D122 verkar ganska normal för ett EEPROM, även för de externa.

Om man har behov av snabbare skrivningar (och ett minne som klarar spänningbortfall), så kan FRAM kretsarna från Ramtron vara ett alternativ. De är dyrare än vanliga EEPROM, men kan skrivas i full SPI eller I2C hastighet utan fördröjningar, alltså betydligt snabbare än EEPROM.

Slutligen, om du bara skriver i EEPROM när användaran väljer att göra det, så är antagligen endurance och refresh inget du behöver bekymra dig om. Användaren får trycka som f-n för att komma upp i 1 miljon skrivningar... :-)

Postat: 16 oktober 2005, 16:24:20
av cosmox
Gôtt moos.

Då provar jag med detta.

Tack för hjälpen!