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   472 / 1211
(#) c27 válasza progee hozzászólására (») Dec 27, 2013 /
 
Bocs igaz, a programban úgy csináltam, hogy 1-0-ra figyeli, csak már nem emlékeztem rá és a nagy gondolkodás közbe elírtam.
Gondolkodtam én is az 1mp-n, majd meglátom végül is ez részlet kérdése, lehet egy bizonyos fordulatszám felett kéne váltani 0,5-ről 1mp-re, majd meglátom. Most úgy sikerült időzíteni , hogy a 100ms az pontosan 100,0032ms ez állt a legközelebb a 100-hoz. 0,5mp-ként 500,016ms telik el, de sztem ez jó, mivel max 255-öt tud számolni 0,5 mp alatt tehát kb. 2ms-ként 1 jel (majdnem).
Esetleg egy kész függvény is jó lenne csak be kéne ágyazni az asm-be, de jó lenne C is, a fordító gondolom meg tudja oldani. Vagy írom C-be és beleteszem az asm részt, C-be pedig lesz az lcd kiírásos rész.
Amíg nem jön valami kicsit konkrétabb erre a kiírós feladatra még gondolkodok kicsit.
(#) lajos1969 válasza nedudgi hozzászólására (») Dec 27, 2013 /
 
Ez a program fut a picben. Többet nem tudok, hátha valakinek mond valamit.
(#) Hp41C válasza c27 hozzászólására (») Dec 27, 2013 /
 
Már jó sokszor belinkeltem: Bin -> Packed BCD rutin. Tetszés szerint lehet a bitszámot növelni, csökkenteni. Gyors, rövid, hatékony. És már elég öreg is.
A pakolt BCD egy byte -on két digitet tárol. A magasabb helyiérték a 7..4 biteken, az alacsony a 3..0 biteken van. A szétválasztás swapf / andlw 0x0F és movf / andlw 0x0F utasításpárral könnyen megoldható. LCD -re írás előtt a digitekhez csak a 0 ASCII kódját (0x30 -at) kell hozzáadni....
A hozzászólás módosítva: Dec 27, 2013
(#) nedudgi válasza lajos1969 hozzászólására (») Dec 27, 2013 /
 
Ezt valami egzotikus oldalról szedted? Az eredeti kapcsolást kéne látni, mert a tápfeszültség megemelése nem elég.
(#) brato válasza c27 hozzászólására (») Dec 27, 2013 /
 
A PIC-edben van Capture modul, használd azt. Autómatikusan menti a timer értékét. Pont erre van kitalálva.
Az lcd kiíráshoz pedig ITT találsz konverziós rutinokat.
(#) Hp41C válasza lajos1969 hozzászólására (») Dec 27, 2013 /
 
Innen való? A kapcsolás mindent elárul. Mivel a 6 kijelző szegmens vezérlése közös (RB0..6), a digitek közös elektródáit is vezérelni kell (RD0..5). A közös anódos kijelző szegmenseit lehet egy-egy NPN tranzisztorral / N-MOS FET -tel vezérelni, de ekkor a vezérlés invertálódik: magas kimenet kell a kivilágosításhoz. Egy további inverter beiktatásával vagy a program átírásával lehet kompenzálni. A digitek anódjait a +5V -nál magasabb feszültségekre csak digitenként két tranzisztorral lehet megoldani. A PIC kimenetése egy NPN tranzisztor bázisellenálláson keresztül kapcsolódik, emittere a földre van kötve, a kollektora ellenállással kapcsolódik egy PNP tranzisztor básisára. Ez utóbbi emittere a tápfeszültségre megy, a kollektora egy digit anódjára. A bizos lezárás érdekének a PNP tranzisztor bázisa és emittere közé is kell tenni egy ellenállást.
(#) c27 válasza Hp41C hozzászólására (») Dec 27, 2013 /
 
Ok, kösz a segítséget. Amúgy már a 8 bitet kettéválasztja mivel 4bites vezérlésre van beállítva az elvileg már jó. Holnap majd nekiugrok és megnézem részletesen.
(#) lajos1969 válasza Hp41C hozzászólására (») Dec 27, 2013 /
 
Köszönöm!
Igen, de nem pont ez a kapcsolás, fentebb feltettem. Akkor a két tranzisztoros megoldást alkalmazzam az PNP bázisa és emittere közé milyen ellenállást tegyek? A program, azt is felraktam, bonyolult lenne az átírása? Akkor elég volna egy NPN tranzisztor is?

Clock.JPG
    
(#) lajos1969 válasza lajos1969 hozzászólására (») Dec 27, 2013 /
 
Ez íg y akkor nem lesz jó?
(#) lajos1969 válasza lajos1969 hozzászólására (») Dec 28, 2013 /
 
uln 2003 vagy uln 2803-as ic-vel meglehetne oldani? De hogyan?
Ha igen akkor hogyan? Valaki esetleg lerajzolná nekem, mert szeretném a panelt megtervezni de csak akkor ha biztos jó!
(#) icserny válasza lajos1969 hozzászólására (») Dec 28, 2013 /
 
Anód oldali kapcsoláshoz inkább UDN2981. Bővebben: Link
(#) Addye hozzászólása Dec 28, 2013 /
 
Sziasztok! Tudnátok ajánlani egy egyszerű, soros portról üzemeltethető PIC programozót, amellyel 18F2550 PIC-et fel tudnék programozni?

Előre köszönöm a segítséget!
(#) Pali79 válasza Addye hozzászólására (») Dec 28, 2013 /
 
Elolvastad fent?
Idézet:
„Kerülendő a JDM (soros porti) programozó.”

Szerintem 18-as családot már nem is tudják a régi programozók.

Ha csak egy PIC kell akkor inkább kérj meg valakit, hogy programozza fel. Ha pedig komolyan akarsz PIC-ekkel foglalkozni akkor minimum egy PICKIT2 klón az alap.
A hozzászólás módosítva: Dec 28, 2013
(#) Addye válasza Pali79 hozzászólására (») Dec 28, 2013 /
 
Köszönöm a gyors választ, elkerülte a figyelmem a fenti elolvasása. 1 db-ot kellene egyenlőre programozni. 6-ai héten leszek Budapesten, valaki tudna segíteni ezt az egyet felprogramozni?
(#) lajos1969 válasza Addye hozzászólására (») Dec 28, 2013 /
 
Sziasztok!
Még mindig függőben van a közös anódos kijelző beoperálása ebbe a kapcsolásba, valaki tudna segíteni ebben, hogy megfelelő legyen. A kijelző típusa SA23-12EWA és ebbe a kapcsolásba kellene működtetni. Én nem nagyon értek az elmélethez:
Köszönöm.
A hozzászólás módosítva: Dec 28, 2013
(#) bbalazs_ válasza Addye hozzászólására (») Dec 28, 2013 / 1
 
De ha a profilodban megadod esetleg a varost is, akkor talan van a kozeledben valaki.
Nem kell a szemelyes adatokat ennyire paranoid modon vedeni....
(#) Szárnyas válasza Addye hozzászólására (») Dec 28, 2013 /
 
Ha van a gépedben párhuzamos port, megépítheted a watt féle lpt-s programozót is: Bővebben: Link
(#) Hp41C válasza lajos1969 hozzászólására (») Dec 28, 2013 /
 
A PORTD kimeneteire (RD0 .. RD5) egy egy ellenálláson (1..2 k) keresztül egy-egy NPN tranzisztor bázisára menjen, az NPN tranzisztork emittere a földre, a kollentoruk rendre a Q1.. Q5 bázisellenállásaára. A PNP tranzisztorok bázisellenállása számítható: a kollektor áram / áramerősítési tényező. Javaslom ennél jóval kisebb értékű ellenállással telítésbe vezérelni.
(#) c27 válasza Hp41C hozzászólására (») Dec 28, 2013 /
 
Bocs, de nem igazán értem a belinkelt program működését. xxxxx000-val kell kezdeni de minél? Amit beolvas a porton vagy minek?
Elvileg akkor egy 24 bites számból csinál 6 jegyű tízes számrendszerbeli számot, de miért kell a a ASCII kódját hozzáadni az LCD-re íráshoz? Illetve akkor gondolom, mindegy kapott eredményhez hozzá kell adni csak előtte szét kell választani a 3x 8 bitet és utána hozzáadni a 0x30-at.
Mplabba hogy lehet nézni a változók értékét?
A hozzászólás módosítva: Dec 28, 2013
(#) Hp41C válasza c27 hozzászólására (») Dec 28, 2013 /
 
- xxxxx000-val kell kezdeni: A belső ciklus elállási feltétel vizsgálata miatt:
  1. BTFSS   FSR,2
  2.         GOTO    BCDADJ

Ha ezt átírod, a változók bárhol lehetnek, csak egymás utáni címen kell lenniük.
- 24 bites bináris szánból 8 digites pakolt BCD -t csinál. Az LCD pedig ASCII kódokkal működik. Ha "0" -t akarsz kíírni rá, az ASCII kódját (0x30) kell beírni. Tehát a pakolt digitetet külön kell választani, ASCII szám kódokká konvertálni (addlw 0x30), majd beírni az LCD -be.

MpLab -ban láthatod a változó értékét, ha fölé húzod a kurzort és egy kicsit vársz. A Watch ablakba (View / Watch) fel lehet venni az érdekesebbeket (névvel vagy címmel is felvehető).
A hozzászólás módosítva: Dec 28, 2013
(#) Addye válasza Szárnyas hozzászólására (») Dec 28, 2013 /
 
Köszönöm, ezzel megpróbálkozom.
(#) c27 válasza Hp41C hozzászólására (») Dec 29, 2013 /
 
A 24. sorba ez jó így? BIN2L MOVLW R3. Nem movfw kellene? (Amit linkeltél ott movlw van.)
Bocs nézd el nekem, de kicsit hülye vagyok, de nem értem minek kellene xxxxx000-nak lennie? Mármint az R0-nak vagy minden R-nek így kellene kezdődnie? Csak azért, mert akkor inkább papíron megyek végig a programon hátha megértem, mert így nem tudom mit kéne változtatni, hogy 16 bittel menjen, talán: kiesik az r3,r2,hbyte, és a bcdadj-nél nem 03h-t kell betölteni, hanem 02h-t? Az indf és fsr hogy működik esetleg tudnál pár szót mondani róluk?
Egyébként a változók fölé hiába viszem a kurzort nem írja ki az értéküket, valahol be kéne állítani valamit?
A hozzászólás módosítva: Dec 29, 2013
(#) Hp41C válasza c27 hozzászólására (») Dec 29, 2013 /
 
- BIN2L MOVLW R3. Nem movfw kellene? NEM, arról van szó, hogy R+ címe kerül az FSR regiszterbe. R3 -nak kell xxxxx000 címre kerülnie, R2, R1, R0 véltozók így sorban R3 utáni címekre kell kerülniük.
- Az indf és fsr hogy működik esetleg tudnál pár szót mondani róluk? Az INDF nem egy valódi regiszter, hanem az INDF -n keresztül a STATUS legfelső bitje és az FSR regiszter tartalmából képzett 9 bites címmel kiválasztott regiszter érhető el.
Válaszd ki a szimulátort (Degugger / Select tool / MpLab SIM), tegyél alkalmas helyre töréspontot (a sor elé klikkenve) indítsd el a programot. Ha megáll a törésponton vagy megállítod, akkor mutatja a változó étékét ha fölé húzod a kurzort. Ekkor frissül a Watch ablak is.
(#) Beles hozzászólása Dec 30, 2013 /
 
Sziasztok!

dspic30f-et programozok C nyelven. A memóriakezelésről szeretnék kérdezni, hogy hogyan működik. Nézegettem az asm nyelvet, de nem nagyon találtam meg azt, ha C-ben csinálok egy változót, akkor azt hogyan fordítja le a fordító. Illetve legjobban az érdekelne, ha csinálok egy függvényt, amiben van új változó dekralálva, akkor azt a változót futás időben hozza létre a PIC-ben a program? És ha igen, akkor a fordító ezt gondolom nem tudja ellenőrizni, hogy lesz-e elegendő memória, ha meghívom a függvényt? Azaz nekem kell számolnom azzal, hogy mennyi hely maradt a memóriában, lesz-e elég hely, ha meghívóm az új változókkal a függvényt?
(#) icserny válasza Beles hozzászólására (») Dec 30, 2013 /
 
A honlapomon találsz némi információt. Különösen a dinamikus változók és a veremkeret részt ajánlom figyelmedbe.
(#) Beles válasza icserny hozzászólására (») Dec 30, 2013 /
 
Köszi!
Kicsit nehézkesen fogom fel, de ha jól értelmezem akkor a w0-w15 wregisztereket használja fel a program a paraméterek átadására és visszaadására? És mi van akkor, ha nem elég a w0-w15?
(#) icserny válasza Beles hozzászólására (») Dec 30, 2013 /
 
Idézet:
„És mi van akkor, ha nem elég a w0-w15?”
Veremkeret.
(#) Beles válasza icserny hozzászólására (») Dec 30, 2013 /
 
Szóval a "vermet" a RAM-ba hozza létre? Megtévesztett kicsit, azt hittem először, hogy a w0-w15 a werem.
(#) icserny válasza Beles hozzászólására (») Dec 30, 2013 /
 
Én már ezer éve nem foglalkoztam vele, de ha nem csalódom, W15 a veremmutató (SP), W14 a keretmutató (FP). A lokális változók és az átadott paraméterek ehhez az FP-ben tárolt címhez képesti relatív címzéssel érhetők el.

Nem akarok nagyot mondani, de szerintem egy jól megírt fordító meg tudja állapítani, hogy a lokális változók mennyi helyet fognak elfoglalni. Legalábbis az IAR MSP430 fordítójánál kaptam már fordításkor hibaüzenetet emiatt.
(#) Beles válasza icserny hozzászólására (») Dec 30, 2013 /
 
C30 fordítót használok, és egy hatalmas tömböt csináltam buffernek UARThoz. Mikor felvettem közel a maximális memóriáig a tömb elemszámát, akkor bizonyos függvények meghívásakor hülyeségeket csinált a program. Miután hagytam több helyet az adatmemóriában, jól futott a program. Csak ezért gondoltam erre.
Következő: »»   472 / 1211
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