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   403 / 1210
(#) Hp41C válasza djadji hozzászólására (») Ápr 19, 2013 /
 
Szia!
A programodban az alábbiakat nézd meg: ADCON1: VCFG1=0, VCFG0 = 0, ANSEL és TRISA regiszterek beállítása és azt, hogy a csatornák váltása között kivárod-e a min. 2Tad beállási időt. Továbbá az áramkörben az AD bemenetek max. 2K forrásimpedanciát lássanak. Ha ez az utóbbi nem adódik ki a feszültség osztók értékébők, akkor egy-egy feszültség követő erősítőt ajánlatos beépíteni.
Ha egy AD bemenettel a kimeneti feszültséget méred, a mérési eredményt a másik analóg bemenetre beállított feszültséghez hasonlítod és a különbségtől függően vezérled a PWM kimenetet az LM338 felé, akkor egy szabályozási hurkot építettél, amit stabilizálni kell. Ebben az esetben nem az AD csatorna "hülyül meg", hanem a hurok nem stabil...
A hozzászólás módosítva: Ápr 19, 2013
(#) proba válasza djadji hozzászólására (») Ápr 19, 2013 /
 
Az LM338 szereti a kimeneti megfelelő minőségű 1-2 mF os kondenzátort. (nem igazán elektrolit ,inkább fólia, abból sem a feltekert fajta.) Anélkül gerjedget szegény. A rádiós cuccok pedig szeretik közvetlenül a bemenetükön a minél nagyobb kondit.
(#) pjg válasza proba hozzászólására (») Ápr 19, 2013 /
 
"1-2 mF"
Ezt pontosítsd kérlek, mert ekkora kondi fólíából....
A hozzászólás módosítva: Ápr 19, 2013
(#) Keresztes Vitéz hozzászólása Ápr 19, 2013 /
 
Üdv!
Olyan feladatom van, hogy egy LED-es fényt kellene hangvezérléssel ellátnom. PIC16F628A-ra írnám a programot, viszont még kezdő vagyok PIC programozásban. A komparátor beállításában kellene segítség. Az analóg jel az RA0/AN0 lábra megy, és a B portra csatlakoznak a LED-ek. A program többi része már menne szerintem. Ha valaki tudna segíteni, azt köszönöm!
(#) djadji válasza pjg hozzászólására (») Ápr 20, 2013 /
 
Köszönöm. Kondi nincs a kimeneten lehet ez a gond. Kipróbálom. Biztos valami 338 kimentével van, ami miatt nem tetszik a PICnek. Akármi mást kötök rá, azt szépen méri, nincs vele gondja, csak a 338cal nem barátkozik meg.

Keresztes Vitéz: Éppen pont 628A-ra csináltam komparátorral programot, meg ADC-t is.
Felteszem a programot, C-ben.
Remélem segítettem, de ha van amiben tudok segíteni, csak szólj.
És mellesleg nagy örömömre szolgált a dolog! Először fordult el, hogy én tudok segíteni másnak!!!
A hozzászólás módosítva: Ápr 20, 2013
(#) pjg válasza djadji hozzászólására (») Ápr 20, 2013 /
 
Feltennéd a Flowcode fájlt? Köszi.
(#) djadji válasza pjg hozzászólására (») Ápr 20, 2013 /
 
Hogyne. Szívesen.
(#) pjg válasza djadji hozzászólására (») Ápr 20, 2013 /
 
Köszönöm.
(#) djadji válasza proba hozzászólására (») Ápr 20, 2013 /
 
Ha esetleg érdekel valakit mi okozza a "megbolondul a más ACD csatorna" hibát:
A Flowcode-ben van a hiba valahol. Ha az ADCből integert, vagy byteot olvasok ki, akkor minden ok. Ha azt mondom neki, a feszültséget kérem, akkor előjön ez a hiba. Integert olvastatok ki vele, és miden bajom megoldódott. Nem tudom mi a pontos ok, de ki tudom kerülni.
(#) djadji válasza djadji hozzászólására (») Ápr 20, 2013 /
 
Tévedtem. String műveleteket végzek, akkor is előjön a hiba. Ami igen furcsa... még küzdök vele
(#) djadji válasza djadji hozzászólására (») Ápr 20, 2013 /
 
Esküszöm az utolsó postom ebben a témában, de szerintem ez nem mindennapi.
Megvan a hiba!
A működő program fordítás után azt írja, hogy 60% free a memóriából.
VISZONT amint beleírom a következő sort a flowcode-ba
Idézet:
„tapfesz = FloatToString$ (tapfeszFL)”

fordítás után 35% lesz csak a free, és egyből nem működik, "megbolondul az ADC". Nem tudom mi köze a kettőnek egymáshoz, de tény, hogy ha ez az egy sorocska benne van, akkor 25%-nyi hely eltűnik, és a korábban leírt hibát produkálja!
(#) geri12 hozzászólása Ápr 21, 2013 /
 
Sziasztok!

Olyan problémám lenne hogy építettem egy órát PIC16F877-ből. Szépen is működik, de a kijelzőnél a szomszédos digit száma nagyon halványan átlátszik normál fényerőnél. Tehát például a 6-os digit halványan látszik az 5-ösnél. Az 5-ös pedig halványan a 4-esnél. Ha visszaveszem a fényerőt, akkor jó. Ezt szoftveres uton tudom megtenni. Közös katodos a kijelző. A meghajtásra NPN és PNP tranyó is alkalmazva van. A port kimenetre megy az NPN, és utána van a PNP, ami a digitre megy. Nem hinném hogy itt lenne a gond, mert akkor nem csak a szomszédos digitről látszódna halványan a szám. Multiplexer 100Hz-en megy. Ez kevés lenne 6 digitre? Vagy kéne valami késleltetés a digit váltások közé?

Köszi a válaszokat előre is.
A hozzászólás módosítva: Ápr 21, 2013
(#) nedudgi válasza geri12 hozzászólására (») Ápr 21, 2013 /
 
Ennyi információ birtokában (forrás,rajz nélkül) csak tippelni lehet...
Először kapcsold le a katódokat, utána jöhet a szegmensek beállítása.
(#) kissi válasza geri12 hozzászólására (») Ápr 21, 2013 /
 
Szia!
Két esetben szoktam ilyet tapasztalni: túl gyors frissítési frekvencia ( a 100 Hz nem ez a kategória ! ) és rossz program esetén! A MUX kijelzés menete: K1,K2,K3,K4 ( engedélyező lábak! ) tiltva. Kirakod DISP1 tartalmát, engedélyezed K1-et, vársz, majd tiltod K1-et. EZUTÁN kirakod DISP2 tartalmát, engedélyezed K2-t, vársz, tiltod K2-t és EZUTÁN rakod ki DISP3-at és így tovább! Általános hiba szokott lenni, hogy kirakja pl. DISP2 tartalmát, mielőtt K1-et tiltja!
(#) geri12 válasza kissi hozzászólására (») Ápr 21, 2013 /
 
Én is valami program hibára gondoltam. A programot most nem tudom megnézni, de estig meglesem mindenképp. Ha minden kötél szakad, és nem jutok előrébb, megosztom a forráskodot. Köszi!
A hozzászólás módosítva: Ápr 21, 2013
(#) dave77 hozzászólása Ápr 21, 2013 /
 
Sziasztok!
MPLAB-X-el lenne problémám, kérdésem:
A Watch ablakba szeretnék felvenni a programban használt változót. De a jobb click/New watch után megjelenő ablakban csak az SFR-ek választhatók, illetve a "main", de változók közül egy sem jelenik meg.
Hogy lehetne mégis figyelni az értéküket?

Közben annyit sikerült elérni, hogy a "Variables" ablakba fel tudom venni a kívánt változókat, de ha elindítom a Debug-ot, akkor amíg fut a program, addig eltűnnek a listából, tehát nem látom az értéküket. Ha leállítom a futtatást, akkor azonnal ismét megjelennek a listában, de 0 értékkel...
A hozzászólás módosítva: Ápr 21, 2013
(#) brato válasza dave77 hozzászólására (») Ápr 21, 2013 /
 
Talán ha absolute code van beállítva fordításhoz akkor utána felvehetőek. Nekem sima MPLAB-ban igy működik.
(#) dave77 válasza brato hozzászólására (») Ápr 21, 2013 /
 
Azt hol tudom beállítani?
Egyébként fel vannak véve, mint ahogy a képen is látszik, de csak addig mutatja őket, amíg nincs elindítva a debug. Ha elindítom, akkor a változók eltűnnek, és ha pause-t nyomok a futtatásra, akkor megjelenik egy részük. De pl. a pozicio változót az istenért sem mutatja meg, akár mikor állítom meg.
Mitől lehet ez?

B.png

A.png
   
(#) proba válasza geri12 hozzászólására (») Ápr 22, 2013 /
 
Szerintem egy fontos lépést kihagysz .Először a régi szám összes vezérlőjelét törölni kell (sötétre állítani a sorokat és az oszlopokat is) ,csak ezután lehet az új szám kiírását megkezdeni. ( A ledek még egy órajelig kint maradt számot is megjelenítik láthatóan )
(#) Lovag1 hozzászólása Ápr 24, 2013 /
 
Sziasztok!

4 zónás öntözés vezérlőt szeretnék készíteni PIC-el
Lényeg hogy áramkimaradás esetén is megjegyezze a beállított programot illetve a pontos időt.

4 gomb vezérlés.
1. SET (belépés prog módba, hosszan nyomva idő beállítás)
2. Fel (prog módban idő fel, nem prog módban csak megmutatja a beállított időpontokat, 4. után kilép és időt mutat)
3. LE (prog módban idő le, nem prog módban csak megmutatja a beállított időpontokat, 4. után kilép és időt mutat)
4. OK (lépés perc óra majd a köv zóna beállításra 4. zóna után kilépés)

4 kimeneten relék...

Melyik PIC lenne erre alkalmas?
Kezdő lennék 16F84 el ismerkedek jelenleg és olyan megoldás PIC típus érdekelne amit nem több év tanulás, gyakorlás után fogok tudni megvalósítani
(#) ferkoo válasza Lovag1 hozzászólására (») Ápr 24, 2013 /
 
Üdv mindent megtalálsz róla Bővebben: Linkés itt itt
A hozzászólás módosítva: Ápr 24, 2013
(#) Pali79 válasza Lovag1 hozzászólására (») Ápr 24, 2013 /
 
Komplett cikk jelent meg a témában ITT
(#) Balagemann2031 hozzászólása Ápr 24, 2013 /
 
Sziasztok! Valaki meg tudná mondani, hogy pickit3 hoz van-e külön szoftver PC-re mint a pickit 2 höz, vagy csak mplab alól lehet használni? köszi!
(#) p_istvan válasza Balagemann2031 hozzászólására (») Ápr 24, 2013 / 1
 
Szervusz!
PICkit3 GUI
(#) Balagemann2031 válasza p_istvan hozzászólására (») Ápr 24, 2013 /
 
Szia! Köszi!
(#) proba válasza Lovag1 hozzászólására (») Ápr 25, 2013 /
 
A 16F szériából szerintem válassz egy újabbat pl a 16f19xx sorozat sokkal olcsóbb ,és több belső hardver elemük van, talán még a programozásuk is egyszerűbb. A 16f84 esetén gyorsan el fogynak a lábak bár lehet elég, de a kijelzőhöz szerintem min 7 a gombokhoz néhány , kimenet sem árt ha van... Felhasználható ramban sem bővelkedik.
Az órához egy külső óra-ict tennék, külön akkuval/elemmel/nagy kondival.A beállított programokat is ebben tárolnám (esetleg ha ritkán van változtatva, akkor a pic eepromjában, vagy program memóriájában.)
A hozzászólás módosítva: Ápr 25, 2013
(#) siemenstaurus hozzászólása Ápr 26, 2013 /
 
Sziasztok!
Szívességnek is beillő hatalmas segítségként szeretném kérni, legyetek szívesek elmagyarázni, hogyan vehetném rá a pic-emet, hogy két-három AD bemenetet kezeljen persze nem egy időben, hanem egymás után felváltva? Ha egyiken nincs konverzió továbblép, ha van addig marad amíg konverzió tart majd továbblép...
PIC18F14K50; MPLAB; C18
Multiplexelésnek hívják hitem szerint, de itt már találkoztam olyannal is, hogy csatornaváltás. A kettő egy és ugyanaz?
Csatornaváltáshoz a leírásban találtam parancsot
while(!ADCON0bits.DONE) ---> és ilyenkor elvileg lehet változtatni megfelelő késéssel a figyelendő csatornát? De ezt a programon belül hol merre helyezzem el? Vagy eltévedtem?
Egy hónapja próbálok neten, való világban keresni példát, megérteni, de általában elküldtek a manóba, hogy kicsi vagy még ehhez...pedig az analóg és alap pic-es dolgok rendben vannak, de ez nem áll össze.
Szóval bármi támpontot nagyon megköszönnék, csak ne küldjetek el, mert szeretném megérteni.
Előre is köszönöm!
(#) sherlock válasza siemenstaurus hozzászólására (») Ápr 26, 2013 /
 
Szia!

Legtöbbször van egy leírás az adatlapban, ami lépésenként megadja, hogyan kell eljárj.
Én általában azt csinálom, hogy az initben bekapcsolom az AD konvertert, utána a végtelen ciklusban szépen váltogatom a csatornákat, ezt nálad a 4 darab CHS bittel lehet megoldani. Ha megnézed az adatlapodat, a 203-as oldalán megkapod, hogy milyen CHS értékre melyik csatornát fogja rákapcsolni az AD konvertered bemenetére. Ha megnézed az adatlap elején a lábkiosztást, fogod látni, hogy egyik-másik láb mellett ír ilyent AN1, AN2, stb. Ezekre a lábakra adsz te analog jelet, és a CHS biteken keresztül ezeket kapcsolgatod az AD konverteredre.

Többféleképpen is eljárhatsz, megszakítást is használhatsz vagy polling-ot is, az utóbbi lehet egyszerűbb.
A main elején beállítod az AD modult kedved szerint (ADCON, ANSEL). A végtelen ciklusodban kiválasztod a bitekkel az első csatornát, a konverzió indításához 1-esbe rakod a GO_nDONE bitet. Ez akkor fog törlődni magától, amikor az AD eredmény letevődött az ADRESH és ADRESL regiszterekbe. Vagyis kell várj addig, amíg az a bit 1-esben van.
while(GO_nDONE == 1);
mikor ez megvolt, elmented az konverzió eredményt egy változóba, én így szoktam "összeshiftelni":
változó = (((unsigned int)ADRESH) << 8 ) | ADRESL;

Mikor ez megvan, váltasz a következő csatornára úgy, hogy a következő ANx pin-t összekapcsolod az AD modulod bemenetével (CHS bitek az ADCON0-ból). Ezután ajánlott betenni egy kis időhúzást, hogy a chargepump kondik felteljenek. Utána beállítod a GO_nDONE bitet megint, és kezdődik minden eőlről, várod, míg törlődik, utána elmented az ADRESH és ADRESL regiszterekből az értéket egy változóba.

Remélem ez segít

István
A hozzászólás módosítva: Ápr 26, 2013
(#) bbalazs_ válasza siemenstaurus hozzászólására (») Ápr 26, 2013 /
 
Nem kuldunk el.
Az AD, aki nem szokta csinalni, annak nehez, mert elotte sokmindent be kell allitani, de szerencsere ezek nagy reszet egyszer kell megtenni az elejen.
Az adatlapban ezek reszletesen le vannak irva. Altalaban az ADCONx regiszterekkel kell manipulalni, de pl. vannak idonkent ANCONx regiszterek is, ahol meg azt is be kell allitani, hogy melyik lab legyen AD bemenet. Be is kell kapcsolni az AD modult az ADCON legalso bitjevel.
Amikor ezek megvannak, akkor ket bittel felshiftelve az ADCON-ba beirod a kivant csatorna szamat (azaz, hogy melyik labrol akasz olvasni analog erteket), aztan az 1. bittel kiadod a GO-t, tehat induljon a konverzio. Ez a bit magasan marad, amig a konverzio le nem futott. Tehat itt lesz neked egy varakozas. Ha ez 0-ra allt, akkor kiolvashatod az ertekeket. Aztan mehet a csatornaallitastol kezdve ujra egy masik csatornatol.
Ugyanez megy megszakitasbol is, ilyenkor nem kell a varakozas, de cserebe le kell kezelned az interruptot es elotte be is kell allitani - remelem, nem haragszol, ha azt irom, ez meg nem neked valo.

A probat szerintem ugy erdemes megejteni, hogy egy potit a fold es a PIC tapja koze kotsz es a sweepert vezeted be a megfelelo analog labra.
(#) Hp41C válasza bbalazs_ hozzászólására (») Ápr 26, 2013 /
 
Idézet:
„akkor két bittel felshiftelve az ADCON-ba beírod a kivánt csatorna számát”

... azért az ADON bit legyen továbbra is 1...

  1. ADCON0 = (channel << 2) + 1;
A hozzászólás módosítva: Ápr 26, 2013
Következő: »»   403 / 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