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 |




Most már lassan a 4K is kinövöm...
)
!





