Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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.

ATMega 328P - Arduino - Hardware

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:

ATMega 328P polepka - Arduino - Hardware

V horní řadě máme zleva:

  • šest analogových pinů A6-A0,
  • GND je zem,
  • AREF a AVCC jsou vstup 5V,
  • D13-D9 jsou digitální piny.

V dolní řadě pak:

  • RST je resetující pin,
  • RX a TX jsou pro sériovou komunikaci a zároveň piny 0 a 1,
  • D2-D4 jsou další digitální piny,
  • V+ je vstup 5V,
  • 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:

Připojení čipu ATmega 328P - Arduino - Hardware

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:

Schéma zapojení Arduina - Arduino - Hardware

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:

LM7805 - Arduino - Hardware

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 924x (1.02 kB)
Aplikace je včetně zdrojových kódů

 

Předchozí článek
Arduino - Spínání velké zátěže
Všechny články v sekci
Arduino - Hardware
Přeskočit článek
(nedoporučujeme)
Arduino - Analogový pin
Článek pro vás napsal Adam Ježek
Avatar
Uživatelské hodnocení:
17 hlasů
Autor se převážně věnuje Arduinu a psaní tutoriálů z této oblasti, občas napíše příležitostně nějakou tu zprávičku. Většinu svého volného času momentálně věnuje Linuxu a/nebo Raspberry Pi. Také umí C#, HTML, CSS, PHP a Python.
Aktivity