Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Megdupláztam a sorokat de akkor sem megy a debugger.
Minden PGCx-PGDx párról lehet programozni, nyomkövetés csak arról a párról megy, amit a FICD konfigurációs regiszter ICS<1..0> bitjeivel beállítottunk.
A hozzászólás módosítva: Aug 27, 2019
Kicseréltem a PIC-et és megy a debugger!
![]()
Még időben szóltál sokáig néztem volna még az errata-át hátha írnak valamit.
Urak, belefutottam valami durvába. PIC24FJ128GC010 az alany és egyszerű rezisztív touchscreen-t szeretnék beolvasni. A kisebb testvérén (24fj128gc006) simán megy minden. ASM-ben dolgozom.
A fő baja, hogy belefagy az interrupt bit figyelésbe, egyszerűen nem megy tovább - az interrupt bit nem billen be. Az errata említ hasonlót, de a megoldást, amit kínál, nem működik. A neten tapogatózva ugyanilyen hiba volt, megoldás nem született, illetve valami x16-ra való átállást javasoltak neki... A fő gondom az, hogy ezen a PIC-en így nem tudok A/D konverziót csinálni egyáltalán. Minden megoldás érdekel, de eddig bármire állítottam, nem billent be egyik flag sem. Simán várakozással kiváltva pedig egyszerűen 0-kat olvas eredményül. tehát mintha el sem kezdené... Találkozott már valaki ilyennel?
Akkor most próbáljuk ezt meg káromkodás nélkül megfogalmazni, jó?
Tisztelt Moderátor,
Most tényleg kitörölted az amúgy jelentős tanulsággal bíró hozzászólását egy káromkodás miatt?
Úgy gondolom, nem volt benne káromkodás. Hacsak nem a 'szívás' szót vette annak.
A lényeg röviden összefoglalva: A PIC24FJ128GC010-es .gdl file-jában az AD regiszterek hibás szám alatt szerepelnek. Igaz, én még a régi mplab-os rendszert használom.
Sziasztok!
El akartam kezdeni DSPs kontrollereket használni. FFT library-t is használnám, ki akartam próbálni, hogy mindent szépen linkel e, persze nem. Először nem találta a függvényt, ekkor az xc16-ld konfigurációhoz betettem a "--library "dsp" into xc16-ld" opciót. Ekkor már megtalálta a függvényt, de kaptak az újabb hibát: Idézet: „c:\microchip\xc16\bin\bin\..\bin/elf-ld.exe: cannot open into: No such file or directory” Direkt újraraktam a XC16 fordítót, úgy, hogy ne legyen space az elérési útjába, de nem változott semmi, más megoldást pedig nem találtam. Van valakinek ötlete, miért akad meg itt? Köszönöm! (Próbakód)
UI: Egy dsPIC33EV32GM002 kontrollerről lenne szó. A hozzászólás módosítva: Okt 12, 2019
Kedves Kollégák!
Van két 8-bites változó(mindkettő értéke 0...255 tartományban lehet). Egyiket kivonom a másikból, így a szintén 8 bites eredmény is 0...255 tartományban lesz. Az így keletkezett különbséget 8-bites SIGNED -dé kéne tenni, ahol persze a 7. bit az eredmény pozitív/negatív állapotát jelzi, így az előbbi kivonás 8-bites eredménye 7-bitesre redukálódik. Van-e valakinek erre egy jól kipróbált assembly-programja, és elküldené-e nekem? Leginkább PIC16F1825 és 12F1840-et programozok. Segítséget előre is köszönöm.
Hali!
Nade a pl a 254 pozitívot hogy szuszakolod bele a 7 bit be?
Kicsit késői, de ha esetleg nem találtad meg itt írják, hogy a lipdsp.a be kell rakni a projektba.
A hozzászólás módosítva: Nov 4, 2019
Mint ahogy írtam volt: "...így az előbbi kivonás 8-bites eredménye 7-bitesre redukálódik."
Ezt tudomásul veszem és nekem így megfelel.
Bármelyik 8 bites típus adatlapjában megtalálható az Instruction set summary. Ebben a fejezetben kell megnézni a SUBWF utasítást.
De akkor ebből hülyeség lesz.
Esetleg úgy lehetne megoldani, hogy a pontosság rovására leshifteled egyet jobbra, tudomásul véve, hogy majd ha dolgozol vele, akkor fel kell tolni egy bittel. Vagy a legalsó bitet használod előjelnek és akkor maszkolod.
Kösz, na de azért ilyen tanácsot kapni miután több >4kB assemblyt írtam már...
De ezt nem tudhattad, legfeljebb abból sejthetted hogy e fórum címe nem "PIC kezdőknek".
Jól van, felesleges tovább agyalni, a dolgot természetesen megoldottam; mellékelem.
A problémám az, hogy csak kb. 6x6==36 esetben próbáltam ki--> nincs időm a 256x256 eset kipróbálására. Ezért keresnék egy olyan rutint ami a kért eredményt adja(akár ugyanaz mint az én megoldásom/akár más), de TELJESKÖRŰEN le van ellenőrizve. Csak ennyi kéne. Köszönöm.
Ha a kontroller ismeri az LSRF utasítást, akkor az ARSF -et és a SUBWFB -t is ismeri.
; 16 bit kivonás: (result+1) : (result) = (op1+1) : (op1) - (op2+1) : (op2) movf op2,w subwf op1,w movwf result movf op2+1,w subwfb op1+1,w movwf result+1 ; 16 bites előjeles szám osztása 2 -vel asrf result+1,f rrf result,f A hozzászólás módosítva: Nov 6, 2019
OK, de :
1./ a kérésem szerint én nem 16-biteseket vonnék ki egymásból, majd alakítanám. Talán nem voltam eléggé pontos, újrafogalmazom. Van A és B 8-bites nem-SIGNED változó, vagyis mindegyik felveheti a 0...255 értéket. Képezve az E=A-B kivonást(még mindig UNSIGNED-módon), a keletkezett érték -255...255 között lenne, de persze ebből binárisban/hexben megintcsak 0...255 látszik. Ám a kivonásnál keletkeznie kellett/kéne egy jelzésnek arról hogy az eredmény pozitív-e vagy negatív. Ennek segítségével állítja elő az ÉN programom a kívánt előjeles eredményt, persze a 0.-bit elvesztésével, mivelhogy az 1 db előjel-bitet (hagyományosa /szabványosan) a 7. biten tárolja. De vadásznék egy bármilyen más, ám teljeskörűen leellenőrzött rutinra, ami azt teszi amit kértem. 2./ biztos, hogy az előjeles szám osztása 2-vel az általad írott szerint jól működik? Kipróbáltad? Mivelhogy az ASRF utasítás az MSB-bájt 7. bitjét(vagyis az előjel-bitet) a 6. bitre is letolja. De lehet hogy OK.
1./ A subwfb utasítást azért vezették be, hogy egyszerűbbé tegyék a számítást. Sajnos csak field regiszterrel működő verziója van (a sublwb hiányzik). Az alacsonyabb helyi értéken elvégzett művelet eredményeként keletkező átvitelt (borrow) is figyelembe veszi. Esetedben a felső byte-ok helyett 0 -t használva előáll a két 8 bites érték különbsége 16 (illetve 9) biten. A következő 16 bites léptetés a 15. bitet viszi a hányados 15 és 14. bitjeire, a 8. bitet a 7. -ra, (a 0. -at a C -be). Így a kivonás felének előjele a 7. bitre kerül.
2./ ... az ASRF utasítás az MSB-bájt 7. bitjét (vagyis az előjel-bitet) a 6. bitre is letolja... Mit is kellene csinálni? Egy pozitív szám fele is pozitív, egy negatív szám fele is negatív. Inkább úgy fogalmaznék, hogy a 7. bitre a kiindulási szám előjelét teszi.
2./ kipróbáltam néhány számon: tényleg helyesen osztja az előjeles számokon az ASRF(+rrf) utasítás. És ezáltal rájöttem hogy mért van az utasításkészletben az ASRF.
De használható a 2-es hatványaival való osztásra is(pl. 16-tal). Csak előjeles számokra hibátlan, mert nem-előjeles esetén hülyeséget ad akkor ha a 7. (1-bájtosnál) vagy a 15.(2-bájtosnál) biten 1-es van. Köszönöm, ez hasznos volt. Mindjárt rövidítem is a programomban a 16-tal való osztó-rutint, ami eddig SWAPF és ANDLW utasításokkal végezte azt.
Miért kell assembly-ben a problémát megoldani? Időzítési a probléma, vagy nagyon kevés a prog. mem? Spórolni kell a memóriával is, hogy 8bites változókkal oldod meg 16bit helyett?
A hozzászólás módosítva: Nov 8, 2019
Az asrf utasítást az előjeles számokhoz találták ki. A sima 16F -en csak két utasításból lehetett megvalósítani : rlf op+1,w; rrf op+1,f majd rrf op,f.
Lehet több bittel történő léptetésre is használni, hiszen egy pozitív szám negyede/nyolcada/... is pozitív, egy negatív szám negyede/nyolcada/... is negatív.
Beállítás kérdése, lásd melléklet.
Köszi. Segítenél Flowcode 6 ban, hogy tudnám 8MHz re beállítani?
![]() Gondolod, hogy már nem néztem bele? Próbáltam gyorsan megtalálni, de nem sikerült. Köszi.
Itt szerintem gyorsabban kapsz választ:
Folyamatábrás mikrokontroller programozás Flowcode-dal |
Bejelentkezés
Hirdetés |