Gondolatok a PIC kezdésről


Bevezetés: 
Egy áttekintést szeretnék nyújtani arról, hogy mire kell felkészülnie annak, aki bele szeretne fogni a PIC-ek megismerésébe, és milyen szempontok szerint érdemes választani a rengeteg lehetőség közül, amíg nem alakul ki az "öntudat". Csupán egy ajánlatot szeretnék átadni, amit a saját és olyan kezdők tapasztalatából, vontam le, akik átmentek a nehézségeken, megtapasztalva az árny oldalt, amit nem feltétlenül kell mindenkinek, hacsak nem feltétlenül ragaszkodik hozzá!


Mi szükséges a kezdéshez?

Emberi oldalról:

  • Elektronikai elméleti és gyakorlati ismeretek.
  • Bináris logika ismeretek, program szervezés alapok
  • Sok türelem, kitartás, affinitás
Információ szemszögből:

Hardver oldalról:


Aki ebben a felsorolásban idegennek találja a pákát és társait, az felejtse el, hogy PIC-el foglalkozzon!
Azért gondolom ezt így, mert a PIC sokkal inkább áramkör, mint programozható felület. A PIC köré egy áramkört kell felépítenünk(helyesen illesztenünk), amit majd az erre a környezetre írt program fog vezérelni, legyen az akár egy szál LED, vagy egy bonyolult, hálózattal összekapcsolt folyamat vezérlés, adatgyûjtés.

Ha a felsoroltak közül nincs meg mindegyik feltétel, akkor első körben pótolni kell, és utána jöhet a PIC kaland!

Tehát tételezzük fel, hogy a páka, affinitás, kitartás, elektronikai és logikai alapok megvannak. Akkor építsünk égetőt és próbapanelt!



Próbapanel:
Próbapanelnek jó a dugdosós raszteres panel, amin bármilyen áramkört fel lehet építeni, akár páka nélkül is. Egy a baj, drága és bizonyos esetekben a párhuzamosan futó vezető sávok kapacitása befolyásolhatja a próba áramkör működését.
Készíthetünk próbapanelt maratással, amin több foglalat van a PIC-eknek és minden láb ki van vezetve tüskesorokra, hogy rájuk csatlakozókat dugva bármilyen áramkört össze lehessen drótozni akár légszereléssel, vagy a csatlakozókra kész modulokat lehet tervezni, rádugni(pl. RS232 modul, RS485 modul, LED-es modul, Potis A/D modul, LCD modul, stb.). Egy ilyen általános próbapanel tervét letölthetitek innen: 3 foglalatos próbapanel
(A tervet CircuitMaker2000-el lehet megnyitni. A program Trial verzióját letölthetitek az oldalamról.)  A nyákot kézzel is meg lehet rajzolni EDDING tollal, de a vasalásos technikával is könnyű elkészíteni. Erről írtam egy segítséget: Vasalásos nyák készítés
Ez ügyben érdemes elolvasni a PICKit2 építése cikket is,  ahol lépésről lépésre bemutatom a nyák vasalásos elkészítését sok képpel: PICKit2 klón építése
Fontos, hogy a próbapanelre és majd később a céláramkörünk paneljére is rá kell tervezni az ICSP portot, amin keresztül a programot be lehet tölteni a PIC-re.



Néhány szó az égetőkről.
Csoportosítás PC csatlakozó felület szerint:
Az LPT:
Az LPT portra valamilyen illesztéssel kell a PIC-et csatlakoztatni, ezért OPC(nyitott kollektoros kimenetű) kapus TTL IC van felhasználva erre(pl. 7406, 7407). Tapasztalatok azt mutatták, hogy valami okból a legstabilabb megoldás a 7407-es IC-k alkalmazása volt. Ez láb kiosztásban kompatibilis, csak nem fordít fázist a kimenetén. Bármelyik égetőbe beépíthető, ami 7406-al, vagy az erre nem igazán alkalmas 7405 IC-vel készült(adatlap szerint a 7405-nek 7V lehet a kimenetén, ezzel szemben a Vpp vezérlő tranzisztornál 12V-ra van felhúzva a kimenete. Egy darabig biztosan működik is...), csak az égető programban át kell konfigurálni a vezérlő vonalak fázisát. Erről később részletesen is beszélek. Vannak olyan égetők is, amiknél közvetlenül az LPT portra csatlakozik a PIC, ezeknél ellenállással, és diódákkal van a védelem megoldva. Ez a megoldás is megfelelhet, de több odafigyelést kíván, ha az áramkörünkben a PGC, PGD lábakat is használni akarjuk.
Néhány LPT-s égető linkje:   Oshon alap kivitel,  WLPT_Vpp_mini v4 égetőWPB_F18_LPT alap kivitel,  WPB_PCB_v2 feljett leválasztott kivitel
Ne tévesszen meg senkit az F18 a égetőáramkör nevében, mert mindegyik PIC-et tudja égetni (amelyek elviselik az 5V-ot), a megfelelő égetőprogrammal. Ez igaz mindegyik LPT-s és COM-os áramkörre!

A COM:
COM portra számos halál egyszerű áramkör "terveződött" ezeket úgy hívják, hogy JDM! Gyakorlatilag mára a fórumokon ezt a három betűt kiejteni építési szándékkal, egyenlő a saját halálos ítéletünkkel, mert minden bizonnyal rendesen le leszünk teremtve! :)  (Mindezt annak ellenére, hogy van akinél működik. Egy darabig...)
Az okokat elolvashatjátok a következő linken: Miért ne építsünk JDM-et?
Ha elolvastátok, beláthatjátok, hogy egy RS232 illesztő IC-vel felépített égető áramkör, nem JDM klón, még akkor sem, ha az égető programokban a JDM-et kell kiválasztani, majd a vonalakat fázis helyesen átkonfigurálni a működtetéshez.
Ilyen megfelelően illesztett soros égető áramkört a következő linken találhattok: WPB_RS_V2
A következő két égetőáramkört kipróbáltam, jól működnek, de cikk(és nyákterv) még nem készült hozzájuk.  WCOM_v4 és WCOM_v5
Sajnos vannak korlátai, amit olvashattok, de alapvetően egy stabilan működő biztonságos égető, ami nagyon sok PIC-et tud égetni a megfelelő égető programokkal.

Az USB:
Talán ez a legszimpatikusabb felület és talán e felé húz mindenki szíve, de sajnos van egy nagy hátránya, hogy csak olyan égetőáramkör építhető fel rá(amit égetőprogramok is támogatnak), amiben PIC a fő alkatrész. Ebből következően, ha ilyet építünk, akkor kell egy égető áramkör, ami fel tudja programozni a PIC-et, tehát ez a 22-es csapdája.
Több kerülő megoldás is van, de be fogjátok látni, hogy mindegyikben van valami nyűg, amit jó lenne elfelejteni.
  • Veszünk egy gyárit: Drága(ez relatív, mert 8000körül van), ha elromlik fel kell vinnünk a boltba, ha a firmware sérül, égető híján fel kell vinnünk a boltba.
  • Építünk egyet, és valakit megkérünk, hogy égesse be a PIC-et, esetleg úgy vesszük a PIC-et, hogy megkérjük a boltot égesse be: Fel kell menni a boltba az égetés miatt, meg kell kérni valakit, hogy égesse be.  Ha megsérül a firmware, ugyanez ismét. 
  • Ha van LPT portunk, akkor összerakjuk(lógatjuk) a WLPT_Vpp_mini égetőt, és felprogramozzuk a klónt, ill. karbantartjuk a gyárit. Ez szerintem a legjobb megoldás.
Ha van már egy LPT-s, vagy COM-os égetőnk, mellé mindenképpen érdemes megépíteni a PK2-t, mert gyakorlatilag minden PIC-et tudja égetni(akár a PIC32-őket is) és képes debuggolni az erre alkalmas típusokat. Több hasznos kiegészítő funkciója is van, amit az ICSP port vonalain keresztül lehet elérni (soros port, logikai analizátor, logikai be és kimenetek kezelése)

Ha építeni szeretnétek, akkor a teljes klón építési leírását itt találjátok: PICKit2 klón építése(watt)
Ha elég az 5V-os PIC-ek támogatása, akkor szilva fórumtárs klónja a jó választás: PICKit2 klón építése(szilva) (5V-os verzió, de készül hozzá egy adapter!)
Van egy jó topic is, amit ajánlani tudok: PICKit2 klón építése(fórum)



USB-s átalakító:

Sajnos az égető programok nem tudják kezelni az USB-s átalakítókat, pontosabban nem lehet garantálni a működést sem soros, sem párhuzamos nyomtató portos égetőkkel.



Következtetés: Mindenképpen jó, ha van egy PIC-et nem tartalmazó égetőnk, de egy PICKit2 is jól jön mellé!

Ajánlás:
A fentiek fényében első körben egy egyszerű LPT, vagy COM portos kivitel jöhet szóba,  ha van a PC-n ilyen port.
Ha nincs, akkor marad az USB-s PICKit2 és a "sok nyűg".  :-)



Tehát kész a próbapanel és kész az égető!
Felmerül a kérdés, hogy milyen PIC-et válasszunk első alkalommal? Ilyenkor rengeteg szempontot fel lehet hozni pro és kontra.
Az egyik nézőpont szerint egy sok lábú és minden perifériával ellátott példányt érdemes választani, hogy mindent ki lehessen próbálni rajta.
A másik szerint egy "egyszerű" olcsó kis PIC-re van szüksége a kezdőnek.
Mindenki eldöntheti melyik tetszik jobban neki, én az arany középutat ajánlanám. Legyen közepesen egyszerű, és közepesen sok lába. pl. 18F2321.
Most bizonyára sokan felhördülnek, hogy 18F-es PIC kezdésnek, amikor a 10,12,16F-esek is léteznek, és azok biztosan egyszerűbbek(kisebb a számuk :) ), és könnyebben megtanulhatóak! Aki így gondolja, az téved! A 18F-ek jelentős mértékben probléma mentesebbek a korábbi típusoknál, sokkal könnyebb programozni őket(lap váltások nincsenek, és ha funkció regisztert akarunk elérni, nem kell bankot váltani sem. Rengeteg hasznos utasítás van, ami nem bonyolítja, hanem egyszerűsíti a kódot, a hatékonyság növelésével).
Ha a 18F-ek már mennek, akkor jöhet a nagyobb kihívást és programozási odafigyelést követelő 16F-es család! Én a 16F-es családból a kis teljesítményű, kevés memóriájú, kis lábszámú példányokat használom egyszerű feladatokra, mert amihez több kell, azt 18F-el oldom meg. Ha megnézzük az árlistát, beláthatjuk, hogy a 18F-ek árban sem maradnak el! Persze ezt is gondolhatjátok másképp, de a hosszú távú tapasztalatom az, hogy az említett stratégiával lehet a legolcsóbban és a leghatékonyabban feladatokat megoldani, ezért érdemes ezen elgondolkodni és utánaszámolni.
 


Égető programok kiválasztása:
Én néhány égetőprogramot használtam:
Ezeket a programokat be lehet állítani az itt ajánlott égető áramkörökhöz a PICKit2 kivételével, mert annak külön szoftvere van, illetve az MPLAB-ból direkt lehet kezelni.

Most ezeket a programokat sorra veszem és igyekszem részletezni a beállításokat és azt, hogy hogyan kell beállítani egy vonalat egy adott égetőhöz.



WPB_F18_xxx program beállításai:

WPB_RS_V2-höz:

Port kiválasztása gomb:
1.  WPB_RS_V2 égető kiválasztása(COM port) rádió gomb bejelölése
2. Ki kell választani azt a COM port címet, amelyikre rádugtuk az égetőt(3F8 COM1, 2F8 COM2) Pontos adatok a PC eszköz kezelőjéből kiolvashatóak. Sajátgép(jobb egérklikk), tulajdonságok, hardver, Eszközkezelő, Portok(COM és LPT), Com1(jobbegérklikk), tulajdonságok, Erőforrások(I/O tartomány első címe)
A beállítás ezzel kész.

Oshon alap LPT-s égetőhöz, WPB_F18_alap LPT-s és a WLPT_Vpp_mini égető áramkörhöz:
Port kiválasztása gomb:
1. LPT Portos égetők kiválasztása
2.
Ki kell választani azt az LPT port címet, amelyikre rádugtuk az égetőt(378  LPT alapcím)
3. Port Beállítás 7407-hez:



és 7406-hoz:


WPB_PCB_V2_fejlett LPT-s égetőhöz:
Port kiválasztása gomb:
1. LPT Portos égetők kiválasztása
2.
Ki kell választani azt az LPT port címet, amelyikre rádugtuk az égetőt(378  LPT alapcím)
3. Port beállítása:





Oshon 16F program beállításai:

Oshon alap LPT-s égetőhöz, WPB_F18_alap LPT-s és a WLPT_Vpp_mini égető áramkörhöz:
Port Beállítás 7407-hez és WLPT_Vpp_mini égető áramkörhöz:
1.
Hardware/Settings


és 7406-hoz:



WPB_PCB_V2_fejlett LPT-s égetőhöz:
1. Hardware/Settings




Oshon 18F program beállításai:

Oshon alap LPT-s égetőhöz, WPB_F18_alap LPT-s és a WLPT_Vpp_mini égető áramkörhöz:
Port Beállítás 7407-hez és WLPT_Vpp_mini égető áramkörhöz:
1.
Hardware/Settings


és 7406-hoz:



WPB_PCB_V2_fejlett LPT-s égetőhöz:
1. Hardware/Settings




WinPIC800 program beállításai:

WPB_RS_V2-höz:



Oshon alap LPT-s égetőhöz, WPB_F18_alap LPT-s és a WLPT_Vpp_mini égető áramkörhöz:
Port Beállítás 7407-hez és WLPT_Vpp_mini égető áramkörhöz:


és 7406-hoz:





************************************

Ha beállítottuk a hardvert, még ne álljunk neki PIC-et égetni, előbb le kell csekkolni a vonalakat. Ehhez kell egy digitális multiméter, amivel az ICSP vonalakat megmérjük. Az ICSP megértése fontos, ezért érdemes a következő linken található írást elolvasni: ICSP röviden

Tehát az égetőáramkör rá van csatlakoztatva a PC-re az égetőprogram fut és már beállítottuk a vonalakat. PIC nincs rácsatlakoztatva. Ráadjuk a tápfeszültséget az égetőre.
Kezdjük a Vdd és a Vpp vonalak ellenőrzését. A Vdd és a Vpp kivezetésekre rámérve 0V-nak megfelelő feszültséget kell mérjünk(néhány mV nem számít). Ha bármelyik fordítva van, akkor a vonalat invertálni kell a fenti leírások szerint, mert valamit nem jól állítottunk be!
Ha ez megvan, akkor jelöljük be a Vdd, majd a Vpp pipákat, és mérjük meg a kivezetéseket. Ekkor a Vdd-nek 5V, a Vpp-nek 12..13V körülinek kell lennie. Ha ez nem így lenne, akkor valami áramköri hiba van, javítsuk ki azt!
Ha eddig rendben, akkor következik a PGD és a PGC vonal tesztelése. Ehhez a Vdd-t bekapcsolva hagyjuk, és rámérünk a vonalakra. Alacsony logikai szintnek megfelelő(0,6V alatti) feszültséget kell mérjünk. A programban a DATA IN(vag ACK) pipa nem szabad hogy jelezzen(ez jelzi vissza az adat vonal(PGD) állapotát!) Ha ez rendben, akkor egyenként becsekkoljuk a PGD, PGC pipákat és mérünk. A kimeneten magas szintnek megfelelő feszültséget kell mérjünk(2,5V-nál több). Amikor a PGD-t csekkoljuk, figyeljük a DATA IN(ACK) vonalra vonatkozó visszajelzést, hogy jelzi-e a PGD vonal magas szintjét. Ha ez ellentétesen jelez, akkor invertálni kell az ACK vonalat.
Ha a fentiekből következőktől eltérően viselkedne az áramkör, akkor elektronikailag hibás, meg kell keresni a hibát és kijavítani!

Ha minden úgy működik ahogy kell, akkor rá lehet csatlakoztatni egy PIC-et. Az esetek nagy százalékában ezután már nem szokott probléma lenni az égetéssel. Van olyan program ami kérésre felismeri a csatlakoztatott PIC-et (WPB_F18_xxx, WINPIC800). Ha ez megtörténik akkor ott már baj nem lehet.
Más programoknál a próba, egy jó, és a PIC-hez illő *.hex állomány beégetésével történhet. Ha az égetést követő ellenőrzéskor nincs hiba, akkor minden rendben.
Ritkán előfordul, hogy nem sikerül az égetés. Ez minden esetben valamilyen időzítési, vagy áramköri problémára vezethető vissza. Első körben lassítani kell az égetés sebességét, ezt a programok nagy többsége különböző módon támogatja.
Ha ez nem segít, akkor utána kell olvassunk az égető áramkör építési leírásában, hogy milyen kábeleket és kábelhosszakat ajánlanak az LPT és az ICSP kábel esetében!
Azt már említettem, hogy a 7406, 7405 TTL IC-kkel szerelt égetőket inkább 7407-el használjuk, ez is megér egy próbát, ha nem az lenne az áramkörben.


Milyen programnyelvet válasszunk?

Sokan úgy gondolják, hogy a magasabb szintű nyelvek, mint pl. a Basic, Pascal, C, könnyebb, mint az Assembler, főleg, ha PC-n használták már valamelyiket.
Én úgy gondolom, hogy ez nem így van. A PIC erősen hardver közeli dolog, sőt elsősorban egy elektronikai alkatrésznek tekintem, amit lehet vezérelni programmal. Ezért ha meg akarjuk érteni a működését, ami a megfelelő program megírásához elengedhetetlen, akkor azt a magasabb szintű nyelveken keresztül nagyon nehezen tudjuk megtenni.
Az igaz, hogy egyszerű alkalmazásokat gyorsan össze lehet dobni egy Basicben(LED villogó, LCD kijelző), de ha valami nem működik, fogalmunk se lesz mi az oka. Sajnos, vagy nem sajnos, ezeket a nyelveket a C kivételével kevesen használják - már azokra gondolok, akik segíteni tudnának - ezért kérdezni se nagyon van kitől. A C-t többen használjuk, de ezzel sem javasolt a PIC tanulás elkezdése.
A PIC-et minden ízében meg kell ismerjük, hogy tudjuk mire lehet használni. Minden regiszter bitjéről tudni kell mit állít és miért. Ezt az Assembly nyelven keresztül minden ízében felderíthetjük, mivel az utasítások közvetlenül a regisztereket módosítják.
Később, ha már a hardver ismert, jöhet a C. Még így is nehéz lesz, ezt a magam példáján elmondhatom, pedig PC-n programoztam C-ben is valamennyit. A nyelvvel kevesebb bajom volt, mint azzal, hogy nem az történt amit én a megírt programból egyenesen gondoltam volna (ilyen Assemlerben nem fordult elő). Ilyenkor a lefordított forráshoz kell fordulni, és itt azonnal visszaértünk a kályhához.

Az Assemler nem egy bonyolult dolog, nagyon alap utasítások, elágazások és ugró utasítások vannak. Rengeteg példa található a neten, és a fejlesztő környezetek támogatják a szimulációt, ami nagyban segíti a program fejlesztését és a programozás menetének megértését.




Tervezem a leírás bővítését, megtartva a magyarázó formát, mert úgy gondolom, hogy a részleteket az adatlapokban meg lehet találni. Ha kérdéseitekkel bővíthető lenne a témakörök száma, akkor írjatok levelet, megpróbálom kitárgyalni itt.

Sok sikert és örömöt kívánok a PIC világban!


2009.02.02
watt
wattmep @ tvn.hu

frissítve: 
2013.07.16.