Lekce 9 - Arduino - Samostatný čip ATmega 328p
Pokud budete chtít nějaké projekty realizovat, tak vám určitě bude líto použít celé Arduino. Ale co s tím? Arduino UNO běží na čipu ATMega 328P, který se stará o všechno. Pak jsou již na desce jen regulátory, převodník, spousta dalších součástek a 16MHz krystal. Čip má ale obsažený (sice jen 8MHz) krystal v sobě, takže ho také nebudeme potřebovat. Tím, že použijeme interní krystal, se nám sníží paměť z 32 256 bitů na pouhých 30 720, takže ztratíme skoro 2kB paměti, ale u menších projektů by to neměl být problém. Někdy příště si ukážeme, jak to zprovoznit s krystalem a využít celou paměť.

Abychom ale mohli na čip nahrávat programy jako do klasického Arduina, tak
do něj budeme muset v první řadě nahrát Arduino Bootloader, bez kterého do
něj přes Arduino IDE nic nenahrajeme. Abychom mohli na čip bootloader
nahrát, budeme potřebovat alespoň 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 txt soubor. Vše si to můžete
stáhnout v souborech tutoriálu níže. 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 ATMegu
naprogramovat a v examples si otevřeme Arduino ISP. To do Arduina nahrajeme a
přesuneme se k připojování čipu.
ATMega má 28 nožiček. Ty nejsou popsané, takže si doporučuji na čip nalepit nálepku s popiskem pinů. Mně se povedlo najít tyto od Adafruitu,, které si jen vytisknete a nalepíte (nejlépe oboustrannou izolepou).
Čip pootočíme zoubkem doleva a podíváme se na něj z vrchu a vysvětlíme si jednotlivé nožičky.

V horní řadě máme zleva:
- 6 analogových pinů A6-A0
- GND je zem
- AREF a AVCC jsou vstup 5V
- D13-D9 jsou digitální piny
V dolní poté:
- 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. Ty nás nezajímají.
- D5-D8 jsou poslední digitální piny
Zpátky k nahrávání bootloaderu. 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
Jsou zde popsány piny - kam které připojit. Takže připojíme piny reset a D11-D13 na čipu k Arduinu. U MEGA dle pravého sloupce, u ostatních dle levého. Tyto 4 ale nestačí! Čip má dvakrát GND, tu na zem a na V+, AREF a AVCC připojíme 5V. Nyní by čip měl být připojen nějak takto:

Jelikož na schématu nejsou popsané piny, doporučuji držet se raději
popisu v kódu. Takže máme čip 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 Tool
-> 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í. Já je ale nepoužívám, všechno
potřebné je v IDE. Nyní v Tools zvolíme Burn Bootloader
. Začne
se vypalovat bootloader, toto může chvilku trvat (prý až několik minut),
takže se nelekněte, že se IDE seklo. Pokud bude vypalování úspěšné, tak
se nám v IDE napíše "Done burning bootloader". Pokud k tomu nedojde,
zkontrolujte, zda máte vše správně. Pokud je i toto v pořádku, tak je čip
asi vadný. Takže 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,..), tak 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 odendá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ň 4 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 (pamatujte na prohození RX a TX) a dht11 na pin 8.

Pak si v IDE napíšeme tento 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. Nevím, v čem je problém, ale když se sketch odmítá nahrát, tak znovu vypálím do čipu bootloader a pak jde vše zas nějakou dobu bez problémů.

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 MEGA můžete pustit podle dokumentace až 12 V, tak zde to prostě NELZE. Je to jen čip bez všech regulátorů a dalších věcí jak 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.

Takto LM7805 vypadá. Na vstup(pin 1) se připojí vstupní napětí 9V (zvládá i 12) a na zem (2) se připojí zem baterie. Pak na výstupu (3) je 5V, 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 a to se hodí použít 5V convertory, které mají 2 vstupní piny a 2 výstupní a jsou schopny držet stálých 5V bez velkých ztrát. Některé zvládají fungovat už od 3V do 30V.
To by bylo pro dnešní díl vše, příště bude nejspíše 7-segmentový display.
Stáhnout
Staženo 812x (1.02 kB)
Aplikace je včetně zdrojových kódů
Komentáře


Zobrazeno 10 zpráv z 64. Zobrazit vše