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   919 / 1203
(#) pajti2 válasza Udvari Zsombor hozzászólására (») Ápr 5, 2017 / 1
 
Én is leírom, amit fentebb már leírtak. Túl nagy fába vágtad a fejszédet. Itt amiben elsődlegesen segíteni tudunk - meg akárhol másutt is ahogyan segíteni tudnak - az egy további lépés az eddig megtett lépések után. Szóval mi lenne, ha kezdenénk a legelején, és elárulnád az eddigi tapasztalataidat? Segítek checklisttel - a sorrend _nagyon fontos_:

1. Műszaki angol szöveget ha olvasol, megérted-e felhasználhatóság szintjéig? (igen/nem)
2. Analóg elektronikai amatőr építési tapasztalataid vannak-e? Tipikusan két tranzisztoros led villogó, kicsi rádió vevő a beleépített fejhallgató erősítővel, valami saját magad fabrikálta szabályozható stabilizált tápegység, legalább ezeket végig kell zongorázni. (igen / nem)
3. Digitális elektronikai amatőr építési tapasztalataid vannak-e? Legalább egy oda-vissza futó fény logikai kapukkal, vagy valami hasonló bugyutaság. (igen / nem)
4. Pic fejlesztői környezet alapokkal összeismerkedtél-e? Tipikusan megvenni egy ilyen terméket: Bővebben: Link és végigzongorázni azokat a példákat, amik rajta lesznek az oktató CD-n. (igen/nem)

A fenti listán csak sorban fogsz tudni érdemben haladni. Bármit is próbálnál meg kihagyni, nem fog működni a gyakorlatban. A megemlített példák tényleg csak a legalapvetőbb dolgok, amik a leggyorsabb tanulási lehetőséget kínálják, de már azokkal élni is legalább nagyon jó logikai érzékre lesz szükséged, mert anélkül lassabb a tanulás. És még egy tipp. Ha kísérleti elektronikával foglalkoznál, mindenképpen érdemes venni egy ilyet is: Bővebben: Link

Mi itt amatőr elektronikai kreatív közösség vagyunk. Tanulni, és fejlődni vagyunk itt, nem nagyot mondani, szóval nyugodtan őszinte lehetsz te is. Hol tartasz a fenti checklisten?
(#) Udvari Zsombor válasza pajti2 hozzászólására (») Ápr 6, 2017 /
 
Egy ilyet vettem a projekt mellé, ezen már könnyebb lesz összerakni.
Eddig "zseblámpával" kezdtem, meg felszereltem egy 12V LED égőt, valamint éjjeli fénnyé alakítottam egy régi foglalatos karácsonyfafüzért egy ~15V dugasztáppal, meg hangszórót csináltam egy tönkrement asztali lámpából (erősítő a talpába, hangszóró a búrába). Ha számít, még PC telepítési tapasztalatom is van... De minden kezdet nehéz lehet... :/
(#) pajti2 válasza Udvari Zsombor hozzászólására (») Ápr 6, 2017 / 1
 
Értem.

Analóg elektronikai alapozással kellene kezdeni.

Valamikor a 90-es években volt egy "Hobby Elektronika" nevű havi lap még az internetes információs robbanás előtt, és az amatőrök leginkább abból tanulták az elektronikát autodidakta. A kezdeti időkben 3-4 oldalas cikkek voltak azokban a lapokban csak alapvető áramköri elemekről, mint a tekercs, vagy a dióda, és onnantól kezdve minden másról is egészen a digitális IC-kig. Mindenféle témák voltak benne kreatívkodástól a komolyabb dolgok koncepcionális tervezéséig szájbarágósan. Az internetes robbanással a HE havilap megszűnt, és lett helyette ez az internetes fórum, immáron jóval kevesebb publicitással, és sokkal inkább csak közösségi interakcióval. A régi HE lapokat már csak nagyobb könyvtárak olvasótermében találod meg. Ha még a diák éveidet taposod, és van olyan a közeledben, használd ki, hogy ingyen van a könyvtári olvasójegy.

Még a HE előtt népszerű volt a "Rádiótechnika". Szintén havi lapként jelent meg, és annak volt évkönyve is. A jelek szerint a Rádiótechnika kiadványként túlélte a HE-t, mert mind a mai napig van évkönyve is: Bővebben: Link. Az RT-kről nem tudom, mennyire jók egészen kezdőknek, de régebbi évkönyvekből találni lehet nCore-on is digitális formában.

Jóval szárazabb (komolyan, dögunalmas) stílus ugyan, de lehet találni alapozó doksikat interneten egyebütt is, leginkább valamilyen iskolai jegyzet formájában. Például bepötyögtem google pajtásnak, hogy "analóg elektronikai alapok", és kidobott egy ilyen pdf találatot azonnal elsőként: Bővebben: Link

A 90-es évek óta nagyon elterjedtek a mikrovezérlők, az áramköri intelligensebb logikát ma már nem tranzisztorokból vagy alap logikai IC-kből építjük, de a PIC csak azokat cserélte le (cserébe programozási ismereteket követel meg, amihez viszont ugyan úgy kellenek a digitális alapok). A bemeneti szenzorok és érzékelő eszközök még ma is analóg cuccok bemeneti erőforrásként a PIC-nek, és a PIC kimeneti logikája is szintén felhasznál analóg / kapcsoló üzemű áramköröket. Azokat nem váltotta le semmi. Alapismeretek nélkül lépten nyomon mindenen kiakadsz, ami csak van egy PIC környezetében, és amíg annyira billió kérdésed tud lenni, az úgy nem játék. Azt előbb önállóan végig kellene zongorázni. A legtöbbünk éveket töltött el csak analóg alapozással. Első lépésben annyira talán nem kell forrón enni a kását, de legalább a fent linkelt PDF első fejezeteiből az áramköri alap elemeket ismerned kell, kapcsolási rajzon fel kell ismerned, és tudnod kell készség szintjén felhasználni is. Legalább 3-4x biztosan át kell majd ismételned azt a PDF-et. Gyakorlással egyébként könnyebben rögzülnek az alapismeretek, arra tudna jó lenni néhány HE vagy RT cikk / évkönyv példa, de biztos vannak szanaszét mindenütt másutt is kísérleti blogok, Google találni fog neked. Ahogy egyre bonyolultabb elektronikákra vetemedsz, egyre részletesebben fognak kelleni az alapok, és tudnod kell majd utólag önállóan is megtalálnod és felhasználnod a segítséget. Az analóg alapozáson akkor léphetsz tovább, ha a későbbiekben már biztosan felismersz áramköri elemeket a kapcsolási rajon, bármivel is akadsz el, önállóan tudni fogsz utána nézni, illetve alapvető analóg és kapcsoló üzemű elektronikai feladatok elvégzéséhez ki tudsz választani célirányosan áramköri elemeket, amiket fel is tudsz használni, vagy legalább azt tudni fogod, hogyan keress rá példát. Mindezekhez évek talán nem kellenek, de pár hétnyi önálló gyakorlat biztosan rámegy. Mire túl leszel rajta, készülhetsz rá, hogy nem kevés pénz is elmegy otthoni alapvető alkatrész raktár feltöltésére (minimum ellenállások, kondenzátorok, tranzisztorok, és idővel majd a többi).

A kezdetről senki sem állította, hogy könnyű, de akad segítséged bőven.
(#) sonajkniz válasza pajti2 hozzászólására (») Ápr 6, 2017 /
 
No lám! Valamiben végre maximálisan egyetértek veled!
(#) pajti2 válasza sonajkniz hozzászólására (») Ápr 6, 2017 /
 
Nem volt szó olyasmiről, hogy ne érteném a véleményedet. Valamikor én is úgy vélekedtem. Aztán telt az idő, és belefáradtam az elkerülhetetlen ellen hadakozásba. Ami a kamionnal szállított egér esetét illeti, ha neked úgy könnyebb, csukd be a szemed, és ne gondolj rá.
(#) kriszrap válasza don_peter hozzászólására (») Ápr 6, 2017 /
 
Idézet:
„void nyfgy()
{
if(PORTB.F1== 1 && gombjobb==0) { while(PORTB.F1); gombjobb=1; }
if(PORTB.F2== 1 && gombkozep==0) { while(PORTB.F2); gombkozep=1; }
if(PORTB.F3== 1 && gombbal==0) { while(PORTB.F3); gombbal=1; }

if(PORTB.F1==0 && PORTB.F2== 0 && PORTB.F3==0)
{
...stb

Gyakorlatilag ez a legegyszerűbb, ám de nem a legszebb megoldás.
A while() ciklus addig pörög ameddig gomb logikai egyben tartod, vagy is le van nyomva a gomb, ha felengeded (logikai nulla esetén) azonnal tovább tud haladni.”


Köszönöm hát ez nem jutott volna eszembe.Köszönöm.

De ezzel a modszerrel csak egy gombot lehet ellenörizni egyidőbe nem?
A hozzászólás módosítva: Ápr 6, 2017
(#) cross51 válasza kriszrap hozzászólására (») Ápr 6, 2017 /
 
Egyszerűbb lenne ha beállítanál egy timert kb 10-20 ms-re és minden megszakításnál ellenőrzöd, hogy melyik gomb van megnyomva.
Ha kevesebb vagy 8 db gombod van csinálj egy volatile unsigned char (ha több van mint 8 akkor unsigned int az 16 mask-hoz lesz elég) változót legyen a neve pl.:
ButtonState.
Csinálsz maszkokat enum vagy define
  1. enum BTN_STATE
  2. {
  3. BTN_ONE = 0x01,
  4. BTN_TWO = 0x02,
  5. BTN_THREE = 0x04,
  6. BTN_FOUR = 0x08
  7. ...
  8. };

Ha az első gomb meg van nyomva ButtonState |= BTN_ONE az intteruptban ha nincs megnyomva ButtonState &= ~BTN_ONE.
  1. if (PORTB.F1 == 1)
  2. {
  3. ButtonState |= BTN_ONE;
  4. }
  5. else
  6. {
  7. ButtonState &= ~BTN_ONE;
  8. }

Így kimaszkolgatod a ButtonState-et és a mian loop-ban meg így ellenőrzöd:
  1. if (ButtonState & BTN_ONE)
  2. {
  3. ...
  4. }


Így több gombot is tudsz figyelni egyszerre nem "pörgeted" feleslegesen a procit a debounce is meg van...

Az effajta while az arduinos-oknak való, tisztelet a kivételnek mert arra és lehet szép kódot írni...
(#) sonajkniz válasza cross51 hozzászólására (») Ápr 7, 2017 /
 
A több gombos pergésmentesítést nagyon hasonlóan csinálom én is, csak nem megszakításban.
Alapból lefoglalok egy vagy két változót, amit aztán bitenként definiálok, (beszédesebb nevet kapnak) és beállítok egy timert 10msecre.
Mivel minden program körbefordul, így a program első sorában megnézem a timer flag bitjét.
Ha be van billenve, ellenőrzöm a bemeneteket, és a bemenetek állapotának megfelelően kapcsolom a bemenetekhez rendelt biteket. Végül törlöm a timer flag bitjét. Ha a következő körülforduláskor még nincs a flag bebillenve, kihagyom az ellenőrzést.
(#) Pafi válasza c27 hozzászólására (») Ápr 7, 2017 /
 
Nem ismerem a PIC-edet, de nem lehet hogy azokon a csatornákon holtidő van beállítva, ami a hozzárendelt polaritástól vagy levon vagy hozzáad 1 LSB-nyi (vagy amekkora holtidő be van állítva) időt, és ez okoz nem várt túlcsordulást/anomáliát?

Amúgy meg debug-olni ezt úgy lenne érdemes, hogy folyamatsan a hibát okozó értéken tartod a PWM moduláló változót, és szűrés nélkül nézed meg a PWM kimenetet.
(#) kriszrap válasza cross51 hozzászólására (») Ápr 7, 2017 /
 
Már van egy Timer2(10sec) beállítva ami az órát számolja(1000ms) abba berakhatom a nyomógomb figyelést vagy inkább indítsak külön timer neki neki külön???

" &=" "|=" Gondolom ÉS és VAGY jelei csak hogy értelmezzem ezt "ButtonState |= BTN_ONE;"
??
A hozzászólás módosítva: Ápr 7, 2017
(#) Pali79 válasza kriszrap hozzászólására (») Ápr 7, 2017 /
 
Az nagyon sok egy gomb figyelésre! Indíts egy másikat!
(#) Hp41C válasza kriszrap hozzászólására (») Ápr 7, 2017 /
 
Idézet:
„Már van egy Timer2(10sec) beállítva ami az órát számolja(1000ms)”

Inkább:
Már van egy Timer2(10msec) beállítva ami az órát számolja(1000ms)
Beteheted oda a billenytűkezelést. Lehet, hogy tovább kell majd lassítani, amit egy számlálóval meg tudsz oldani az időszámláláshoz hasonlóan.
  1. ButtonState |= BTN_ONE;

megfelel a
  1. ButtonState = ButtonState | BTN_ONE;

sornak.
(#) kriszrap válasza Hp41C hozzászólására (») Ápr 7, 2017 /
 
Azt értem.
ButtonState =2 és BTN_ONE =1
Akkor kicseréli az értéket???O.o
De akkor nem ... ButtonState = BTN_ONE;
A hozzászólás módosítva: Ápr 7, 2017
(#) don_peter válasza kriszrap hozzászólására (») Ápr 7, 2017 /
 
Nem, de hogy.
A cikluson belül vizsgáld a beállított változók értékét.
De persze fontos ilyen esetnél a sorrend, ha közvetlen egyszerre nyomod le mind 3mat.

Amúgy miért kellene neked egyszerre 3 gomb vizsgálata?
Nem csak egyesével nyomod meg őket?
(#) Zsolt117 hozzászólása Ápr 7, 2017 /
 
Sziasztok!

PIC24FJ128GA202-es PIC-kel kezdtem próbálkozni, valamint MPLAB és xc16.
(PICkit3-at használok programozásra és arról is táplálom.)

A problémám az, hogy a bemenetnek konfigurált I/O láb (többet is próbáltam) mindig CSAK "0" szintet érzékel.


(Nem a LED-del van a probléma, mert ha debbuggolás során a PC-t arra a sorra kényszerítem, akkor felkapcsol a led.)

Egy egyszerű tesztprogramot írtam csak, ami annyit csinál, hogy ha az RB9 magas szinten van, akkor felkapcsolja az RB5-ös lábon a LED-et ellenkező esetben lekapcsolja.

  1. /*
  2.  * File:   newmainXC16.c
  3.  * Author: Zsolt
  4.  *
  5.  * Created on 2017. március 6., 13:19
  6.  */
  7.  
  8. #include <p24FJ128GA202.h>
  9. #define IDO 500
  10.  
  11. int main(void) {
  12.    
  13.    TRISB = 0x0000;
  14.    TRISBbits.TRISB9=1;
  15.    
  16.     ANSBbits.ANSB9=0;
  17.    
  18.     T1CON = 0x8030;
  19.    
  20.     while(1){
  21.        
  22.         if(PORTBbits.RB9){
  23.             LATBbits.LATB5=1;
  24.         }else{
  25.             LATBbits.LATB5=0;
  26.         }
  27.        
  28.         TMR1 = 0;        
  29.         while(TMR1<IDO){
  30.            
  31.         }
  32.        
  33.     }
  34.  
  35.     return 0;
  36. }
(#) don_peter válasza Zsolt117 hozzászólására (») Ápr 7, 2017 /
 
Minden lábat állíts digitálisra.
Minden lábat kimenetre majd utána jöhet B9 bemeneti állítása.
Esetleg timer-t kicsit állítsd feljebb.

És gombnyomásnál használj pergésmentesítést.
Feljebb volt róla szó.
Hirtelen ennyi.
(#) kriszrap válasza don_peter hozzászólására (») Ápr 7, 2017 /
 
ha kétt gombot benyomok akkor be kapcsolja az ábresztőt ha megint ugyan azt a kettöt akkor ki
(#) Hp41C válasza Zsolt117 hozzászólására (») Ápr 7, 2017 /
 
Ugyan nem PIC24FJ128GA202 -n tapasztaltam, hanem 18F2550 -en:
Ha egy láb analóg módban működik, nem csak a megfelelő PORT biten olvasható fix 0, hanem a megfelelő LAT biten is.
(#) Udvari Zsombor válasza pajti2 hozzászólására (») Ápr 7, 2017 /
 
Ma minden megérkezett, úgyhogy holnap indul a projekt építése!!!
(#) pajti2 válasza Zsolt117 hozzászólására (») Ápr 7, 2017 / 1
 
Próbáljunk egyszerűsíteni:
  1. #include <p24FJ128GA202.h>
  2. int main(void) {
  3. ANSB=0;
  4. TRISBbits.TRISB5=0;
  5. while(1) LATBbits.LATB5=PORTBbits.RB9;

Ugye a pic lábait tuti nem tévesztetted el?
(#) don_peter válasza kriszrap hozzászólására (») Ápr 7, 2017 /
 
Vizsgáld külön.
  1. if(PORTFbits.RF1 && PORTFbits.RF2){
  2.     while(PORTFbits.RF1); // Tök mindegy melyiket engeded fel elsőnek, de most vegyük az F1-et
  3.     // Ide jöhet amit akarsz...
  4. }
(#) kriszrap válasza don_peter hozzászólására (») Ápr 7, 2017 /
 
  1. void nyfgy()
  2. {
  3.     if(ebaktiv!=2) //ébresztő aktiv???
  4.     {
  5.        
  6.         if(PORTB.F1== 1)//menu váltás
  7.         {
  8.                 while(PORTB.F1);
  9.                 menu++;
  10.                 kepfrissit=1;
  11.  
  12.         }else if(PORTB.F2== 1 && PORTB.F3== 1 && menu == 0)
  13.         {
  14.                 while(PORTB.F1);
  15.                 if(ebon==0) ebon=1;
  16.                 else ebon=0;
  17.         }else if((PORTB.F2== 1 || PORTB.F3== 1) && menu==0 || (PORTB.F2== 1 || PORTB.F3== 1) && menu==2)// ébresztő beállítás | óra beállítás
  18.         {
  19.                 if(PORTB.F2)
  20.                 {
  21.                         while(PORTB.F2);
  22.                         if(menu == 2)pereb1++;
  23.                         if(menu == 0)perc1++;
  24.                 }else{
  25.                         while(PORTB.F3);
  26.                         if(menu == 2)pereb1++;
  27.                         if(menu == 0)perc1++;
  28.                 }
  29.                 if(menu == 2) ebresztoszamol();
  30.                 if(menu == 0)idoszamol();
  31.                 kepfrissit=1;
  32.                
  33.         }
  34.    } else if(PORTB.F1== 1 || PORTB.F2== 1 || PORTB.F3== 1)ebaktiv=-1;
  35. }

Lehet vannak elírások de ez így beválhat nem volt idöm tesztelni és a másik ok tesztelés alatt van az óraDD
(#) don_peter válasza kriszrap hozzászólására (») Ápr 7, 2017 /
 
Igen van benne sok felesleges elírás.
Pl.: 14. sor
F2, F3 esetén F1 felengedését nem kell figyelni, ott inkább F2 vagy F3 felengedését kell várni.

17. sornál elég egyszer vizsgálni a gombokat, majd ezek után a menu értékét.

19. sornál figyelj az else ágra, mert az lefuthat, ha F2 nincs lenyomva.
Inkább itt használj egy külön if feltételt.

Így hirtelen ezt látom ami hiba lehet, vagy hibás működést eredményezhet.
A hozzászólás módosítva: Ápr 7, 2017
(#) don_peter válasza kriszrap hozzászólására (») Ápr 7, 2017 /
 
Valami olyat készítenék én ami két állapotot figyel.
Mondjuk te az ébresztőt be akarod állítani akkor lenyomod F1-et, majd utána F2-őt.
Sorrendben... Kód így valahogy:
  1. if(F1){    // Ha F1 le van nyomva
  2.     while(F1){    // Amíg nincs felengedve
  3.         if(F2){
  4.             while(F2);    // Ameddig F2 nincs felengedve
  5.             // Ébresztő ki/be kapcsolgatása
  6.         }
  7.     }
  8. }

Így talán egyszerűbb lenne a struktúrája, a két gomb sorrendje számít így, de persze az is jó lehet ahogy te akarod..
Majd eldöntöd, melyik az átláthatóbb.
(#) Hp41C válasza kriszrap hozzászólására (») Ápr 7, 2017 /
 
Még mindig nem értem, miért jó, hogy leáll ( while(PORTB.F1); ) a programod futása amíg a gomb(ok) le van(nak) nyomva. Ha lenyomva tartjuk, csak a megszakítási rutin tud közben lefutni. Ha a lenyomás alatt többször is beállítaná, hogy eltelt 1 másodperc, a főprogram csak egy másodperc elteltéről értesül. Pl. ha sokáig állítgatjuk az ébresztési időt.
A hozzászólás módosítva: Ápr 7, 2017
(#) kriszrap válasza don_peter hozzászólására (») Ápr 8, 2017 /
 
Ha jól gondolom akkor amit írtam most írtam pár hsz előbb az gomb felengedéskor hajtodnak végre az utasítások . Jól gondolom??
(#) don_peter válasza kriszrap hozzászólására (») Ápr 8, 2017 /
 
Igen, de a csak, akkor ha ez a feltétel teljesül: if(ebaktiv!=2)
Illetve 14. sorban nem F1-et kell megvizsgálni..

ui: arra figyelj, hogy ez fő programból futtatható, megszakítási rutin ehhez nem kell.
Mármint ha ezt a megoldást választod.
Nem szép, de működik.

Abban viszont teljesen igaza van, Hp41C-nek, hogy a most használt esetnél a teljes főprogramod megáll, ameddig gomb le van nyomva. Persze, ha ez számít valamit ebben az esetben...
A hozzászólás módosítva: Ápr 8, 2017
(#) lastewer hozzászólása Ápr 8, 2017 /
 
Sziasztok!

Létezik ingyenes megoldás mikroC kódok hex fordításához ?
(#) attika válasza lastewer hozzászólására (») Ápr 8, 2017 /
 
Igen létezik, innen le lehet tölteni, de csak bizonyos méretig fordít mert próba verzió, hogy mekkora az a méret már nem emlékszem de szerintem le van írva az is.
Nem tudom mekkora kódot akarsz lefordítani vele, én kisebb led villogtatóhoz használtam és ahhoz tökéletes volt.
A hozzászólás módosítva: Ápr 8, 2017
(#) Elektro.on válasza attika hozzászólására (») Ápr 8, 2017 /
 
2K a fordítási határ.
Következő: »»   919 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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