Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   567 / 1210
(#) tomi52 válasza vilmosd hozzászólására (») Szept 15, 2014 /
 
Izlések és pofonok... Személy szerint sokkal rugalmasabbnak találom az ilyen módon készített próbapanelt. Sajnos én sem elsőre kötöttem ki e mellett a panel mellett.
(#) icserny válasza don_peter hozzászólására (») Szept 15, 2014 /
 
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)
(#) don_peter válasza icserny hozzászólására (») Szept 15, 2014 /
 
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
(#) tomi52 válasza qbit hozzászólására (») Szept 15, 2014 /
 
Szintén Arduino szerű fejlesztő környezet az mpIDE is. Lehet használni az Arduino panelekhez is (bár nem próbáltam), meg PIC32-höz is. Sajnos az I2C-nél megállt a tudományom, némi guglizás után fel is adtam, mert állítólag ez a rész nem működik benne. (Van itt egy haldokló fóruma is.)
(#) petike199600 hozzászólása 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!
(#) diamik válasza petike199600 hozzászólására (») Szept 15, 2014 /
 
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?
(#) petike199600 válasza diamik hozzászólására (») Szept 15, 2014 /
 
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
(#) don_peter válasza petike199600 hozzászólására (») Szept 15, 2014 /
 
Ez elég egyszerű..
Feltételezem, hogy definiálod a LED-eket és a gombokat.
Létrehozunk 1 változót.
  1. unsigned char gombnyomas = 0;        //max 255 mivel 8bites változó

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)
  1. if(pluszgomb==0 && gombnyomas<=255){    //pl: #define pluszgomb PORTBbits.RB0
  2.     while(pluszgomb==0);    //Várakozik amíg fel nem engeded a gombot
  3.     gombnyomas++;    //növeled a változót 1-el
  4.     if(gombnyomas==1){    //csak hogy ne fusson le minden alkalommal mikor pluszgomb-ot nyomsz
  5.         LED = 1;    //Bekapcsoljuk a led-et
  6.     }
  7. }

Utána pedig jöhet a mínusz gomb figyelése
  1. if(minuszgomb==0  && gombnyomas>0){
  2.     while(minuszgomb==0);    //Várakozik amíg fel nem engeded a gombot
  3.     gombnyomas--;    //csökkented a változót 1-el
  4.     if(gombnyomas==0){
  5.         LED=0;    //Kikapcsoljuk a led-et
  6.     }
  7. }

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
(#) petike199600 válasza don_peter hozzászólására (») Szept 15, 2014 /
 
Ez assemblerben hogy néz ki?
(#) don_peter válasza petike199600 hozzászólására (») Szept 15, 2014 /
 
Abban sajnos nem tudok segíteni..
ASM-et csak kicsit látom át, ahhoz mindenképp kevés, hogy segíteni tudjak..
(#) petike199600 válasza don_peter hozzászólására (») Szept 15, 2014 /
 
Azért nagyon szépen köszönöm a segítséged!
Esetleg tudna valaki assemblerben segíteni?
(#) vilmosd válasza petike199600 hozzászólására (») Szept 15, 2014 /
 
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.
(#) don_peter hozzászólása Szept 15, 2014 /
 
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:
  1. Error - section '.code_main.o' can not fit the section. Section '.code_main.o' length=0x000000ba

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
(#) Hp41C válasza don_peter hozzászólására (») Szept 15, 2014 /
 
Nagyon úgy néz ki, nem fér bele a memóriába.
(#) usane válasza don_peter hozzászólására (») Szept 15, 2014 /
 
A c18 regisztrált? Mert ha nem akkor nagyobb kódt generál. Optimalizáció be van kapcsolva?
(#) don_peter válasza usane hozzászólására (») Szept 15, 2014 /
 
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?)
(#) vilmosd válasza petike199600 hozzászólására (») Szept 15, 2014 / 1
 
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.
  1. ;------------------------------------------------------------
  2. num     equ     0x20
  3. ;------------------------------------------------------------
  4.         org     0x000
  5. ;
  6. start           clrf num
  7.                 bsf     STATUS, RP0  ;switch to bank 1
  8.                 movlw   b'00000011' ;inputs/outputs
  9.         movwf   TRISA
  10.         .
  11.         .      
  12. ;------------------------------------------------------------
  13. repeat  call    pressck ;look for incr/decr button press
  14.         .
  15.         .
  16.         .
  17.                 goto    repeat
  18. ;------------------------------------------------------------
  19. pressck btfss   PORTA,1 ;decrease button pressed?
  20.                 goto    decnum  ;yes, decrement num
  21.                 btfss   PORTA,0 ;increase button pressed?
  22.                 goto    incnum  ;yes, increment num
  23.                 return
  24. incnum  movf    num,w   ;get num into W
  25.                 sublw   0xff    ;num=0xff?
  26.                 btfsc   STATUS, Z
  27.                 return
  28.                 incf    num,f   ;increment num
  29.                 bsf     PORTA,2 ;LED ON
  30.                 return                  ;press check done
  31. decnum  movf    num,w   ;get num into W
  32.                 sublw   0x00    ;num=0?
  33.                 btfsc   STATUS, Z
  34.                 goto    ledoff
  35.                 decf    num,f   ;decrement num
  36.                 return                  ;press check done
  37. ledoff  bcf     PORTA,2 ;LED OFF
  38.                 return                  ;press check done
  39. ;------------------------------------------------------------
A hozzászólás módosítva: Szept 15, 2014
(#) Pali79 válasza petike199600 hozzászólására (») 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...
(#) Pali79 válasza vilmosd hozzászólására (») Szept 15, 2014 /
 
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
(#) icserny válasza don_peter hozzászólására (») Szept 16, 2014 / 1
 
Idézet:
„Nincs mód arra, hogy beleférjen? (gondolok itt arra, hogy regisztráció nélkül, vagy az elkerülhetetlen?)”
A frissen telepített C18 próbaverziók 60 napig optimalizálnak. Lehet próbálkozni!

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...).
(#) don_peter válasza icserny hozzászólására (») Szept 16, 2014 /
 
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
(#) usane válasza don_peter hozzászólására (») Szept 16, 2014 / 1
 
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.
(#) vilmosd válasza Pali79 hozzászólására (») Szept 16, 2014 /
 
En irtam kesz peldat, de ugylatszik az ujhus kollega eltunt.
(#) Hp41C válasza don_peter hozzászólására (») Szept 16, 2014 / 1
 
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
(#) Schliemann hozzászólása 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
(#) kissi válasza Hp41C hozzászólására (») Szept 16, 2014 /
 
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 !
(#) Hp41C válasza kissi hozzászólására (») Szept 16, 2014 /
 
Ennyi azért kimaradt:
- Az optimalizáló nem kezeli a függvényt, ha benne _asm / _endasm utasítás van.
(#) Pali79 válasza Schliemann hozzászólására (») Szept 16, 2014 /
 
É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.
(#) Pali79 válasza Hp41C hozzászólására (») Szept 16, 2014 /
 
Kezdem érteni, hogy miért programozol inkább assembly nyelven.
(#) vilmosd válasza Schliemann hozzászólására (») Szept 16, 2014 /
 
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.
Következő: »»   567 / 1210
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem