top
logo


PIC
PINGUINO, avagy PIC alapok - lépésről, lépésre...

Gyakran előfordul, hogy olyan elektronikai megoldásra van szükség, ami hagyományos áramköri elemekkel vagy csak bonyolultan, vagy sehogyan nem valósítható meg. Ilyen például a két feszültségérték hányadosaként jelentkező harmadik (kimenő) feszültségszint létrehozása. Vagy másik példaként felhozható egy bonyolult logikai feltételrendszert feldolgozó (logikai) áramkör készítése. Az előbbire hajdanán az analóg számítógépek jelentették az egyedüli megoldást, az utóbbihoz pedig nem ritkán termetes, energiazabáló áramköröket kellett készíteni. Amióta kitalálták a mikrovezérlőket, mindez már a múlté.

Ez a cikk nem részletes tananyag, csupán egy sorvezető azoknak, akik szeretnének kevesebbet kínlódni a mikrovezérlőkkel, PIC-ekel foglalkozás kezdeti lépéseivel, mint amennyit én kínlódtam...

A téma nem új. Már a 90-es évek elején megjelentek mikrovezérlő chip-ek. Azóta két fő konkurens cég küzd az élvonalban, az Atmel és a Microchip. Mindkettőnek ma már nagyjából hasonló tudású termékpalettája van és árban sincs köztük nagy különbség. Sok véleményt és érvelést találni arról, hogy melyik a jobb. Egyszerű válasz erre nem létezik. Szerintem az a jobb, amelyik mellett döntünk, megértjük a működését és használni kezdjük. Én a PIC-ek (Microchip) mellett döntöttem (egyelőre).

Számomra az egész úgy indult, hogy Bence barátommal készítettünk egy pár működőképes PickIt2 klónt, amivel a PIC-eket lehet programozni. A programozó önmaga is PIC-et tartalmaz, amiért cserébe rengeteg szolgáltatást kapunk. Rendelkezésemre állt tehát az eszköz, már csak az alkalmazásához szükséges tudás megszerzésén volt a sor. Választanom kellett egy olyan PIC-et, amin a tanulást elkezdhetem. Választhattam volna egy egyszerű és olcsó, de szerényebb tudású típust és a tudásom gyarapodásával egyre okosabb (és drágább) típusokra térhettem volna át. Nem ezt tettem. Nem minden olcsó, ami kevésbe kerül. A PickIt2 projektünk során találkoztam az annak lelkét alkotó 18F2550 chippel. Nagyon megtetszett és az ára sem volt vészes. Eldöntöttem tehát, hogy bátyjával a 18F4550-nel kezdem a tanulást.

Amint kutakodtam az Interneten a chip iránt (hogy valami próbarendszert készítsek vele a tanuláshoz), rábukkantam a Pinguino nevű, nyilt forráskódú fejlesztő eszközre, de menjünk vissza korábbra. Korábban egy olasz szakember készített egy Arduino névre keresztelt Atmel alapú fejlesztő panelt, amire különböző (Shield-nek nevezett) szabványos csatlakozással ellátott feltéteket, kiegészítőket lehet csatlakoztatni (pl. LCD-kijelző panel). Hamarosan világszerte népszerű lett, mert egy saját, C++ programnyelv és több hasznos függvénykönyvtár volt elérhető hozzá, valamint külön programozó készülék nélkül, csupán a PC USB-portján keresztül programozható. Rengeteg Arduino kompatibilis áramkör készült azóta, mindegyik nagyjából azonos, kisebb módosításokkal.

A PIC-rajongók ezen felbátorodva elkészítették a Pinguino névre keresztelt "Arduino Uno kompatibilis" áramkörüket. Az Arduino-val való kompatibilitás itt úgy értendő, hogy az Arduino-hoz készült kiegészítőket (Shield-eket) ezzel is össze lehet kötni, ennek is van saját függvénykönyvtára, ami többnyire (kb. 80%-ban) kompatibilis az Arduino-val. Ez azt jelenti, hogy az egyszerűbb Arduino-ra készült forráskódok Pinguino-ra is gond nélkül lefordíthatók. Továbbá szintén USB-n elérhető (megfelelő ún. bootloader felprogramozása után) és programozható az áramkör.

Fontos tudni! A Pinguino  megoldása egy fontos dologban viszont (sajnos) eltér. Az Arduino C++ fordítót használ. A Pinguino rendelkezésére csupán az SDCC nevű C-fordító állt. Ahhoz, hogy a Pinguino-t az Arduino-nál megszokott C++-ban lehessen programozni, olyan előfordítót kellett alkalmazniuk a Pinguino megalkotóinak, ami a C++-t sima C-re fordítja (butítja). Aki jártas a C++ és C programozásban tudja, hogy ez nem mindig egyszerű feladat! Ennek árnyoldalai az áramkör programozásakor biztosan jelentkezik előbb-utóbb nálunk. Ez mindaddig így lesz, amíg nem találnak egy ingyenes és jól működő C++ fordítót a Pinguino számára...

Az általam itt ismertetett Pinguino változat sebességben viszont jelentősen felülmúlja az Arduino UNO-t! Persze ma már mindkettő vonalnak megvannak a jóval erősebb, gyorsabb utódai. Határ csupán a csillagos ég és a pénztárcánk. Vigyor

Amikor az ember egy új dologgal ismerkedik, a kezdeti sikerélmények elengedhetetlenek. Ha mindig csak kudarc van, az emberek többsége egy idő után feladja a küzdelmet és sutba dobja az egészet... A Pinguino-Arduino szerű megoldások könnyedén biztosíthatják a kezdeti sikerélményeket, az ember megismerkedhet a kifejezésekkel, módszerekkel és utána letérhet a saját útjára, ha akar.

Kezdetben megfelel, ha az ember összedob egy Pinguino variánst (ld. a cikk alján a letölthető anyagokat) valamilyen deszkamodellen. Én Veroboard-on készítettem el kb. 10 perc alatt. Erre ugyan nem lehet feltéteket tenni, de kezdetben az ember amúgy is csak ledeket villogtat, meg piezo-hangszórót zümmögtet, amihez ez tökéletes...

A képen jól láthatók az ICSP-port (balra), az USB-port (jobbra) és egy kijelzősor amit olcsón beszereztem a LOMEX Kft-től. Ez utóbbi rajza innen letölthető. A sokjegyű számkijelzők célszerűen, kevés vezetékkel u.n. Charlieplexing-gel vezérelhetők. Az említett típus viszont szerintem alkalmatlan erre, mivel két digit van közös lábakra kivezetve...

A PIC-ek programozásához két általános út vezet. Az egyik, ha az ember a chip ICSP-nek hívott portján (az IC öt lábán) keresztül, külső programozó áramkör (égető) segítségével programozza be a PIC-et. A másik (e cikkben is bemutatandó) módszer, ha egyszer beégettünk (ICSP-n keresztül) egy USB bootloader-nek hívott programot a chipbe, azután USB-n keresztül is programozhatjuk azt. Ez utóbbi esetben csak a bootloader beégetésekor kell egy külső égető eszköz (pl. a már fent is említett PickIt2), utána már a további beégetéseket a bootloader és az azt vezérlő PC-s alkalmazás végzik. Pinguino esetén letölthető egy ingyenes Pinguino IDE program (Python alapú), amivel szerkeszthetők, lefordíthatók és a már beégetett bootloader segítségével USB-n keresztül a chipbe beírhatók a lefordított programok. Ennek az az előnye, hogy nem kell külső programozó áramkör, amihez szintén kellene egy PC és az azon futó programozó szoftver (pl. MPLAB IDE). E kényelemnek egy ára van. PickIt2 esetén MPLAB IDE programmal helyben az áramkörön, ami a PIC-et tartalmazza (incircuit) vizsgálhatjuk a programot működés közben. Léptethetjük, nézhetjük a pillanatnyi regiszter tartalmakat, stb. A Pinguino IDE ilyen funkciókat jelenleg nem ad, de sok esetben szerintem ez nem is lényeges.

A Pinguino-val való ismerkedéshez a következők kellenek:

Indítsuk el a Pinguino IDE-t!

Pár másodperc múltán a fenti képet kell látnunk. Kezdetként válasszuk a File / Open / Examples/Input Output mappából a testblink.pde fájlt! Ez a kis programocska felváltva villogtat két ledet. A program működését egyelőre nem kell értenünk, a cél csupán a sikerélmény leszüretelése.

A beindításhoz viszont meg kell értenünk valamit.

led1=1;                    // led 1 is connected on pin 1
led2=7;                    // led 2 is connected on pin 7

A program fenti sorai határozzák meg, hogy az IC mely két lábára kell kötnünk a ledeket és azokkal sorosan egy-egy 470 ohmos ellenállást (a LED-ek katódjai a GND-re csatlakoznak). Az egyenlőségjel jobb oldalán nem az IC lábszámozása szerinti szám van hanem a B-port bitszáma + 1! A fenti két sorban az RB0 és RB6 bitek (melyek valójában a 21. és 27.lábak) vannak beállítva.

Könnyű rátalálni e példához hasonló egyszerű példa leírására a Tutorial / Examples /Testblink1 részben. A programozás során csak egyszer kell megadnunk, milyen IC-t használunk az adott projektünkhöz, a fejlesztő környezet utána már az elmentett beállítást tölti vissza, A beállítást a PINGUINO IDE Pinguino / Select board menüpontban adhatjuk meg. Jelen cikkben szereplő áramkör esetén a beállítások: 8-bit, USB Bootloader, Bootloader v1.x or v2.x, Pinguino 2550 (vagy 4550 ha azt használunk)

Rendelkezésünkre áll már a megfelelő áramkör, az USB-vel csatlakoztatva a PC-re. A PC-n fut a Piguino IDE, és ott betöltöttük az említett villogató programot. Már csak be kell juttatni azt a chip-be, hogy működhessen. Ehhez először a kék jobbra mutató háromszöget megnyomva le kell fordítanunk a programot. Ha az alábbihoz hasonlót kapunk visszajelzésként a fordítótól, akkor minden rendben van:

compilation done
code size: 3194 / 24575 bytes (12% used)

Ez jelzi, hogy lefordította a testblink.pde forrásfájt és előállította a PIC-en már futni képes testblink.hex állományt, amit már csak be kell égetni a PIC-be.

Ehhez Windows esetén megnyomjuk a zöld, jobbra mutató nyilat, amivel bejön a VascoBootloader nevű ablak. Ezután nyomjuk meg az áramkörünk reset gombját (ami az IC 1. lábára csatlakozik), várunk 2 másodpercet, majd megnyomjuk a VascoBootloaderen a Write gombot. Linux esetén megnyomjuk a resetet és várunk 2 másodpercet, majd megnyomjuk a zöld jobbra mutató nyilat. Ez esetben nincs VascoBootloader.

Ekkor amit ki kell írjon:

PIC found
testblink.hex uploaded

Közölte, hogy csatlakozott a PIC-hez, és betöltötte rá a bináris (futtatható) HEX-fájlt. Néhány másodperc elteltével beindul a PIC-en a program és elkezdenek villogni a LED-ek.

Létezik olyan Bootloader is (a cikk alján letölthető), amelyik az égetés után nem indítja el azonnal programunkat, hanem csak akkor ha megnyomjuk a RUN gombot. Némely fejlesztésnél ez hasznosnak bizonyulhat.

A Pinguinoval rengeteg dolog kipróbálható. A sebessége viszont némileg elmarad attól, mintha sima Assembly programot (Pinguino USB Bootloader nélkül) fordítanánk le. Ez azért van, mert az USB-kommunikációért felelős rutinok időnként meghívásra kerülnek, ha akarjuk, ha nem... Számos alkalmazásnál ez nem jelent gondot. Viszont figyelnünk kell rá, ha nagy sebességű, időkritikus feldolgozásra van szükségünk, és ráadásul még megszakításokat is használunk!

Sajnos a Pinguino "nyelv" leírása eléggé hiányos, illetve van, ami nem is működik. De ez ne keserítsen el senkit, mivel könnyedén kiegészíthetjük saját függvényeinkkel a rendszert.

Evés közben jön meg a kéjvágy. Elhatároztuk, hogy tervezünk egy saját Pinguino áramkört, ami hasznos bővítéseket is tartalmaz. Beindult a "Benculino" Vigyor projekt! Az áramkört a népszerű Eagle fejlesztőrendszer ingyenes változatának 5.12-es verziójával terveztük meg. A cikk alján minden szükséges fájl megtalálható az utánépítéshez!

Az áramkör főleg SMD technológiára épül, a PIC-et viszont DIP tokosra hagytuk és foglalatba tettük, mivel fejlesztő áramkörről van szó. Így a PIC könnyen cserélhető egy esetleges tönkremenetelkor...

A kész áramköri rajzolat fotópapírra nyomtatva, vasalós technikával elkészíthető, mi is így vittük fel a NYÁK-lemezre. A videóhoz képest csak annyit változtattunk, hogy 180 grammos félmatt fotópapírt használtunk. A maratás és NYÁK-ellenőrzés után beültettük az alkatrészeket, majd - még PIC nélkül - 12 voltos tápfeszültséget adtunk a külső táp sorkapocsra és a csatlakozóhoz közeli állásba dugtuk a jumpert. Multiméterrel ellenőriztük a stabilizátor IC-k helyes működését. A jumpert visszadugtuk a másik állásba és betettük a PIC-et. PicKit2-vel beprogramoztuk a Bootloadert és (az égető levétele után) csatlakoztattuk az áramkört az USB-portra. Ekkor a tápfeszültség visszajelző LED-nek világítania kell! Most már jöhet a Pinguino IDE programmal történő égetés. Az áramkör remekül működött. Az ICSP-nél a Vpp a Berg csatlakozósor felé eső!

Bencével a tervezés során sokat tanakodtunk, hogy miben módosítsuk az eredeti Pinguino koncepciót. Áramkörünk az alábbiakban más, mint az eredeti Pinguino:

  • Elhagytuk a közvetlenül Veroboardba dughatóságot, cserébe az Arduino shieldek csatlakoztathatóságáért. Ha Veroboarddal akarjuk használni, akkor helyette szalagkábelt alkalmazhatunk
  • Két feszültségstabilizátort használtunk (ráadásul LDO-kat), így mindig stabil 5V-ot kaphat a PIC, míg a stabil 3.3V mindig rajta van a POWER porton (ami teljes mértékben megegyezik az Arduino UNO POWER port kiosztásával, de akár 800mA áram is kihozható belőle)
  • Az első elgondolásokhoz hasonlóan ráterveztünk egy jumperrel átköthető RUN gombot (Force Run), ellentétben az eredeti PIC18F4550-es alapú Pinguino-kkal
  • Az USB csatlakozó mellé került egy EXTRA port is, ami a D-port 1..7 bitjeit és az E-port 1. bitjét tartalmazza.  Ez a port az Arduino Uno-hoz képest Extra!
  • Minden port lábra 470 Ω-os soros ellenállás került. Ha ezek nem kellenek, nyugodtan áthidalhatók. Az eredeti Pinguino-ban sincsenek ezek az ellenállások, viszont az esetek többségében mégis hasznosak (főleg a bemeneteknél kell óvatosnak lenni, nehogy kiégessük az áramkör "lelkét")
  • Az AN0 és AN1 lábakra a 470 Ω-os korlátozó ellenállásokkal párhuzamosan beterveztünk egy-egy jumpert is arra az esetre, ha azokat az A/D konvertereket használjuk és ki szeretnénk iktatni az ellenállásokat, így sokkal pontosabb lehet a mérés
  • A külső tápfeszültség csatlakozással sorban egy védődióda van a fordított bekötés ellen
  • A bemenő 5V tápfeszültségre zavarszűrésként közbeiktattunk egy LC-tagot, így kevésbé zajérzékeny a rendszerünk

Az áramkör Magyarországon kapható alkatrészekből készült, különleges alkatrészeket nem tartalmaz. A PIC-et a ChipCAD Kft-nél vettük meg, míg a többi alkatrészt a LOMEX Kft-nél, így az elkészült áramkör (a cikk írásának idején) 3000 forintból jött ki.

Beforrasztáskor feltétlen figyelni kell a rétegek közti átvezetésekre, illetve ahol az alkatrészlábakat használtuk átvezetőként, ott különös figyelemmel kell lenni a megfelelő kontaktusra, a mindkét oldali beforrasztásra!

Miután minden alkatrészt beforrasztottunk, feltétlen mérjük ki még PIC nélkül a lábakra jutó feszültségeket, testpontokat!

Fontos! A PIC adatlapján szereplő port elnevezések (A, B, C és D) nem azonosak az Arduino port elnevezésekkel. Pl. az Arduino C portja a PIC A portjának egy részét tartalmazza! Erről a tényről sose feledkezzünk el a tervezések és az alkalmazások során!

A feliratokat olyan öntapadós fóliára nyomtattam, amire lehet lézernyomtatóval nyomtatni. Színes lézernyomtató esetén jó az általam készített rajz, fekete-fehér nyomtatónál viszont a rajzot kétszínűvé kell tenni. A Portok címkéit ki kell vagdosni és (ügyelve a sorszámozásra) a Berg-csatlakozók oldalára kell ragasztani!

Ez a cikk főként a Pinguino áramkör elkészítéséről szól. A programozásbeli trükkökről itt nem ejtek szót. Tanácsként csupán annyit, hogy kellő kitartással és Internetes kutakodással szinte minden esetben található megoldás.

Sok sikert kívánok az építéshez!

Újabb fejlemények (2012.11.14.):

Egy olyan komoly PIC-et, mint a 18F4550, vagy a 18F2550 az ember LED-villogatásnál összetettebb feladatokra is fel szeretne használni.

Idő közben felmerült az igény, hogy a Pinguino fordítójával a math.h könyvtár több szokásos függvényét is használjam. Olyanokra gondolok itt, mint abs, pow, sqrt...stb. Nem használhatók! A Pinguino fórumon kutakodva azt a praktikus ámde felháborítóan nevetséges választ találtam, hogy ezek nem működnek és akinek ilyen kell, oldja meg (fixpontos) egész-aritmetikával. Ekkor döntöttem úgy, hogy visszatérek a jó öreg MPLAB-hoz. Ott legalább működnek a dolgok.

Mindazonáltal olyan egyszerű feladatok, mint - LED-villogatás, meg feszültség értékek lekérdezése USB-n keresztül - könnyedén megoldhatók a Pinguino IDE fordítójával is.

A félreértések elkerülése végett kihangsúlyozom, hogy nem a fentiekben bemutatott Pinguino áramkörrel van a gond! Azt ezután is szeretném használni. A gondom csupán a Pinguino-nál alkalmazott SDCC fordítóval és az előfordítóval van! Egyszerű feladatokhoz továbbra is használható a Pinguino. Főleg, ha valamilyen primitív Arduino projektet kell átvenni...

Így tehát kézenfekvő volt keresnem valami alternatív irányt. Szerencsére rátaláltam a magyar készítésű Piccolo projektre. Ennek az áramköre  szinte megegyezik az enyémmel. Az ott szereplő példaprogramokat (esetenként kis módosításokkal) futtatni tudtam az én áramkörömön is. A projekt alkotója pedig (icsernyi néven van a Hobbielektronika fórumon) készségesen segített abban a két esetben, mikor elakadtam (nem az áramkörömmel kapcsolatban). A fejlesztésekhez nagyon hasznosnak bizonyult a szintén magyar Hobbielektronika fórum PIC-kel foglalkozó néhány topic-ja.

A versenyt a Pinguino és Arduino közt valószínűleg a kínai piacon megjelenő olcsó Arduino változatok és a kifejlettebb Arduino fejlesztőkörnyezet eldönteni látszik. Egy Arduino UNO klón megrendelhető 600 azaz hatszáz forintért, míg az e cikkben tárgyalt áramkör kínából rendelve is sokkal drágább...

Attachments:
Download this file (Pinguino Pinout.pdf)Pinguino Pinout.pdf[A csatlakozók számozása, összerendelése az IC-lábakkal]0 Kb
Download this file (Magyarazat.png)Magyarazat.png[A csatlakozókat, LED-eket és Jumper-eket magyarázó kép]0 Kb
Download this file (Pinguino_assembly_top.png)Pinguino_assembly_top.png[A felülnézeti beültetési rajz]0 Kb
Download this file (Pinguino.zip)Pinguino.zip[A komplett Eagle projekt. Az epf-et kell megnyitni. Lehetőleg 5.12-es Eagle-t használj!]0 Kb
Download this file (Pinguino_bottom.png)Pinguino_bottom.png[A Pinguino alsó nyomtatott áramköri rajza - 600DPI]0 Kb
Download this file (Pinguino_top.png)Pinguino_top.png[A Pinguino felső nyomtatott áramköri rajza - 600DPI]0 Kb
Download this file (Watt HID Bootloader PIC18F2550.hex)HID Bootloader PIC18F2550.hex[A Run gomb RB5-re van állítva ebben a firmware-ben]11 Kb
Download this file (PartList.xls)PartList.xls[Alkatrészlista a beszerzéshez]0 Kb
Download this file (Board_bottom.png)Board_bottom.png[Alulnézeti kép]0 Kb
Download this file (Pinguino_assembly_bottom.png)Pinguino_assembly_bottom.png[Az alulnézeti beültetési rajz]0 Kb
Download this file (Board_top.png)Board_top.png[Felülnézeti kép]0 Kb
Download this file (Pinguino_Cimke.jpg)Pinguino_Cimke.jpg[Öntapadós fóliára (lézer nyomtatóval) nyomtatható címkék]0 Kb
Download this file (bootloaderV2.12.hex)bootloaderV2.12.hex[Pinguino Bootloader automata futtatással]0 Kb
Download this file (bootloader.hex)bootloader.hex[Pinguino Bootloader manuális futtatással (RUN gomb, vagy Force Run Jumper)]0 Kb
Download this file (Pinguino_Cheat_Sheet.pdf)Pinguino_Cheat_Sheet.pdf[Pinguino puska a programozáshoz. Egyelőre sajnos csak spanyolul... De azért érthető a Google fordítóval.]0 Kb
Download this file (Magyarazat_2.png)Magyarazat_2.png[Tuvábbi magyarázó ábra a portok számozásáról, elnevezéséről]0 Kb
Módosítás dátuma: 2015. július 24. péntek, 09:17
 



bottom
top

Olvasóink

Oldalainkat 73 vendég böngészi

A legújabbak

A legnépszerűbbek


bottom