Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Szia!
Az alábbi linken van néhány rutin, mely alkalmas lehet a feladatra: Bővebben: Link
BCD szamma kell atalakitani, onnantol kezdve mar egyszeru a dolog -- mar feltetelezem decimalisan szeretned kiirni, mert hexaban tul egyszeru lenne...
De amugy elmegy erre az oldalra es kiollozod a peldat es keszen is vagy... Ambar en szerintem azert jo az assambly mert agyalni kell vele, en pl epp ezt szeretem benne Szoval az ollozassal nem sokat fogsz tanulni belole kiveve ha megprobalod megerteni mit is csinal pontosan...
Köszi a segítséget mindkettőtöknek.
Agyalni muszáj lesz vele, mert nem PIC-re lesz. , de az alapján már át tudom majd írni.
Ha már úgyis a kezedben van a PICkit2, akkor léptesd ki az eredményt bitenként, s a PICkit2 logikai analizátor módjában leolvashatod a képernyőről! Ehhez hasonlót mutattam már ebben a hozzászólásban, de ott egy SPI meghajtáshoz szükséges órajelet és chip select jelet is ki kellett adnom (egy16-bites DAC vezérléséhez).
Jó reggelt!
PIC16F59-el ügyködöm és a következő problémába ütköztem: Error - file './fw1.o', section '.org_0', performs a call to symbol 'OUTPUT0' which is not in the lower half of a page. Ha jól értelmezem a memória területet az első programmemórialapon feléltem. Hogyan lehet memóriaterületet váltani a programban? BxF STATUS, PA1 BxF STATUS, PA0 Ezekkel nem megy.
ITT megtalálod a leírást. A varázsszó: PCLATH.
A Microchip MPASM egyébként az adatterületet lapozó banksel mintájára pagesel makróval könnyíti a lapozást.
Sziasztok!
A16F54 másként működik: - goto : az alsó 9 bitet az utasítás kódból veszi. - call és a PCL írása : az alsó 8 bitet az utasítás kódból veszi, a 9. mindig 0. A16F57-59 másként működik: - goto : az alsó 9 bitet az utasítás kódból veszi, a 10. és 9. -et a STATUS 6. és 5. bitjéből. - call és PCL írása : az alsó 8 bitet az utasítás kódból veszi, a 8. mindig 0, a 10. és 9. -et a STATUS 6. és 5. bitjéből. A programodat át kellene szervezni. A call utasítással vagy a PCL regiszter írásával elérendő címek egy lap alsó felén legyenek (a cím 8. bitje 0 legyen: pp0ccccccc). Más típusok: Az Ott található rutinoknál két dologra hívnám fel a figyelmet: - Ha van megszakítás kezelés, akkor a mentés és visszaállítás a PCLATH-t is mentse ill. állítsa vissza. A mentés után a megszakítás kiszolgáló programjának lapjára kell állítani a PCLATH-t. - Van ott egy "0. lapra történő mentés" elnevezésű programrészlet, ami nem működik jól 2k-nál nagyobb programú kontrolleren, hiszen a PCLATH beállítása nélkül ugrana a 0. lapon levő címre...
Ezeknek fele igaz.
Ennek a PIC-nek a memóriája csak 2048 W-s. PCLATH regiszter nincs csak PCL. Ez egy eléggé mezei pic, minden "extra" nélkül.
Szia!
Épen azt írtam, hogy a 15F54-59 kontroller nem rendelkezik PCLATH regiszterrel, ellentétben a többi, általánosan használt 16Fxx tisussal, mivel előttem a PCLATH említették megoldásnak. Javaslam átolvasásra az adatlapjának 3.5. fejezétét "Program Counter", valamint a hibajelzés szövegének lefordítását, értelmezését: Idézet: „Error - file './fw1.o', section '.org_0', performs a call to symbol 'OUTPUT0' which is not in the lower half of a page.” Hevenyészve lefordítva annyit tesz: Hiba - a './fw1.o' '.org_0' szekciója a(z) 'OUTPUT0' szimbólumra hajt végre call műveletet, ami nem egy lap alsó felén definiált. A STATUS regiszter PA1 és PA0 bitjeivel nem megy, mert azok nem ezt a bitet állítják - ez a bit call esetén fix 0. Vagy figyelembe veszed az adatlap leírását és a fordító hibaüzenetét, vagy áttérsz egy általánosabban elterjedt típusra: 16F74-16F77.
Köszönöm szépen a segítséget!
Azt hiszem jön egy pár órás tanulgatás az adatlapból.. :lookaround:
Hali. Nem tudnátok egy rajzot adni, ami egyszerű, összerakható könnyen, PIC programozásra? Mert most éppen nincs PICkit2 klónom, viszont már minden bajom van, ha nem égethetek PIC-t. (megkímélni legyenek szívesek az olyan szövegektől, hogy JDM-et ne építs meg stb. Egy egyszerű égetőre lenne szükségem, ami működik)
Helló!
LPT-s: WLPT_Vpp_Mini_v4 COM-os: WCOM v4, v5 Mindkettőt ezzel a programmal érdemes használni: WattPICBurn Szerintem ennél egyszerűbbek nincsenek.
Kipróbáltam az MPLAB-ban az alábbi programot:
A Disassembly lista hibásan mutatja, de a View/Program memory után jól látható, hogy mire fordul:
Azt hiszem amugy a CALL-al van a gond... Majd kiprobalom.
Szia!
Itt leírtam - ez a pic más, mint a többi - még a 16C5xx időből való... Nem a goto -van van a probléma, és a call -nál sem jelentkezik, ha a meghívandó rutin kezdőcímében a 8. bit 0. Tedd fel a meghívandó rutint olyan helyre, ahol a címében a 8. bit 1, ekkor hívd meg call-lal. Máris jön a hibajelzés....
Itt a project - a hibajelzésekkel:
Elképzelhető.
Érdekes viszont, hogy pár helyen a CALL-t GOTO-val helyettesítettem, és így hiba nélkül lefordul. Valamiért mondjuk a PORTD regiszter 6. bitje beáll 0-ba amikor 1-ben van minden, majd élesben kiderül.
A goto -nál a 8 bit nem kötött, az kezeli a 8. bitet rendesen, az utasítás kódjából veszi ki... Tedd át az eljárásokat a lapok elejére...
A START rutint tedd hátra a programban - ugorjon vissza a PROGRAM cimkére, az elég hosszú ahhoz, hogy az össze eljárásod a lap aljára kerüljön...
Így is tökéletes!
Így olyan az elrendezés majdnem, mint C-ben.
Sziasztok!
Egy érdekes jelenséggel találtam szemben magam. Egy PIC18F4550-en a TIMER1-el szeretnék másodperces megszakítást elérni (óra alap). Ehhez külső 32,768KHz-es kvarccal hajtom meg a TIMER1-et. Mivel a TIMER1 16bites ezért alap esetben 2másodprces megszakításra számoltam. Aztán mikor összeállt a dolog meglepődve tapasztaltam hogy közel 1 másodpercenként jön a megszakítás. Ez hogyan lehetséges? T1CON=0b00001111; így van beállítva A TMR1H és TMR1L regisztereket meg sem említem a programban. mikroC PRO for PIC v3.8 -al fejlesztek.
Én akkor találkoztam hasonlóval, mikor nem volt a 32k kvarchoz kondi rakva.
Én 10pF-15pF kondikat szoktam rakni, lehet érdemes lenne megpróbálni.
pepe33 hozzaszolasat kiegeszitve:
En a kapcsolasbol is es a proba panelt nezve is ugy latom van ott kondi, de az egyik egy trimmer kondi ami esetleg tulsagosan le vagy fel vn tekerve es ettol a kvartz nem rezonal hanem gerjed?
Lehetne próbálkozni az oszcillátor nagyobb teljesítényű üzemmódjával is (az alacsony teljesítményű mód kevésbé stabil). Valahogy így:
Pepe33, Trudnai:
Kipróbáltam fix 15pF-os kondikkal (mind2), és akkor kb szemre (karórához képest) fél másodpercenként lépett egyet a másodperc, 27pF-al pedig még mindig gyorsabb volt, mint egy "valódi" másodperc. Kb fél perc alatt sietett 10 másodpercet. (18f4550 adatlapja 27pF-ot ír) Próbálkoztam én már ezzel, azért is raktam be a trimmer kondit, hogy mondom majd azzal beállítom a másodpercet. De hát azért elég fura hogy dupla olyan gyorsan rezeg, sőt még gyorsabban is mint hogy kellene. Nem hagy nyugodni a dolog. Esetleg lehet olyan hogy a mellette lévő 4MHz-es kvarctól gerjed? Attól gyorsul be? Meg a próba panel sem a legszerencsésebb ilyen helyzetekben ugye. Hogyan lehetne egymástól leárnyékolni a két kvarcot? Az a baj hogy nincs lehetőségem szkóphoz jutni. De még egy freki mérőm sincs. Ha lenne már megnéztem volna hogyan viselkedik. Szerintetek a PK2 klón jó ilyesmi célra? Legalább a frekit megmérné logikai analizátor módban? Még nem használtam így a PK2-t azért is kérdezném. Meg azt is, hogy hogyan kell használni? icserny: Az adatlap szerint a nagyobb teljesítményű az alapértelmezett, és én ezt nem bántottam.
Pedig sajnos jó lenne szkóp... Az a gyanúm, hogy a kristály túlvezérlődik, és valami felharmonikuson rezeg. Van a Microchipnek is egy pár irománya ilyesmikről, például ez is: AN849. Igaz, hogy ez nem a Timer1 oszcira vonatkozik, de van benne szó XT módban használt 32768Hz-es kvarcról is, az ott fellépő problémákat lehet itt is támpontnak használni. Szerintem kellene az oszcillátorkapu kimeneti lábával sorba tenni valami ellenállást, esetleg a kondenzátorokat megnövelni még egy kicsit.
Szerk.: ha van mód a Timer1 oszcillátorának a módját átkapcsolni, akkor mindenképpen az alacsony teljesítményű módban próbáld az órakvarccal!
Próbáld meg az alacsonyabb teljesítményű módot is. Esetleg néhányszáz Ω soros ellenállást tenni a kvarc egyik lábával sorba, illetve valami MΩ nagyságú ellenállást az oszcillátor két lába közé.
Szia!
Az órakvarcnak elég vékony a kivezetése. Próbáld meg úgy, hogy levágott alkatrészlábat forrasztasz rá. A Microchip kifejezetten guard hurkot - föld vezetékkel való körbevételt - ajánl a két oszcillátor kivezetései közé illetve köré. Sajnos a breadboard -nak elég negy lehet a kapacitása a két kivezetéssor között...
Sziasztok!
MPLAB 7.4 helyett 8.56 -ot feltelepítve fordításkor hibát jelez, a régi verzióval ugyan az a .asm file jó volt. Error[113] C:\PROG....ASM 2722 : Symbol not previously defined (elogy_al_stab) "elogy_al_stab" a progi elején definiálva van, de ott nem anyázik érte. Mi lehet a baj?
Szia!
A forrás nélkül nehéz... Ha nem titkos, töltsd fel az asm állományodat. |
Bejelentkezés
Hirdetés |