Tato deska vznikla, když jsem řešil potřebu nového mikropočítače pro moji konstrukci stopek. Bohužel žádný běžně podporovaný mikropočítač pro vývojové rozhraní Arduino IDE mi nevyhovoval, protože měl buď málo vývodů, nebo naopak až zbytečně mnoho. Proto jsem chvilku hledal na internetu, až jsem narazil na MightyCore. To přidává do vývojového prostředí podporu nových mikropočítačů: ATmega8535, ATmega16, ATmega32, ATmega164, ATmega324, ATmega644 a ATmega1284, přičemž právě ATmega644 mě zaujal asi nejvíce. Za rozumné peníze nabízí dostatek vývodů, paměti Flash i paměti SRAM. Následně mě tedy napadlo udělat maličkou desku inspirovanou deskou Arduino NANO, ale s mikropočítačem ATmega644 Sakulno NANO 644. Nicméně je možno osadit kterýkoli ze zmíněných mikropočítačů, záleží jen na vašich preferencích.


Technické specifikace
| PCB | B-0095 |
|---|---|
| Napájecí napětí | 7-15 V DC, označeno jako 12 V |
| Provozní napětí | 5 V, max. 500 mA |
| Mikropočítač | ATmega644, všechny varianty P, PA, A |
| Paměť Flash | 64 KB, z toho zabírá 1 KB bootloader |
| Paměť SRAM | 4 KB |
| Paměť EEPROM | 2 KB |
| Takt procesoru | 16 MHz |
| Analogové vstupy | 8x |
| Digitální I/O | 32x, z toho 6 s podporou PWM |
| Maximální proud výstupu | 40 mA, doporučeno max. 20 mA na vývod a 200 mA celkem |
| Komunikační rozhraní | 2x UART, I2C, SPI |
| Připojení | Mini USB přes CH340G na UART0 |
| Velikost | 61 x 15 x 10 mm, výška je bez osazených konektorů |
Popis konstrukce
V první řadě je nutné upozornit, že tato konstrukce ve své podstatě nemá žádnou funkci. Svou funkci získá až teprve poté, co ji použijete v nějakém vašem zařízení a nahrajete do ní váš firmware. Ve své podstatě jde pouze o mikropočítač umístěný na PCB s tím, že jsou přidány nezbytné komponenty, aby mohl fungovat. Je osazen mini USB konektor, přes který je možno tuto desku napájet a nahrávat do mikropočítače firmware. Dále jsou vyvedeny po stranách desky všechny vývody mikropočítače, takže je možno celou tuto desku zasadit do nějaké složitější konstrukce. Samozřejmě aby tato konstrukce byla i nějak přínosná, je u ní vyřešena konstrukční chyba většiny Arduino desek, kde je závažná chyba v obvodu napěťového managementu. Většina těchto desek totiž propouští napětí na USB konektor, pokud jsou napájeny z externího zdroje. Toto je dle specifikací USB naprosto nepřípustné, a proto to na tomto zařízení bylo vyřešeno a nehrozí závada vlivem zavlečení napětí.
Schéma zapojení

Popis zapojení
Jak je ze schématu patrné, všemu dominuje použitý mikropočítač ATmega644 (IC1). Nicméně bez jakýchkoli úprav je možno použít i jiný kompatibilní mikropočítač jako například ATmega8535, ATmega16, ATmega32, ATmega164, ATmega324, ATmega644 a ATmega1284. Varianty ATmega8535, ATmega16 a ATmega164 asi nedávají příliš smysl kvůli malé paměti Flash. Většina vývodů použitého mikropočítače je vyvedena na pájecí body po stranách PCB, kam je možno osadit kolíkové lišty JP1 a JP2. Dále je zde obvod krystalového oscilátoru tvořený krystalem Q1, 16 MHz, a kondenzátory C1 a C2. Krystal je použit o frekvenci 16 MHz, ale je možno použít i jiné frekvence, případně je možno mikropočítač přepnout na interní oscilátor. Podrobný rozpis použitelných krystalů najdete dále. Obvod resetu mikropočítače je realizován pomocí tlačítka SW1, rezistoru R1, případně přes C8 z vývodu DTR obvodu CH340G (U$1), což se používá při aktualizaci firmwaru přes USB.
Tím jsme se dostali k USB/TTL převodníku, jenž převádí komunikaci z USB na UART0. Tento převodník CH340G byl zvolen pro svoji dobrou podporu například ve Windows 10, dobrou dostupnost a příznivou cenu. Převodník používá krystal Q2, 12 MHz, plus několik kondenzátorů C3, C4, C6, C7 a již zmíněný C8. Jako USB konektor byl zvolen mini USB, což sice není zcela běžný konektor, ale doma se mi jich válí celkem dost, takže jsem je potřeboval zužitkovat. Do budoucna je možné použití micro USB, který je mnohem rozšířenější.
Napětí 5 V z tohoto konektoru je vedeno přes PTC pojistku F1 do obvodu napěťového managementu tvořeného dvěma tranzistory MOSFET s vodivostí P (FDN340P). Tyto tranzistory jsou ovládány přes napěťový dělič R4 a R5 se zenerovou diodou D2, 5V6. Správná polarita je zajištěna diodou D1. Tento obvod zajistí, že se nemůže napětí 5 V z integrovaného stabilizátoru U1 (LM1117) dostat na USB konektor. No a tímto jsme se propracovali až ke stabilizátoru napětí, jenž umožňuje funkci i na napětí v rozsahu cca 7-15 V. Vstup stabilizátoru je chráněn diodou D3 proti nechtěnému přepólování. Kondenzátory C9-C12 jsou filtrační.
Zbývají nám už jen signalizační LED diody LED2 a LED3, jež signalizují probíhající komunikaci na sériovém portu UART0. LED1 je stejně jako u klasické Arduino desky použita na jednom výstupním pinu procesoru pro signalizaci. Samozřejmě nesmím zapomenout na konektor JP3. Ten slouží k připojení ISP programátoru, pokud potřebujeme do mikropočítače nahrát například bootloader nebo přímo firmware. Pozorní si jistě všimli, že na běžný ISP konektor má tento nějak moc pinů. To je způsobeno tím, že používám konektor, kde je ještě vyveden port UART0, což se může hodit při nahrávání firmwaru pomocí externího převodníku. No a to je tedy, co se týká zapojení, vše.
Osazovací plán


Schéma plošného spoje
Výkresy plošného spoje neuvádím, protože jde o spoj oboustranný s prokovenými otvory a jeho výroba z obrázkové dokumentace není možná. Nicméně v dokumentaci na konci článku najdete kompletní projektovou dokumentaci pro program Eagle v7.7, odkud si následně můžete vyexportovat potřebná data.
Postup osazení
Pokud se rozhodnete si PCB osadit sami, je asi nejlepší metoda osadit kompletní stranu TOP SMD součástkami a nechat zapájet v peci metodou Reflow, případně horkým vzduchem, a následně ručně osadit a zapájet stranu BOTTOM. Jako poslední pak osadíme THT součástky, vesměs konektory. Samozřejmě není problém celou desku zapájet ručně pomocí mikropájky. V takovém případě je nutné postupovat pečlivě, aby nedošlo k nějakým zkratům nebo nekvalitním spojům. Při osazování doporučuji nejprve osadit mikropočítač a pak od nejmenších po největší součástky na straně TOP. Následně stejným postupem osadíme i stranu BOTTOM. Po kompletním osazení doporučuji vše zkontrolovat.
Oživení zařízení
Pokud je vše správně osazeno a nenašli jsme při kontrole žádné problémy, můžeme přistoupit k oživení. Nejprve připojíme napájení pomocí USB kabelu. Na některý z pinů označených 5V a GND připojíme voltmetr a zkontrolujeme, že je přítomno správné napětí. Pokud je vše v pořádku, odpojíme USB a připojíme ideálně 12 V z laboratorního zdroje na pin označený 12V a GND. Na zdroji nastavíme proudové omezení na 50 mA, nebo nejmenší jaké zdroj umožňuje, a zapneme ho. Odebíraný proud by se měl pohybovat kolem 10 mA. Pokud je výrazně vyšší, znamenalo by to nějaký problém. Pokud je tedy odběr v pořádku, provedeme změření napětí 5 V. Pokud je v pořádku, změříme, že na pojistce F1 není žádné napětí. Tímto máme provedenu první kontrolu a můžeme přistoupit k oživení mikropočítače.
Seznam součástek
Přesnou rozpisku součástek včetně pouzder najdete v elektronické dokumentaci nebo v PartListu.
MightyCore
Než se pustíme do oživování mikropočítače, musíme si do vývojového prostředí Arduino IDE doinstalovat podporu námi použitého mikropočítače. Osobně doporučuji použít Arduino IDE pokud možno v nejnovější verzi. Pro použití MightyCore je nutná minimálně verze 1.8.7. Já jsem již toto prostředí připravil za vás a je součástí dokumentace. Stačí ho rozbalit ideálně programem 7-Zip do libovolného umístění ve vašem PC a můžeme ho hned začít používat. Nicméně pro úplnost popíšu i samotnou instalaci MightyCore.
V první řadě doporučuji ze stránky https://www.arduino.cc/ stáhnout nejnovější verzi Arduino IDE. Stahujte variantu Windows ZIP file for non admin install. Po stažení archiv rozbalte do libovolného umístění ve vašem PC. Ještě než vývojové prostředí spustíte souborem arduino.exe, vytvořte v adresáři, kde se nachází i tento exe soubor, novou složku pojmenovanou portable.

Vytvoření této složky způsobí, že si Arduino IDE nebude ukládat dodatečné soubory kamsi do vašeho uživatelského profilu, ale právě do této složky. To umožní nahrát toto prostředí například na flash disk, přenášet ho mezi různými počítači a mít všechny vaše projekty stále uložené jen na tomto flash disku.
Jakmile je složka portable vytvořena, můžeme spustit Arduino IDE souborem arduino.exe. Doporučuji nejprve aktualizovat všechny definice desek a knihoven. Jakmile jsou všechny aktualizace hotové, přejdeme na kartu Vlastnosti, kde si můžeme zapnout zobrazení čísla řádků programu, zobrazení podrobnějšího výpisu při nahrávání projektu a hlavně do řádku Správce dalších desek URL zadáme následující odkaz:
https://mcudude.github.io/MightyCore/package_MCUdude_MightyCore_index.json

Vše potvrdíme tlačítkem OK. Nyní přejdeme na Nástroje / Vývojová deska a klikneme na Manažér desek.

Otevře se nová karta, kde můžeme spravovat, instalovat, aktualizovat nebo odinstalovat podporu jednotlivých desek nebo přesněji mikropočítačů. V poli Typ vybereme Všechno a do pole hledání napíšeme MightyCore. Automaticky bude vyhledán balíček obsahující námi preferované mikropočítače. Nyní stačí kliknout na tlačítko Instalace a počkat, až se vše stáhne a nainstaluje.

Následně klikneme na Zavřít. Nyní se nám již v Nástroje / Vývojová deska objevila další položka MightyCore, kterou když rozklikneme, již vidíme všechny podporované mikropočítače.

Vybereme tedy mikropočítač, jenž máme osazen v Sakulno NANO, nejspíš tedy ATmega644.
Nastavení pojistek a nahrání bootloaderu
Jakmile máme doinstalovánu podporu MightyCore, je nutné nastavit správné parametry a nahrát do mikropočítače bootloader. A to i v případě, že bychom bootloader nehodlali používat. V momentě, kdy dáte nahrát bootloader, jsou současně nastaveny i pojistky. Proto při první inicializaci mikropočítače ho musíme vždy nahrát. Opět si tedy rozklikneme nabídku Nástroje, kde máme vybrán mikropočítač ATmega644 a nastavíme parametry podle následujícího obrázku.

Clock: Zde by mělo být již přednastaveno External 16MHz. V Sakulnu je taktéž použit krystal 16 MHz, takže tuto položku máme dobře. Pokud si tuto položku rozklikneme, vidíme všechny podporované varianty oscilátorů a jejich frekvencí. Pro bližší informace doporučuji prostudovat dokumentaci k MightyCore.
BOD: Touto položkou se nastavuje minimální napětí mikropočítače, než se řízeně vypne (Brown-out detection). Každá část mikropočítače vyžaduje nějaké minimální napětí, aby mohla správně pracovat. Pokud napájecí napětí klesne pod tuto hodnotu, může dojít k nestabilitě. V naprosté většině vystačíme s výchozím nastavením 2,7 V.
Compiler LTO: Zde doporučuji přepnout na Enabled, což může někdy docela významně zmenšit velikost obsazené paměti mikropočítače. Aby tato funkce fungovala, je nutné vývojové prostředí Arduino IDE ve verzi 1.6.11 nebo novější.
Variant: Zde je nutné vybrat přesnou variantu použitého mikropočítače. Toto označení je přímo na pouzdře součástky. Například v použitém prototypu Sakulno NANO 644 je použit mikropočítač ATmega644PA. Pokud zadáte špatnou variantu, při nahrávání firmwaru nebo bootloaderu obdržíte chybové hlášení, že nesouhlasí signatura připojeného čipu.
Pinout: Já používám Standard pinout, ale můžete použít některý jiný. Toto nastavení je velmi důležité, pokud používáte při definování hardwaru ve vašem projektu pouze čísla. MightyCore umožňuje definovat daný vývod mikropočítače i jeho skutečným jménem, například PIN_PB0. Opět pro bližší informace doporučuji prostudovat dokumentaci MightyCore.
Bootloader: Tato položka nastavuje, zda bude současně s pojistkami do mikropočítače nahrán i bootloader, který umožňuje následné nahrání firmwaru pomocí USB nebo zvoleného portu UART bez použití programátoru. V případě Sakulna NANO je nutné nastavit tuto volbu na Yes (UART0), protože USB/TTL převodník je fyzicky připojen právě k portu UART0. Pokud bychom bootloader nepoužívali a program nahrávali pouze programátorem, zadáme volbu No Bootloader.
Port: Zde se nastavuje COM port, kterým PC komunikuje s deskou. Nicméně při první inicializaci mikropočítače se toto nastavení týká připojeného ISP programátoru, nikoli desky Sakulno NANO.
Výběr programátoru ISP
Tímto plynule přecházíme k volbě programátoru, kterým nahrajeme do mikropočítače bootloader a nastavení pojistek.

Já s oblibou používám desku Arduino NANO, které jsem přehrál bootloaderem od desky UNO a následně do ní nahrál firmware z nabídky Soubor / Příklady / ArduinoISP. Tím se z běžné desky Arduino stane programátor. Důvod, proč jsem přehrával bootloader z desky UNO do NANO, je ten, že pokud jsem měl v desce bootloader od desky NANO, nechtěl mi potom firmware ArduinoISP fungovat správně. Asi tedy doporučuji vyrobit si programátor přímo z desky UNO. Propojíte vývody MOSI, MISO, SCK, 5V a GND z desky UNO na Sakulno NANO a reset desky Sakulno NANO připojíte na pin D10 desky UNO. Pokud máte jiný podporovaný programátor, můžete samozřejmě použít ten.
Vybereme tedy Programátor: Arduino as ISP (MightyCore). Pokud máte programátor propojen s deskou Sakulno NANO a současně programátor připojen k PC, vybereme v Arduino IDE daný COM port ISP programátoru a klikneme na položku Vypálit zavaděč. Pokud je vše v pořádku, během několika vteřin je do nového mikropočítače v desce Sakulno NANO nahrán bootloader včetně konfigurace pojistek. To, že vše proběhlo správně, vidíme ve stavovém hlášení vývojového prostředí a současně by se měla na desce Sakulno NANO rozblikat LED1.

V tuto chvíli se z desky Sakulno NANO stává jakákoli běžná Arduino deska a již ji můžeme programovat pouze pomocí připojeného USB kabelu.
Jednotlivé pinouty



Použití XLoaderu
Program XLoader slouží primárně k nahrání firmwaru ve formátu HEX, tedy již zkompilovaného, do desek Arduino. Bohužel v defaultní konfiguraci nepodporuje námi použitý mikropočítač ATmega644PA. Ovšem je celkem snadné do něho přidat tuto podporu. Takže jsem do seznamu podporovaných desek přidal i Sakulno NANO, a to hned ve dvou variantách lišících se použitým mikropočítačem. První varianta by měla podporovat mikropočítače ATmega644 a 644A. Druhá pak varianty ATmega644P a PA.
Tento program s upravenými deskami Sakulno NANO najdete v elektronické dokumentaci. Já ho používám celkem rád pro jeho jednoduchost, hlavně u projektů, kde potřebuji možnost uživatelského updatu firmwaru v případě, že vydám novější verzi. Tímto programem dokáže firmware v daném zařízení aktualizovat i běžný uživatel bez toho, aby musel firmware složitě kompilovat.

Řešení problémů
Při uvádění do provozu může nastat nespočet problémů, a proto bych tu některé chtěl zmínit.
1. Problém s resetem procesoru při nahrávání firmwaru přes USB. S tímto problémem jsem se setkal po začátku, kdy jsem začal používat mikropočítače z MightyCore. Já v mých konstrukcích používám většinou USB/TTL převodník CH340G, který provádí reset pomocí vývodu DTR. Tento vývod je v běžném provozu ve stavu H. V momentě, kdy dochází k uploadu firmwaru, přejde do stavu L. Bohužel v tomto stavu je po celou dobu uploadu. To by však celou dobu drželo mikropočítač v resetu. Proto se zařazuje mezi vývod DTR a reset programované součástky kondenzátor, většinou s hodnotou 100 nF. To způsobí pouze krátký přechod resetu mikropočítače do stavu L, aby mohl být spuštěn bootloader, který následně aktualizuje nový firmware. Jak se ukázalo, tak tato hodnota je pro použití s mikropočítači ATmega644 a ATmega1284, jiné jsem dosud netestoval, nedostačující. Při testech jsem zjistil, že kapacita kondenzátoru musí být minimálně 220 nF, ale ideálně 330 nF. Proto jsem ve finále použil tento kondenzátor, ve schématu C8, s kapacitou 1 uF. Používám běžný keramický kondenzátor v pouzdře SMD1206 s maximálním napětím 25 V.
2. Při první inicializaci mikropočítače obdržíme hlášení, že připojená součástka má špatné ID. Toto je celkem běžný problém. Ať už při nahrávání bootloaderu nebo následně firmwaru, vždy se před samotným uploadem zkontroluje, zda připojená součástka odpovídá součástce, pro kterou byl firmware zkompilován. Pokud nesouhlasí předpokládané ID s ID přečteným z programované součástky, upload se nezdaří. Nejčastěji jsou tři příčiny. Buď je v Arduino IDE nastavena špatná součástka, typicky třeba místo ATmega644PA je nastaveno ATmega644. V takovém případě je potřeba zkontrolovat a nastavit správnou součástku. Druhou možností je, že ID přečtené z programované součástky je zcela neplatné nebo patří jiné součástce. Zde je potřeba zkontrolovat veškerou kabeláž a současně zkontrolovat, že napětí programované součástky je po celou dobu v provozním rozsahu. V případě, že je vše napájeno jen z USB počítače přes delší kabel nevalné kvality, může na něm být zásadní úbytek napětí, klidně 2-3 V, což způsobí nestabilitu programované součástky. Proto pokud máte tento problém, připojte ještě externí napájecí napětí. No a poslední možností je, že programovaná součástka vůbec nevrací žádné ID, respektive vidíme samé nuly. Pokud to nemá příčinu v nedostatečném napájení, je nejspíše špatně zapojena kabeláž a proto nemohla být navázána komunikace s programovanou součástkou.
Dokumentace
No a na závěr si zde můžete stáhnout veškerou dokumentaci pro stavbu. Je zde i projekt pro Eagle, vývojové prostředí Arduino IDE s doinstalovanou podporou MightyCore a testovací program pro procesor v aplikaci XLoader.
Prohlášení
Tato konstrukce je autorská práce. Není povoleno bez souhlasu autora přejímání na jiné stránky nebo komerční využití. Je povoleno se pouze odkazovat na tento web a tuto konstrukci. Pro více informací mě stačí kontaktovat. Zároveň nepřebírám jakoukoli odpovědnost za chování zařízení a případné škody způsobené použitím tohoto zařízení, ať by byly jakéhokoli rázu. Zařízení je určeno pouze k užití pro vlastní potřebu. Jakýkoli prodej není bez souhlasu autora možný.