Minne för loggning från PIC
Minne för loggning från PIC
Halloj!
Jag tänkte logga lite värden från accelerometer som läses av en PIC 16F627. Är det någon som har tips om någon form av minne att lagra/logga den inlästa datan i tills jag kan läsa in i en dator?
Någon form av vanligt billigt RAM minne (har mycke gamla EDO minnen sen 486-tiden) kräver ju att ström finnes tillgänglig ända tills överföringen är klar. Dessutom kräver dom ,vad jag vet, en del logik för att funka (refresher o sånt).
Någon form av hyffsat snabbt flash eller liknande kanske skulle vara något?
Om någon har något tips på hur man löser detta utan att lassa ut allt för astronomiska summor, vore jag jättegla!
Mats
Jag tänkte logga lite värden från accelerometer som läses av en PIC 16F627. Är det någon som har tips om någon form av minne att lagra/logga den inlästa datan i tills jag kan läsa in i en dator?
Någon form av vanligt billigt RAM minne (har mycke gamla EDO minnen sen 486-tiden) kräver ju att ström finnes tillgänglig ända tills överföringen är klar. Dessutom kräver dom ,vad jag vet, en del logik för att funka (refresher o sånt).
Någon form av hyffsat snabbt flash eller liknande kanske skulle vara något?
Om någon har något tips på hur man löser detta utan att lassa ut allt för astronomiska summor, vore jag jättegla!
Mats
Antagligen lär jag minst ha 2st 16-bits värden samplade 10 ggr per sekund, alltså 10*4 bytes per sekund. Jag bör ha mellan 2-5 minuters data för att det skall vara meningsfullt, men det blir ju igentligen inte så mycket, 12kB för 5 minuter.
Den länken du gav var mycket bra! Visste inte att det fanns sådana EEPROM. Seriellt är ju också perfekt, så sparar jag lite pinnar på PIC:en. Ska kolla upp lite hur dessa funkar.
Tack för tipsen!
mvh Mats
Den länken du gav var mycket bra! Visste inte att det fanns sådana EEPROM. Seriellt är ju också perfekt, så sparar jag lite pinnar på PIC:en. Ska kolla upp lite hur dessa funkar.
Tack för tipsen!
mvh Mats
- Schnegelwerfer
- Inlägg: 1863
- Blev medlem: 8 november 2004, 13:46:56
När det gäller EEPROM så har de en begränsad livslängd (ett visst antal skrivningar). Det kan vara värt att kolla upp hur länge EEPROMet fungerar i din applikation.
Blir livslängden för kort får man gå över till Flash istället, eller buffra data och göra större skrivoperationer.
EDIT: Kollade upp ELFAS SPI-EEPROM. DE klarade av 100000 skrivcykler, och det blir bara drygt ett dygns livstid om du skrivar till minnet en gång i sekunden.
Blir livslängden för kort får man gå över till Flash istället, eller buffra data och göra större skrivoperationer.
EDIT: Kollade upp ELFAS SPI-EEPROM. DE klarade av 100000 skrivcykler, och det blir bara drygt ett dygns livstid om du skrivar till minnet en gång i sekunden.
- Schnegelwerfer
- Inlägg: 1863
- Blev medlem: 8 november 2004, 13:46:56
Kollar man i datablad för t ex uC:s så brukar EEPROM vara specade för att klara ca 10 ggr fler skrivoperationer än Flash-minnet.
Står även i Elfa:s faktasidor att EEPROM brukar kunna tillåta 10 till 100 ggr flera skrivoperationer.
Fördelen med Flash är väl att de brukar vara betydligt större än ett "vanligt" EEPROM, så att varje minnesposition inte behöver skrivas över lika ofta(?).
Står även i Elfa:s faktasidor att EEPROM brukar kunna tillåta 10 till 100 ggr flera skrivoperationer.
Fördelen med Flash är väl att de brukar vara betydligt större än ett "vanligt" EEPROM, så att varje minnesposition inte behöver skrivas över lika ofta(?).
Det gäller väl om man skriver hela minnet en gång i sekunden? Om man skriver en byte varje sekund till ett minne på 64kbyte och använder det som ringbuffer blir det 200 år...Schnegelwerfer skrev: EDIT: Kollade upp ELFAS SPI-EEPROM. DE klarade av 100000 skrivcykler, och det blir bara drygt ett dygns livstid om du skrivar till minnet en gång i sekunden.
Eller raderas datan i block och skrivs om när man skriver till en byte i såna där små EEPROM?
Har själv använt mig av fram från Ramtron http://www.ramtron.com De har både seriella (SPI, I2C) ocg parallella. Har för mig att de klarar av ett flertalet miljoner skrivcykler.
// RA
// RA
Antal skrivcykler är inte hur många gånger man kan skriva till minnet, det är egentligen hur många gånger man kan radera-och-skriva-nytt-värde i en cell.
Om det då har 10K betyder det att byte 0 kan skrivas och raderas 10.000 gånger GARANTERAT. Om man då ska sampla som det beskrivs i detta projekt betyder det att man ju först sampler och fyller minnet, sedan raderas allt och man börjar om. Det kan man alltså göra garanterat 10.000 gånger eller vad tillverkaren anger.
Om det då har 10K betyder det att byte 0 kan skrivas och raderas 10.000 gånger GARANTERAT. Om man då ska sampla som det beskrivs i detta projekt betyder det att man ju först sampler och fyller minnet, sedan raderas allt och man börjar om. Det kan man alltså göra garanterat 10.000 gånger eller vad tillverkaren anger.
Tror det gäller en skriv cykel (write cycle). På en skrivcykel kan man skriva upp till 32 bytes på det EEPROM jag använder (jag skriver förnärvarande 4 bytes per WC (Write Cycle).cyr skrev:Det gäller väl om man skriver hela minnet en gång i sekunden? Om man skriver en byte varje sekund till ett minne på 64kbyte och använder det som ringbuffer blir det 200 år...Schnegelwerfer skrev: EDIT: Kollade upp ELFAS SPI-EEPROM. DE klarade av 100000 skrivcykler, och det blir bara drygt ett dygns livstid om du skrivar till minnet en gång i sekunden.
Eller raderas datan i block och skrivs om när man skriver till en byte i såna där små EEPROM?
Jag kör alltså tio WCs per sekund, 4 bytes per WC och 8192 bytes EEPROM, borde bli 8192 / 4 WCs för en fullständig loggning = 2048 WCs. Databladet lovar "more than" 1.000.000 skrivcycler, vilket alltså borde bli 1.000.000 / 2048 = ~488 fulla loggningar.
Om man läser noga står det "more than 1.000.000 erase/write cycles" om dom då menar att det måste till en "erase cycle" innan varje "write cycle" (som isåfall minskar 488 ovan till hälften) vet jag inte.
Mats
Men en "write cycle" måste väl innebära en skrivning, till en viss adress? Skrivningar till första byten bör ju inte slita på sista byten...
Med 32 byte stora "pages" så skrivs förmodligen all data i varje page över varje gång man skriver till någon byte i denna (så varje skrivning räknas som en "write cycle" för alla byte i det blocket).
Och om man skriver 4 byte åt gången blir det i själva verket 8 skrivningar till varje cell, och totalt 125 000 fulla loggningar (om man skriver lika ofta till varje cell i minnet).
Eller om man optimerar och skriver en hel page åt gången, bara 1 skrivning per cell och totalt 1 000 000 fulla loggningar.
Eller har jag fattat detta totalt fel? Slita ut ett EEPROM på några hundra fulla skrivningar känns orimligt...
edit: Det tog visst många minuter att skriva den här posten, men icecap är iaf inne på ungefär samma linje som jag ser jag...
Med 32 byte stora "pages" så skrivs förmodligen all data i varje page över varje gång man skriver till någon byte i denna (så varje skrivning räknas som en "write cycle" för alla byte i det blocket).
Och om man skriver 4 byte åt gången blir det i själva verket 8 skrivningar till varje cell, och totalt 125 000 fulla loggningar (om man skriver lika ofta till varje cell i minnet).
Eller om man optimerar och skriver en hel page åt gången, bara 1 skrivning per cell och totalt 1 000 000 fulla loggningar.
Eller har jag fattat detta totalt fel? Slita ut ett EEPROM på några hundra fulla skrivningar känns orimligt...
edit: Det tog visst många minuter att skriva den här posten, men icecap är iaf inne på ungefär samma linje som jag ser jag...