C suli 2 - Mi az az ATmega8?

2016-10-27

 

Az ábrán a digitális számítógép általános felépítése látható. Ezen fogjuk megnézni, hogyan működik a számítógép? Mint minden modell, ez is csak közelíti egy valóságot, esetünkben egy ATmega uC-t. Jobb oldalon látható egy fiókos szekrény, az a memória. Minden fióknak van egy száma, vagyis címe. Minden egyes fiókban 8 bit, azaz egy byte adat tárolható. Ez jelenthet egy számot, vagy jelenthet egy utasítást is. Bármennyire okosnak tűnnek a mai számítógépek, kizárólag számokkal képesek dolgozni. Az utasítások is meg vannak számozva, és azt kell a uC-nek mondani, hogy most hajtsd végre 0000101 direktívát, azután 01001001... A valóság mindig kicsit bonyolultabb, akit konkrétan érdekel, a uC leírásában megtalálható hogyan épülnek fel a gépi kódú utasítások. Tehát direktben, kettes számrendszerben is elkészíthetjük a vezérlő kódot, mint azt tették az első programozók, akik igen gyorsan rájöttek, hogy ez macerás. Mivel elég kevéssé vagyunk fogékony a kettes számrendszerbeli kódokra, kitalálták az Assembly nyelvet, ahol az utasításokat elnevezték (sbi, jmp...), azután már a számítógéppel fordították ezt le a gép által ehető bináris formátumra. Van itt egy Program Counter (program számláló) nevű egység, ami gondoskodik róla, hogy a fiókokat szép sorban nyitogassuk, és a tartalmukat megkapja a Control Unit (vezérlő egység), ami feldolgozza a parancsokat és gondoskodik a parancsok végrehajtásáról, a többi egység vezérléséről. Az Arithmetic Logic Unit (ALU, aritmetikai logika egység) végzi el a számításokat, például két szám összeadását.

Nem kell megcsinálni, de képzeljünk el, hogy bekötjük a szemünket, bedugjuk a fülünket, és zsebre dugjuk a kezeinket. Nem lesz kapcsolatunk a környezetünkkel, legalább is modellezzük. A uC is így gubbaszt önmagában az asztalunk közepén. Ahhoz, hogy a a kürülötte lévő világgal kapcsolatba kerüljön, ki kell egészítenünk érzékelőkkel, beavatkozó áramkörökkel, úgynevezett perifériákkal.

Sok dolgot a TTL (Tranzistor Tranzistor Logic) digitális integrált áramkör családnál kitaláltak már az 1960-as években, és a mai napig használjuk ezeket. A TTL áramkörök +5V (Vcc) tápfeszültségről működnek, és ez kényelmes ma is. Az Atmega8 kisebb feszültségről is képes működni. Mint már tudjuk a digitális áramköröknek, így az ATmega8 egy-egy kimeneti lábának is, két állapota van. A digitális áramköröket logikai áramköröknek is nevezzük, ezért ezeket pedig logikai szinteknek is nevezzük. A 0 állapotban a lábon 0,8V-nál kisebb feszültséget tudunk mérni. Ezt hívjuk 0, vagy L (Low, alacsony) szintnek. A másik állapot 1-nek, vagy H-nak (High, magas) szintnek nevezzük, és 2V-nál nagobb (normálisan Vcc, azaz 5V) feszültséget jelent. Ezek vizsgálatára a legjobb és legdrágább megoldás az oszcilloszkóp vagy a logikai analizátor. Viszont a legolcsóbb megoldás, ha a vizsgálandó lábra egy LED-et (Light Emitting Diode) kötünk. A LED, magyarúl világító dióda megfelelő polaritású áram hatására világít. Az izzólámpa is világít, de a LED gyorsabb és energia takarékosabb. A LED-del sorba kell kötni egy áramkorlátozó ellenállást. Az ATmega8 kimenő lábai 40mA árammal terhelhetők. Egy korszerű LED erős fénnyel világít már 5-10mA áram hatására. Az alábbi egyszerű kapcsolást alkalmazhatjuk egy kimenő láb figyelésére. A LED akkor fog világítani, amikor a kimenetet 1-be állítjuk. A LED mellé rajzoltam a bekötését is. A LED negatív lábát katódnak hívják, a rajzon egy kis vonal jelzi, míg az alkatrészen egy kis lecsapás.

Én nem ezt, hanem az alábbi, TTL világból eredő kapcsolást alkalmazom. A TTL áramköröknek úgynevezett totem pole (totem oszlop) kimenetük volt, ami a föld felé nagyobb áramot tudott kapcsolni. A LED akkor világít, amikor a kimenetet 0-ba kerül. Ezt nevezik negatív logikának, vagy L aktívnak.

A kimenetet már tudjuk figyelni, de valahogy jelzéseket is kell adjunk a uC-nek. Mivel digitális áramkörről van szó, kézenfekvőnek látszik egy olyan kapcsoló akalmazása, amivel 1-es és 0-ás logikai szintre tudjuk a bemenetet kapcsolni.

A gyakorlatban nem ezt szoktuk alkalmazni, mert a boltban azt látjuk, hogy ez a kapcsoló drágább, mint a nyomógomb. Azután amíg az érintkező átbillen, a bemenet határozatlan szinten lesz, a uC-től függ, hogy 0-nak, vagy 1-nek érzékeli. Ez nekünk csak egy pillanat, de jó ha tudjuk, ez alatt a uC csinál mondjuk 100000 összeadást. A gyakorlatban az alábbi kapcsolást szoktuk használni, mint tudjuk a valamikori TTL család alapján, és L aktív :), vagyis a gomb lenyomását a bemenet 0-nak fogja érzékelni.

Az ATmega családban lehetőségünk van belső felhúzó ellenállást kapcsolni a bemenetre, és akkor elhagyhatjuk a külső felhúzó ellenállást.

Nézzk a medvét, akarom mondani az IC-t (Integreted Circuit), magyarúl integrált áramkört. Ezen a képen egy erősen felnagyított ATmega8 uC látható. Jelenleg olyan 5-600 Ft az ára, ezen fogjuk a tudásunkat csíszolni. Ez egy kis komplett számítógép, amibe már csak tudást, akarom mondani a vezérlő programot kell betöltenünk.

Vázlatosan ez található ebban a kis aranyos ATmega8-ban.

Igen, ugye megtaláljuk az ALU-t, a Program Counter-t! A fejlesztők persze egy csomó egységgel kibővítették azt a fenti szép, egyszerű vázlatomat. Kezdetben nem kell tudnunk mit csinál minden kis koceka. Alapból a legtöbb dolog ki van kapcsolva, és majd nekünk kell programból azokat bekapcsolni, amit használni akarunk.

Az ATmega8 egyes lábait kizárólag a működtetéshez és programozásra fogjuk használni. Az áramköröknek, így a uC-nek is energiára van szüksége a működéshez. Ezt az elektronikában tápáramnak/tápfeszültségnek, egészen röviden tápnak nevezzük. Egy ATmega8 4,5V..5,5V közötti tápról képes üzemelni, egy Atmega8L 2,7V..5,5V-ról. A VCC jelü lábakra +5V-ot fogunk kötni, a GND-re (Ground) pedig a földet, vagyis 0V-ot. Ahogy az evezős gályákon egy dobbal biztosították, hogy ne össze-vissza kalimpáljanak, a uC-nél egy úgynevezett órajelhez szinkronizálják a belső áramkörök működését. Ez minnél magasabb frekvenciájú, a uC annál gyorsabban dolgozik. Az ATmega8 kaphat külső oszcillátorról (rezonátor egység) is órajelet, de többféle beépített oszcillátort is tartalmaz. Ha szükség van nagy pontosságra, akkor a két XTAL lábakra kvarcot (quarc) kötünk. Kevésbé pontos, de használnak kerámia rezonátort is. Ha nem fontos a nagy pontosság, mondjuk éppen nem órát építünk, akkor általában a belső oszcillátort használjuk. Fontos szerepe van a RESET lábnak, ha erre 0-t kapcsolva újraindítható a betöltött program. A felirat fölötti vonal azt jelzi, hogy ez a bemenet L aktív, vagyis a 0 szint aktíválja. Az GND, RESET, SCK, MISO, MOSI lábakon keresztül történik a programozás.

Az ATmega8 legtöbb lábát szabadon beállíthatjuk, hogy bemenet vagy kimenet legyen. Ezeket port lábaknak nevezzük, és B, C, D port regiszterekbe vannak csoportosítva. Alaphelyzetben minden port láb bemenetre van állítva, és a kimeneti lábakat majd programból kell kimentre állítanunk.

A két ábrát összevetve látjuk, hogy egyes lábaknak többféle szerepe lehet, attól függően mit állítunk be. Általában ezt a kiosztást fogjuk használni. Késöbb majd megismerkedünk további speciális funkciókkal is.