Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Az errata szerint a 2. verzióig a flash írás nem működött minden órajelbeállítás mellett...
Köszönöm!
Nem láttam az eratában a fától az erdőt én az oszcillátoról szóló részt néztem és nem vettem észre a flash-ről szóló részt.
Ezek a dolgok, amiket leírtam abszolúte nem PIC/nyelv függőek. Nézd át, hogy hogyan keletkezik a forráskódból futtatható bináris (hogyan működik egy fordítóprogram), és akkor érteni fogod amit leírtam.
Linker: XC16 dokumentációjában nincs leírva szájbarágós módon (nem is lesz soha). Viszont le van írva, hogy milyen argumentumokkal kell meghívni, mit vár el a linker mint bemenet stb. (http://ww1.microchip.com/downloads/en/DeviceDoc/50002071E.pdf 249. oldal, másik doksira hivatkozik). Makefile: Az MplabX sima make környezetet használ, ehhez van végtelen sok példa és dokumentáció. A make környezet bemenete egy leírás, hogy milyen függőségei vannak az adott fájloknak, ezeket melyik programoknak kell átadni stb. Gyakorlatilag a makefile írja le azt, hogy milyen lépéseket kell végrehajtani ahhoz, hogy bináris keletkezzen de ne programként tekints rá.
Kutakodtam és találtam egy pdf-et:
XC16 ASSEMBLER, LINKER AND UTILITIES Ha jól gondolom, akkor a 4.4-es fejezet az ami ide vág, mely a konstans inicializáló direktívákról szól. És szerintem a .pword direktíva az ami nekem kell: Idézet: „Assembles one or more 3-byte numbers into consecutive addresses in the current section.” Már ha jól értelmezem a dolgokat persze. Most jut eszembe hogy 8 bites PIC-kel, MPLAB 8.92-ben és assembly-ben már csináltam ilyet, mármint hogy adatokat pakoltam a programmemóriába. Ott így nézett ki:
A db-t most akkor kiváltja a .pword, utána pedig gondolom ugyan úgy jöhetnek az adatok ömlesztve, csak nem bájtonként hanem hármasával. Viszont hogyan mondom meg a fordítónak hogy honnan, melyik címtől pakolja be az adatokat? (Ami a CODE 0xAFC8 volt.) Ha ez megvan már csak egy programot kell íratnom az egyik barátommal, ami a wav fájlokból csinál egy ".pword 0x123456, 0x789ABC, 0xDEF012, 0x345678 ..." formátumú szövegfájlt...
Jaj már! De hisz' korábban leírtam itt.
A .section direktíva adja meg hogy a következő utasítások vagy adatok melyik területre és címre legyenek fordítva. Pl.:
A terület azonosítóneve: .adatok1, típusa/helye: code (vagyis a flash), kezdőcíme: 0x8f00. Ezután programutasításokat adhatunk meg, vagy adatokat (ez kell neked):
A hozzászólás módosítva: Jún 9, 2015
Én is így tárolok el nagymennyiségű adatot a programmemóriában. Sajátkészítésű alkalmazással létrehozom pl. a JPEG állományokból a .pbyte/.pword adatstruktúrát és egyszerűen ezt a szöveges állományt hozzáfűzöm a projekthez, vagy csak beszúrom a program végére. Gyors és egyszerű megoldás.
Idézet: „Az adatodat amit tárolni akarsz konvertáld át valahogy object-é (makefile-ba beleírod hogy a build során generálódjon erőforrás fájl a tárolandó adatokból). Linker szkriptben írd át, hogy a generált object fájlokat (program) a memória első x részébe tegye (azaz védd le a flash pl utolsó y lapját) majd a flash végére (kézzel megadva a címet) a linker szkriptből fűzd oda binárisan amit akarsz. A kódban meg csak a kezdőcímet kell megadnod” Hogyan lehet ilyet csinálni? Elakadtam már a makefájl létrehozásánál, a "Create List of Targets" lapon. Keresgéltem példa projekt után de sajnos nem találtam, pedig abból biztos megérteném. Idézet: „Jaj már! De hisz' korábban leírtam itt.” Valóban. Azt akkor még nem teljesen értettem, de így most már világos.
Helló,
Sajnos, csalódnom kellett a Proteusban (ISIS-ben): Az IOCIF nem törölhető szoftveresen, csak a hardver tudja törölni. Írtam egy rövid programot, az 1. variációban szoftveres törléssel, a 2.-ban hardveressel. Letöltöttem a PIC-be, a valóságban CSAK a hardveres törlés működik. Sajnálom, a PIC-t nyilván nem magyarok tervezték...
Az adatlapban fehéren-feketével le van írva:
Note 1: The IOCIF Flag bit is read-only and cleared when all the Interrupt-on-Change flags in the IOCxF register have been cleared by software. A hozzászólás módosítva: Jún 11, 2015
Másrészt, meg azt is mondtam, hogy ne bízz a szimulátorban, főleg ha kommunikációról meg megszakításról van szó. A hardver a megbízható teszt.
Sziasztok. Pic programozással ismerkedem. A kezdő alapok mondhatni megvannak. De a profi programozáshoz még tanulni kell az biztos. A későbbikekben a terv az lenne hogy egy picet felprogramozni xy feladatra, eztán usb-vel a pc-re kötve egy saját készítésű felületen futás közben állítani egyes paramétereket, változókat. Pl egy pic18f2550-nél ez lehetséges e? Kérdés ha ez a terv akkor milyen programokat ajánlotok?? Programozáshoz illetve kezelő felület készítéshez? Vagy esetleg van olyan program amivel egyszerre megoldható mind a 2 ?
Előre is köszi
Hajdanában a Microchip USB stack-ben, ami később a MAL (Mcrochip Applications Library) része lett volt egy látványos mindapélda "Device - MCHPUSB - Generic Driver Demo" néven, ami pont ezt csinálta. Sajnos, nem 2550-re, hanem 4550-re, tehát egy kicsit izzadni kell az adaptációval.
Ez a program kissé elavult, az újabb átirata (Visual C++ 2005 Express) pedig kevésbé látványos kinézetű. Mindamellett az MHCPUSB bootloader használata sem leányálom, drivert kell telepíteni hozzá, s atombiztosnak sem mondanám. Ehelyett én a HID bootloadert használok (ehhez nem kell driver), s hozzá külön-külön letöltőprogramot és alkalmazást. A letöltőprogram a MAL csomagban készen, rendelkezésre áll, az alkalmazást pedig a Device - HID - Custom Demos csomag valamelyik PnP demójából kiindulva készítem. Link: microchip.com/MLA Megjegyzés: A MAL utódját már MLA-nak hívják, de erről nem tudok mit mondani, én leragadtam a MAL 2012-08-22 kiadásánál.
Köszi. Nézelődtem én is tegnap óta. Én mikroC-ben kezdtem a programozást. Nem is szeretnék áttérni másra. Aztán már videókat is néztem ahol a pichez visual studióval csináltak programokat. Ehhez mit szólsz ?
Idézet: Jobb, ha nem mondok erre semmit...„Ehhez mit szólsz ?” A legtöbb támogatást elvileg akkor kapja az ember, ha a gyártó által támogatott fejlesztői környezetet és eszközöket használja. Az előző hozzászólásomban említett programkönyvtárakat és példaprogramokat például MikroC-ben aligha tudod használni. A MikroC könytárainak forráskódja viszont (tudtommal) nem nyilvános, így fogalma sincs az embernek, hogy mit csinálnak az egyes függvények, nem lehet belenézni, belemódosítani, vagy belejavítani.
Én azt használom, de ismerek olyan kollégát, aki ipari alkalmazásokat készít MicroC-vel... Tehát mindegyiknek van előnye és hátránya ( és nagyon sok elégedett felhasználója!), döntened Neked kell !
Alap dolgokat csinálok még csak.... de valahogy elsőre csak a mikroC fogott meg. Bár suliban Mplab-ot próbálták tanítani... csak a tanítás kicsit silány volt. Úgyhogy most pótolom be. Megnézem az mplabot is még egyszer hátha megtetszik . Igazából a későbbiekben szeretném majd azt hogy a picet usbvel gépre dugva a gépről tudjak majd beállításokat eszközölni a programban.
Ha jól tudom a mikroC demo/ingyenes verziója a program méretében tartalmaz korlátot, a MicroChip viszont optimalizálásban korlátozza a fordítót, a program akármekkora lehet.
Ez a tény engem elgondolkodtatna, melyik irányba menjek tovább. Legelőször megnézném az árát.
A mikroC-nek az egszerű használata az ami minenkit elragadtat, mivel midenre van beépített függvénye csak épp használni kell, viszont pont ez is a nagy hátránya, mivel nem tudni, hogy az a függvény valójában hogy is működik... Ehhez képest MPlab (+ ASM, C18, C30, C32)-ban (majdnem) minden függvényt neked kell megírni ami lehet, hogy nem működik annyira jól mint a mikroC-s változat, viszont itt bármikor kedved szerint módosíthatod, optimizálhatod Szerintem kezdetnek megfelel a mikroC (max 1-2 év) ameddig elsajátítod a dolgok mikéntjét, majd később MPlab és akkor azt csinálsz amit akarsz (persze saját függvényeket mikroC-ben is pont úgy tudsz írni) nem beszélve az MPlab nagyon jó szimulátoráról, nameg amúgy is az MPlab az mikrovezérlő gyártója által készített fejlesztői környezet amit azért nem árt szem előtt tartani. Ha már nagyon absztraktizálni akarsz akkor már Visual C++ vagy C#-ban is írhatsz programot, s megfelelő kompilátorokkal jobb esetben még működik is...
És akkor még 1 kérdés. C18 vagy xc8??
Attól függ a C18 csak a PIC18-hoz jó az XC8 meg az összes 8 bites mikróvezérlőhöz.
MPLAB 8 vagy MPLAB X? PICkit2 vagy PICkit3? C18 vagy XC8?
Pont ezen kérdések miatt ment el a kedvem a Microchiptől és a PIC-től! 5-6 éve még minden egyszerűnek és világosnak tűnt, de most a kérdés sokkal bonyolultabb - legalábbis nekünk, akiket a gyártó kvázi cserbenhagyott az MPLAB 8 + PICkit2 + C18 eszköztárral. Mindenestre ha most kezded, akkor akkor tudomásul kell venni, hogy az MPLAB X, XC8 és PICkit3 a fősodor.
Sziasztok!
C nyelven programozok. Hogyan lehet azt megoldani, hogy ha egy PIC bemeneti jele ingadozik két határérték között (pl. 0 és 5v között a bemeneti jel 2.4, 2.5, 2.6v), akkor a kimeneti jel ne egyből változzon, hanem egy kis késleltetéssel? "Mintha egy kondi lenne rákötve". (PWM jelet változtat a kimeneten, csak szoftveres a PWM jel) A válaszokat előre is köszönöm. A hozzászólás módosítva: Jún 17, 2015
Na lehet, hogy csak én vagyok értetlen, csak hogy tisztázzuk. A bemenő feszültség alapján változtatod a kitöltési tényezőt. Eddig ok. Amit nem értek az, hogy mit akarsz késleltetni. A másik, hogy szerintem nem is késleltetni akarod, hanem folyamatosan átvinni egyik állapotból a másikba. Sötétíts fel egy kicsit minket több információval.
Mplab X és PK3 van és akkor az xc8 lesz még hozzá Ha nagyon nem tetszik akkor visszatérek a mikorC-re... valahogy még mindig tetszik az egyszerűsége.
Rendben.
Van egy programom. Egy pic bemeneti lábát digitális bemenetként használom. Erre egy feszültségosztón keresztül van egy infra vevő rákötve. Ahogy tapasztaltam 2.5v alatt 0 jel, e felett 1-es szintű jelként érzékeli a PIC a bemeneti jelet. A kimenetére egy motor van kötve amit az infra jel hatására PWM jellel gyorsít vagy lassít. Szoftveresen állítom elő a PWM jelet, mert kicsi PIC-et használok és nincs hardveres PWM-je. (Nem az infra erősségének megfelelően gyorsul vagy lassul a motor, csak ha van infra jel, akkor lassítva megállítja, ha nincs jel akkor felgyorsítja.) Nagyobb PIC-et nem tudok használni, mert hely hiány miatt nem fér el! A probléma az, hogy az infra adó és vevő egymáshoz képest mozog. (a mozgás kis mértékű) Amikor jelet fog az infra akkor (a mozgás következtében amíg meg nem áll a motor) rövid időközönként van amikor nem kap jelet és mivel a PIC azonnal reagál addig nem lassítja tovább a motort, hanem gyorsítja. Ezt akarom kiküszöbölni. Ha jelet kap az infra és utánna pl. 10ms-ig nem kap jelet, akkor is abban a 10ms-ban lassuljon a motor. Tehát egy időzítő kellene, ami pl. csak azután gyorsítaná a motort miután 3s-ig nem érkezik jel az infrára.
Minden PIC rendelkezik a Timer0 időzítővel.
Idézet: „Nagyobb PIC-et nem tudok használni, mert hely hiány miatt nem fér el!” Egy 10F32x -ben van TIMER2 és PWM - SOT23-6 tokban. Ennél kisebb PIC nem kapható... |
Bejelentkezés
Hirdetés |