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 ![]()
Köszi a segítséget mindkettőtöknek.
Agyalni muszáj lesz vele, mert nem PIC-re lesz. ![]()
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 |