OK1UFC
Moduly Arduino Nano a jejich aplikace v DO a TM | Poslední aktualizace v srpnu 2020
Úvod
1. Moduly Arduino Nano jsou laciné desky, které jsou osazené procesorem AVR ATmega328p. 2. Deska je konstruována tak, že má v rastru 2.54 mm vyvedenou ve dvou řadách většinu pinů procesoru. 3. Na desce je převodník USB/USART s rozhraním USB mini. K připojení do PC tedy stačí jen kabel USB - USB mini. 4. Procesor arduino nano je vybaven bootloaderem, který nám zavede vytvořený kód (ve fomátu .hex) do procesoru pomocí Windows programu AVRDUDESS. 5. Po resetu (tlačítko na desce) nebo po připojení napájecího napětí bootloader spustí námi vytvořený kód a procesor dělá to, co jsme naprogramovali. Např. komunikuje pomocí sériové linky s modulem Elfin, přijímá povely z naší řídící aplikace a vykonává je. Tj. spíná, měří, komunikuje. |
Moduly Arduino Nano jsem schopen nahradit kontrolér, který byl původně vytvořen pomocí čipů PICAXE.
Programování Pro arduino nano si musíme v něčem napsat program, který přeložíme (zkompilujeme) a uložíme do flash paměti procesoru ATmega328P. Běžně uživatelé používají program Wiring a kompilátor gcc. Program Wiring je součástí programovacího prostředí ARDUINO IDE. Použitý jazyk (Wiring) je podobný jazyku C++ Použití Wiring (Arduino IDE) není podmínkou pro použití HW desky označené Arduino Nano. Vpodstatě nám funguje hexadecimální program, který byl napsán v jazyce, se kterým umí náš kompilátor dělat. Program musí být zkompilovaný v kompilátoru určeném pro procesory ATmega328. Arduino IDE a Wiring jsou komunitní otevřené produkty a je k dispozici mnoho užitečných a odladěných algoritmů. Předmětem tohoto článku NENÍ algoritmizace úlohy, ale popis postupu, jak program dostat do Arduina nano. |
Kontrola kompilace Pokud jakýkoliv program napíšeme v prostředí Arduino IDE (Wiring), provedeme kontrolu kompilace - viz foto dole vlevo. Proběhne-li kontrola bez chybových hlášení, provedeme export kompilovaného binárního souboru - viz foto dole - vpravo.
Nahrání zkompilovaného kódu do procesoru ATmega328p desky Arduino nano Zkompilovaný binární kód, který jsme obdrželi exportem z Arduino IDE (předchozí odstavce) nebo z jiného námi preferovaného editoru - kompilátoru nahrajeme do procesoru pomocí programu AVRDUDESS (je zdarma ke stažení na Internetu) pomocí pěti po sobě jdoucích krocích: 1. Nastavíme typ MCU, tedy ATmega328p. 2. Nastavíme port COM6, kde naše PC vidí Arduino - zde COM6. 3. Nastavíme Baud rate bootloaderu (zavaděče) pro arduino nano je br = 57600 baudů. 4. Nastavíme cestu ke zkompilovanému souboru s programem, na obrázku jde o ok1ufc_sample_1.ino.standard.hex 5. Klikneme na Go. 6. V černém okně si zkontrolujeme výsledek - viz obrázek. Zkouška programu Pokud jsme použili nějaké komfortní vývojové prostředí, zpravidla jsme si výsledek ověřili na simulátoru nebo emulátoru. Pokud jsme pracovali jen s Arduino IDE, které není příliš komfortní a začínáme s jazykem C++, který není jednoduchý, možná budeme překvapeni. Nicméně, vybral jsem zde příklad Arduino nano, které nahrazuje mnou používané a velice oblíbené kontroléry PICAXE. Např. v anténním přepínači přijímá povely ze sériové linky a spíná na výstupech relé. Komunikaci po sériové lince ověříme např. pomocí Herkules terminálu. O tom je obrázek vpravo dole. Herkules terminál připojíme k našemu arduinu nano. Otevřeme v terminálu COM6 a provedeme reset ATmega 328p. Vidíme, že program se rozběhl a: - odeslal na terminál zprávu, která začíná mojí značkou ok1ufc: - následuje algoritmus několka kontrol (že relé jsou pod napětím) a je odeslán status hláškou: Status Arduino = OK!, což znamená, že arduino je schopné přijímat povely. - přijaté povely (ty které jsme odeslali z PC do arduina, tedy protokol, který obsahuje preambuli, povel a data ...) nám arduino zopakuje jako echo na sériovou linku, - povel (jeho provedení) si můžeme ověřit sondou na pinech arduina
Závěr 1. V článku jsem chtěl začátečníkům ukázat, jak si naprogramují procesor ATMEGA jednoduchého kontroléru, který komunikuje po sériovém rozhraní se síťovým komunikačním modulem Elfin. Jednoduchý kontrolér např. ovládá relé, čte hodnoty napětí va vstupech. 2. V článku jsem chtěl zdůraznit, že hardware Arduino nano není svázán s prostředím Arduino IDE a pokud máme lepší programátor s kompilátorem, není důvod ho neopužívat.
Poznámky 1. Pro zavádění programu a pro ladění použijeme vestavěný konvertor USB-RS232. Na mém laciném arduino nano byl s čipem CH-340. 2. Pro připojení k reálnému rozhraní RS232 musíme použít převodník úrovní. Pro procesory Atmega používám mnoho let toto zapojení, které jsem převzal z výborných stránek pana Jaroslava Kutěje: http://www.mp222.wz.cz/ | Zapojení pinů desky Arduino nano V provozu je deska připojená k modulu Elfin EW10 pomocí špiček TX, RX, GND a +5 V a přenos dat se provádí s převodníkem podle obrázku vlevo. Tranzistory jsou napájené z napětí desky. Převodník mám ze součástí SMD přímo v pouzdře konektoru.
3. Přidávám poznámku k převodníku úrovní od Hanuše, OK1THC v původním znění: Ahoj Miro! Koukal jsem na http://ok1ufc.nagano.cz/…htm a mam poznamku k tomu prevodniku na 232 - on nejspis funguje, ale je hrube nekorektni. Smer 232->nano je OK, tam problem nevidim, ale opacne je to blbe. Log 0 na 232 bude cca +4V, coz je korektni, ale log 1 bude cca 0.5V a to je v zakazanem pasmu, protoze v tomhle stavu tam ma byt -3 az -15V. Jak rikam, spousta obvodu na druhy strane to asi zchroupne, ale korektni to neni a muze se vyskytnout obvod, kterej rekne NE. Minimalne za poznamku by to stalo. Hezky den a 73! de OK1THC
4. Uvádím ještě standardní řešení převodníku TTL na RS-232, které je realizované s pomocí obvodu MAX232 (Maxim). Datasheet (pdf) je ke stažení zde. Na obrázcích níže je zapojení, ve kterém jsou použité keramické kondenzátory 1M (4ks, blokovací je na desce arduino nano) a doporučené zapojení podle datasheetu. Uvedené zapojení jsem kdysi vyzkoušel s procesory ATmega a modulem Elfin EW10, nepoužívám ho.
5. Deska Arduino nano, kterou jsem pořídil k základním experimentům je tzv. klon, tedy neznačková, kterou jsem pořídil od číňana na ebay.com a originální desku jsem nikdy neměl. 6. Komunikaci po sériovém portu často používám. Na mém webu je několik článků k tématu: http://ok1ufc.nagano.cz/Desktopy/RS232/RS232.htm http://ok1ufc.nagano.cz/Desktopy/RS232_USB/RS232_USB_konvertor.htm http://ok1ufc.nagano.cz/Desktopy/virtual_serial/virtual_serial.htm Proto uvádím ještě skutečnost, že přenos přes všechny převodníky si vždycky u zařízení otestuji a v popsaných konstrukcích mě zajímá, že funguje přenos bajt po bajtu a že je přenesen každý bajt. Pokud přenos končí v mikrokontroléru, jako např. v Arduino nano, používám místo propojení RX a TX na konektoru jednoduchý program, který dělá pouze tzv. "echo", tj. přijme jeden bajt a tentýž bajt odešle. Vyvedení mého testovacího programu je na stránce v prvním odkazu. Z této stránky je rovněž zřejmé, jaké převodníky, ať USB na RS232 nebo LAN (WiFi) na RS232 používám. Opět nic značkového, vše levné, od číňana. 7. Na výše uvedených stránkách http://www.mp222.wz.cz/ pan Kutěj napsal výbornou školu programování procesorů ATmega s použitím Bascom. Pan Kutěj své stránky už od roku 2019 neaktualizoval a ani nereagoval na mail, který jsem mu napsal. Chci mu touto cestou svého webu poděkovat. Bohužel, s ATmega328p a s použitím Windows 10 mi prostředí nefunguje dobře a Bascom nadále nepoužívám.
TU 73, Mira, ok1ufc