Hardware | Programování | Pojďme programovat elektroniku

Pojďme programovat elektroniku: Vyrobím si z drobných součástek vlastní mikropočítač za pár kaček

  • Můžete si koupit třeba desku Arduino Uno
  • Anebo si složíte celý mikropočítač sami
  • Je to snadné jako facka

V našem seriálu o programování elektroniky jsme už vyzkoušeli všemožné laciné senzory i o něco dražší rádiové vysílače – třeba modul pro Bluetooth HC-05. Všechny naše obvody měly jednoho společného jmenovatele – prototypovací desky Arduino, které se staraly o samotný chod našich malých prográmků.

Dnes tedy půjdeme k samotným kořenům a namísto stavění obvodů na některé z desek Arduina si postavíme… Samotné Arduino.

Obsah článku:

Co je to vlastně Arduino?

Desky Arduino zpravidla používají jednoduché osmibitové procesory ATmega od společnosti Atmel s RISC architekturou AVR. Slovíčkaření a technikálie ale nejsou podstatné. Podstatné je to, že když si pořídíte třeba základní model Arduino Uno, jeho integrovaný procesor ATmega328P se stará o veškerý chod programu, který do něj nahrajete. Maličký šváb připájený uprostřed desky má v sobě 32 kB flashové paměti pro samotný program, 2 kB SRAM a 1 kB trvalé paměti pro data EEPROM.

198670490
Arduino Uno a jeho klíčové součásti důležité pro dnešní článek. Dobře si je zapamatujte.

Optikou laika jsou to žalostně nízké hodnoty, ovšem laciné procesory AVR tu nejsou od toho, aby na nich běželo Ubuntu, Android nebo Windows 10, ale jeden drobný nízkoúrovňový program, který stále může dělat vše, co se očekává od chytré krabičky IoT počínaje měřením teploty a konče dálkovým otevíráním garážových vrat, automatickým zavlažovacím systémem na zahradě, zabezpečovacím systémem pomocí detektorů pohybu nebo složitější internetovou komunikací.

Když se podíváte na destičku Arduino Uno, vše ostatní okolo drobného řídícího čipu ATmega je vlastně jen pomocná elektronika. Po stranách jsou tedy piny pro připojení digitálních a analogových vodičů, pak je tu elektrický měnič, který ze vstupního napětí vyrobí pracovních 5V a 3,3V, nechybí ještě 16MHz krystal, který se stará o jemné časování procesoru, ochranné rezistory a nakonec nesmím zapomenout na USB konektor pro snadné připojení k počítači a nahrání programu pomocí rozhraní UART.

Co kdybych si postavil vlastní Arduino?

Nabízí se otázka, jestli bych nemohl vzít holý AVR procesor ATmega328P a použít jej stejně jako destičku Arduina. Připojil bych jej k počítači a přes stejnojmenné vývojové prostředí Arduino bych do něj nahrál svůj jednoduchý program.

685221415
Šváb ATmega328P-PU, tedy 8bitový RISC procesor od Atmelu s architekturou AVR. Na eBay jeho kusová cena začíná na částce okolo třiceti korun.

Ano, jde to. A co víc, je to jednoduché. Tedy alespoň optikou toho, jak si asi každý laik představuje programování této nejdrobnější elektroniky. A já pouze zopakuji, že i já jsem v této oblasti stále naprostý laik, ještě před třemi měsíci jsem totiž doma neměl ani voltmetr. Nemusíte znát assembler, nemusíte mít za sebou průmyslovku a titul elektrotechnického inženýra.

Musíte prostě jen přečíst pár stručných návodů, koupit základní laciné součástky – buď v Česku, anebo s dlouhým čekáním a za zlomek ceny na eBay aspol. –, no a nakonec začít, protože samotné experimentování je v tomto případě nejvyšší škola. I když občas něco spálíte, zničíte, anebo naprosto nepochopíte.

Nakupujeme součástky

Abych demonstroval, jak je takové ovládnutí drobného mikroprocesoru jednoduché, postavím si Arduino na nepájivém poliArduino on breadboard, což je jeden ze základních příkladů ve světě těchto prototypovacích desek. Dokonce bych si troufal tvrdit, že je to cosi, čím by měl každý amatér opravdu začít. Pokud si totiž Arduino postavíte kousíček po kousíčku, spíše pochopíte, jak vnitřně funguje, což vám později pomůže.

Takže co budu potřebovat?

  • Samozřejmě procesor ATmega328P, který dobře znám z Arduino Uno a Nano. Na eBay jej seženete za kusovou cenu okolo třiceti korun!
  • Externí 16 MHz krystal. ATmega328P má v sobě 8MHz krystal, já však chci, aby mi Atmel běžel na standardním 16MHz taktu. Z Číny mi jich dorazilo v pytlíčku dvacet za třicet korun.
136640603 851637113
16MHz krystal se stará o takt procesoru. ATmega328P má jen 8MHz.
  • Dva 22pF kondenzátory. Za dvacku mi jich z Asie dorazilo sto kusů.
970948215
Kondenzátory s maličkou kapacitou
  • 10k rezistor. Tady už snad ani kusovou cenu udávat nebudu. Začátečník udělá nejlépe, když si koupí celou sadu s typickým rozsahem hodnot, které se používají nejčastěji
57340487
Sada různých hodnot rezistorů podle jejich standardního značení
  • UART-USB převodník. O něm už byla řeč v předchozí části a nám bude sloužit jako zdroj 5V napětí pro napájení Atmelu a jeho programování. Pokud by měl mít náš mikropočítač po nahrání programu jiné trvalé napájení (baterie, solární energie, zdroj s jinými parametry aj.), budete muset do obvodu připojit ještě adekvátní měnič, který toto stabilní 5V napětí vyrobí. Cena převodníku? Na zahraničním internetu od třiceti korun výše, na tom českém okolo stovky.
349625635
USB-UART převodník CP2102. Na jedné straně je klasické USB, na straně druhé napájecí a UART piny TX a RX. Ve Windows se bude připojený převodník bude jevit jako zařízení na některém z portů COM.
  • Nepájivé pole, drátky, tlačítko.

Ach ne, Atmel nemá bootloader!

Ceny jsou lákavé, a tak jsem kouknul na eBayi a koupil první ATmega328P, na který jsem narazil. Prodejce uváděl, že je v jeho paměti už od výroby bootloader Arduina, takže do něj budu moci nahrát program přes USB stejně jako třeba do Arduino Uno.

Jen co mi dorazil, sestavil jsem na nepájivém poli vše dohromady, připojil to skrze UART-USB k počítači, spustil Arduino IDE, napsal primitivní program, který bude blikat diodou a… A nic. AVR čip vůbec nereagoval a odmítal komunikovat.

683809375
Zkušební program měl LED připojenou na pinu 13 vždy na sekundu rozsvítit a poté na sekundu zhasnout

To víte, byl jsem rozmrzelý, protože drobná obálka cestovala přes půl světa dobré tři týdny a nechtělo se mi čekat na další. Než jsem však zlostí švába zapíchl sousedce do květináče, naštěstí mě napadlo, že je možná v naprostém pořádku, jen v něm chybí avizovaný bootloader.

Bootloader – zavaděč – je speciální řídící program, který se postará o to, aby se program Arduina na Atmelu řádně nahrál skrze rozhraní UART. Sice zabere drahocenné místo v paměti, ale nám běžným domácím bastlířům ušetří práci. Bez bootloaderu bych k nahrání programu na mikročip potřeboval speciální hardwarový programátor a ideálně vývojové prostředí Atmel Studio.

Jenže co teď? Nemám žádný programátor AVR čipů a další měsíc čekat nebudu! Komunita okolo Arduina má naštěstí skvělé řešení. Pokud již máte některou z desek, můžete ji jednoduše proměnit v AVR programátor! Slouží k tomu tento návod.

Stručně řečeno, do Arduina pošlete program, který se bude chovat jako AVR programátor a vypálí posléze do připojeného holého Atmelu zavaděč a zároveň základní program s blikající diodou.

Moje Arduino na nepájivém poli

Jakmile jsem nahrál zavaděč a opět přepojil obvody na nepájivém poli, už jsem mohl do procesoru nahrát libovolný sketch (tak se říká programům Arduina).

Přesnému postupu sestavení všeho dohromady se zase věnuje tento do nejmenšího detailu rozepsaný návod na oficiálních stránkách projektu Arduino. Používá několik dalších součástek, obsahuje totiž i onen zmíněný měnič napětí na 5V.

273645498
Ručně složené a o něco jednodušší Arduino a klasická deska Arduino Uno – resp. jeden z laciných klonů, protože Arduino je open-source.

Základní obvod s ATmega328P samozřejmě nic neumí, připojím tedy ještě modrou LED diodu a to na digitální pin 13 samotného procesoru. Jelikož je pin 13 na podobných deskách zpravidla dedikovaný pro stavovou diodu mikropočítače, budou ji automaticky používat i další programy.

Jak se vyznat v nožkách švába

Když už jsme u těch pinů, ATmega328P má po každé straně 14 vodičů, ale na rozdíl od prototypovacích desek tu samozřejmě nejsou žádné popisky, co který z nich dělá; který slouží pro připojení externího krystalu, který je napájecí, který digitální, analogový a tak dále a tak dále. Proto je třeba nastudovat rozložení pinů.

Stačí na Googlu vyhledat obrázky na dotaz „atmega328p pinout arduino“ a objevíte přehledná barevná schémata s popisy jednotlivých vodičů včetně jejich funkce na deskách Arduino.

431178804
Jednotlivé piny ATmega328P a jejich funkce. Když se podíváte na předchozí fotografii, uvidíte, že externí krystal je připojený mezi piny XTAL1 a XTAL2, napájení na 5V a GND, tlačítko RESET na PIN 1 a modrá dioda na digitálním pinu D13. Růžově je označené rozhraní SPI (piny mohou mít více funkcí podle aktuálního použití), vpravo nahoře jsou piny SCL a SDA pro protokol a oblíbenou sběrnici I2C, kterou používá hromada senzorů, no a vlevo nahoře pak UART piny RX a TX, na kterých je připojený na fotografii výše USB-UART převodník.

A to je celé. Prostě to funguje!

A to je vlastně celé. Nyní už mohu se svým poskládaným mikropočítačem pracovat podobně jako s klasickou prototypovací deskou, která se formálně liší jen v tom, že je na ni vše připájené. Já tentokrát pájku nemusel vytáhnout ze skříně.

720123722
Po připojení k zdroji napětí se začne zpracovávat program, který rozbliká diodu. Technicky vzato však můj mikropočítač zvládne to samé, co Arduino Uno, oba totiž mají stejný procesor.

Stačí tedy otevřít prostředí Arduino, zvolit desku, která odpovídá bootloaderu, který jsem do AVR čipu nahrál (Arduino Nano s čipem ATmega328), COM port a nahrát program.

Na baterii

Na úplný závěr ještě drobná ukázka provozu bez použití USB-UART převodníku. To se hodí pro případy, kdy už máte program hotový a nechcete nic vypisovat do sériové linky na PC. Do nepájivého pole jsem tedy zapojil modul integrovaného měniče napětí. I tento kus elektroniky seženete za pakatel.

737735217 194884138
Modul step-up měniče vyrábí 5V z dvojice 1,5 AA baterií. Napětí na nápájecí části nepájivého pole ukazuje připojený voltmetr. Tento malý seženete na e-shopech za pár kaček.

V tomto případě se nejedná o obvyklý step-down měnič, který vyrobí pracovních 5V z vyššího napětí, ale jde o tzv. step-up měnič (na zahraničních e-shopech step-up converter/regulator aj.). Ten naopak vyrobí 5V z mnohem nižšího napětí – v případě mého zapojení z dvojice 1,5V baterií AA, poradil by si ale i s jedinou a to včetně zapojení dalších senzorů.


A to je už opravdu vše. Těšte se na další pokračování, proud obálek totiž ještě zdaleka neskončil. Vyzkoušíme detektor barvy, detektor srdečního pulzu, dotykovou TFT obrazovku, dálkový rádiový vysílač s dosahem několika kilometrů nebo třeba laserovou komunikaci pomocí laciného laserového ukazovátka a detektoru.

Diskuze (29) Další článek: Německý komisař Facebooku: přestaňte využívat data o uživatelích WhatsApp

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , ,