9. díl - Arduino - Samostatný čip ATmega 328p

Hardware PC Arduino Arduino - Samostatný čip ATmega 328p

Informace obsažené v tomto článku mohou být zastaralé. Autor ví, že to nemusí fungovat a napraví to hned, jak bude mít čas.

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ěť.

ATMega 328P

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á\Do­cuments\Ardui­no) 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.

ATMega 328P polepka

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:

Připojení čipu ATmega 328p

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.

Schéma zapojení Arduina

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ů.

Použití samotného čipu z Arduina

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.

LM7805

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

 

  Aktivity (2)

Článek pro vás napsal Adam Ježek
Avatar
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.

Jak se ti líbí článek?
Celkem (5 hlasů) :
4.24.24.24.2 4.2


 


Miniatura
Všechny články v sekci
Arduino

 

 

Komentáře
Zobrazit starší komentáře (53)

Avatar
Michal Žůrek (misaz):

tak se podívej na čip, je to na něm napsané.

Odpovědět 24. ledna 22:29
Nesnáším {}, proto se jim vyhýbám.
Avatar
ostrozan
Redaktor
Avatar
 
Odpovědět 24. ledna 22:48
Avatar
Hellinger Jiri:

na mega 2560je 16AU 1520 a arduino IDE tam u teto deseky nema čip 328 tak nevím jak ten bootloaderr nahrat

 
Odpovědět 24. ledna 22:52
Avatar
Hellinger Jiri:

tady další obrazek

 
Odpovědět 24. ledna 22:53
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Hellinger Jiri
Adam Ježek:

Tutoriál je pro ATmega 328P, čip z Arduina UNA. 2560 ti s tím opravdu fungovat nebude.

Odpovědět 25. ledna 7:02
Programátor dělá co může. Počítač co chce. | Pokud mi dáš mínus, tak prosim, napiš proč!
Avatar
Odpovědět 25. ledna 14:44
Nesnáším {}, proto se jim vyhýbám.
Avatar
Hellinger Jiri:

A sčím tedy bude fungovat

 
Odpovědět 25. ledna 19:42
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Hellinger Jiri
Adam Ježek:

Překvapivě s čipem ATmega 328p, o kterém je tento tutoriál.

Odpovědět 25. ledna 19:47
Programátor dělá co může. Počítač co chce. | Pokud mi dáš mínus, tak prosim, napiš proč!
Avatar
lelixus
Člen
Avatar
lelixus:

Zkoušel jsem podle návodu, abych využil vnitřní krystal a nejde to. V nabídce nemám možnost ATMega328 on a breadboard (8MHz internal clock), když tedy přidám externí krystal, tak se bootloader normálně nahraje. Jak v novým IDE nastavím, abych mohl použít vnitřní krystal ?

 
Odpovědět 13. června 23:22
Avatar
karbos166
Člen
Avatar
karbos166:

Zdravím potřeboval bych poradit objednal jsem si na ebay samotné čipy udajně měli být s bootloaderem jen když ho hodím do desky ( Arduino uno) tak to chvíli něco dělá pak to vyhodí tohle

Projekt zabírá 2 276 bytů (7%)  úložného místa pro program. Maximum je 32 256 bytů.
Globální proměnné zabírají 236 bytů (11%)  dynamické paměti, 1 812 bytů zůstává pro lokální proměnné. Maximum je 2 048 bytů.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xca
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xca
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xca
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xca
Problém s přenosem dat na vývojovou desku (board). Na http://www.arduino.cc/en/Guide/Troubleshooting#upload naleznete další doporučení.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xca
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xca
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xca
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xca
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xca
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xca

z čehož soudím že tam asi teda jako není bootloader jenže když to dělám podle návodu abych ho nahrál tak furt ten stejný problém už si vubec nevím rady byl bych rád za jakýkoliv nápad nebo zkušenost.

PS: odzkoušeno na 2 čipech od jiného "prodejce". A klasický minulý čip funguje jak má

 
Odpovědět 20. července 0:29
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

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