Vývojová doska wAVR



  Chcel by som Vám predstaviť malú vývojovú doštičku, ktorú som navrhol pre účel výučby programovania AVR.

    Arduino
  Arduino je naozaj dobrý a jednoduchý projekt. Naprogramovať nejaké jednoduché programy s LED je v tomto prostredí hračka. Pre displej, tepelné čidlo a iné periférie dokážeme stiahnuť knižnice. Všetko je tak zjednodušené, že niektorý užívatelia ani netušia, čo všetko sa v malom mikrokontóleru (MCU) skrýva, ako funguje a čo všetko sa s ním dá dokázať.

    wAVR
  Položme si otázku, „aké sú požiadavky na vývojový kit?“. Musíme zobrať do úvahy, že ho budú obsluhovať žiaci.
    1.) „Blbovzdornosť“ - Výstupy sú odolné voči skratu. Dokonca je môžné na kontakty priamo pripojiť LED. Namiesto prepojovacích Jumprov som použil malé DIP spínače. A nakoniec som predpripravil zbernicu pre LCD displej a tepelné čidlo DS1820. Tým sa podstatne zrýchli čas spojazdnenia LCD (kontrast už bude prednastavený trimrom na doske).
    2.) Programátor USBasp - Ide o jednoduchý programátor, ktorý sa dá ľahko vyrobiť. Nechcel som pracovať s profesionálnym programátorom, ktorý je pre žiakov nedostupný. Práve naopak. To čo sa naučia v škole, môžu praktizovať aj doma s vlastne vyrobeným programátorom.
    3.) So samotnou doskou sa dá demonštrovať veľké množstvo aplikácií. Doska obsahuje signalizačné LED, ktoré indikujú stav portu C (6xLED) a stavy na zberniciach (USART, OneWire, I2C je napojený z portu C). Ďalej doska obsahuje tri tlačidlá vykonávajúce prerušenie INT, RTC pre demonštráciu práce s I2C a prevodník USART na USB s ktorým je možné komunikovať s počítačom.
    4.) Naprogramovanú dosku je možne aplikovať aj v nejakom zložitejšom systéme, keďže má externý napájací vstup v rozmedzí 9V až 12V. (Pri malom odoberanom prúde môže napájanie presiahnuť aj 24V. Záleží od typu použitého stabilizátora.)
  Z pedagogického hľadiska je cieľom tohto projektu naučiť študentov pracovať s dokumentáciou súčiastok (datasheet). Vedieť z nej vyčítať podstatné údaje pre spojazdnenie jednotlivých častí (modulov) a aplikovať ich praxi. Ďalším dôvodom je poukázať na využitie logických operácií zo strany programátora. Napríklad využitie ANDu ako masky. Niektorý žiaci dokonca tieto dosky osadzujú.

    Zapojenie
  Schéma zapojenia je na obrázku 1. Srdcom celej dosky je mikrokontróler AVR (IC2) v puzdre DIP28, ktorý je vložený do pätice. Ja som použil typ AtMega88, ale je možné použiť napríklad aj AtMega328. V MCU je povolený externý rezonátor Q2 o frekvencií 16Mhz. Predpokladal som prácu s interným A/D prevodníkom v 10 bit režime. Preto som zapojenie doplnil o napäťovú referenciu IC4 s napätím 4,096V. Spínačom S2.4 je možne referenciu pripojiť k MCU ako referenčné napätie AREF A/D prevodníka. Takto dokážeme prepočítať hodnotu z A/D prevodníka na reálne napätia namerané na príslušnom vstupe. Napríklad hodnota A/D prevodníka o veľkosti 1024 odpovedá vstupnému napätiu 4,096V (pomer 1:4).
Všetky vývody MCU sú vyvedene na kolíkové lišty (JP5, JP6, JP13, JP10) cez ochranné rezistory s odporom 270Ω. Port C je navyše obohatený o monitorovacie LED (LED14 až 19), ktoré je možne aktivovať spínačom S14.
Konektorom JP16 (Display interface) je možné k doske pripojiť grafický, alebo alfanumerický LCD displeja, ako napríklad LCD1602A. Komunikácia funguje na úrovni 4 bitov. Doska obsahuje potenciometer R52, ktorým je možné demonštrovať funkciu A/D prevodníka. Potenciometer sa pripojí na vstup ADC0 prepnutím spínača S13.1 do polohy ON. Spínačom S13.2 sa ku vstup ADC1 pripája analógový signál z konektora JP14. Rezistory R54 a R55 držia predpätie na analógovom vstupe na hodnote UREF/2 (v prípade externej referencie je to 2,048V). C24 je v zapojení väzobného kondenzátora. V schéme je tento kondenzátor zakreslený opačne, no na polarite nezáleží, keďže sa počíta s bipolárnym kondenzátorom. Vstup JP14 slúži na spracovanie signálu AC (striedavého prúdu), alebo audio signálu. Výstup audio signálu sa odvádza z konektora JP12. Tento výstup sa aktivuje zopnutím spínača S9.1 (PWM), ktorý pripája konektor JP12 cez filter (R47-49, C20-22) ku výstupu PB1 (OC1A). Správnu funkčnosť modulu PWM je možne kontrolovať pomocou signálky LED13. Vďaka nej (a osciloskopu, ktorý je pripojený na konektor JP3.2) môžeme študentom vysvetliť princíp PWM.
Spomínaná audio časť ma slúžiť pre aplikácie ako echo, delay linky a tak ďalej. Samozrejme je k tomu potrebné zariadenie, ktoré je mimo dosku. Ako koncový zosilňovač, vstupný predzosilňovač a tak ďalej.
Konektor JP11 slúži na pripojenie periférií s rozhraním OneWire. Konektor je prispôsobený tak, aby bolo možné do neho zasunúť DS1820 (digitálne tepelné čidlo). Aj tu je funkčnosť zbernice indikovaná LED (LED12). Spínač S9.2 (OneWire) pripojí túto zbernicu ku MCU na port PB0. Na zbernicu OneWire je pripojené aj tlačidlo S12. Tlačidla S10 a S11 sú cez spínače S8.1 (INT0) a S8.2 (INT1) pripojené na vstupy MCU, ktoré môžeme softvérovo ošetriť rutinou (prerušením INT).
Spínačom S7 (USART) sa k MCU pripája zbernica USART. Aj tu je komunikácia zbernice signalizovaná LED (LED10, LED11). Táto zbernica je vyvedená na konektor JP9, kde je možné pripojiť Bluetooth, WiFi, GPS, či GSM modul. K tejto zbernici možne pripojiť aj prevodník USART na USB (U1), ktorý umožňuje komunikáciu s počítačom. Prevodník môžeme ku zbernici USART pripojiť prepnutím spínača S4 do polohy ON.
Zvolil som prevodník MCP2221 [1], ktorý je cenovo dostupný a okrem prevodu USART je možne s ním komunikovať cez zbernicu I2C (SMBus). Tu treba dávať pozor, lebo prevodník vystupuje pri zbernici I2C ako Master! Pre pripojenie prevodníka ku zbernici I2C, je nutné prepnúť prepínač S3 do polohy ON.
Okrem týchto výstupov prevodník disponuje ešte dvoma univerzálnymi výstupmi, ktoré sú vyvedené na konektor JP15. Status prevodníka je indikovaný LED1 a LED2.
Zbernica I2C sa k MCU pripája pomocou spínača S6 (I2C). Aj táto zbernica je vyvedená na konektor JP8. Na zbernicu I2C je možné pripojiť prevodník USART/USB spínačom S3 a spínačom S5 obvod RTC (obvod reálneho času). Zvolil som lacnejšiu variantu obvodu RTC (U2) a to typ MCP79410. Podobne ako legenda DS1307, aj tento obvod obsahuje programovateľný výstup MFP (pin 7), na ktorý som pripojil signálku LED9. V prípade využívania tohto obvodu je potrebné pripojiť na svorkovnicu JP7 3V batériu na uchovanie dátumu a času v prípade odpojenie zdroja.
Rozhranie SPI je vyvedené na konektor JP10. Okrem troch hlavných signálov (MISO, MOSI, SCK) je na konektor vyvedený aj signál SS (PB2), ktorý môže slúžiť aj ako signál CS pri komunikáciou so sériovou SRAM, A/D a D/A prevodníkom a tak ďalej. Pomocou zbernice SPI komunikuje MCU s programátorom. Preto je na rozhranie SPI pripojený konektor SV1. Tento konektor spĺňa štandard AVR ISP, teda je možné do tohto konektoru napojiť aj profesionálny programátor.
Ja, ako vyučujúci, používam programátor Atmel ICE. Dokážem nim (pri AtMega88) používať nástroj Debager. To mi umožňuje na interaktívnej tabuli program stopnúť, a prechádzať so študentami jednotlivé inštrukcie krok po kroku.
K zbernici SPI je ďalej možné pripojiť programátor USBAsp a to prepnutím spínačov S1 (ISP) do polohy ON. Srdce programátora USBAsp je MCU (IC1) typu AtMega8 (alebo AtMega88). Všetko o tomto projekte nájdete na stránke www.fischl.de/usbasp [2]. Ako aj schému, firmware a ovládače pre windows.
Tu len dodám, že firmware sa do programátora vloží pomocou konektora JP4 (Self ISP Prog). Jedná prepojka (jumper) na celej doske je JP3 (SlowSCK). Ak je táto prepojka prepojená, programátor USBasp komunikuje s MCU pomaly. Používa sa to v prípade, ak je náš MCU nový a funguje na predvolenom vnútornom 1Mhz oscilátore. Po nastavení FUSE bitov na externý kryštál, je možné tento prepoj odstrániť. Stav programátora je signalizovaný LED3, 4 a 6.
Obidva USB vstupy (X1 a X2) sú typu USB - B. Paralelné k ním sú pripojené kolíkové lišty (JP1 a JP2). Pôvodne mala doska obsahovať ešte USB Hub. No jeden integrovaný obvod s touto funkciou stal oveľa viac ako USB hub aj s prívodným káblom [3] (obrázok USB hub). Preto som sa rozhodol, že odstrihnem dva vývody z USB Hubu a nahradím ich zdierkami do kolikovej lišty, ktoré sa pripoja práve na JP1 a JP2.
Politika napájania MCU je taktiež riešená cez malé mikrospínače. Spínačmi S2 je možné zvoliť zdroj napájania. Aktiváciou spínača S2.1 sa napájanie odoberá z konektora X1 (USB to USART). Ak spínač S2.2 prepneme do stavu ON, MCU bude napájané z konektora X2 (programátor USBasp). Spínačom S2.3 sa MCU bude napájať z externého napájacieho vstupu X3.

   Software
Dosku je možne naprogramovať bežným vývojovým prostredím Atmel Studio 7. Pre prácu s USBasp programátorom je nutné stiahnuť a nainštalovať balíček AVRDUDE. Okrem neho je nutné stiahnuť utilitu Zadig (Nahľad), ktorým sa nainštaluje požadovaný ovládač. Pre USBasp sa odporúča nainštalovať driver libusbK (Nahľad).
Po otvorení Atmel Studia klikneme v menu na Tools -> External Tools.. Následne sa objaví okno (Nahľad). Vytvoríme položku USBasp. Do kolónky Command (príkaz) pridáme meno súboru avrdude.exe aj s celou cestou. Do kolónky Arguments (parameter) vložíme tento reťazec: -c usbasp -p m8 -P usb -U flash:w:"$(OutDir)\Debug\$(TargetName).hex"
Nakoniec do kolónky Initial directory (pracovný adresár) vložíme $(ProjectDir).
V kolónke Arguments sa parameter m8 zamení podľa použitého MCU. Parameter m8 zodpovedá AtMega8. Pre AtTiny24 je parameter t24 a podobne.
Posledný krok je dostať ikonku na lištu. Stlačíme kdekoľvek na lište s pravým tlačidlom myši a vyberieme poslednú položku v menu Customize... Následne vo zobrazenom okne (Nahľad) sa prepneme na kartu Commands . Následne sa v nej preklikneme na ToolBar a vyberieme položku Device and Debugger. Nakoniec len dodáme položku External Commmand 1.



   [1] https://www.microchip.com/wwwproducts/en/mcp2221
   [2] https://www.fischl.de/usbasp/
   [3] https://www.tme.eu/sk/details/ak-ad-13/pocitacove-adaptery/akyga/
   [4] https://jlcpcb.com/


  Zoznam súčiastok:
    R1, R6 - 10k SMD 0805
    R2, R3 - 1k SMD 0805
    R4, R5 - 470R SMD 0805
    R7, R8 - 1k SMD 0805
    R9 - 2K2 SMD 0805
    R10, R11 - 68R SMD 0805
    R12 - R14 - 270R SMD 0805
    R15, R16 - 1k SMD 0805
    R17 - R31 - 270R SMD 0805
    R32 - R35 - 1k SMD 0805
    R36, R37, R46 - 4k7 SMD 0805
    R38, R39 - 1k SMD 0805
    R40 - R43 - 270R SMD 0805
    R44, R45, R47, R53 - R49 - 1K SMD 0805
    R50, R51, R56 - 270R SMD 0805
    R52 - 10k potenciometer RK09K1130AAU
    R54, R55 - 22K SMD 0805
    R57 - Trimer 20K
    R58 - R63 - 1K SMD 0805
    R64 - R66 - 120R SMD 0805
    C1 - 1uF Tantal
    C2, C3, C6, C7 - 22pF SMD 0805
    C4, C8, C10, C11 - 100nF SMD 0805
    C5, C9, C12 - 4u7
    C13 - C15 - 100nF SMD 0805
    C16 - 10pF SMD 0805
    C17 - 8p2 SMD 0805
    C18, C19, C23 - 100nF SMD 0805
    C20 - 220pF SMD 0805
    C21 - 470pF SMD 0805
    C22 - 1nF SMD 0805
    C24 - 4u7 bipolárny
    C25 - C27 - 100nF SMD 0805
    D1 - 1N4002
    D2 - BAT42
    DZ1, DZ2 - Zenerová dióda 3V6
    LED1 - LED19 - Ľubovoľná LED SMD 0805
    IC1 - AtMega8AU, alebo AtMega88AU
    IC2 - Pätica DIP28 a MCU rady AtMega x8/A/PU
    IC3 - 7805DT SMD
    IC4 - MCP1541
    U1 - MCP2221 SMD
    U2 - MCP79410 SMD
    Q1 - 12Mhz HC49 - S
    Q2 - 16Mhz HC49 - S
    Q1 - 32.768kHz - 85SMXR
    S1, S2 - Spínače DIP 4p - DS-04
    S3 - S9 - Spínače DIP 2p - DS-02
    S10 - S12 - Mikro tlačidlo
    S13, S14 - Spínače DIP 2p - DS-02
    X1, X2 - USB-B S-SR THT
    X3 - DG300-5.0 02P
    SV1 - IDC vidlica 2x3 (75869-331LF)
    JP1 - JP16 - Hrebienková koliková lišta