Fórum témák
» Több friss téma |
Fórum » PIC programozás
Van amugy olyan PIC ahol az EEPROM irasnal gond van es ott specialis workaround kell, hogy mukodjon. De ha jol emlekszem, akkor az 14 bites valtozatoknal fordult elo.
Besokalltam, átírtam a progit, hogy a Flash (program) memóriába tárolja le az adatokat. És nagyot koppantam, mert ez sem megy! Ezt legalább tudom olvasni, de írni nem. A konfigurációs biteket (300008-D) is megnéztem, mind "1", azaz nincs védve. Segítsetek, mert szétrobban a fejem Köszönöm
;----------------------------------------------------------------- ; TÖRÖL - 1x64 byte ;----------------------------------------------------------------- movlw upper flash_rele_ido movwf tblptru movlw high flash_rele_ido movwf tblptrh movlw low flash_rele_ido movwf tblptrl bsf eecon1, eepgd bcf eecon1, cfgs bsf eecon1, wren bsf eecon1, free ; sortörlés engedélyezése bcf intcon, gie ; a megszakítások letiltása ;----------------------------------------------------------------- movlw 55h movwf eecon2 ; write 55h movlw 0AAh movwf eecon2 ; write AAh bsf eecon1, wr ; BR bit engedélyezése, az írás megkezdése bsf intcon, gie ; interruptok engedélyezése ;----------------------------------------------------------------- ; ÍR - 8x8 byte ;----------------------------------------------------------------- movlw .8 movwf lepesszam lfsr fsr0, rele_kezdesi_ido tblrd*- ; a következő ciklus miatt flash_iras_2 movlw .8 movwf tmp0 flash_iras_3 movff postinc0, tablat tblwt+* decf tmp0 bnz flash_iras_3 ;----------------------------------------------------------------- bsf eecon1, eepgd bcf eecon1, cfgs bsf eecon1, wren bcf intcon, gie ; a megszakítások letiltása ;----------------------------------------------------------------- movlw 55h movwf eecon2 ; write 55h movlw 0AAh movwf eecon2 ; write AAh bsf eecon1, wr ; BR bit engedélyezése, az írás megkezdése bsf intcon, gie ; interruptok engedélyezése ;----------------------------------------------------------------- decf lepesszam bnz flash_iras_2 ;----------------------------------------------------------------- bcf eecon1, wren ; az írás tiltása mert kész.
Nem sikerül tabulálnom és színeznem a válaszokat, most megpróbálom fájlmellékletként, nehogy a kedveteket veszítsétek
Lehet hogy elnézek valamit, de hol vizsgálod meg azt, hogy befejeződött, és teljesült az írás?
Tudomásom szerint nincs mit vizsgálni. A CPU ez idő alatt áll - ca. 2 ms. A write verify még hiányzik - ha már bármit beletudnék írni, a helyességét is ellenőrizném
Egész konkrétan az EECON1 WR bitjére gondoltam, ami nulla, ha kész az írás.
Az adatlapokon nem szerepel és lehet, hogy a 452-nél ez nem is kell?
Próbálj meg egyetlen byte-ot írni-olvasni az általam leírt rutinok alapján (#693370). Kb. 50 készülékünk működik ezzel a kóddal, nyugodtan használhatod.
Szia!
Egy kérdésem lenne: Milyen címen van a flash_rele_ido ? A programtárban kerek 4 szavas címen kellene lennie... A törlés arra a 64 byte-os tartományra vonatkozik, amibe a címe beleesik, az írás viszont azért nem múködhet, mert a buffer egyik fele az egyik 8 byte-os tartományra, a másik fele a következő tartományra vonatkozik...
Szia!
Erre is gondoltam: org 440h ; 64-gyel osztható cím kell!! flash_rele_ido fill $-440h, .64 ; BCD kódolt: alsó byte óra azt gondolom, hogy ez így korrekt, ha mégsem, írjátok meg. Köszönöm
Szia!
A PIC18F452.pdf szerint: "The long write is necessary for programming the internal FLASH. Instruction execution is halted while in a long write cycle. The long write will be terminated by the internal programming timer." ...azaz ha a következő utasítás csak akkor hajtódik végre, ha az írás már véget ért - nincs mit vizsgálni. EEPROM-nál persze kell figyelni a WR bitet - az eredeti problémám szerint itt kerültem végtelen ciklusba De ha nincs igazam, szólj
Hali
Ezt a kodot a CCS C altal leforditott .lst-bol masoltam be. ez egy word-ot ir az EEPROM-ba:
Termeszetesen a regiszterek cimkent vannak benne. Nekem ez mukodik 18F2320-ban. Talan segit. Udv Vili
Szia!
A hozzászólásodban levő programnál egy problémát látok: - Ha prioritásos megszakítási rendszert használsz, nem elég a GIE azaz GIEH törlése, a GIEL -t is törölni kell.
Egy dolog a doksi, ahol a mintaprogramok gyakran hibásak, illetve nem teljes. Ha megnézed, pár sorral lentebb, nem eretnek dolog megvárni az írás végét.
Idézet: „ 41. 0D54: BTFSC FA6.1 42. 0D56: BRA 0D54” Te megszakítást figyeltél, de az nem volt engedélyezve, ezért volt a végtelen ciklus.
Sziasztok!
Nem így van, ha megnézed a programot, a ciklus előtt engedélyeztem ismét a megszakításokat. Viszont a disassemblált kódban (#694205) letiltott megszakítások mellett is müködik a dolog... A hexa file-t egy download.exe programmal a soros porton keresztül töltöm le a PIC-be, egy beégetett program fogadja. Lehet, hogy ez akadályozza meg, hogy írjam az EEPROM-ot, vagy a saját programból a FLASH program memoriát?! Elég értelmetlen lenne... és nem is tudom, hogy csinálná... A configurációs biteket ismételten ellenőriztem (300008h-30000Fh), nincs semmi sem levédve. Érdekes, hogy az ID-t 18F252-nek adja meg, pedig a tokozáson is 454 van...
A listán csak a GIE-t engedélyezed, és ez kevés.
A megszakítást teljesen kihagyhatod az egészből, az csak akkor kell, ha egyéb okból van szükséged rá. A config azonos azzal, amit utóljára megadtál, amit vissza tudsz olvasni.
Szia!
Töltsd le a AN851 application note-t. Ez egy soros boot loader, benne van a program memória írása is. Idézet: Ez bizonyára elírás, mert 18F545 tudtommal nincs, s korábban te is 452-t emlegettél.„Érdekes, hogy az ID-t 18F252-nek adja meg, pedig a tokozáson is 454 van...” Ha így van, akkor valami nem stimmel, mert a 252-nek 0x400, a 452-nek pedig 0x420 az ID-je!
Sziasztok!
Van egy kis gondom PIC programozással HI-TECH C-nél. Szeretnék gyököt vonni, de az sqrt függvény valamiért nem működik. A program ehhez tartozó része: float x_dec, y_dec, z_dec, sum_dec; double negyzet; negyzet = x_dec*x_dec + y_dec*y_dec + z_dec*z_dec; sum_dec = sqrt( negyzet ); Szóval fordításkor az sqrt nem tetszik neki, hibaüzenetre rákattintva megtekinthetem az sqrt.c fájlt, ahol látszik, hogy az sqrt argumentumának double értéket kell megadni, ezért is deklaráltam a negyzet változót double-ként. Egyébként azzal sincs gond, hogy float-okból double-t csinál, mivel a negyzet értékét meg rendesen kiírja. Mi lehet a gond?
Szia!
Az sqrt függvény is double értéket ad vissza, próbáld a sum_dec változót is double -nak deklarálni...
Próbáltam úgy is, úgy sem jó.
Igazából rájöttem, hogy nem kellett volna ennyit beraknom, az sqrt úgy sem működik, hogy: sum_dec = sqrt(5.6); de még egész számmal sem.
Köszönöm a segítséged, de rájöttem, szarvashiba volt, math.h nem volt beinclude-olva.
Idézet: „[quote]Idézet: „Érdekes, hogy az ID-t 18F252-nek adja meg, pedig a tokozáson is 454 van...”” Ez bizonyára elírás, mert 18F545 tudtommal nincs, s korábban te is 452-t emlegettél.[/quote] 545?
Köszönöm az ötletet, Még nem rágtam át magam teljesen rajta, de nagyon érdekes. Mindenesetre már látszik, hogy nem a boot loader az akadály.
Sejtettem, ezért írtam,hogy baj van, mert annak más az ID-je. Egyébként az MPLAB IDE Device könyvtárában minden,az MPALB által ismert eszközről van egy-egy adatfájl, amiben minden lényeged info benne van, így pl. a az azonosító kód is (devid), s az is, hogy honnan, és milyen maszkkal olvassa a programozó vagy debugger.
Pl. 0x3ffffe-0x3fffff címtartományból olvasunk egy kétbájtos adatot, s ha 0xffe0-vel maszkolva 0x420-at kapunk, akkor PIC18F452-ről van szó. Az alsóbb helyiértékű bitek pedig a verziót jelzik...
Bocs a szemetes programért, a hibakeresés kínjában mindenfélével próbálkoztam, az épp aktuális verziót küldtem
Áruld már el, mit csináltál vele, mert most MINDEN !!! működik. Még az a billentyű is, amit nem használtam, mert ettől eddig mindig lefagyott!!! A clrf portA-E-től lenne?! Megpusztulok, ha nem mondod meg Persze még átnézem a programot töviről hegyire...a falon lyuk van, a fejem helye.. És nagyon-nagyon köszönöm!!! :worship:
Szia!
Nem az assembly programhoz való include állományt használtál. A p18F452.inc használatával egy csomó hibajelzés előjön, ha azokat leküzdöd, már csak egy algoritmus hiba marad, az adat eeprom olvasásánál a RD bit 1-be állítását vittem a ciklus belsejébe...
Sziasztok
Azt szeretném,hogy egy teljessen kezdő honnan tudna megtanulni a legegyszerűbb programozási parancsokat. Neten nem találtam semmi jót ami magyar lenne.
Ha igazán érdekel, mindegy hogy magyarul van, vagy sem. Angolul úgyis kell érteni valmicskét, mert lépten-nyomon előfordul hogy olyasmire vagy kiváncsi, ami csak úgy hozzáférhető.
A microchip oldalán ezerszámra találsz adatlapot, leírást. Vagy google és magyarul is rengeteg. De legfontosabb, hogy csináld. Nincs királyi út. |
Bejelentkezés
Hirdetés |