Arduino s 31 piny

Na jednu konstrukci se mi hodilo Arduino, ale potřeboval jsem mít víc pinů, než standardních 20 (14 + 6). Co s tím? Co třeba udělat si vlastní Arduino z „velkého“ jednočipu ATmega? Třeba ATmega32 – v podstatě totéž, co má Arduino Uno, ale v pouzdru se 40 piny. Nneí to tak složité, stačí breadboard, Uno a pár drátů…

Arduino je v podstatě „holý“ jednočip ATMega328. To, co z něj dělá Arduino, je bootloader a mechanismus nahrávání programů.

Bootloader je krátký kód, který se provede hned po startu jednočipu. Chvíli čeká, jestli se na sériové lince neobjeví data z programátoru. Pokud ne, spustí nahraný program, pokud ano, předpokládá, že data jsou kód k nahrání, a nahraje je do paměti.

Použít jiný AVR jednočip, třeba ATmega32, není velký problém, jen musíte zajistit pár věcí:

Zaprvé – musíte do něj nahrát ten zmíněný bootloader. Jednou stačí, pak už to bude fungovat.

Zadruhé – musíte mít vhodný USB převodník. Modulů, které z USB dělají TTL signály TxD a RxD je spousta, vy ale potřebujete takový, který má i signál DTR. Musíte chvilku hledat…

Zatřetí – musíte mít pro Arduino IDE vhodnou knihovnu pro práci s těmito procesory.

Pojďme na to krok po kroku…

Programátor

Pokud máte programátor, tedy nástroj, jak nahrávat programy přímo do procesoru, máte vyhráno. Ale ne každý ho má. Naštěstí můžete využít obyčejné Arduino Uno a nahrát do něj sketch, který se jmenuje „Arduino ISP“. Najdete ho v menu Soubor, podmenu Příklady, je tam hned jako příklad 11.

Tento sketch jenom přeložíte a nahrajete do obyčejného Arduina, jak jste zvyklí. Arduino se tím přeměnilo v „Arduino ISP“, tedy v programátor jednočipů AVR.

Knihovny pro AVR

Teď si připravte vhodné knihovny, které umí pracovat s „holými“ AVR. Já našel pěknou knihovnu MightyCore. Její instalace je jednoduchá:

  1. Do URL Správce desek (Soubor – Vlastnosti) přidejte adresu https://mcudude.github.io/MightyCore/package_MCUdude_MightyCore_index.json
  2. Otevřte Manažér desek (Nástroje – Deska – Manažér desek):
  3. Vyberte MightyCore a dejte Instalovat

Nahrání bootloaderu

Teď si připravte ATmega32 (klidně 64, nebo 16, jak chcete) do breadboardu a propojte jej takto:

  • Piny 11 a 31 ATmega na pin GND z Arduina
  • Piny 10 a 30 ATmega na pin +5 V Arduina
  • Pin 6 ATmega na pin 11 Arduina (MOSI)
  • Pin 7 ATmega na pin 12 Arduina (MISO)
  • Pin 8 ATmega na pin 13 Arduina (SCK)
  • Pin 9 ATmega na pin 10 Arduina (RESET)

Pro snazší pochopení nákres + foto:

Jakmile máte propojeno, udělejte následující v Arduino IDE:

  1. V menu Nástroje – Deska zvolte MightyCore ATmega32:
  2. Nástroje – Pinout: Standard
  3. Nástroje – Clock: 8 MHz internal
  4. Nástroje – Compiler LTO: Disabled
  5. Nástroje – BOD: Disabled
  6. Nástroje – Programátor: zvolte Arduino as ISP (MightyCore) (pozor, nesplést s ArduinoISP!!!)
  7. Jakmile máte vše zvolené, klikněte na Nástroje – Vypálit zavaděč. Arduino bude chvíli blikat, a na konci byste měli dostat nějaký takovýto výpis:
  8. Pokud je vše hotové, jásejte – vaše ATmega se právě proměnila v Arduino.

Programování ATmega pomocí Arduino IDE

Máte ATmegu s bootloaderem, pojďme si tedy do ní nahrát nějaký program přes Arduino IDE.

V první řadě změňte programátor (Nástroje – Programátor) na AVRISP mkII (MightyCore).

Pak si otevřte třeba Blink, změňte LED_BUILTIN na konstantu 13, a můžete zkusit překlad.

Já jsem si pro vlastní provoz vzal druhý breadboard, připojil jsem USB-to-UART převodník a „zadrátoval“ jsem si ho takto:

  • Piny 11 a 31 ATmega na pin GND z převodníku
  • Piny 10 a 30 ATmega na pin +5 V převodníku
  • Pin 14 ATmega na TxD převodníku
  • Pin 15 ATmega na RxD převodníku
  • Pin 9 ATmega přes rezistor 10k na sousední pin 10 (+5 V)
  • Pin 9 ATmega také přes kondenzátor 100 nF na výstup DTR z převodníku

A aby byl vidět nějaký výsledek, tak jsem si na pin 19 ATmega připojil LED. Fyzický vývod číslo 19 je „Arduino 13“, jak ukazuje tento obrázek:

Zapojení tedy vypadá nějak takto:

V reálu trošku jinak, ale plus mínus…

Pokud máte všechno správně propojené a bootloader funkční, tak nahrání sketche proběhne na první dobrou…

 

ATMEGA32A-PU 32K FLASH 16MHZ DIP-40

CP2102 USB to TTL Module With DTR Pin

Líbil se vám článek? Podpořte autora na Patreonu
banner