Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
És a dsPIC30F/33F Programmer's Reference Manual ban leirt nem elég? kb 250 oldalon keresztül vesézi.
250 oldalon Mit? Az ASM30 parancsait?
Nem a fejlesztő környezet a kérdés, hanem a parancssor és a benne szereplő elemek pontos funkciója! pl. te tudod, hogy a következő sorban mi mit csinál?
Amit én tudok. (ill tudni vélek) Acc=Acc+Wm*Wn Acc a két 40 bites Akkumlátor egyike, A vagy B Wm és Wn az egyik egyik munka regiszterpár(pl. W4-W5) amelyek y és az x memóriaterületen címeznek egy egy rekeszt. Az ezekben található értékekkel végződik a művelet. Lehet használni a parancsot röviden is, úgy egyértelmű:
De mit csinál a többi operandus? Erre nem találok megfelelő infót.
Elnézést kérek, de már napok óta kerülgetem ezt a fájlt! Ha hiszed, ha nem azért nem kattintottam rá, mert azt hittem, hogy a PIC programozásával foglakozik(flash égetése). Egyszerűen mindig kihagytam, ahogy ránéztem! Én még így nem jártam, pedig 2 napja keresgélek több tucat pdf-et átnézegetve!
Szóval még egyszer elnézést, és köszönöm!
Benne van ez is a doksiban, gyorsan bele olvastam, fustol a fejem, viszont legalabb latom, hogy jo ez a dsp!
Szoval Example 4-20 -at nezd meg: MAC W5*W6, A, [W8] += 2, W5 (egyertelmu, nem? ) Szoval az A utani resz a prefetch - magyaran indirekt cimzes. Annyit csinal, hogy W8 altal cimzett cimen levo adatot betolti a W5-be... W6-ra is lehetne hasonlot csinalni ugyanebben az utasitasban... W8 es W9 regiszterek az X, mig W10 es W11 az Y memoriat tudjak cimezni. W8 es W10 ilyen inkrementalgatos pointer, a W9 es W11 offsetes - azaz azokkal offseteket lehet megadni immediate-el vagy W12 offset regiszterrel. Az AWB meg egy accumulator write back, hat azt meg nem egeszen ertem, de nyilvan le van irva az is. Majd olvasok tovabb csak dolgoznom is kellene szerk: a "+= 2" ugye a W8 inkrementalasa...
Igen, nekem is füstöl és épp most értettem meg én is.
Azt még nem említetted, hogy a W8-at utána növeli kettővel, ami a következő adatrekeszre mutat, előkészítendő a következő MAC-ot. A betöltést előbb csinálja és utána szoroz? (De ezt majd este leszimulálom...) Az AWB a W13-at(MAC Write Back Destination) tölti fel valami cél címmel, még azt én se értem teljesen. Még most se tértem magamhoz, hogy hogy a fenébe ugrottam át ezt a szuper doksit! Szégyenlem is magam, hogy nekiugrottam lidi-nek! Idézet: „A betöltést előbb csinálja és utána szoroz? (De ezt majd este leszimulálom...)” Igen, igy van igazan ertelme, ezert prefetch es nem postfetch ennek az eljarasnak a neve. Ha jol ertelmezem a logikajat, akkor nem kepes kozvetlen memoria elemekkel operalni, mindenkepp be kell tolteni regiszterbe elobb. Ezt viszont ossze zomitettek, hogy ez a betoltes megtortenhessen egyetlen ciklusban magaval az operacioval. Tehat az utasitas vegen a W5 tartalmazni fogja a W8 altal cimzett adatot, az A a szorzas eredmenyet, W8 pedig a 2-vel megnovelt cimet. Ily modon egy matematikai keplet eleg gyorsan elvegezheto ami egy adathalmazon operal - ugye digitalis szuroknel ez eleg gyakori eset. Kozben neztem, hogy az AWB is ilyen gyorsitasra szolgal, hiszen alap esetben az accumulator fogja tartalmazni a szorzas eredmenyet, de azt el is taroltathatjuk kapasbol a W13 regiszterbe, vagy az azaltal cimzett memoria teruletre, amikor szinten hasznalhatunk pointer inkrementalast. Ez mar majdnem olyan mikor C-ben a for ciklus fejleceben elintezunk mindent es nem is kell ciklus torzs
Nekem is nagyon tetszik a dolog és jól is fog jönni hamarosan...
Köszi a kifejtést!
A kérdés nem volt hülye. Itt inkább azért szoktak bosszankodni, mert a kérdés feltevése előtt az önálló válaszkeresés, olvasás, téma tanulmányozása elmarad. Ha néhány oldallal visszaolvasol láthatod, hogy a napokban foglalkoztunk ezzel.
Hát le a kalappal előttetek, hogy ti ezeket értitek. Az rendben van hogy ezekkel a dsPic-ekkel gyors számításokat lehet végezni nagyobb adatcsomagokon, de hogy házilag ezt én mire tudnám felhasználni azt nem tudom.
Sziasztok!
Építeni szeretnék egy normális PIC égetőt amivel minden pic-et tudok programozni, tudtok segíteni?
Az amit most gerjesztek egy SMPS tápvezérlő egység, amellett, hogy nagyon sok másra is jó(én sem tápot építek belőle, ha minden igaz)
Van benne egy 2Msps-es AD, amivel méréseket lehet végezni. Most ez a része az érdekes. Namost ez az adatsebesség azt kívánja, hogy nagyon gyorsan el lehessen venni tőle az adatot, majd utána valamilyen műveleteket lehessen végezni rajtuk azonnal, mivel a SRAM kicsi, így az eltárolás nem jöhet szóba. Ekkor jön jól egy ilyen hardveres segítség. Az y memóriába az AD leteszi a mért értéket, majd egy ciklusidőnyi parancsal(MAC) össze tudom adni a 40bites akkumlátorban tárolt adatokkal, vagy szorozhatom egy számmal az összeadás előtt, és az eredmény ki küldhetem vissza a memóriába a "hátsó írással". Szóval ez egy igen hasznos és profi lehetőség!
Áldásom rá!
Nézz fel szilva oldalára(adatlapján van a link), utána az enyémre(vagy itt a PICKit2 klónos cikket keresd elő), és döntsd el melyik PK2 verziót építed meg.
Helo!
Tudnátok segíteni abban hogy kell egy 16F628A-t felprogramozni úgy asm-ben , hogy a PC-vel Hyperterminálon keresztül tudjon komunikálni.
Üdv!
valami ilyesmira gondolsz? __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _BODEN_ON & _XT_OSC & _LVP_OFF & _MCLRE_OFF
Sziasztok!
Írogatok egy programot (ASM /MPLAB) 16F628A ra, és a project felépítésénél ezt írja ki az MPLAB az "OUTPUT" ablakban: Warning[220] C:\MINIGSMKEYH\MINIGSMKEYH.ASM 1375 : Address exceeds maximum range for this processor. Ez (elnagyolva) ugye azt jelenti hogy betelt az adatmemória terület. De vajon mitől? Írtam már ennél jóval hosszabb és nagyobb terjedelmű pőrogramokat is és nem volt ilyen gondom. A program végén az "END" utasítás után benne szoktam hagyni az asm. fájlban piszkozatként egy két rutint meg egyebeket. Gondolom ez nem számít mert nem a program része, így hozzá sem nyúl a fordító. Vagy mégis? Mi lehet a gond?
Az END utániakat nem veszi figyelembe a fordító. Abban a sorban, amire panaszkodik, mi van? Vajon a programmemória vagy az adatmemória lett "túlcímezve"?
Igen, de nyílvánvalóan a konfignek illeszkednie kell a programhoz és az áramkörhöz. Tehát a készítőnek kellene az oldalán erről informálni az utánépítőt.
De azért lehet kísérletezni, mert elrontani nem nagyon lehet ezzel.
Jut eszembe, ha egy kedves modi ráérne pár percre, kérem lidi-nek megadni a megoldásért a pontot, arra a hsz-re, amire most válaszoltam(két napja kutattam ezt a témát)!
Köszi!
Egy késleltető rutin hívása.
" CALL DELAY3"
Szia!
Az MPLAB-ban jó a processzor beállítás?! Steve Idézet: „„A betöltést előbb csinálja és utána szoroz? (De ezt majd este leszimulálom...)” Igen, igy van igazan ertelme, ezert prefetch es nem postfetch ennek az eljarasnak a neve.” A szimuláció mást mutat sajnos. Először elvégzi a Wm*Wn-t, majd betölti a következő operandusokat a Wm és Wn-be. Ez még hagyja ám, de valamit vagy nem jól csinálok, vagy nem jól írják az adatlapban, vagy a szimulátor nem jól dolgozik, de ha W4-be és W5-be 1-ett teszek, akkor az eredmény az Acc-ben 2 lesz! Ha bármelyik 0, akkor az Acc is 0 lesz. Szóval nem értem ez miért van.
Továbbmenve a tényleges képlet
A = A + 2*Wm*Wn És a vicc az, hogy az adatlapban is e képlet szerint változnak a példában az értékek. Enyhén szólva sem értem...
A fordításkor keletkező valamelyik lista- referencia- vagy map-fileban nem látszik, hogy a DELAY3 címke értéke mennyi? Vagy egyáltalán ez az utasítás milyen címre akar kerülni a fordításkor?
Igazad van, jol megvezetett engem az a leiras, de kesobb a MAC utasitas leirasanal irja, hogy a prefetch az a kovetkezo MAC utasitashoz kesziti elo az adatokat. Es vannak mas utasitasok is amiknel lehet elokesziteni MAC-hez az adatokat - hmm, kicsit tobb idot kell erre szanni az az erzesem
Na, en arra jutottam, hogy a MAC az Multiply and Accumulate - azaz valami olyasmit csinal amit leirtal. Sima szorzast pedig az MPY csinal. Ennek ellenere ezeket a speci utasitasokat neha DSP utasitasoknak, neha meg MAC utasitasoknak mondja... most alvas kovetkezik
Én meg kelek!
Lehet, hogy a 17bites szorzó egység miatt tolódik el egy bittel balra a szorzat? Érthetetlen számomra, hogy miért más az eredmény, mint amit ugyanabban a doksiban képlettel leírnak, aztán ugyanott példában kétszeres lesz az eredmény!?
Sziasztok!
Lenne egy bosszantó problémám. Nem programozási jellegű, hanem elektronikai. PIC18F4520-hoz szeretnék kötni egy Ricoh R2025 órát. A bekötésem mellékeltem, ami elvileg egy bevállt, működő dolog. Viszont nálam valami gáz van. A C1-es kondi, Tantál, amit ha bekötök, a BAV70-es rögtön elfüstöl. Ha nem kötöm be, akkor be tudom állítani az órát és működik, viszont ha elveszem a tápot, nem megy tovább az elemről. Méregettem már mindent, de minden jónak tűnt. Próbáltam kihagyni a BAV70-et, de úgy sem jó. Ha az elemet kötöttem be direktbe, akkor nem ment egyáltalán és érdekes módon, amikor kivettem az elem felőli ellenállást is, akkor az óra VCC és Vss lába között 5V körüli feszültséget mértem. Talán ez azért lehet, mert az I2C miatt az RC3,4 lábak fel vannak húzva? Ha a Vcc-re kötöttem az órát direktbe, egy 4148 dióda segítségével, akkor meg elindult, de nem állítódott be, hanem igen nagy számok jelenítődnek meg, amik persze változnak. Szóval nem értem a dolgot. Sajnos elektronikában nem vagyok túl jó és most nem tudom mi tévő legyek. Az óra lábait is méregettem már, és látszólag nem érnek össze sehol sem. Van valakinek ötlete, hogy mit lenne érdemes kipróbálni? Köszönettel: Zoli |
Bejelentkezés
Hirdetés |