Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

9. diel - Arduino - Samostatný čip ATmega 328p

Informácie obsiahnuté v tomto článku môžu byť zastarané. Autor vie, že to nemusí fungovať a napraví to hneď, ako bude mať čas.
Ak budete chcieť nejaké projekty realizovať, tak vám určite bude ľúto použiť celé Arduino. Ale čo s tým? Arduino UNO beží na čipe ATmega 328P, ktorý sa stará o všetko. Potom sú už na doske len regulátory, prevodník, množstvo ďalších súčiastok a 16MHz kryštál. Čip má ale obsiahnutý (síce len 8MHz) kryštál v sebe, takže ho tiež nebudeme potrebovať. Tým, že použijeme interné kryštál, sa nám zníži pamäť z 32 256 bitov na iba 30 720, takže stratíme skoro 2kB pamäti, ale u menších projektov by to nemal byť problém. Niekedy nabudúce si ukážeme, ako to sprevádzkovať s kryštálom a využiť celú pamäť.
ATmega 328P - Arduino

Aby sme ale mohli na čip nahrávať programy ako do klasického Arduino, tak do neho budeme musieť v prvom rade nahrať Arduino Bootloader, bez ktorého do neho cez Arduino IDE nič nenahrajú. Aby sme mohli na čip bootloader nahrať, budeme potrebovať aspoň funkčné Arduino. A aby sme mohli pracovať so samostatným čipom bez kryštálu, budeme si do IDE musieť pridať ďalšie "dosku". Takže IDE vypneme (ak je zapnuté) a do zložky pre Sketche (C: \ Users \ Ja \ Documents \ Arduino) pridáme zložku hardware, v nej zložku Breadboard a v nej bude txt súbor. Všetko si to môžete stiahnuť v súboroch tutoriálu nižšie. Teraz Arduino IDE zapneme a v Tools -> Board by sa nám mala na konci objaviť nová možnosť - ATMega328 on a breadboard (8MHz internal clock). Na tú ešte neprepne! Zvolíme si takú dosku, s ktorou budeme chcieť ATmega naprogramovať a v examples si otvoríme Arduino ISP. To do Arduino nahráme a presunieme sa k pripájanie čipu.

ATmega má 28 nožičiek. Tie nie sú popísané, takže si odporúčam na čip nalepiť nálepku s popisom pinov. Mne sa podarilo nájsť tieto od Adafruitu,, ktoré si len vytlačíte a nalepíte (najlepšie obojstrannú izolepou).

Čip pootočíme zúbkom doľava a pozrieme sa na neho z vrchu a vysvetlíme si jednotlivé nožičky.

ATmega 328P polepka - Arduino

V hornom rade máme zľava:

  • 6 analógových pinov A6-A0
  • GND je zem
  • AREF a AVCC sú vstup 5V
  • D13-D9 sú digitálne piny

V dolnej potom:

  • RST je resetující pin
  • RX a TX sú pre sériovú komunikáciu a zároveň piny 0 a 1
  • D2-D4 sú ďalšie digitálne piny
  • V + je vstup 5V
  • GND ide na zem
  • XTL 1 a 2 sú pre pripojenie kryštálu. Tie nás nezaujímajú.
  • D5-D8 sú posledné digitálne piny

Späť k nahrávanie bootloaderu. Vo Sketch Arduino ISP máme na začiatku časť:

// pin name:    not-mega:         mega(1280 and 2560)
// slave reset: 10:               53
// MOSI(11):    11:               51
// MISO(12):    12:               50
// SCK(13):     13:               52

Sú tu popísané piny - kam ktoré pripojiť. Takže pripojíme piny reset a D11-D13 na čipe k Arduino. U MEGA podľa pravého stĺpca, u ostatných podľa ľavého. Tieto 4 ale nestačí! Čip má dvakrát GND, tú na zem a na V +, AREF a AVCC pripojíme 5V. Teraz by čip mal pripojiť nejako takto:

Pripojenie čipu ATmega 328p - Arduino

Keďže na schéme nie sú popísané piny, odporúčam držať sa radšej popisu v kóde. Takže máme čip pripojený, v Arduino je nahraný sketch ISP a môžeme ísť nahrávať. V Tools -> Board zvolíme poslednú položku ATMega328 on a breadboard (8MHz internal clock). Ďalej si v Tool -> Programmer zvolíme Arduino as ISP. Sériový port zvolíme taký, na akom je pripojené Arduino, ktorým budeme nahrávať bootloader. V kóde sa pod popisy pinov odporúča pripojiť na piny 7,8 a 9 LEDky, ktoré budú informovať o stave nahrávania. Ja ich ale nepoužívam, všetko potrebné je v IDE. Teraz v Tools zvolíme Burn Bootloader. Začne sa vypaľovať bootloader, toto môže chvíľku trvať (vraj až niekoľko minút), takže sa nezľaknite, že sa IDE seklo. Pokiaľ bude vypaľovanie úspešné, tak sa nám v IDE napíše "Done burning bootloader". Ak k tomu nedôjde, skontrolujte, či máte všetko správne. Pokiaľ je i toto v poriadku, tak je čip asi chybný. Takže na čipe máme bootloader, ale ako do neho nahrať kód?

Ak máme Arduino s odnímateľným čipom (UNO, Duemilanove, ..), tak stačí z Arduino vybrať čip, náš nový pripojíme na napájanie a piny RX a TX pripojíme na piny RX a TX na doske Arduino bez čipu. Tu sa RX a TX neprohazuje! Potom môžeme nahrávať ako normálne (ale stále musíme mať ako board zvolené ATmega328 on a breadboard). Ak sa nám čip odendávat nechce, alebo to na Arduino jednoducho nejde (MEGA, ...), tak potrebujeme sériový prevodník. Ten má USB pre pripojenie k počítaču a aspoň 4 piny - VCC, GND, TX, RX. Ak ich je viac, tak nás momentálne nezaujímajú. VCC a GND je napájanie, to normálne pripojíme, ale TX pripojíme na RX a RX pripojíme na TX! Je to tým, že RX je príjem, a TX odosielanie, takže nemôžeme pripojiť vstup do vstupu a výstup do výstupu. Ak budeme používať sériový prevodník, tak to znamená ďalší COM port, na ktorý budeme musieť prepnúť v IDE (Tools -> Serial Port), ale stále zostáva doska ATmega 328 on a breadboard. Z minulosti už vieme používať DHT11, takže si čip naprogramujeme, aby po sériovej linke posielal teplotu.

K čipu pripojíme sériový prevodník (poprípade Arduino bez čipu), pripojíme napájanie, sériovú komunikáciu (pamätajte na prehodenie RX a TX) a dht11 na pin 8.

Schéma zapojenia Arduino - Arduino

Potom 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 sa uistíme, že máme ATmega328 on a breadboard. V Serial ports si zvolíme port, na ktorom je prevodník Arduino bez čipu a sketch nahráme ako do normálneho Arduino. Otvoríme serial monitor a uvidíme výpis teploty. Niekedy sa nahrávanie nepodarí na prvýkrát, niekedy trvá dlhšie a niekedy sa odmieta sketch nahrať aj po niekoľkonásobnom pokuse. Neviem, v čom je problém, ale keď sa sketch odmieta nahrať, tak znovu vypálite do čipu bootloader a potom ide všetko zas nejakú dobu bez problémov.

Použitie samotného čipu z Arduino - Arduino

Pri používaní samostatného čipu je treba dbať na to, že je to len čip a nič viac. To, že do MEGA môžete pustiť podľa dokumentácie až 12 V, tak tu to jednoducho NEDÁ. Je to len čip bez všetkých regulátorov a ďalších vecí ako sú na doske. Ak by sme chceli ako napájanie použiť 9V batériu, ktorú možno k Arduino normálne pripojiť, budeme musieť použiť nejaký regulátor napätia. Pri projektoch s nízkym odberom stačí regulátor LM7805, ktorý prebytočnú energiu mení na teplo.

LM7805 - Arduino

Takto LM7805 vyzerá. Na vstup (pin 1) sa pripojí vstupné napätie 9V (zvláda aj 12) a na zem (2) sa pripojí zem batérie. Potom na výstupe (3) je 5V, pre ktoré je zem tiež pin 2, teda je zem spoločná.

Ak by sme ale mali projekt s väčšou spotrebou, tak by sme ním skôr topili a to sa hodí použiť 5V convertor, ktoré majú 2 vstupné piny a 2 výstupné a sú schopné držať stálych 5V bez veľkých strát. Niektoré zvládajú fungovať už od 3V do 30V.

To by bolo pre dnešné diel všetko, nabudúce bude pravdepodobne 7-segmentový display.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 938x (1.02 kB)
Aplikácia je vrátane zdrojových kódov

 

Predchádzajúci článok
Arduino - Spínanie veľkej záťaže
Všetky články v sekcii
Arduino
Preskočiť článok
(neodporúčame)
Sedemsegmentový display a polia pre Arduino
Článok pre vás napísal Adam Ježek
Avatar
Užívateľské hodnotenie:
2 hlasov
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