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   529 / 1210
(#) szidom válasza proba hozzászólására (») Máj 27, 2014 /
 
Szia!
Köszi a választ, ezeket átnéztem, irányfordítás ok, bank váltás ok.
Úgy néz ki megoldódik a probléma, nem tudtam hogy egyszerre csak egy eszköz lehet adó módban. Az volt a probléma, hogy két soros portot tettem a buszra egy adót és egy vevőt. Az adóból küldtem karaktert, ami meg is érkezett, végrehajtja a PIC a feladatát majd próbálna vissza küldeni csak az adó oldal fogta a buszt. Most vétel után indítok egy várakozást, azalatt adó módból átkapcsolom az adót, és így már tud küldeni a PIC.
(#) Stynson válasza Sebi hozzászólására (») Máj 27, 2014 /
 
a kapcsolók teljes egészében szabadok, őket mechanikusan mozgatom és arról szeretnék a számítógépre jelet, hogy hova forgattam az egyes kapcsolókat,

Nem értek nagyon hozzá, de elsőre alami olyasmire gondoltam hogy minden forgókapcsoló közös áramköre rá van kötve valami kisebb tápegységre, és ha valamilyen állásba tekerem őket, akkor azt a lábat húzza mondjuk egy pic valamelyik lábára, hogy jelet kapjon, vagy ha valahogy egyszerűbben is meg lehet oldani...
(#) tcs52 válasza Stynson hozzászólására (») Máj 27, 2014 /
 
A korábbiakban azt említetted, hogy kezdő vagy, de nem tudni, hogy miben. Mindenesetre az, hogy PIC-et emlegettél sejteti, hogy lehet ebben akár némi szerénység is. Ennek ellenére igyekszem úgy válaszolni, hogy a teljesen kezdők is fefogjanak belőle valamit:

A feladat megoldható, nehézsége a Bluetooth használatában rejlik. Ráadásul két feladat is van:

1. A kapcsolói oldal Bluetooth modullal.
2. A számítógép oldal (benne/hozzá Bluetooth-al).

Kapcsolói oldal:

Jól sejtetted, ehhez a modulhoz mindenképpen kell valamiféle mikrokontroller, ami a kapcsolóállást érzékeli. Erre számos lehetőség van, függően a kapcsolótól. Az általad említett módon a PIC lábak pl. egyenként egy-egy ellenállással a tápra vannak fölhúzva (van olyan PIC port, ahol ezek megspórolhatók), és a kapcsoló zárja valamelyiket közülük földre. Egy 20 lábú PIC esetén akár 16 állású kapcsolót is tudunk így kezelni. Mivel a PIC-ek A/D komvertert is tartalmaznak, analóg jelként akár 1 bemenet is elegendő. Ekkor a kapcsolóval egy feszültségosztó-létra egyes pontjairól vesszük a jelet, és a lemért feszültség szolgáltat információt arról, hogy melyik állásban vagyunk. Sok más megoldást is ki lehet találni, de a kapcsoló leolvasása az egyszerűbb része a feladatnak.

A mikrokontroller komolyabb feladata a Bluetooth modullal való kommunikáció. Ez nem pitty-putty dolog, és függ attól is, hogy miként akarjuk fogadni a jelet a számítógép oldalon. Mindenesetre az egyik legegyszerűbb kapcsolat a modullal a 3 vezetékes kommunkáció (GND, soros input, soros output). Ehhez olyan mikrokontroller kell, ami képes erre, azaz van USART-ja. A dolog többi - nagyobb - része a kommunikációt biztosító program, melynek elkészítése programozói gyakorlatot, és a Bluetooth modul kommunikációs protokolljában való jártasságot igényel.

Ha mikrokontrollert használunk, akkor a megírt program beégetéséhez beszereznünk, vagy csinálnunk kell egy programozó egységet ("égetőt"). Ez pl. lehet a PicKit2 (elavultabb, de még jó), vagy PicKit3 (korszerűbb), vagy más - ezeknél is drágább - egység. Illetve arra is adhatjuk a fejünket, hogy fáradságos munkával mi készítünk el egyet.

Szintén szükség van egy számítógépen (pl. PC-n) futó fejlesztőrendszerre, amin a programunkat írjuk, teszteljük a mikrokontrollerhez (PIC-nél pl. MPLAB), s amelyet vagy ingyen letölthetünk, vagy drágán megvásárolhatunk ha profi eszközt akarunk használni.

Számítógép oldal:

A Bluetooth rész fejlesztése valójában innen indul.
A) Vagy van olyan alkalmazás a számítógépre (PC, MAC, Android-os mobil, stb.) amely megfelel nekünk, és képesek vagyunk a kapcsoló oldali részen az ehhez való adatfolyamot biztosítani.
B) Vagy mi fejlesztünk egy alkalmazást valamilyen fejlesztőeszközzel, valamilyen programozási nyelven, melyhez van Bluetooth kapcsolatot kezelni tudó programmodul, és persze ehhez is megvan a programozói gyakorlatunk.

A fentiekből látható, hogy a Bluetooth-ot nem kifejezetten kezdőknek találták ki, a feladat nagy része programozói. De én már hallottam olyan jó programozóról is, aki HW ügyben kezdőnek vallotta magát.

A feladat lényege, hogy "digitálisan érzékelt jeleket Bloutooth-on át továbbítani és feldolgozni" szerintem annyira gyakori lehet, hogy elképzelhető hogy ehhez már az elmúlt években csináltak egypár jobban használható modult, és alkalmazást, de erről az itteni topikban jártas szakértők tudnak neked tanácsot adni (vagy már volt is ilyen téma itt korábban, de ennek én sem tudtam utánanézni, ám ha te visszaolvasol, lehet, hogy segít neked).
(#) Stynson válasza tcs52 hozzászólására (») Máj 28, 2014 /
 
Kösz a segítséget, igazából rendelkezek pickit2 klónnal, és korábban programoztam is pic-et, ilyen projektet egyedül még nem terveztem meg (kivitelezni már komolyabbakat is csináltam)

Először a kapcsolók lekezelését szeretném tisztázni, az a helyzet hogy nem egy kapcsolóm van valahány állással, hanem több kapcsolóm van több állással, tehát mondjuk 6 kapcsolóm van és mindegyiknek van 4 állása akkor összesen 4^6-on állás van, úgyhogy valószínüleg az egybe kezelés kilőve.
Ezért gondoltam hogy valahogyan a pic mind a 6 kapcsolóhoz rendel egy állást, és ha az egyik változik, akkor elküldi mind a 6 nak az állását.
(#) Hp41C válasza Stynson hozzászólására (») Máj 28, 2014 /
 
4^6 állás van, de 6*4 lábon be lehet olvasni 1 a 4 ből kóddal, 6*2 lábon 2 bites bináros kóddal, 6 lábon analór (ellenállásos) kóddal.
(#) elektros90 hozzászólása Máj 29, 2014 /
 
Sziasztok!
Ez az AVR nél megszokott stílus:
  1. ADCON0 |= (1 << VCFG)|(1 << CHS1)|(1 << CHS0);

alkalmazható a PIC nél is? (Pl. MPLAB X IDE, XC8 compiler)
(#) elektros90 válasza elektros90 hozzászólására (») Máj 29, 2014 /
 
Jó reggelt kívánok!
Akkor válaszolnák is a saját kérdésemre. Az XC8 ezeket fogadja el többek között.
  1. #include <xc.h>
  2. void main(void)
  3. {
  4. ADCON0 |= (1 << CHS1)|(1 << CHS0);
  5. ADCON0bits.CHS1 = 1;
  6. ADCON0bits.CHS0 = 1;
  7. }


Az első verzió számomra megfelelő lenne az AVR világából. Viszont a processzor ill. fordító szempontjából melyik az effektívebb mód? Bocsánat a hülye kérdésekért, de ha már vettem PICkitet akkor ráállok komolyabban a témára. Olvasgattam tutorialokat, de annyiféle fordító van, hogy nem is találtam számomra egyértelműt. Továbbá mintha olyat is láttam volna, hogy vannak előre megírt makrok vagy rutinok. Gondolok itt olyanra, hogy ADC konfigurálás, UART stb. Esetleg tudna nekem ajánlani valaki egy rendes anyagot amin elindulhatnák? Egyenlőre semmi sem világos nekem, hogy mit lehet és mit nem a környezet keretében.

Köszönöm a tanácsokat.
Üdv. Gyuszi
(#) icserny válasza elektros90 hozzászólására (») Máj 29, 2014 /
 
Az XC8-at nem ismerem, de a Microchip mikrovezérlőihez általában másféle definíciókat tartalmaznak a gyári fejléc állományok és a programkönyvtárak.

1. Változat:
  1. #include "p18f14k50.h"
  2. ADCON0bits.ADON=0;
  3. ADCON0bits.CHS0=1;
  4. ADCON0bits.CHS1=0;


2. Változat:
  1. #include "p18f14k50.h"
  2. #define USE_OR_MASKS   //Fontos!!!
  3. #include "adc.h"
  4. /** Két analóg csatorna engedélyezése
  5.  *  A PIC18F14K50 mikrovezérlő esetén ezek AN10 és AN11
  6.  *  ADC inicializálásához (órajel FOSC/64, TACQ = 20TAD,
  7.  *  konverziós eredmény jobbra igazítása) a C18 perifériakönyvtár
  8.  *  makróit és az OpenADC() függvényét használjuk.
  9.  */  
  10. void Init_ADC(void)  {
  11. #if defined(__18F14K50)
  12.         TRISBbits.TRISB4 = 1;                   //RB4/AN10 legyen bemenet
  13.         TRISBbits.TRISB5 = 1;                   //RB5/AN11 legyen bemenet
  14.         OpenADC(ADC_FOSC_64 | ADC_RIGHT_JUST | ADC_20_TAD,
  15.                         CH_POT | ADC_INT_OFF,
  16.                         ADC_REF_VDD_VSS,
  17.                         ENABLE_AN10 | ENABLE_AN11);
  18. #else
  19.    #error "A választott mikrovezérlőt nem támogatja a PICCOLO project!"  
  20. #endif
  21. }


Összefoglalva: az AVR stílus itt azért nem működik, mert nem 0, 1, 2, 3.., 7-ként vannak definiálva a bitnevek. (legalábbis az általam korábban használt C18-ban és C30-ban)
A hozzászólás módosítva: Máj 29, 2014
(#) elektros90 válasza icserny hozzászólására (») Máj 29, 2014 /
 
Köszi! Van most bennem keveredés... Úgy látszik már amit lehet az egyikben azt a másikban is. Igyekeznek ezek (is) másolni egymástól. Ha lenne egy normális programozóm AVR hez akkor maradnák azon. Amivel tudtam programozni az csak a haver Dragonja volt. Már nem adok ki mégegyszer annyit, mint a pickit-ért. Olcsóbb lesz átállni PIC-re. No meg ott az ardu is, az legalább magát programozza. Azon majd folytatom az AVR-el való ismerkedést is.
(#) don_peter hozzászólása Máj 29, 2014 /
 
Srácok, a P16F-es szériából kimaradt a LAT regiszter?
Van pár felesleges PIC-em és gondoltam megnézem, tudok e valami ledes dolgot fejleszteni, de LAT regiszter nélkül ez bajos lesz.
P16F684, P16F690, P16F767
Vagy csak ezen példányokból hiányzik?
(#) usane válasza don_peter hozzászólására (») Máj 29, 2014 /
 
Nincs mindegyikben, de miért lenne bajos ledes dolgot csinálni. A PORT regiszterrel is megy unagyonlyan jól.
(#) don_peter válasza usane hozzászólására (») Máj 29, 2014 /
 
Azt hittem azt csak az alapot vizsgálásra való...
Mindig tanulok valamit...
(#) usane válasza don_peter hozzászólására (») Máj 29, 2014 /
 
Nem volt mindíg LAT regiszter. A PORT-ot lehet írni és olvasni is. A probléma ott van, ha pl a PORT regisztert íráskor magasba állítod, de az áramkörben valamiért lehúzod földre és vissza akarod olvasni akkor ugye nem az "1"-et adja vissza, hanem a "0"-t. Ezért találták ki a LAT-ot, mert az a port előtt egy tároló, amiben az van amit beírtál, még ha le is húzod földre a portot fizikálisan.
De ha tudod, hogy mit csinálsz akkor ugyanolyan jól működik a PORT regiszterrel is a program.
(#) don_peter válasza usane hozzászólására (») Máj 29, 2014 /
 
Értem, köszi a kifejtést.
Ennyire nem volt tiszta előttem a PORT regiszter.
Bár eleinte használtam írásra és olvasásra is egyaránt, de rám szóltak és áttértem LAT regiszter használatára.
De ha az nincs akkor marad PORT
Thanks
(#) Zsora válasza don_peter hozzászólására (») Máj 29, 2014 /
 
Használhatsz szoftveres "LAT regisztert" is, azaz a kimenet állapotát tárolhatod egy változóban. Ezen hajtod végre a bitműveleteket, aztán meg átmásolod a PORT regiszterbe.
(#) Stynson válasza Hp41C hozzászólására (») Máj 29, 2014 /
 
és melyik a kivitelezhetőbb? mert mivel minimalizálást említettem a kevesebb láb valószínüleg kisebb picet eredményez, de esetleg smd picnéla 24 lábas is még elfogadható....

Nem csak picbe, de még fórumozásba is kezdő vagyok, nem tudna valaki mutatni fórumbejegyzéseket, topicocat amik azzal foglalkoznak h így (kapcsolók állásáról) picel adatot olvasok be amit vhol megjelenítek/továbbítok/értelmezek
(#) ktamas66 válasza Stynson hozzászólására (») Máj 29, 2014 /
 
Talán innen kaphatsz néhány ötletet.
(#) dani9228 hozzászólása Máj 29, 2014 /
 
Üdv! Az a kérdésem lenne, hogy mikro C nél hogyan lehet egy változóhoz hozzárendelni, különböző portokon lévő biteket?
Köszi!
(#) dani9228 válasza dani9228 hozzászólására (») Máj 30, 2014 /
 
Ez azért lenne érdekes mert több porton helyenkednek el a kimeneteim, mert egy re már nem fért el. Súlyozott sórrendbe kötöttem be, és ha tudnák egy változót hozzá rendelni, akkot egyszerre tudnám őket kezelni. Az egyik ilyen egy szegmensmeghajtó ic amivel 4 biten lehet kommunikálni. Ha erre a négy kimenetre lenne egy változóm akkor írhadnék rá decimális számot, és annak megfelelően venné magasszintre binárissan azokat a kimeneteket.
(#) Tas84 válasza dani9228 hozzászólására (») Máj 30, 2014 /
 
A portok bitjeit berakod egy tömbbe és azzal dolgozol.
(#) dani9228 válasza Tas84 hozzászólására (») Máj 30, 2014 /
 
És azt hogyan kell. Mondjuk a PORTB.F6, PORTB.F7, PORTC.F0, PORTC.F1 biteket kellene külön kezelnem első részben. Nekem a bitek súlyozása is fontos lenne, hogy az első felsorolt az 1 az utolsó meg a 8 decimálisba. Ezt hogy tudnám tömbként kezelni ahogy mondtad?
Köszi!
(#) Tas84 válasza dani9228 hozzászólására (») Máj 30, 2014 /
 
CCS-ben működő a példa!

  1. static long port_bitek[4];
  2. port_bitek[0] = PIN_A0;
  3. port_bitek[1] = PIN_B1;
  4. port_bitek[2] = PIN_C2;
  5. port_bitek[3] = PIN_D3;
(#) dani9228 válasza Tas84 hozzászólására (») Máj 30, 2014 /
 
És erre hogyan tudok hivatkozni, mondjuk kiírni erre a tömbre binárissan pl. 0001- et hogy ezeken a kimeneteken 0,0,0,1 legyenek rajtuk.
(#) Tas84 válasza dani9228 hozzászólására (») Máj 30, 2014 /
 
  1. int val = 1; // portokra kiirando bitek
  2.    int i;
  3.    for(i = 0; i <= 3; i++) {
  4.       output_bit(port_bitek[i], bit_test(val, i)); // az elso elem magas, tobbi alacsony
  5.       // VAGY
  6.       output_bit(port_bitek[i], bit_test(val, 3-i)); // az utolso elem magas , tobbi alacsony
  7. }


Egy ciklussal végig megy a port_bitek tömbön, majd a val változó aktuális bitjeinek értékére állítja az aktuális tömbelemben lévő pint .
(#) dani9228 válasza Tas84 hozzászólására (») Máj 30, 2014 /
 
Oké, köszönöm , ez mikro c proban is használható? Lehet hogy hülye kérdés volt, de van pár eltérés a mikro c és mikro c pro között.
(#) Tas84 válasza dani9228 hozzászólására (») Máj 30, 2014 /
 
Azt nem tudom mivel nem ismerem a mikro c-t. Én CCS-ben írtam, copy-paste valószínűleg nem fog menni, de az elv alapján megoldhatónak kéne lennie más fordítóval is.
(#) dani9228 válasza Tas84 hozzászólására (») Máj 30, 2014 /
 
Értem, köszönöm mégegyszer!
(#) tomi52 hozzászólása Máj 30, 2014 /
 
Üdv Mindenkinek!

A környezet: linux, MPLABX, XC16. Az egyszerű tanuló kapcsolás ennek az oldalnak az elején található, a program ugyan ennek az oldalnak a közepe táján: "LED villogtató program I. változat".

PICkit2-vel be tudom égetni, működik. A PICkit3 viszont a következő üzenetet adja: "Target device was not found. You must connect to a target device to use PICkit 3." Természetesen a panel csatlakoztatva van, a projektben megfelelően kiválasztva a PICkit3.
Egy másik tanuló kapcsolással, amiben PIC18... mikrovezérlő van, viszont működik. Ebből következtetve a PICkit3 feltehetően jó. Mi lehet a gond? Valamit be kéne állítanom? Van valakinek valami tippje a probléma megoldására?
(#) ktamas66 válasza tomi52 hozzászólására (») Máj 30, 2014 /
 
Van külső tápja az áramkörnek? A Pickit3 alapértelmezetten nem ad ki tápot, külön kell bekapcsolni.
(#) Birs Alma válasza Hp41C hozzászólására (») Máj 31, 2014 /
 
Köszönöm!!
Következő: »»   529 / 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