Alternatívou k Arduinu, hlavne pre začiatočníkov, ktorí dosiaľ žiadny mikrokontrolér neprogramovali sú čipy PICAXE. Dajú sa programovať pomocou jednoduchého kábla, ktorý si ľahko vyrobíte aj sami. Video ukazuje ako si vyrobiť kábel na programovanie PICAXE aj pripojenie alfanumerického displeja k tomuto čipu.
PICAXE rovnako ako napríklad Arduino nie žiadna horúca novinka, skôr evergreen. Podobne ako BBC Micro:Bit bola táto platforma pôvodne navrhnutá v Spojenom kráľovstve ako vzdelávací systém pre školy. Tisíce študentov stredných škôl sa každý rok zoznámia s elektronikou a mikrokontrolérmi vytvorením projektu PICAXE. Vďaka jednoduchému používaniu (podobne ako Micro:bit) si aj PICAXE obľúbila hobby komunita, amatérski konštruktéri robotov a iných zariadení a aj modelári ho často používajú vo svojich výtvoroch. Ceny čipov začínajú od 1 eura.
Čipy PICAXE sú populárne, pretože sú veľmi lacné a ľahko programovateľné pomocou bezplatného a ľahko naučiteľného softvéru. Navyše sú škálovateľné – čipy sú k dispozícii vo veľkostiach 8, 14, 18, 20, 28 a 40 pinov, takže podľa toho koľko vstupno-výstupných portov a komunikačných rozhraní potrebujete, takú veľkosť čipu si pre váš projekt zvolíte. Takmer všetky piny môžu byť nakonfigurované tak, aby boli digitálnym vstupom alebo výstupom, analógovým vstupom, PWM výstupom, dotykovým senzorom, alebo signálom komunikačných rozhraní I2C, SPI, RS232, či 1-wire. Rozsah napájacieho napätie je 1.8 – 5V. Ak napájate PICAXE napätím 3.3 V je zlučiteľný s 3.3 V logikou. Pri napájacom napätí 5 V je zasa kompatibilný z TTL logikou.
Z technického hľadiska sú mikrokontroléry PICAXE populárne čipy PIC vyrábané firmou Microchip, do ktorých bol vložený špeciálny softvér umožňujúci zaviesť váš program do mikrokontroléra a podpora funkcií súvisiacich s hardvérom. Tento softvér nesmiete prepísať, inak by ste z PICAXE mali obyčajný PIC čip. Vývojové prostredie používané pre PICAXE prepísanie zavádzača neumožňuje, no nesmiete PICAXE programovať v programovacích prípravkoch pre PIC, ale hlavne nesmiete prekročiť hornú hranicu maximálneho napájacieho napätie približne 5,5 V a nesmiete napájacie napätie prepólovať.
Na programovanie sa používa veľmi jednoduchý programovací jazyk BASIC prispôsobený tak, aby vám sprístupnil všetky funkcie mikrokontroléra bez toho, aby ste sa museli učiť komplikovaný programovací jazyk typu assembler alebo „C“. Vývojové prostredie je zadarmo a obsahuje aj pokročilé možnosti ladenia a simuláciu na obrazovke na testovanie vášho programu.
Začneme z hľadiska programovania najjednoduchším obvodom PICAXE 08M2, ktorý má len osem vývodov. Je to klasický integrovaný obvod v puzdre DIL (Dual In Line), ktorý má na dlhších stranách po štyri vývody. Rozteč vývodov je 2.54 mm, takže ich môžete zasunúť priamo do prepojovacieho poľa, rovnako ako sme používali modul s obvodom ESP32.
Pri pohľade na čip si určite položíte logickú otázku: Ako do čipu dostanem svoj program? Aj na toto tvorcovia mysleli. Stačí k obvodu pripojiť sériový kábel. Na moderných počítačoch a notebookoch, ktoré nemajú sériové rozhranie je potrebné použiť dostupný a lacný prevodník z USB na sériový port. Pamäť typu Flash v PICAXE je možné preprogramovať zhruba 100 000x, takže môžete smelo ladiť a experimentovať.
Výrobca PICAXE dodáva programovací kábel ktorý má na jednej strane „samicu“ 9 kolíkového canon konektora a na druhej strane trojpólový slúchadlový Jack konektor. Odporúčame vyrobiť si vlastný kábel, ktorý bude mať namiesto Jack konektora tri piny, ktoré zasuniete do prepojovacieho poľa, alebo vhodný konektor, ktorý sa taktiež dá zasunúť do prepojovacieho poľa, alebo prispájkovať do plošného spoja finálnej konštrukcie.
Na napájanie odporúčame stabilizovaný zdroj 5V, alebo batérie:
- 3 x AA 1.5 V monočlánok (4.5V)
- 4 x AA nabíjateľný 1.2 V monočlánok (4.8V)
Zdalo by sa, že PICAXE v porovnaní s hardvérovo identickými čipmi PIC majú vďaka jednoduchosti len samé výhody. Aj tu však platí niečo za niečo. Interpretačná nadstavba BASICu spotrebováva značnú časť výkonu čipu, takže originálny PIC mikrokontrolér naprogramovaný v assembleri je oveľa rýchlejší.
Z domovské stránky projektu si stiahnite vývojové prostredie PICAXE Editor 6, ktoré umožňuje programovanie v jazyku podobnom populárnemu programovaciemu jazyku BASIC,
prípadne vývojové prostredie Blockly for PICAXE umožňujúce programovať skladaním grafických blokov. PICAXE Editor 6 nie je k dispozícii pre MacOS, pre túto platformu môžete použiť AXEpad, prípadne už spomínané Blockly for PICAXE. Na stránke pre stiahnutie softvéru je aj niekoľko produktov tretích strán, napríklad PEBBLE na kreslenie zapojení na prepojovacom poli.
Program v jazyku BASIC je úsporne kódovaný, kľúčové slovo sa podobne ako u starých 8-bitových počítačov ukladá ako jeden bajt, takže do PICAXE 88M2, k kapacitou pamäti 2048 bajtov uložíte program, ktorý má 600 – 1600 riadkov. DO verzie 20X2, prípadne vyšše 2000 – 3200 riadok kódu, za predpokladu, že na jednom riadku je jeden príkaz.
Začneme klasickou aplikáciou, pomocou ktorej rozblikáte LED diódu pripojenú anódou na pin 5, označený ako C.2. Je dôležité pripojiť do série s LED diódou rezistor 330 ohm. Začneme pre BASIC tradičnou, no teoretikmi neuznávanou programovou konštrukciou využívajúcou inštrukciu pre tvrdý skok na návestie.
main: high C.2 pause 1000 low C.2 pause 1000 goto main
Program sa samozrejme dá napísať aj modernejšie bez tvrdého skoku s využitím nekonečného cyklu napríklad typu do…loop
do high C.2 ;C.2 na HIGH - led svieti pause 500 low C.2 ;C.2 na LOW - led zhasnuta pause 500 loop
Príkazy HIGH a LOW nastavujú úroveň výstupov. Môžete použiť číslovanie pinov v tvare PIN 2, alebo C.2 . Príkazy HIGH a LOW zároveň príslušný pin nastavujú do módu výstupu. Príkaz PAUSE znamená oneskorenie o počet milisekúnd zadaných v parametri. Komentár môže začínať príkazom REM, stredníkom (;), alebo apostrofom (‘)
START: 'navestie toggle 2 pause 200 goto start 'skok na návestie START
Príkaz TOGGLE zmení úroveň na príslušnom výstupe na opačnú. Ak bola na výstupe úroveň HIGH, čiže logická 1 príkaz nastaví úroveň LOW, čiže logickú nulu a opačne. Aj tento príkaz nastavuje príslušný pin nastavujú do módu výstupu. Mimochodom prehľad príkazov PICAXE verzie jazyka BASIC v anglictine nájdete zde a v českom jazyku je nájdete zde.
Možnosti ladenia kódu
PICAXE Editor 6 má aj vynikajúce možnosti ladenia. Ak do kódu vložíte príkaz DEGUG, zobrazí sa vo vývojovom prostredí ladiace okno s obsahom všetkých premenných.
A keď tvrdím že všetkých, tak skutočne všetkých, ktoré ste mohli v kóde využiť, nielen tých, ktoré ste využili. O premenných viac v nasledujúcej stati.
let b0=0 START: toggle 2 pause 200 inc b0 debug 'ladiaci výpis premenných goto START
Príkaz INC inkrementuje hodnotu premennej
Pri ladení sa na prenos hodnôt premenných do vývojárskeho počítača využíva sériová komunikácia. Prenos cez sériové rozhranie môžete využiť aj na výpis konkrétnych ladiacich textov, nameraných hodnôt a podobne. V príklade periodicky vypisujeme hodnotu premennej cyklu b0.
let b0=0 START: 'navestie toggle 2 pause 200 inc b0 sertxd("Pocitadlo cyklu ",#b0,13,10) goto start 'skok na návestie START
Príkaz SERTXD pošle údaje v parametroch cez rovnaké sériové rozhranie, ako sa mikrokontrolér programuje do počítača, Prenosové parametre sú rýchlosť 4800 Bd, bez parity (N), 8 bitov a 1 stop bit. Ak chcete poslať hodnotu premennej, treba pred jej označenie dať znak #, napríklad #b0.
V reálnych konštrukciách samozrejme nemáte PICAXE pripojený k počítaču, preto je v závere článku príklad zobrazovania textu a hodnôt premenných pre alfanumerický LCD displej pripojený cez I2C rozhranie
Premenné
Zaujímavé a pritom jednoduché je aj označovanie premenných. PICAXE 08M2 má k dispozícii 28 jedno bajtových premenných označených b0 – b27. Bajtové premenné môžu ukladať celé čísla v intervale hodnôt 0 a 255. Nemôžu používať záporné čísla alebo zlomky a ak prekročíte hraničné hodnoty 0 alebo 255, „pretečú“ bez varovania (napr. 254 + 3 = 1) (2 – 3 = 255)
Pre väčšie hodnoty môžete kombinovať bajtové premenné do dvojíc, takže vznikne 16 bitová premenná s rozsahom hodnôt 0 – 65 535. Tieto premenné sú označené w0, w1, w2… a sú kombináciou bajtových premenných
w0 =b1+b0 w1 =b3+b2 w2 =b5+b4 w3 =b7+b6
w4 =b9+b8 w5 =b11+b10 …
Bajtové premenné b0 a b1 (tvoriace 16 bitové slovo w0) je možné používať aj po jednotlivých bitoch označených takto:
b0 = bit7: bit6: bit5: bit4: bit3: bit2: bit1: bit0
b1 = bit15: bit14: bit13: bit12: bit11: bit10: bit9: bit8
Novšie čipy od M2 umožňujú takto použiť aj bajtové premenné b2 a b3 (tvoriace 16 bitové slovo w1) a bity sú označené bit16 – bit31.
Po resete programu majú všetky premenné hodnotu 0
Zobrazovanie údajov na displeji
Znakové displeje umožňujú zobraziť rôzne dlhý text v jednom, alebo viacerých riadkoch. Displeje sú k dispozícii v konfigurácii 8×1, čiže 8 znakov v jednom riadku až po 40 x 4. Programové ovládanie týchto displejov je pomerne jednoduché. Nastavíte kurzor na miesto kde chcete mať znak, alebo začiatok textu a pošlete znak, alebo text. Alfanumerické displeje využívajú ako radič obvod Hitachi HD44780. Displej môžete k pripojiť v 8-bitovom, alebo 4-bitovom móde. Pri 8-bitovom móde sú zapojené všetky dátové piny D0 -D8 a prenáša sa naraz všetkých 8 bitov. Štvorbitový mód využíva iba štyri dátové vodiče D4 až D7 a osembitové dáta sa prenášajú na dva krát. Najskôr sa pošlú 4 horné bity a potom 4 dolné bity. Pri mikrokontroléri PICAXE 08M2, ktorý má len 8 vývodov sú aj štyri dátové piny veľa. K displeju sa však dajú pripojiť interfejsové dosky na I2C, alebo sériové rozhranie, prípadne sa displej s takouto doskou už dodáva. Potom môžete displej pripojiť pomocou dvoch dátových pinov + dvoch pinov na napájanie. Cena takéhoto modulu je 2 eurá.
Najjednoduchšie je použiť displej využívajúci sériové rozhranie
main: for b0=0 to 255 serout 0,N2400,($FE,$01) ;inicializacia displeja serout 0,N2400,("Cyklus ",#b0) ;výpis textu a premennej pause 1000 ;zpomalení next goto main
Príkaz SEROUT posiela sériové údaje na pin zadaný prvým parametrom. Dostupnejšie a lacnejšie sú však displeje využívajúce komunikáciu cez LCD. Príklad zobrazovania textu a hodnôt premenných pre alfanumerický LCD displej pripojený cez I2C rozhranie ukážeme nielen preto, aby ste mali užitočný nástroj na zobrazovanie informácií, či už pri ladení, alebo v reálnej prevádzke, ale aj preto aby sme ukázali aj dlhšie kódy v jazyku BASIC.
;LCD1602 s I2C expandérom PCF8574 ; SCL na pine C.1 ; SDA na pine C.2 symbol bitrs=bit0 ;bit riadiaceho slova Hitachi HD44780 symbol bajt=b1 symbol kurzor=b2 ; RS bude 0 najvyšší bit v data je 1 ostatné bity číslo riadku ; 0 riadok 128 = 1000 0000 1 riadok 192 = 1100 0000 - 64 ; 4 riadok 212 = 1101 0100 - 84 symbol dat=b3
hi2csetup i2cmaster,%01111110, i2cslow, i2cbyte ;inicializacia I2C for bajt=0 to 5 ;inicializácia LCD inštrukčný register lookup bajt,($33,$32,$28,$c,$6,$01),kurzor gosub DispPrikaz next pause 100 ;pauza na inicializaciu
; vypis textu kurzor= 128 '1000 0000 kurzor na začiatku riaku 1 gosub DispPrikaz for bajt=0 to 8 lookup bajt,("NEXTECH -"),kurzor GOSUB DispZnak next kurzor= 192 '1100 0000 kurzor na začiatku riaku 2 gosub DispPrikaz for bajt=0 to 12 lookup bajt,("IoT prakticky"),kurzor GOSUB DispZnak next do loop ;aby program nešiel ďalej </pre> ; podprogramy DispPrikaz: bitrs=0 DispZnak: ;prvá polovica dat=kurzor & $F0 | %1000 | bitrs ; hi2cout (dat) dat=dat | %1100 hi2cout (dat) dat=dat | %1000 hi2cout (dat) ;druha polovica dat=kurzor & $0F * 16 | %1000 | bitrs hi2cout (dat) dat=dat | %1100 hi2cout (dat) dat=dat | %1000 & %1011 hi2cout (dat) bitrs=1 return
Ak chcete zobraziť hodnotu premennej použijete programovú konštrukciu
…
kurzor= 128 '1000 0000 kurzor na začiatku riaku 1 gosub DispPrikaz for bajt=0 to 12 lookup bajt,("Vypis hodnoty"),kurzor GOSUB DispZnak next kurzor= 192 '1100 0000 kurzor na začiatku riaku 2 gosub DispPrikaz for bajt=0 to 10 lookup bajt,("Napatie = "),kurzor GOSUB DispZnak next kurzor= 203 gosub DispPrikaz hodnota=314 bintoascii hodnota, b6,b6,b6,b5,b4 for bajt=0 to 3 lookup bajt,(b6,",",b5,b4),kurzor GOSUB DispZnak next
…
V pokračovaní sa budeme venovať ďalším zaujímavým funkciám mikrokontroléru PICAXE. Ukážeme funkcie založené na časovačoch a čítačoch mikrokontroléra, ktoré sú veľmi užitočné na niektoré scenáre: generovanie impulzov, meranie dĺžky impulzov a meranie frekvencií.