Fórum témák
» Több friss téma |
Idézet: „elkérhetem tőled a lefordított .hex fájlt amit te is használsz?” Ha erről az oldalról letöltötted a code_examples.zip állományt, akkor abban megtalálod a PIC18/bootloader mappában (PICCOLO-HID-Bootloader-PIC18F4550.hex)
Köszi, de ezt már próbáltam...
Akkor valami nagyon elcseszett módon van az én Win7-em telepítve vagy csak szimplán azon kevesek közé tartozom akiknek nem akar menni a dolog Mindegy még egy picit mazsolázok rajta aztán kihajítom a bootloader projektet a virtuális szemetesládába ... A hozzászólás módosítva: Szept 15, 2014
Sziasztok!
Szeretnék egy olyan programot írni, ami a következőket csinálja. Van 2 nyomógombom. Legyen + és - a nevük. Ha megnyomom a + gombot akkor az kapcsoljon fel egy ledet, és számolja meg hogy hányszor nyomtam meg a + gombot. És a - gombot annyiszor kelljen megnyomnom ahányszor a + gombot megnyomtam. Tehát ha 5 ször megnyomtam a + gombot akkor 5-ször kelljen megnyomnom a - gombot ahhoz hogy kikapcsoljon a led. Az a baj hogy most kezdem el tanulni ezt a pic-es dolgot és még nem nagyon vágom, hogy mit miért. Valaki legyen szíves segíteni! Köszönöm szépen!
Ha tanulni is akarsz belőle valamit, akkor próbálj utánanézni. Az a kérdés, hogy c-ben vagy assembly-ben akarod-e írni. Kezdésnek válassz egy mikrovezérlőt, nézd át a dokumentációját, melyik lábra akarod a kapcsolót, melyikre a ledeket.
Amúgy ez házi, vagy csak gyakorolni akarsz?
PIC 18F14K22 a típus. Az már megvan hogy mit hova akarok tenni, mert van egy próbapanelem, arról meg van rajz, azt mellékelem. Gyakorlás lenne a célom. Asm-ben szeretném írni a progit.
A hozzászólás módosítva: Szept 15, 2014
Ez elég egyszerű..
Feltételezem, hogy definiálod a LED-eket és a gombokat. Létrehozunk 1 változót.
Utána pedig a nyomások számát eltárolod a létrehozott változóban. Mondjuk, ha magas szintre vannak felhúzva a gombok akkor figyeled egy feltétben a szintváltozást vagy is, hogy mikor kerülnek a bemenetek alacsony szintre. (PIC egy lábát bemenetre állítod TRIS regiszterrel, és felhúzod 5v-ra egy 10K-s ellenállással, mikor egy nyomógombbal testre zárod a PIC lábát akkor bekövetkezik a szintváltozás)
Utána pedig jöhet a mínusz gomb figyelése
Persze ez csak egy példa és még további vizsgálatokat igényelne, de egyszerre ez is elég. Király.... Most olvasom csak, hogy ASM-ben akarod írni én meg C-ben írtam... Mindegy azért meghagyom... A hozzászólás módosítva: Szept 15, 2014
Ez assemblerben hogy néz ki?
Abban sajnos nem tudok segíteni..
ASM-et csak kicsit látom át, ahhoz mindenképp kevés, hogy segíteni tudjak..
Azért nagyon szépen köszönöm a segítséged!
Esetleg tudna valaki assemblerben segíteni?
Mielott barmi programot irsz talan a HW-t kellene rendbeszedni. Mert ha a HW a rajz szerinti, akkor nem fog mukodni a kijelzo, mert a CA (kozos anodos) kijelzore pozitiv feszt kell adni nem GND-t. Megoldas a CC kijelzo hasznalata. A Reset gombnal a R18 10k, es sorba kell kotni egy diodat vele, hogy a programozo fesz ne vesszen ossze az 5 volttal (a 78L05 utalja ha a kimeneten magasabb a fesz mint a bemeneten, es altalaban tonkremenessel jutalmazza a mutetet). A K1, K2, K3 kapcsolokat jobb lenne GND fele bekotni, es a R19, R20, R21 ellenallasokat, tapra huzni, vagy a belso felhuzoellenallasokat hasznalni. Kesobb teszek fel ASM peldat.
Urak, végre eljutottam odáig, hogy végre már működik win7-el is a bootloader, de ehhez valami újabbat kellett letöltsek.
Viszont itt a lefordított .hex működik, de a forrás, ha én akarom fordítani ezt a hibát dobja:
Nem akarok arra gondolni, hogy.... és azért nem megy. Herélni kell rajta, hogy beleférjen vagy mi lehet a gond? 18F4550 MPLAB - C18 A hozzászólás módosítva: Szept 15, 2014
Nagyon úgy néz ki, nem fér bele a memóriába.
A c18 regisztrált? Mert ha nem akkor nagyobb kódt generál. Optimalizáció be van kapcsolva?
A ... helyén az ingyenes változat szerepel...
Azt sem tudtam, eddig hogy regisztrálni kell. Nem ütközött még rajtam kívül senki ebbe a hibaüzenetbe? A fórumokon azt írják, hogy mivel nem regisztrált az MPLAB így az optimalizáló nem működik és ezért nem fér bele a memóriába. Nincs mód arra, hogy beleférjen? (gondolok itt arra, hogy regisztráció nélkül, vagy az elkerülhetetlen?)
Itt egy ASM pelda ket bemenet figyelesere, es egy szam novelesere/csokkentesere. Amennyiben a num=0 a LED kikapcsoles ha num>0 a LED bekapcsol. A pelda PIC16Fxxx-re irodott, de termeszetesen kis atalakitassal a PIC18Fxxx sorozaton is mukodik.
A hozzászólás módosítva: Szept 15, 2014
Biztos sokféleképpen meg lehet oldani a feladatot. Én mint kezdő ezt csinálnám:
Kell egy változó amit növelsz ill. csökkentesz a gombokkal. Gondolom a változó létrehozása nem jelent gondot. Legyen ez most "LED" A növelést és csökkentést egyszerűen annak a bitnek a tesztelésével éred el amire a gomb van kötve(btfsc vagy btfss attól függően, hogy miként vannak bekötve a gombok), plusz incf vagy decf utasítást kell használnod. Ezután az elején létrehozott változót vizsgálnám: ha LED>0 akkor a led világít, ha LED=0 akkor nem világít. A program elején 0-ra kell állítani a változót és csak a + megnyomására növekedhet, ill. a - megnyomására csökkenhet. Remélem nem rontottam el semmit, ha igen majd valaki kijavít...
Látom egy rugóra járt az agyunk! Csak nem akartam kész kódot adni. Ha vért izzad vele abból tanul az ember fia.
Kötelező olvasmány kezdőknek PIC-Assembly Idézet: A frissen telepített C18 próbaverziók 60 napig optimalizálnak. Lehet próbálkozni!„Nincs mód arra, hogy beleférjen? (gondolok itt arra, hogy regisztráció nélkül, vagy az elkerülhetetlen?)” Nekem eddig megfelelt a gyári fordítás is, csak a konfigurációs biteket variáltam, arra meg jó a Notepad.exe is (kicsit számolgatni kell hozzá hexa számrendszerben...).
Köszi, de szeretném megváltoztatni a Boot gombot és a LED-eket illetve szeretném kijelzőn is jelezni, ha Bootloader-be lépek.
A régin már ezeket megírtam, de az meg WIN7 alatt nem ment. Az új meg nem fordul. Bár már meg van rá a megoldás, csak még nem jött össze nekem
Mint icserny kolléga mondta telepítsd ujra a C18-at és 60 napig megy az optimalizálás, és akkor el fog férni.
En irtam kesz peldat, de ugylatszik az ujhus kollega eltunt.
Ha csak náhányszáz utasítást kell megspórolni:
- Nyisd meg a Disassemby ablakot. Nézd végig mely C sorból mi fordítódik. - Keresd meg a legtöbb assembly sorra forduló C sort. Írd le egyszerűbb C utasításokkal. - Fordítsd le és végezd ezt a ciklust addíg, amíg belefér. Ötletek: Sok kódot emésztenek fel a következők (Nagyon jól tudom, hogy a C nyelv filozófiájával ellenkeznek, de a limit és a pénz nagyobb urak...) - Lokális változók kezelése (a C18 PLOUSW2 -vel kezeli, tehát amikor értéket ad neki más változóból, kifejezés kiértékelésekor, előbb elteszi más változóba, majd movlw segédváltozó_relatív_cím / movff segédváltozó, PLUSW2) - Függvényparamétrek, kezelésük hasonló a fentihez. Sokszor fordul elő, hogy nagy üggyel-bajjal kiszámoljuk a paraméter értéket egy változóba, majd átadjuk a függvénynek (stackre másolással), majd a függvény átmásolja egy (ugyan abba) változóba, a visszatérés után a stacket visszafejti a C. - Többparaméteres függvényből csak egy kijárat legyen (a PRO optimalizálsá megoldaná) - Összetett kifejezések kiértékelése általában sok átmeneti változót használ fel. Sokat lehet megtakarítani, ha felbontjuk a kifejezést. A programozó tudhatja, mely változókat lehet a számítás közben már felülírni a részeredménnyal. - Assembly betétek alkalmazása - a free kódnál több, mint négyszer tömörebb... - Átmeneti változónak használható minden nem alkalmazott FSR: pl EEDATA, EEADRL, WREG, stb - Nem kell mindig hosszabb (bitszámban) típussal végezni a műveleteket, a STATBUSbits.C használható. - A char típusú függvények visszatérési értéke a W REG -ban, az int -eké a PRODH : PRODL regiszterpárban. ki lehet használni, így elmaradhat a return (változó)... (Még PRO optimalizálás esetén is működik a módszer) A hozzászólás módosítva: Szept 16, 2014
Üdv!
Szeretnék egy próbapanelt építeni PicKit2-höz, lenne rajta karakteres LCD, GLCD, nyomógombok, LED-ek, stb. Érdekelne, hogy milyen védelmet tudnátok ajánlani, hogy a panel "bolondbiztos" legyen, hogy szokták ezt megvalósítani? Köszönöm
Szerintem megint egy nagyon tanulságos összefoglalót szerkesztettél, kár, hogy sokan "csak" a C-t ismerik, ill. akarják megtanulni !
Köszönet a tudásod közreadásáért !
Ennyi azért kimaradt:
- Az optimalizáló nem kezeli a függvényt, ha benne _asm / _endasm utasítás van.
Én is kezdő vagyok, de odáig már eljutottam, hogy tudjam felesleges az ilyen panelokkal bajlódni. Nem rugalmas a rendszer, ha van egy ötleted amit meg szeretnél valósítani akkor csak akadályozni fog.
Kezdem érteni, hogy miért programozol inkább assembly nyelven.
En terveztem egy par demo panelt, amit megnezhetsz itt. Nem tartom jonak ezeket a tulbonyolitott panelokat. Ilyen pl a MikroElektronika Easy sorozata. Nagy, tulbonyolitott, kezdonek nehez kezelni. Inkabb az egyszerubb demo panel, hozzakapcsolhato kiegeszitokkel (lasd Olimex). Sokkal egyszerubb az elet ilyenekkel. Mellesleg egy ilyen bonyolult panel legyartasa sem lesz olcso.
|
Bejelentkezés
Hirdetés |