Arduino ako ISP programátor

Page

Stránky / Nezaradené stránky /

Arduino možno použiť na programovanie iných mikrokontrolérov. Obvykle sa to dá využiť v prípade, že chcete namiesto celého arduina využiť mikrokontroléry ATmega328P alebo ATtiny85. Vtedy pomocou niekoľkých prepojovacích vodičov a vhodného programu v Arduine dokážete programovať samostatné mikrokontroléry.

Miniaturizácia Arduina do ATtiny85

Na nasledovnom obrázku je to, čo sa snažíme dosiahnuť. Nahradiť kompletné Arduino za jeho miniatúrnu náhradu, ktorá bude blikať LED diódou. Ako náhradu použijeme mikrokontrolér ATtiny85-20PU.

Na obrázku je vidno, že na jeho zadrôtovanie toho veľa netreba. Pripojíme napätie a zem a potom už ostáva iba použiť jeden digitálny výstup na ovládanie LEd diódy. Náklady sú približne jedno euro, spotreba prúdu minimálna (v tomto prípade 3 mA keď nesvieti, 6 mA keď svieti). Mikrokontrolér používa interný oscilátor, ktorý je v tomto prípade nastavený na 1 MHz, čo na blikanie v pohode stačí.

ISP

Aby sme však mohli zapojiť ATtiny85-20PU, potrebujeme k tomu Arduino. Pomocou neho budeme obvod programovať. Návod predpokladá, že máte nainštalované IDE 1.6.X.

Spustíme si IDE a v menu použijeme príkaz File/Examples/ArduinoISP. Otvorí sa program ArduinoISP, ktorý si nahráme cez USB priamo do Arduina. Samotný program nie je potrebné nejako podrobnejšie skúmať, ale je dobré si všimnúť, že okrem samotného programovania ISP používa na komunikáciu aj tri LED diódy.

  • PIN9 - Heartbeat - Bliká s diódou pomocou PWM, čím signalizuje, že stále žije. Blikanie je pekne urobené, naozaj pripomína tlkot srdca.
  • PIN8 - Error - Svietiaca dióda signalizuje chybu.
  • PIN7 - Programming - Bliká počas programovania podriadeného Mikrokontroléra.

Odfotil som to len v takomto zapojení, aby bolo vidno, že to tak naozaj funguje. Na obrázku je pripojený PIN9 na jednu LED.

Doplnenie definícií mikrokontroléra ATtiny85

Definície sú potrebné preto, lebo v IDE po nainštalovaní nie sú a nebolo by možné priradiť význam k jednotlivým pinom. Definície doplníte podľa popisu na stránke ATtiny85.

Ak sa vám to správne podarilo, uvidíte v IDE v menu Tools/Boards nové položky, ktoré umožňujú programovať nové mikrokontroléry. My sa budeme v ďalšom texte venovať ATtiny85 (internal 1 MHz clock), čo je továrenské nastavenie.

Damellisovo jadro nie je jediné, ktoré sa venuje ATtiny85. Treba spomenúť, že existujú aj prepracovanejšie jadrá a obsahujú aj ďalšie mikrokontroléry rady ATtiny.

Prepojenie pinov pri programovaní ATtiny85-20PU

Mikrokontrolér má nasledovné rozmiestnenie pinov.

Na jeho programovanie potrebujeme prepojiť:

  • 10 uF elektrolytický kondenzátor medzi RESET a GND na Arduine. Plus je pripojené na RESET.
  • 5 V z Arduina na VCC ATtiny85.
  • GND z Arduina na GND ATtiny85.
  • PIN10 z Arduina na RESET ATtiny85.
  • PIN11 z Arduina na PIN0 ATtiny85.
  • PIN12 z Arduina na PIN1 ATtiny85.
  • PIN13 z Arduina na PIN2 ATtiny85.

Programovanie

Teraz už ostala len finálna fáza, ktorou je naprogramovanie mikrokontroléra. Otvorte si program File/Examples/01. Basics/Blink a zmeňte v ňom led z 13 na 0, pretože ATtiny85 nemá toľko digitálnych pinov.

  • V menu vyberte Tools/Board/ATtiny85 (internal 1 MHz clock).
  • V menu vyberte Tools/Programmer/Arduino as ISP.
  • Ak chcete vidieť, čo sa počas programovania deje, pripojte tri diódy k pinom 7, 8 a 9 na Arduine.
  • V menu vyberte Sketch/Upload Using Programmer.

Ak všetko dopadlo dobre, odpojte programovacie vodiče a zapojte cez rezistor na PIN0 diódu. Ak ste to zvládli, dióda bude blikať.

Zmena frekvencie hodín

Všetko zabezpečí funkcia menu Tools/Burn Bootloader. Podľa nastavenia boardu prepne fuses mikrokontroléra. Po prepnutí fuses je mikrokontrolér vynulovaný a treba do neho poslať program znovu. ATtiny85 možno bez problémov nastaviť na 1 MHz (továrenské nastavenie) a 8 MHz. Iné nastavenia si vyžadujú použitie kryštálu. Tieto dve fungujú s internými hodinami. Ak som správne pochopil dokumentáciu a dešifroval nastavenie fuses v súbore board.txt, jediný rozdiel medzi nimi je ten, že oba majú hodiny na 8 MHz, len jednomegová verzia má k tomu zapnutú deličku 8.

Ak si položíte otázku, či je možné poslať program s boardom na 1 MHz do mikrokontroléra s fuses na 8 MHz, tak odpoveď znie, že to možné je. Všetko bude pracovať, len počítanie času bude zrýchlené alebo spomalené. Je to preto, lebo interne je počítanie času robené cez rátanie tikov. IDE prenesie do kompilátora nastavenie F_CPU, ktoré sa dosadí do makra #define clockCyclesPerMicrosecond() ( F_CPU / 1000000L ) a od tohoto sa počítajú časové údaje.

Je možné programovať vtedy, ak sú k pinom pripojené súčiastky?

Poviem to zjednodušene. Počas experimentovania som mal pripojené diódy, tranzistory a potenciometre aj na piny 0, 1 a 2. Zatiaľ sa mi nestalo, že by tam vznikla kombinácia, ktorá by zabraňovala programovaniu. Ale na Internete možno nájsť zmienku o tom, že to občas aj nemusí ísť.

Malo by sa to stať vtedy, keď napríklad pripojíte napriamo niektorý pin na GND alebo Vcc. Vtedy nie je možné sťahovať úrovne napätia na danom pine a programovanie sa neuskutoční.

ATmega328P-PU

ISP programátorom je možné ľahko naprogramovať aj tento mikrokontrolér, ktorý je základom pre Arduino Uno. Postup je v podstate identický s programovaním menšieho čipu. Na jeho programovanie potrebujeme prepojiť:

  • 10 uF elektrolytický kondenzátor medzi RESET a GND na Arduine. Plus je pripojené na RESET.
  • 5 V z Arduina na VCC(7) ATMega328P-PU.
  • 5 V z Arduina na AVCC(20) ATMega328P-PU.
  • GND z Arduina na GND(8) ATMega328P-PU.
  • GND z Arduina na GND(22) ATMega328P-PU.
  • PIN10 z Arduina na RESET(PC6,1) ATMega328P-PU.
  • PIN11 z Arduina na MOSI(PB3,17) ATMega328P-PU.
  • PIN12 z Arduina na MISO(PB4,18) ATMega328P-PU.
  • PIN13 z Arduina na SCK(PB5,19) ATMega328P-PU.

Ak má byť mikrokontrolér na frekvencii 16 MHz, je potrebné ešte pripojiť kryštál a dva kondenzátory. Presný postup skladania na bezkontaktnom poli je na samostatnej stránke.

Teraz už ostala len finálna fáza, ktorou je naprogramovanie mikrokontroléra. Otvorte si program File/Examples/01. Basics/Blink a zmeňte v ňom led z 13 na 0, pretože ATtiny85 nemá toľko digitálnych pinov.

  • V menu vyberte Tools/Board/Arduino Uno, alebo Tools/Board/ATMega328 on breadboard (8 MHz internal clock).
  • V menu vyberte Tools/Programmer/Arduino as ISP.
  • Ak chcete vidieť, čo sa počas programovania deje, pripojte tri diódy k pinom 7, 8 a 9 na Arduine.
  • V menu vyberte Tools/Burn Bootloader. Toto je dôležitý krok, lebo interne sú na továrenských čipoch nastavené frekvencie na 1 MHz a my potrebujeme 16 MHz alebo 8 MHz. Toto napaľovanie bootloadera aj naozaj nahráva bootloader, takže programovanie trvá asi dvadsať sekúnd.
  • V menu vyberte Sketch/Upload Using Programmer.

Ak všetko dopadlo dobre, odpojte programovacie vodiče a zapojte cez rezistor na PB5 diódu. Ak ste to zvládli, dióda bude blikať. Je možné tento krok aj predradiť samotnému programovaniu a potom budete počas programovania vidieť, že dióda poblikáva v rôznom rytme.

  • Burn bootloader - Viac-menej pravidelné poblikávanie, ktoré trvá asi 20 sekund.
  • Upload Using Programmer - Nepravidelné blikanie, ktoré v prípade tohoto malého programu trvá kratšie.
  • Ak všetko dobre dopadlo - Bliká pripojená dióda a pokiaľ je stále pripojený PIN13 na Arduine, bude blikať aj dióda na doske.

ATtiny84

 Postup programovania nájdete v samostatnom článku.


20.06.2016


Menu