2014. december 3., szerda

Bevezetés

Valamikor a kilencvenes évek közepén a 8 bites Intel i8085 és a Zilog Z80 mikroprocesszor családdal végzett sokéves munka után ismerkedtem meg az akkor még Magyarországon nagyon újnak számító Microchip PIC mikrokontrollerekkel. Akkori barátommal és kollégámmal gépjármű fékhatás és lengéscsillapítottság mérő próbapadokhoz használtunk egyre komolyabb PIC-eket.

Pár évvel később, a kétezres évek legelején azután sikerült megismerkednem az ATMEL ATmega 8 bites mikrokontroller családjával is. Az ATmegák processzor magja, utasítás készlete, a könnyen megjegyezhető assembly mnemonikok, az egybefüggően címezhető (nem bankokra osztott) FLASH program memória, stb. lényegesen eltért az akkori PIC-ektől. Egyszóval az ATmega architektúra szoftveres szempontból valahogy sokkal jobban hasonlított az "igazi" mikroprocesszorokhoz, így nem volt nehéz megkedvelni.

Később azután jött az ATMEL xmega családja, ami azután feltette az i-re a pontot. Az ATMEL mérnökei itt már egy jóval átgondoltabb struktúrájú periféria készletet terveztek a kontrollerekbe. A chipek lábkiosztása is sokkal ügyesebb lett. Az, hogy a belső órajel rendszerrel akár 32MHz-en is lehet futtatni a processzor magot, külön előny akkor, ha nagyon gyors program végrehajtásra van szükség, nem beszélve az úgynevezett Event vagy a konfigurálható interrupt rendszerről, stb.

Az ATmegák programozásához az első években mindenféle fejlesztői eszközt kipróbáltam az AVR Studio assembly-jétől a BASCOM-ig és MikroC-ig, míg végül megállapodtam a viszonylag olcsó de szerintem igen kiváló CodeVisionAVR-nél, amely azóta (2004-től használom hivatalosan) rengeteget fejlődött. Mára akár már pluginként is futtatható az Atmel Studióban.

A CvAVR számomra egyik külön hasznos funkciója az úgynevezett CodeWizard, azaz "kódvarázsló", amellyel akár pár perc alatt el lehet készíteni egy program inicializáló kódját, beleértve például a grafikus LCD-ket is! Érdemes a 4K limites demót (eval verziót) letölteni már csak a kódvarázsló miatt is (remélem, még teljes értékűen működik az eval verzióban!). Egyébként tervezem, hogy a CodeVisionAVR-ről rövidesen egy részletesebb bemutatót írok (itt jegyzem meg, hogy semmilyen érdekeltségem nem fűződik a HPInfoTech céghez).

Mikrokontrolleres szoftverfejlesztéshez azonban előbb-utóbb szükség lesz egy általános célú, de jól konfigurálható hardver fejlesztői panelre is. Mivel már meguntam a perforált, drótozható és drótozandó próba panelekkel küzdeni minden egyes projekt előtt és alatt, ezért a nagyobb teljesítményű ATmega családhoz megvásároltam a Mikroelektronika cég BigAVR 6 fejlesztői paneljét, amellyel már sok feladatot sikerült megoldani. Ugyan ehhez is gyakran kell drótozott modellt készíteni, de arra már tényleg csak a lényeget kell ráépíteni, hisz a kapcsolók, LED-ek, stb. a BigAVR-en már eleve rajta vannak, nem is beszélve a soros portról, a 2x16 karakteres alfanumerikus LCD-ről (debugolásnál nagy segítség lehet), stb.

A program betöltéshez és hibakereséshez az ATMEL JTAGICE3-at használom, többé-kevésbé elégedetten. A "többé" talán érthető, a "kevésbé"-t pedig később majd részletezem.

Az utóbbi egy-két évben egyre gyakrabban vetődik fel a színes érintős TFT kijelzők használata. Ezt eddig még sikerült az FTDI EVE chippel megoldani, de evvel a chippel csak maximum 512x512 pixeles kijelző használható, ami az esetek egy részében már nem nagyon elég sem kijelző méretre (a gyakorlatban 4.3", 5.0" képátlóval)  sem felbontásra. Igaz, általános célú TFT driver chipekkel (pl. SSD1963) valamint az xmega család megfelelő tagjával, valamint a már sokat dicsért CodeVisionAVR fejlesztői rendszer profi változatával a probléma viszonylag egyszerűen megoldható, ha nem kell nagyobb sebesség. De általában kell.

Így merült fel többek között az Atmel 8 bites családja helyett az STmicroelectronics STM32F429-es ARM mikrokontrollere, amely hardveres framebufferrel és dedikált DMA-val is fel van szerelve. Az STemWin vagy a  uGFX elég jó támogatást ígér grafikus alkalmazások készítéséhez. Írom mindezt jelen pillanatban (2014.12.03) úgy, hogy még nem készítettem GUI-t az STM32F429-re, csak az STM32F429-DISCO-val játszottam pár órahosszát.

Az ARM világa számomra még új. Eddig lényegében csak az STM32F4xx és a Nuvoton NUC140 mikrokontrollereivel barátkoztam, szerencsére mindegyikhez beszerezhetők viszonylag olcsó tanuló panelek (a NUC140-hez például a ChipCAD-nél lehet hozzájutni). A NUC140-ről egy rövid, de hasznos ismertetőt írt Cserny István itt, ajánlom figyelmetekbe). Magyar nyelven egy egészen jó fórum működik a Hobbielektronikán.

ARM-ekhez szoftverfejlesztésre korábban a Coocox-ot, most az Em::Blocks nevű nagyon jó IDE-t használom.

Ami pedig ennek a blognak a célját illeti: szeretném megosztani veletek pár tapasztalatomat a főleg ATmegás dolgaimból. Ez azt jelenti, hogy nem csak magáról a mikrokontrollerről (vagy mikrokontrollerekről) lesz szó, hanem az "őt" körülvevő egyéb alkatrészekről, megoldásokról is, úgymint például digitális potméterek, LCD-k, TFT-k, kapcsolók, hőmérők, enkóderek, soros memóriák, stb. Továbbá a fejlesztés néhány eszközét is szeretném bemutatni, úgymint a sokat emlegetett CvAVR-t a kódolásban, a debugolást Atmel Studióval és JTAGICE3-mal vagy éppen soros port/LCD/LED/ stb. felhasználásával. Mivel jómagam már évek óta nem írtam egy sort sem assemblyben hanem csak C-ben, ezért a megoldások is zömmel C nyelvűek lesznek. A C mára olyannyira elterjedt a mikrók világában is, hogy a megismerése és alkalmazása komolyabb munkákban már elkerülhetetlen - szerintem.

Végezetül remélem, lesz pár hasznos dolog itt számotokra és nem lesz elpocsékolt az az idő, amit a blog olvasására szántok!