Fórum témák
» Több friss téma |
Fórum » PIC EEPROM terület írása táp lekapcsolás után
Témaindító: Kera_Will, idő: Márc 8, 2006
Témakörök:
Szervusztok!
Lenne 1 kis problémám. Adott 1 eszközöm amit modernizálnék 1 PIC-el. Szeretném a PIC üzemállapotát kikapcsolás után is megtartani. Erre lenne jó a belső EEPROM terület kb.: 4 bájtja. Ebből bekapcsolás után tudná hol is tartott előtte a rendszer. Nem szeretném nagyon megbolygatni eredeti tápfesz kapcsoló részt ... ne a PIC portja rángasson 1 áteresztőt, ne kelljen a PIC portot felhasználnom ON/OFF gombnak. Az se jó ha "sűrűn/ritkán" írogatom át a EEPROM tartalmat .Mivel "kopik" adatlap alapján n*100ezer -millió átírás lehetséges. Ezenkívűl mikor írjam át/mikor lesz power off ?! ... stb... Jó, elég nagy számú EEPROM írás lehetséges de ha pl.: percenként módosul az üzemállapota akkor mindig annyival csökken az átírhatóság mennyisége. Ki/be kapcsolása kevésbé ilyen sűrűségű. Eddigi ötletem: lehetne pufferrelni a PIC tápját 1-2000mikros kondival. Ami csak a PICen lenne rajta . Igaz ekkor 1 port beáldozható a külső táp figyelésre. Amint megszünt a betáp még a pufferben van energia és a PIC letudná magát menteni EEPROMjába, amíg kisül a nagy puffer. Ja igen líthium elemet se szeretnék használni. Igaz ekkor a PIC porton lévő többet fogyasztó perifériákat lekell rántani valami kapcsolóval. pl 1 LED sort közös ágban lévő tranzisztoron keresztül táplálva, aminek bázisát a bejövő táp nyitja és ha kikapcs van akkor a tranzisztor lezár,ledek közös ága "levegőbe" fog lógni. Ok az elkó se 1 életbiztosítás mert idővel kiszárad ... de esetleg a " goldkapszulák " annó ilyesminek hívták a Conradban a 5Vos 1 Farádos kondért. Ez is kiszáradhat ?! Vkinek ennél jobb ötlete ???
Hello!
Nem értem pontosan, hogy mit is szeretnél, de pl. elküldheted "aludni" a PIC-et úgy nagyságrendekkel kevesebbet fogyaszt. "Amint megszünt a betáp még a pufferben van energia és a PIC letudná magát menteni EEPROMjába, amíg kisül a nagy puffer. Ja igen líthium elemet se szeretnék használni. Igaz ekkor a PIC porton lévő többet fogyasztó perifériákat lekell rántani valami kapcsolóval." Írhatsz egy rutint a tápfesz megszűnésére, és leállítod a főprogramot. Egyébként egy jóminőségű elkó sem szárad ki csak úgy... 10évig biztos megy. Üdv!
Jó oké alszik .... akkor mivan ?! Kevesebbet fogyaszt és... ?!
Ha a táp elmegy akkor megint nem fog tudni magáról semmit se. Milyen állapotban volt a szundi közben/előtt stb ? Perifériákat róla lerántva , pedig biztos kisebb lesz a fogyasztása. Ezek most éppen optok ledjei lennének majd. Kimenetek állapota : 1.statikus 2.dinamikusan változnak (számlál) 3.EEPROM 1 részéből olvasott adatokat küld kifolyamatosan a portra Tehát ezek különböző üzemmódjai a rendszernek. Az épp aktuális utolsó állapotot szertném újra látni. Lehetne vmi fix alapállapot is de ez nem jó mert akkor az előző állapotott újra elő kell állítani . Na jó van mikor nem szükséges pl éppen vmi adatot módosítottam volna és nem tudtam befejezni akkor vesszen el mert én lőttem le az áramkört .... na de ez csak amolyan finomítgatás ... meg úgyis kiderül ha ilyen funkció is kell majd ... de szerintem nem szükséges....
A szunyálást azért mondtam, mert úgy egy nagyobb kondiról hetekig elmegy.
Esetleg figyelhetnéd a tápfeszültséget. Pl. kikapcsol a táp, de a vele párhuzamba kötött kondi még táplálja... ekkor a kondi feszültsége exponenciálisan elkezd csökkenni, majd ha elérte a beállított küszöböt, amin a PIC még működik elindíthatja a mentést az EEPROMba. A küszöböt ott kell megválasztani, hogy egy kisssebb ingadozás még ne indítson mentést, de még legyen annyi, hogy a PIC menjen, és be tudja fejezni a műveletet, aztán rezetelje magát, hogy ne legyen hiba. Olyan PIC-t válassz amiben van A/D átalakiító, komparátor.
Ja és a mentés kezdetekor kinullázod a portokat, így az sem terhel (ill. az optók)
igen ez is jó de addig telik az ido és még ki nem értékelődik a program által a feltétel akkor fogyasztanak a ledek ... gyorsabban merül a kondi ...
A megoldás roppant egyszerű. Én is egy olyan alkalmazást csináltam az autómba Pic segítségével aminek a tépfeszét ki kell kapcsolni, de az adatok meg kell hogy maradjanak.
A megoldás:A 18-as picekbe (lehet hogy a 16-osba is, azt nem tudom tutira ) van olyan egység, ami érzékeli a tápfesz bizonyos szint alá csökkenését. Az egység neve: LVD vagyis low voltage detect itt beéllítható, hogy mekkora fesznél szóljon a pic. amikor a kijelölt feszültség alá csökken a fesz, akkor a pic ad egy megszakítást, és ezzel jelet adva neked arra, hogy elmentsd az epromba a beállításaid. Üdv Gagyi
Az hogy mire kell, milyen célt szolgálna ez a cucc azt csak Te tudod. Viszont, ha amúgy is le akarod kapcsolni az optókat, akkor nem értem mi fogyaszt.
Az LVD-ről meg is feledkeztem... a 16-os szériában is van (többnyire). Valami ilyesmit gondoltam: LVD gjenerál egy megszakítást -> nullázza a portokat (led nem megy) -> feldolgozza a maradék infót -> ment -> aztán rezet 2200µF-os kondival sztem futja minderre. Két lehetőség van: próbapanel és tesztelgetés, vagy számolás.
Ahan LVD .. . jónak tünik ...
megnézem 18as nál hol van a IT prioritás láncában... az LVD ...
Tudom nem egészen ide tartozik, de nem akartam ezért új topikot nyitni! Van egy kis problémám: egy 24lc32 -es I2C - Buszos EEProm - ot akarok írni, de ennek 2byte - os címe van (4KB -os EEprom), a progit assembly - ben írom, tudna valaki ebben segíteni, hogy ezt hogy kell megcsinálni, (mintapélda v. valami jó magyarázat, hogy hogy tudom kiküldeni a 2 byte - os címet), előre is köszi a segítségeteket
ui: nemtudom, hogy amikor kiküldöm az első byte -ot (a 16 bites cím felső byte - ja), utána kell - e várni ACK -ra? Üdv
Ha én jól gondolom akkor az i2c buszon szinte mindig van ack és csak amikor befejezi az olvasást akkor csak ott van nack.
Szerintem ebben az esetben is kell ack. Az ack jelzi, hogy minden OK. Lehetnek speciális eltérő esetek is. Egyébként az adatlapja mutatja, hogy hol milyen adat forgalomnak kéne lennie.
Igaz!!! Én ki buta , még meg sem néztem az adatlapot.... , ennek máris utánanézek! Köszi!
Nah meg is van a megoldás , az adatlapon minden le van írva ....hihetetlen
Szerintem nem hihetetlen. Rendes gyártó részletesen leír mindent.
tudom !! A hihetetlen az, hogy én ilyen buta vagyok hogy nem ezzel kezdtem
Sorry, ezért nem akartam új topicot nyitni.
Gyakorta használom a PICek eeprom adatmemóriaterülét, melyről az adatlapok azt írják,hogy kb 1milliószór irhatóak újra. Nna most, a kérdésem az lenne,hogy ez minden egyeb word írására vonatkozik, tehát minden egyes wordot 1 milliószor tudok újraírni, vagy pedig ez az egész memóriaterület írására vonatkozik? Pl: tehát ha csak az alsó 32byteot írom állandóan, akkor a többi 96 byte is már irhatatlanná válik a kb 1 milliós írási ciklus után? Előre is köszönöm a választ.
Különálló CMOS-elemek alkotják a memóriacellákat, így a tárolóképesség elvesztése nem az összesre vonatkozik, hanem a használtra. Az adatbusz ugyebár nem kopik, az érintetlen cellák sosem lesznek feltöltve / kisütve, így azok csak természetes öregedésen esnek át.
Nincs mit
Csak úgy kérdezem, hogy ha ennyire gyakran kell adatot módosítanod, nem volna megoldható a proci saját RAM-ját, vagy külső RAM-ot használni? Igaz, nehéz elérni az egymillió írást, meg macerásabb egy külső memória, de az elérési ideje is kisebb volna.
Nem túl gyakori a beírás, csak szerettem volna kiszámolni,hogy átlagos napi használat esetén kb hány év múlva megy tönkre a dolog.
annyi az egész,hogy bedobnak egy zsetont, erre mondjuk 15percig működik a dolog, ezt a történést külső EEPROMba dátum/idővel eltárolja, viszont ennek a naplózásnak a 'pointere' viszont a belső EEPROMBa tárolódik,hogy áramkimaradás után onnan tudja folytatni a naplózást,ahol abbahagyta. más is van a memóriában, amit néha írkál, PL: üdvözlőszöveg beállítható, stb... ezért lettem volna kiváncsi rá...
Sziasztok !
Ide illő kérdés: PIC18F-nek az LVD áramkörét használva, beállítva a megfelelő küszöbszintet, szabályozható tápról nyomon követhető, tökéletesn működik. A főprogram ciklusában figyelve az LVDIF bitet, rendre működik. De a fejlesztés folyamán megnövekedett programfutási idő miatt többször késve érkezik a főprogramba, így nincs ideje a vészmentő ciklus futtatásra (2000 mF pufferrel se). Korrekt megoldás a megszakítás generálása, és ez az, amit nem tudok elérni, pedig közben a SIO-n bejövő megszakítást folyamatosan kezeli. Ha kiveszem a SIO megszakítást, akkor sem generál LVD megszakítást. Ha Valaki foglalkozott már LVD-vel, várom ötletét.
Inkább szeretnénk látni a kódodat, mert így nem lehet kitalálni, mit csinálhatsz rosszul. Adatlap ezzel foglalkozó fejezetében közölt leírás alapján állítottál be mindent?
És esetleg egy olyan kondi nem lehetne segítség, ami mondjuk 0,5F értékű és 5V-os? Ha a tápfesz csökkenni kezd, akkor átkapcsol erre a nagy kondira, lementi az adatokat, aztán történhet bármi... persze ez csak tüneti kezelés és nem az okok vannak megszüntetve vele...
Köszi a vasárnapi figyelést!
Íme a programrészlet, igaz én Picbasic Pro-ban csinálom, de ez nem hiszem, hogy beleszól, hiszen a több, mint 2000 soros program többi része jól megy. Nem tudom, hogy jelenik meg a lapon, csak a txt-részt copyztam. Az ellenörzést most teszteléskor potméteres tápegységgel kézzel végzem, így a lassú fesültség csökkenést most garantált. ;========LVD KEZELESE INTCON.7=0 ;GLOBALIS IR TILTAS LVDCON=%00011101 ;LVD TAP KUSZOB+LVD ENGEDELYEZES LVDD: IF LVDCON.5=0 THEN LVDD ;TAP STABILRA VARAS PIR2.2=0 ;LVDIF REGISZTER TORLESE PIE2.2=1 ;LVD MEGSZAKITAS ENGEDELYEZESE INTCON.7=1 ;GLOBALIS IR ENGEDELYEZES ;========PROGRAM LCDOUT $FE,1 FPRG: LCDOUT $FE,$80,"ROADMASTER-G" GOTO FPRG LVD_PONT: LCDOUT $FE,$80,"TAP ALACSONY" IDE: GOTO IDE ;======INTERRUPT KEZELES DISABLE INT_0: IF PIR2.2=1 THEN LVD_PONT ;LVDIF TAPFESZ FIGYELO RESUME ENABLE RETURN ;======INTERRUPT KEZELES VEGE
Amint látom, nem az igazi a tördelés, de talán érthető.
Ez csak a tesztelő program, hiszen ha a teljes programmal tesztelem, hosszan fordul, és lassan töltődik az MPU-ba a Bootloaderen keresztül.
Próbáld meg, hogy bekapcsolod az INTCON, PEIE bitet is. Nem derült ki számomra egyértelműen az adatlapból, hogy kell-e hozzá, de egy próbát megér.
Már próbáltam, még a prioritás bitet is, de semmi.
Az adatlap 18.2 szerint jártam el. Az LVDIF bitet generálja, lekérdezve ciklusban, de megszakítást nem indít. A fél programot pedig nem tűzdelhetem tele az LVDIF lekérdezéssel.
Kipróbáltam C-ben azt, amit az adatlapban ír, gyönyörűen működik. Valami a programodban nem stimmel, de hogy mi, nemtudom. Úgy nézem, jól állítottad be az LVD-t, viszont nekem a kód többi része valahogy furcsa, bár sosem néztem még pic-re írt basic kódot...
Köszi, hogy gondod volt a témára.
A főprogram része az nem lényeges. Az a furcsa, hogy az INT kezelési rutin a SIO megszakítást tökéletesen viszi. Csak annyival egészítettem ki a megszakítási rutint, hogy a PIR1.5 lekérdezése előtt a PIR2.2-t is lekérdezem, de mivel nem generálja a megszakítást, hiába kérdezem.
debugolni nem lehet az ilyen progit rögtön élesben? (mintha az icd2-ről azt írták volna ide a fórumba, hogy erre is jó)
én azt tippelem, hogy rossz az adatlap leírása, és előfordulhat, hogy mégis megváltoztat valamit (egy flaget) amikor elvileg nem kellene, vagy éppen fordítva... (pl. most tanulok assemblyt, ott bár a dosos print utasításnak nincs kimenete a leírás szerint, mégis az egyik regiszter tartalmát átírja) |
Bejelentkezés
Hirdetés |