Lekce 24 - Arduino - Samostatný čip ATmega 328P
V minulé lekci, { PREVIOUS}, jsme se naučili vyřešit problém s limity 20mA nebo 5V pro pin.
V tomto tutoriálu Arduino se seznámíme se základními informacemi o čipu ATmega 328P, který se v mikropočítači Arduino nachází. Podíváme se na jeho základní strukturu. Vysvětlíme si, co je to bootloader a jak se do něj nahrává program.
ATmega 328P v Arduinu
Čip ATmega 328P je 8bitový mikrokontrolér z rodiny AVR. Jeho architektura je založena na RISC. Tyto čipy jsou obecně vybavené aritmeticko-logickou jednotkou, statickou RAM a flash pamětí. Náš mikrokontrolér má celkem 32 KB flash paměti, 2 KB SRAM a 1 KB EEPROM. Může pracovat s frekvencí až 20 MHz a obsahuje také 14 digitálních vstupů/výstupů, šest analogových vstupů, jednu sériovou linku, jednu 8-bitovou a jednu 16-bitovou sčítací jednotku. ATmega 328P je obvykle používán pro malé a středně velké projekty, jako jsou například zařízení pro automatizaci domácnosti nebo malé roboty. Je kompatibilní s mnoha různými operačními systémy, včetně Arduina a jeho rozšíření. Jeho malé rozměry a nízká spotřeba energie také činí čip ATmega 328P atraktivním pro použití v aplikacích, kde je důležitá mobilní nebo bezdrátová konektivita.
Jednou z výhod tohoto čipu je, že má vysokou úroveň integrace. To znamená, že mnoho různých funkcí, jako jsou komunikace s pamětí a perifériemi, je integrováno přímo do čipu. Díky tomu je možné s ATmega 328P vytvářet malá a výkonná zařízení.
Nevýhodou čipu ATmega 328P je, že je pouze 8bitový, což znamená, že najednou může zpracovávat pouze 8bitové hodnoty. To může omezovat výkon a schopnost zpracovat složitější úlohy ve srovnání s vyššími modely mikrokontrolérů, jako jsou například 32bitové mikrokontroléry. Další nevýhodou je, že ATmega 328P nemá vestavěný Ethernet port, což může omezovat možnosti pro připojení k síti.

Arduino Bootloader
Abychom mohli na čip nahrávat programy jako do klasického Arduina, budeme
do něj muset v první řadě nahrát Arduino Bootloader. Bez bootloaderu do
čipu přes Arduino IDE nic nenahrajeme. Abychom mohli na čip
bootloader nahrát, budeme potřebovat funkční Arduino. A abychom mohli
pracovat se samostatným čipem bez krystalu, budeme si do IDE muset přidat
další "desku". Takže IDE vypneme (pokud je zapnuté) a do složky pro sketche
(C:\Users\Já\Documents\Arduino\
) přidáme složku
hardware/
, v ní složku Breadboard/
a v ní bude
textový soubor. Vše je k dispozici ke stažení na konci lekce. Teď Arduino
IDE zapneme a v Tools -> Board by se nám měla na konci
objevit nová možnost - ATMega328 on a breadboard (8MHz internal
clock). Na tu ještě nepřepneme! Zvolíme si takovou desku, se kterou
budeme chtít ATMega 328P naprogramovat a v Examples si otevřeme
Arduino ISP. To do Arduina nahrajeme a přesuneme se k připojování
čipu.
Popis ATmega 328P
ATMega má 28 nožiček. Ty nejsou popsané, takže je velmi vhodné na čip nalepit nálepku s popiskem pinů. Nám se povedlo najít tyto od Adafruitu,, které si vytiskneme a nalepíme (nejlépe oboustrannou izolepou).
Čip pootočíme zoubkem doleva a podíváme se na něj shora. Vysvětleme si jednotlivé nožičky:

V horní řadě máme zleva:
- šest analogových pinů
A6-A0
, GND
je zem,AREF
aAVCC
jsou vstup5V
,D13-D9
jsou digitální piny.
V dolní řadě pak:
RST
je resetující pin,RX
aTX
jsou pro sériovou komunikaci a zároveň piny0
a1
,D2-D4
jsou další digitální piny,V+
je vstup5V
,GND
jde na zem,XTL 1 a 2
jsou pro připojení krystalu,D5-D8
jsou poslední digitální piny.
Připojení čipu
Ve sketchi Arduino ISP máme na začátku část:
// pin name: not-mega: mega(1280 and 2560) // slave reset: 10: 53 // MOSI(11): 11: 51 // MISO(12): 12: 50 // SCK(13): 13: 52
Zde máme popsány piny a kam které připojit. Připojíme piny
reset
a D11-D13
na čipu k Arduinu. U Arduina Mega dle
pravého sloupce, u ostatních dle levého. Tyto čtyři ale nestačí. Čip má
dvakrát GND
. Na V+
, AREF
a
AVCC
připojíme 5V
. Nyní by čip měl být připojen
takto:

Nahrání bootloaderu
Jelikož na schématu nejsou popsané piny, budeme se držet popisu v kódu.
Čip tedy máme připojený, v Arduinu je nahrán sketch ISP a můžeme jít
nahrávat. V Tools -> Board zvolíme poslední položku
ATMega328 on a breadboard (8MHz internal clock). Dále si v
Tools -> Programmer zvolíme Arduino as ISP.
Sériový port zvolíme takový, na jakém je připojeno Arduino, kterým budeme
nahrávat bootloader. V kódu se pod popisy pinů doporučuje připojit na piny
7
,8
a 9
LEDky, které budou informovat o
stavu nahrávání. My je ale nepoužíváme, všechno potřebné je v IDE.
Nyní v Tools zvolíme Burn Bootloader. Začne se vypalovat
bootloader, což může chvilku trvat (až několik minut). Pokud bude
vypalování úspěšné, IDE nám vypíše Done burning bootloader.
Pokud k tomu nedojde, musíme zkontrolovat, zda máme vše správně. Pokud je i
toto v pořádku, je možné, že čip je vadný. Nyní tedy na čipu máme
bootloader, ale jak do něj nahrát kód?
Pokud máme Arduino s odnímatelným čipem (UNO, Duemilanove,..), stačí z
Arduina vyndat čip, náš nový připojíme na napájení a piny
RX
a TX
připojíme na piny RX
a
TX
na desce Arduina bez čipu. Tady se RX
a
TX
neprohazuje. Potom můžeme nahrávat jako normálně (ale
stále musíme mít jako board zvoleno ATmega328 on a breadboard).
Pokud se nám čip vyndávat nechce, nebo to na Arduinu prostě nejde (Mega,
...), tak potřebujeme sériový
převodník. Ten má USB pro připojení k počítači a alespoň čtyři
piny - VCC
, GND
, TX
, RX
.
Pokud jich je více, tak nás momentálně nezajímají. VCC
a
GND
je napájení, to normálně připojíme, ale TX
připojíme na RX
a RX
připojíme na TX
!
Je to tím, že RX
je příjem a TX
odesílání,
takže nemůžeme připojit vstup do vstupu a výstup do výstupu. Pokud budeme
používat sériový převodník, tak to znamená další COM
port,
na který budeme muset přepnout v IDE (Tools -> Serial
Port), ale stále zůstává deska ATmega 328 on a breadboard. Z
dřívějška již
umíme používat DHT11, takže si čip naprogramujeme, aby po sériové
lince posílal teplotu.
K čipu připojíme sériový převodník (popřípadě Arduino bez čipu),
připojíme napájení, sériovou komunikaci (pamatujme na prohození
RX
a TX
) a DHT11
na pin
8
:

Pak si v Arduino IDE napíšeme následující kód:
#include <dht11.h> dht11 cidlo; void setup() { Serial.begin(9600); } void loop() { cidlo.read(8); Serial.print("Teplota: "); Serial.println(cidlo.temperature); delay(1000); }
V Tools -> Board se ujistíme, že máme ATmega328 on a breadboard. V Serial ports si zvolíme port, na kterém je převodník Arduino bez čipu a sketch nahrajeme jako do normálního Arduina. Otevřeme serial monitor a uvidíme výpis teploty. Někdy se nahrávání nepovede napoprvé, někdy trvá déle a někdy se odmítá sketch nahrát i po několikátém pokusu. Tento problém lze řešit tak, že znovu vypálíme do čipu bootloader.
Při používání samostatného čipu je třeba dbát na to, že je to jen čip a nic víc. To, že do Arduina Mega můžeme pustit podle dokumentace až 12 V, neznamená, že je to zde možné. Zde to NELZE! Je to jen čip bez všech regulátorů a dalších věcí, které jsou na desce. Pokud bychom chtěli jako napájení použít 9V baterii, kterou lze k Arduinu normálně připojit, budeme muset použít nějaký regulátor napětí. U projektů s nízkým odběrem stačí regulátor LM7805, který přebytečnou energii mění na teplo:

Na vstup regulátoru (číslo 1
) se připojí vstupní napětí
9 V
(zvládá i 12 V
) a na zem (číslo
2
) se připojí zem baterie. Pak na výstupu (číslo
3
) je 5 V
, pro které je zem také pin 2
,
tudíž je zem společná.
Pokud bychom ale měli projekt s větší spotřebou, tak bychom jím spíše topili. V takovém případě se hodí použít 5V convertory, které mají dva vstupní a dva výstupní piny a jsou schopny držet stálých 5 V bez velkých ztrát. Některé zvládají fungovat už od 3 do 30 V.
To je pro dnešek vše, v případě problémů se neváhejte obrátit na komentářovou sekci pod příspěvkem.
V příští lekci, Arduino - Analogový pin, si řekneme něco o analogovém pinu a jak jej lze využít pro měření elektrického odporu a napětí.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 950x (1.02 kB)
Aplikace je včetně zdrojových kódů