napsal jsem si takovy jednoduchy programek pro vyzkouseni prace s EEPROM. Na 4 digitovem displeji zobrazuji adresu a hodnotu v EEPROM (00-FF,00-FF). Cele to ovladam 6ti tlacitky - 2pro pohyb nahoru dolu v adrese, 2 pro to same ale s hodnotou a pak zapis a cteni.
Bohuzel zapis ani cteni z EEPROM mi nefunguje. Procesor proste zamrzne, nebo se zniceho nic resetne. Prikladam kod assembleru. Pokud smazu obsah podprogramu CTI a ZAPIS tak program funguje jak ma, ale pokud se snazim z EEPROM neco precist nebo zapsat, narazim. Rutiny pro cteni a zapis jsem zkousel ruzne upravovat, kde cekam na vynulovani bitu EECON1,R nebo WR. Nebo jsem cekal na nastaveni PIR2,EEIF. Zkusil jsem i tyto rutiny davat do hlavni smycky. Vse bez uspechu
Nejde mi na rozum i to, ze cast kodu zpusobi zamrznuti ikdyz na nej zrovna vubec neskacu.
Za kazdou radu dik.
v simulatoru Real Pic Simulator v. 1.1.0.0 program zkolabuje take.
Rutina cteni v tvem kodu je totozna s tou mou. V pojistkach mam nastaveno jen povoleni vycteni kodu z obou pameti a nastaveni zdroje hodinoveho signalu. Zbytek mam v nule. Presne ktery nastaveny bit v pojistkach by mel praci s eeprom vadit?
V podprogramu zapis napred cekas az bit WR spadne do nuly a pak ho das jeste spat. Co presne ho probudi ? preruseni od bitu EEIF ? nevidim kde ho nulujes, takze podle me je tam ten sleep k necemu jen pri prvnim zapisu resp. zavolani zapisU.
Ukonceni zapisu jsem take bezuspesne zkousel pri nastaveni EEIF a pak ho nuloval, vcetne povolovani a zakazovani GIE na tech spravnych mistech. Kombinovat to jeste s cekanim na WR=0 se mi zda preplacane.
jsou k necemu v tvem kodu prazdne radky ?
je potreba v rutine zapisu pouzit NOP po instrukci WR=1 ? v datasheetu nic takoveho neni.
Myslím, že tvůj problém je špatná práce s tabulkou.
Nemáš dobře ošetřen obsah PCLATH.
Instrukce: tabZnak addwf PCL,F provede skok na edresu 008, nikoliv do vlastní tabulky. Tím dojde také po čase k přetečení zásobníku a zřejmě i k dalším nevídaným efektům.
Možná jsou tam i další chyby, ale tahle je kritická určitě.
Zkus přidat něco takového -
Tuto rutinu pro vyber konstanty podle cisla 0-Fh mam opsanou primo z jedne knihy k vyuce PIC pro 16f84A. Nerikam ze neni derava, ale … byte, ktery ukladam do W pred zavolanim te tabulky ma vzdy vynulovane horni 4 bity a podle tech donich nemuze skocit dal nez o 15 radku, ktere tvori onu tabulku.
Tuto rutinu pouzivam temer v kazdem mem kodu pac s ni obsluhuju onen 4 digitovy displej jen po 3ech dratech. napr. A/D prevod.
Znova pripomenu ze program prestane delat problemy, kdyz… kdyz smazu radky mezi ZAPIS a RETURN tak se program rozbehne a funguje asi na 8 zmacknuti tlacitek nez se resetne, pritom neskacu na CTI (to je jine tlacitko), pokud skocim na CTI tak se PIC resetne okamzite …kdyz smazu i radky mezi CTI a RETURN tak se program chova naprosto korektne a neresetuje se ! s tim, ze nepracuji s EEPROM .
V simulatoru o kterem jsem se zminoval vyse se po instrukci, kde nastavuji bit WR nebo R do 1, stane to ze se ukazatel vynuluje a program stoji na ORG 0, tedy na zacatku programu = reset.
Nekde jsem se docetl o nejakem nastavovani organizace EEPROM - device type nebo tak nejak. Pouzivam WinPic800, ale tohle nastaveni tam nikde neni. Je mozne, ze to zpusobuje tohle ? existuje vubec neco takoveho ?
Já nediskutuju o tom, jestli to máš špatně nebo ne. Já ti říkám, že to máš špatně. Protože na tom naprosto korektně a zdůvodnitelně ustřelí i MPLAB SIM. Prostě si tu svoji chybu odkrokuj. Že to děláš trvale špatně, jak sám říkáš ,vedlo k tomu, že to prostě tady nefunguje. PCLATH máš s hodnotou 0 a v WREG máš při prvním průchodu také nulu. Zákonitě skončíš na začátku programu, ať chceš nebo ne.
Když umažeš kus programu, tak se tvoje tabulka dostane do prvních 256 byte paměti a problém se tím odstraní, což je naprosto přirozené. Hledáš záhady tam, kde rozhodně nejsou.
asi takle,kdyz sem vydel jak nastavujes banky a jak je to krapet neprehledny tak sem to uz neskoumal,zapis a cteni je z DS a v simulatoru to funguje,nevim v com pises kod ale v MPLABu je jasne videt ze ten SLEEP je za strednikem tudis neaktivni,
prazdne radky sou pozustatek z copy/paste nebo k zprehledneni kodu
narazka na pojistky byla jestly nems zaplyho psa (WDT)
tu tabulku si dej hned na zacatek at se ti neposouva s pridavanim kodu…