Fórum témák
» Több friss téma |
Szia !
A megszakítás mindig működik, azaz a megszakítás bekövetkeztekor a 4-es címre ugrik ( 16-os PIC ). Ott elmented a PCLATH értékét, majd átállítod a megszakításnak megfelelően, elvégzed az int feladatait és PCLATH, stb. visszatöltése után visszatérsz! Szervezés kérdése, hogy LEHETŐLEG a megszakításban használt dolgaidat 1 lapra írd! A másik: a változóid nem a PROGRAM memóriában vannak, hanem az ADAT memóriában (RAM, Harvard architektúra!). Itt a 0x70-es címtől elhelyezett változóidat BÁRMELYIK bankban láthatod ( de ennek nincs köze a PCLATH lapváltásaihoz!)! A memória állapotát meg tudod nézni szimulációban a view menüpont WATCH ablakban, vagy File registers menüpontban ( és így láthatod, hogy mit csináltál!)! A 18-as sorozatnál a RAM-nál lehet szükség BANK váltásra ( ha több, mint 128 változót akarsz használni egyidőben!)! Steve
Használhatod a PAGESEL-t is (A PCLATH-ot a fordító megfelelő értékre "hozza" plussz utasításokkal! A ZIZZ és az IDE más lapokon lennének )!
pl. IDE: PAGESEL ZIZZ CALL ZIZZ PAGESEL IDE ( és már megint ugrálhatsz ezen a lapon!) ZIZZ: RETURN Így nem "őrülsz meg" a lapok figyelésétől ( igaz, mindig beállítja az összes PCLATH bitet megfelelően ). A szervezés nagyon lényeges: ne ugrálj ide-oda a lapok között, mert akkor nem győzöl lapot váltani! A visszaugrás CALL-nál mindig jó, mert a verembe a teljes cím bekerül, de akár egy BTFSC is rosszul sül el, ha elfelejtesz lapot váltani! Steve
Köszönöm, kipróbálom ezt a PAGESEL -t mert ettől a manuális lapváltástól be lehet dilizni..
Ami nem tiszta...A PAGESEL használata előtt kell egy címkét elhelyeznem (IDE)? Az rendben van hogy a rutin címkéjére ugrok, de visszafelé?
Szia!
Nem kellenek plussz cimkék, csak a PAGESEL után kell egy, a megfelelő lapon lévő! A két cimkét csak azért írtam, hogy lásd, mi van akkor ha erre, vagy arra a lapra akarok ugrani! Steve
Rendben, mondjuk hogy ugrok a ZIZZ rutinra ami a PAGE1 en van. Ebben az esetben a rutin cimkéje áll a PAGESEL után. Utána meghívom a rutint CALL ZIZZ..stb De visszafelé a PAGESEL után milyen cimkét adjak? Bármilyen cimke ami egyébként a PAGE0 án van az jó..? (pl nálam "start" a főprogram elején)
Jó, mert a lapváltó biteket a cimkének megfelelően kell, hogy beállítsa!
Szimulátorban ki tudod próbálni! Steve
Közben próbálgatom, úgy tűnik így működik. De ha az összes rutinomat a page1 re pakolom és a page0 ról hívogatom az rengeteg PAGESEL ide - oda, ez nagyon memória zabáló dolog nem? Mert a PCLATH,4 bitet is állítgatja amihez esetemben nem is kéne hogy hozzá nyúljon. Nincs erre valami memória takarékosabb megoldás..? vagy az egész kódot át kell szervezni...ez elég macerás. Lehet tényleg jobb lenne a 18F ebből a szempontból. Ha jól emlékszem a 16F eknél is kell a RAM nál lapot váltani..A 18F eknél ezek szerint egyáltalán nincs memória lapozás? Mert ez az amitől megkergülök.
Milyen NASA programot fejlesztesz, hogy 2048 utasítás nem elég Neked a fő rutinjaidhoz ?!
A 18F-nél nem kell a programmemória miatt lapozást csinálni!
Steve
Hááát....Hogy elkerüljem a lapváltásokat, vannak klónozott rutinjaim, amelyek vannak a page1 en és a page0 án is, csak más cimkével..stb. Ezt már kínomban műveltem mert nem ment a kód, egyáltalán (pedig az F628A nál tökéletesen ment) és azt hittem a lapváltásokkal van a gond. Így "kissé" elszáltam a memóriával... Most már lassan a 4K is kinövöm...
Na, akkor az lesz az én kedvencem, csak rengeteg panelem van letervezve a 16F ekhez, így dobhatom őket a hátam mögé....De hát "haladni kell a korral, süssön Váncza sütőporral" (Az öregebbek, mint én tán még emlékeznek a 70 es évek reklámjára...már annak aki nem értené... )
Használható megoldás, amit írsz, de szerintem csak akkor célszerű, ha sebességkritikus a rendszer, egyébként van idő oda-visszaállítani!
Idézet: Ha ott jól ment, akkor itt is mennie kell, mert egy család csak a 628-nak kisebb a memóriája --> ha abba belefértél, akkor a 648-ban mennie kellene annak a résznek! A plussz ugrálásokhoz kellene csak berakni a PAGESEL-t! :yes: „pedig az F628A nál tökéletesen ment” Steve
Szerintem találsz hellyel-közzel lábkompatibilist, inkább a programok átdolgozása lesz macerásabb!
Steve
Hát nem lenne rossz ha láb kompatibilist találnék, szerintem főleg ez a macerásabb mert a paneleket újra tervezni és legyártatni elég sokba kerülne. Eleve SSOP tokozásúakat használok, már nézegettem de én nem találtam a F648A perifériákkal azonos 18F PIC et. Legalábbis olyat ami láb kompatibilis. A programozásuk...hát nem lesz egyszerű átállni az biztos, főleg nekem nem. Letöltöttem már adatlapot van jó pár utasítás ami új a 16F ekhez képest...stb.
Ok, köszönöm akkor "pofozom tovább..." Ez a PAGESEL nem volt tiszta, megpróbálom kissé átszervezni a dolgokat a kódban. Biztos hogy én rontottam el megint valamit, amit egyelőre nem veszek észre.
Köszi
Ezt találtam: PIC18F1220 / PIC18F1320 gyorsba, nézd meg, hátha kivitelezhető ( némi kavarással !)!
Steve
Sajnos ez nem jó, a USART RX / TX lábak nem stimmelnek. Ezzel meg nem nagyon tudok mit kezdeni. Az hogy a PORTA / PORTB lábak nem stimmelnek amik pl ledeket kapcsolgatnak..stb azt ugye át lehet irkálni de a USART lábait csak átkötözgetni lehetne és ez elég gány lenne...Valamint nincs benne a 2 db analóg komparátor sem amit egyébként használok.
Azért köszi. Kérdés..ha a PAGESEL el átlépek a page1 re, és ezek után még van pl 10 db rutin ami szintén a page1 en van, közben viszont van port át állítás, feltétel kezelés...stb. Akkor is kell ide oda ugrálnom a lapok között minden rutinnál? Vagy maradhatok végig a page1 en egészen addig amíg olyan szakaszhoz nem érek ami már megint page0 án van? Valamint amikor visszatérek a page0 ra (esetemben PAGESEL start) akkor a start cimkére is ugrik, vagy csak a cimkéhez tartozó lapra lép vissza? Mert ha a cimkére ugrik az nagyon nem jó...
Amíg azon a lapon vagy, addig nem kell váltogatni ( ugyanúgy, mint a RAM bankok: ha a TRISB-t tudod írni, akkor a TRISA-t is! ): ezzel kapcsolatban csak arra vigyázz, hogy egy BTFSS is ugrással járhat és ott is számít a lap!
A PAGESEL csak a PCLATH-ot állítja, azt már használtad, annak az állítása nem jelenti azt, hogy a következő ugrás a START címkére történne ( a fordító megnézi, hogy a START címke melyik lapon van és a megfelelő lap bitjeit betölti a PCLATH-hoz, amit a PIC a CALL, ill. GOTO utasításoknál használ! A szimulátor nagyon hasznos jószág ám! A 18-asnál akkor nem lesz szerencséd, mert a MAPS ezt a 4 féle 18-ast dobta ki 16 IO-ra! Steve
A szimulátort se nagyon használtam még, inkább áttöltöm a kódot a demo panelba és meglesem működik e. Igaz, így nem látom csak a végeredményt. Működik, nem működik (általában utóbbi...) Hogy közben a program mit művel step by step azt nem, kipróbálom....
Hidd el, hogy jó és nagyon hasznos !
Így meg tudod nézni, hogy mit csinál az egyes regiszterekkel, hova ugrik és nem találgatsz, hogy mi lehet a gond. Ha fogod használni, akkor minőségi előrelépésed lesz a programozásban és a hibakeresésből megspórolod azt az időt, ami az új PIC-re való átállás miatt lesz ! Írtad, hogy sok új utasítása van a 18-asnak: ez igaz, de a régiek nagy része használható és van egy csomó új, jól használható! A megszakításra majd figyelj, mert bár jobb, de az áttérésnél figyelni kell rá! Steve
Ok, köszönöm. Valóban jó ez a szimulátor, bár a regisztereket nem néztem még, viszont tudom léptetni sorról sorra. Már látom is hogy valamiért elkószál a program az egyik btfsc után...
Azt hiszem ezt a kódot még kiszenvedem a 16F el és ráfekszem a 18F ekre...Aztán majd megint zaklatlak a láma kérdéseimmel...
OK, örülök, hogy tetszik!
A view menüpontból tedd ki a Watch-ot és abba húzd bele a megnézni kívánt regisztereket ( drag and drop módszer!) ! Jobb egérgombbal be tudod állítani, hogy milyen formátumban szeretnéd nézegetni! Steve
Eljutottam oda hogy most már nem kószál el a programom, beesik egy pollingba ahol várakozik egy USART vételi megszakításra, de nem esik be a megszakításba, pedig a jönnek az adatok a USART on. (bray terminalon néztem) Engedélyezve vannak a megszakítás bitek, a folyamatos vétel, a soros port konfigurálva van..stb (ez is működött már...) Mi okozhatja hogy még sincs megszakítás..? Ezt pl nem tudom leszimulálni szimulátorban...
Van olyan lehetőség a szimulátorban hogy egy általam kijelölt ponttól tudjam léptetni a programot? Mert így nem tudom azt a részt tesztelni ami a megszakítás lefutása után jönne, mivel a megszakítást nem tudom szimulátorból generálni...
Van. Keresd meg a kérdéses programsort, amitől indulni szeretnél, jobb klik / Set PC at Cursor. A PC beáll a kérdéses sorra. Vigyázz a PCLATH nem lesz beállítva az utasítás lapjára.
Köszi, a PCLATH állapotát nem tudom megadni manuálisan a szimuláció előtt?
Sziasztok! Előállt egy olyan helyzet, hogy szükségem lenne egy gép karbantartása miatt egy üzemóraszámlálóra. Meg is építettem már a körülményekhez illeszkedő hardvert, a gép vezérlésében van egy 1Hz-es négyszögjel, azt számolgatja a PIC. Az elvárás a következő: a gép bekapcsolt idejét méri, és ha elérte a 100 órát, akkor bekapcsol egy LED-et. A szoftver számolásos, meg LED-bekapcsolásos részével nincs gondom, viszont írni és olvasni kellene a belső EEPROM-ját a PIC-nek, mivel ha a gép ki van kapcsolva, akkor megszűnik a tápfesz, de a következő bekapcsoláskor onnan kellene folytatni a számlálást, ahol a tápmegyszűnéskor abbahagyta. Az EEPROM írás-olvasás nagyon homályos nekem, olvasgattam a microchip oldalán az erre vonatkozó application note-ot, de abból sem lettem okosabb. Ha valaki el tudná nekem magyarázni érthetően, hogy hogyan tudok egy értéket beírni az EEPROM-ba, utánna meg kiolvasni belőle, azt megköszönném...
|
Bejelentkezés
Hirdetés |