Image
9.1.2020 1 Comments

IoT prakticky: Programovanie mikrokontroléra ATmega 328P, ktorý je aj v Arduine

predošlom článku sme ukázali ako naprogramovať čipy ATtiny45 a ATtiny85. Ak potrebujete viac portov, alebo komunikačných rozhraní, môžete pre svoju konštrukciu použiť aj mikrokontrolér ATmega328 – rovnaký ako je vo vývojovej doske Arduino. Program aj zapojenie periférií môžete odladiť na Arduine a potom naprogramovať mikrokontrolér na plošnom spoji vašej konštrukcie. Pýtate sa prečo nepoužiť priamo Arduino, veď je lacné? Ak nezáleží na rozmeroch a úspornej prevádzke, tak prečo nie. Ale konštrukcia priamo s čipom môže byť podstatne menšia, ľahšia a bude mať podstatne menšiu spotrebu. Typický prúdový odber Arduina je 50 mA, pretože na ňom sú aj obvody pre programovanie cez USB. Odber samotného čipu je okolo 15 mA, a ak použijete knižnicu na prepínanie do úsporných módov, tak aj podstatne nižší.

Postup programovania ATmega328:

ATmega 328

Pre jednoduché bastlenie, alebo spájkovanie predpokladáme čip ATmega328P v puzdre DIL (Dual In Lina) s 28 vývodmi umiestnenými po 14 na každej strane. K dispozícii je aj čip v puzdre pre plošnú montáž, ten si však vyžaduje zručnosť pri spájkovaní a do prepojovacieho poľa sa použiť nedá.

Ak budeme popisovať obvod situovaný na šírku s vývodom 1 vľavo dole, tak v hornej rade vývodov zľava je:

  • A6-A0 je 6 pinov fungujúcich aj ako analógové vstupy vstupov 
  • GND, čiže elektrická zem, alebo mínus pól pri batériovom napájaní
  • AREF a AVCC 
  • D13-D9 – digitálne piny

V spodnej rade zľava sú piny:

  • RST – signál reset
  • RX a TX – piny pre sériovú komunikácii. Môžu fungovať aj ako digitálne piny 0 a 1.
  • D2-D4 digitálne piny
  • VCC napájacie napätie 5V
  • GND elektrická zem
  • XTL 1 a 2 – vývody na pripojenie externého 16 MHz kryštálu. Ten pri využití interného oscilátora nepotrebujete pripájať
  • D5-D8 digitálne piny

Väčšina pinov má aj alternatívne funkcie ako signály komunikačných rozhraní.

Arduino ako programátor pre ATmega

Aby ste mohli čip ATmega 328 použiť samostatne, potrebujete do nich nahrať program. Ako programátor môžete použijť ľubovoľné Arduino a pomocou niekoľkých vodičov ho pripojíte na piny mikrokontroléra. Potrebujete pripojiť:

Na naprogramovanie potrebujete prepojiť:

Medzi piny RESET a GND na Arduine pripojte 10 uF elektrolytický kondenzátor. Plus pól kondenzátora je pripojený  na RESET. Ostatné piny prepojte podľa tabuľky:

Arduino
ATMega328P
5 V
VCC PIN 7 a AVCC PIN 20
GND
GND PIN 8 a PIN 22
PIN10
RESET PIN 1
PIN11
PIN 17
PIN12
PIN 18
PIN13
PIN 19

V tabuľke sú označené aj porty aj PINy, čiže v prípade Arduina číslovanie na systémovom konektore a v prípade integrovaného obvodu ATmega jeho „nožičky“. 

Aby ste mohli sledovať fungovanie programátora, môžete, ale nemusíte pripojiť aj tri LED diódy k pinom Arduina:

  • PIN7 - bliká počas programovania podriadeného Mikrokontroléra.
  • PIN8 - signalizuje chybu.
  • PIN9 – Blikanie so stmievaním pomocou PWM signalizujem že programátor je funkčný

Konfigurácia vývojového prostredia Arduino IDE

Ak nemáte nainštalované vývojové prostredie Arduino IDE stiahnete si ho na stránke https://www.arduino.cc v sekcii Software. K dispozícii je pre platformy Windows, Mac OS aj Linux. Vývojové prostredie sa neinštaluje, z internetu si stiahnete priamo aplikáciu, ktorú vo Windows umiestnite do vhodného adresára a na platforme Mac OS ju z adresára Stiahnuté prekopírujete do adresára Aplikácie. V novom MacOS Catalina je potrebné povoliť fungovanie aplikácie tretej strany. 

Do vývojového prostredia je potrebné doplniť podporu pre samostatný obvod AT Mega 328P. Stiahnite si zo stránky súbory podpory, konkrétne TU. V adresári, kde sú projekty Arduino IDE, implicitne je to C:\Users\MenoPouzivatela\Documents\Arduino vytvorte zložku hardware a prekopírujte sem rozbalenú zložku breadboard zo stiahnutého archívu, kde je bootloader a konfiguračný súbor. 

Po spustení Arduino IdE zistíte, že do menu Tools/Boards pribudne nová položka pre obvod ATmega 328. 

Aby ste mohli použiť Arduino ako programátor pre samostatný obvod ATmega spustite vývojové prostredie  Arduino IDE a otvorte príklad File>Examples>ArduinoISP. Tento program nahrajte do Arduina. Nemusíte riešiť ako program funguje, je to len nástroj na nahratie kódu do mikrokontroléra ATmega. 

Ako prvý je potrebné do mikrokontroléra zaviesť bootloader, čiže zavádzač pomocou menu Nástroje > Vypáliť zavádzač (bootloader). Mikrokontrolér, či už je to ATtiny, alebo ATmega má totiž z výroby pamäť flash, pre používateľský kód úplne prázdny. Výrobca predpokladá, že obvod sa bude programovať pomocou špeciálneho programátora. V Arduine a aj v našich zapojeniach však programujeme mikrokontrolér zapojený v obvode, čiže používame metódu ISP (In-System Programmer). Ten umožňuje programovanie mikrokontroléra cez sériové rozhranie. Vo flash pamäti  je špeciálny kód nazývaný bootloader, umiestnený na konci pamäti. Na začiatku pamäti sa predpokladá umiestnenie používateľského kódu. Po resete sa spustí bootloader, ktorý zistí, či na piny sériového rozhrania prišla špeciálna postupnosť znakov signalizujúca, že sa bude programovať. Ak áno, bootloader číta zo sériového rozhrania údaje a programuje nimi flash pamäť.

Predpokladajme, že vo vývojovom prostredí máte program pre ATmega, trebárs príklad blinky z ponuky príkladov, ktorý bliká lED diódou, modifikovaný tak, aby blikal LED diódou na niektorom výstupe, napríklad na D8, ktorý je posledný v dolnej rade vývodov integrovaného obvodu. 

void setup() {
  pinMode(8, OUTPUT);
}
 
void loop() {
  digitalWrite(8, HIGH);   
  delay(300);                       
  digitalWrite(8, LOW);    
  delay(300);                      

V menu vyberte Tools>Programmer>Arduino as ISP. Následne v menu vyberte položku Sketch>Upload Using Programmer, alebo v slovenskej verzii Projekt>Nahrať Pomocou Programátora.

Ak všetko dopadlo dobre a aplikáciu máte odladenú odpojte programovacie vodiče a prípadne doplňte súčiastky a prepojenia, ktoré by prípadne bránili programovaniu. Programovanie bude vo väčšine prípadov fungovať aj v prípade ak máte k pinom ATmega 17, 18 a 19 pripojené súčiastky. V našom prípade bude Arduino pri programovaní môcť bez problémom meniť logické úrovne na pinoch. Len keby bol niektorý z pinov pripojený natvrdo k napájaciemu napätiu, alebo GND, programovanie by nefungovalo.

POZOR: Určite vás napadlo odladiť kód na Arduine, čo je správna myšlienka a následne vybrať naprogramovaný integrovaný obvod z pätice Arduina a použiť ho vo vlastnej konštrukcii. Toto fungovať nebude. Mikrokontrolér v Arduine funguje na frekvencii 16 MHz a k tomu potrebuje externý oscilátor. Interný oscilátor ATmega funguje len na 8 MHz.  Ak má byť mikrokontrolér fungovať na frekvencii 16 MHz, je potrebné ešte pripojiť k čipu ešte kryštál a dva kondenzátory, tak ako je to v Arduine. Len na doplnenie, ak používate interný 8 MHz oscilátor, budete mať pre svoj program k dispozícii asi o 2 kB menšiu kapacitu, namiesto 32 kilobajtov, budete mať k dispozícii len 30.

Sériová komunikácia s vývojovým prostredím

Ukážeme aj možnosť ladenia cez sériové rozhranie. Budeme prenášať počítadlo cyklov a zobrazovať ich v okne monitorovania sériovej komunikácie. Na prenos údajov je potrebný prevodník z USB na RS232. Najjednoduchšie ho získate ak z vývojovej dosky Arduino UNO vyberiete čip ATmega328, ktorý je v týchto doskách v pätici. Následne prepojíte signály RX a TX na portoch 0 a 1 Arduina s pinmi 1 a 2 na čipe ATmega328 vo vašej konštrukcii.  Zapojenie je prekrížené, čiže na pin 1 čipu RX sa privedie signál TX z Arduina a na pin 2 TX sa privedie signál RX z Arduina. Priklad výpisu počítadla cyklu cez sériové rozhranie:

int nPocitadlo;
 
void setup()
{
  Serial.begin(9600);
  pinMode(8, OUTPUT);
  nPocitadlo = 0;
}
 
 
void loop() {
  digitalWrite(8, HIGH);   
  delay(300);                       
  digitalWrite(8, LOW);    
  delay(300);   
  nPocitadlo++;                   
  Serial.print("cyklus: ");
  Serial.println(nPocitadlo);
}

Obsluha alfanumerického LCD displeja

Ukážeme aj pripojenie alfanumerického displeja cez komunikačné rozhranie I2C. Prepojte signály takto:

GND <---> GND

VCC <---> 5V

SDA <---> A4

SCL <---> A5

Budete potrebovať knižnicu Wire s funkciami komunikačného rozhrania I2C napríklad z tohoto zdroja a taktiež knižnicu na obsluhu displeja pripojeného cez rozhranie I2C, napríklad z tejto stránky.

Príklad na zobrazenie statického textu:

#include  
#include
 
LiquidCrystal_I2C lcd(0x3F, 16, 2);  // Adresa LCD displeja  16 znakov x 2 riadky
 
void setup()
{
  lcd.init();                      // iinicializacia 
  lcd.backlight();
  lcd.setCursor(1,0);
  lcd.print("NEXTECH - IoT");
  lcd.setCursor(0,1);
  lcd.print("obvod ATmega328P");
}
 
void loop() {}

V ďalšom pokračovaní sa budeme tiež venovať čipom, tentoraz mikrokontrolérom PICAXE.

Zobrazit Galériu

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Mikrokontroléry

IoT prakticky: Totem Mini Lab – zostava na prototypovanie riešení s mikrokontrolérmi

20.01.2020 00:10

Táto zostava na vývoj riešení s mikrokontrolérmi pozostáva z mechanickej časti a dvoch dosiek s mikrokontrolérmi. Mechaniku tvorí stojan so zošikmeným predným panelom postaveným zo stavebnice Totem. P ...

Mikrokontroléry

IoT Prakticky: Ovládanie digitálneho výstupu ESP32 prostredníctvom UDP datagramov

19.01.2020 00:10

S technickými parametrami vývojovej dosky ESP32, prvotnou konfiguráciou, ale aj prvým “Blink” programom v prostredí Arduino IDE ste sa bližšie mohli zoznámiť v predchádzajúcom článku na pcrevue.sk. Ak ...

Mikrokontroléry

IoT prakticky: prvé pokusy s čipom PICAXE jednoducho programovateľným v jazyku BASIC

17.01.2020 00:03

V predchádzajúcich častiach sme ukázali ako v niektorých konštrukciách nahradiť Arduino maličkým čipom ATtiny s ôsmimi vývodmi, prípadne použiť vo svojej konštrukcii rovnaký čip, ako je v Arduine. Čip ...

1 Comments

  1. chvalim p. Lacka reakcia na: IoT prakticky: Programovanie mikrokontroléra ATmega 328P, ktorý je aj v Arduine
    11.1.2020 17:01
    Naozaj chvalim p. Lacka za tieto clanky o elektronike. Jeden z mala na Slovensku, ktory dlhodobo robi osvetu v tomto smere. Robim s elektronikou v profi oblasti, ale snazim sa tiez robit osvetu medzi mladsimi rocnikmi a v tejto dobe je naozaj mnozstvo krasnych moznosti ako to robit, chybaju ale ludia ako p. Lacko.
    Ostatne clanky tu na pecrevue nestoja ani za vypublikovanie, skorej su na hanbu, ako su tvrdo prekladane a obsahovo prazdne. V tomto pripade ale p. Lacko robi naozaj kus prace, a vidiet ze do toho vklada mnozstvo casu a aj svojho srdca. Dakujeme.
    Reagovať

Vyhľadávanie

Najnovšie videá