Prvé pokusy s čipom PICAXE jednoducho programovateľným v jazyku BASIC

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.

Schéma zapojenia pre programovanie PICAXE PICAXE_21

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í.