Práca s portami MCU bez Arduino knižníc

Úloha

  1. Preštudujte si popis činnosti portov datasheet ATMEGA328
  2. Vytvorte jednotlivé vzory blikania z minulého cvičenia bez použitia funkcií pinMode() a digitalWrite()

Teória

Ako prvé si z katalógového listu analyzujeme obrázok 14-1 Takto vyzerá základné zapojenie jedného digitálneho vývodu MCU. Čierna šipka pri diode D1 a tranzistore predstavuje schématickú značku napájacieho napätie (+5V). Vidíme tu ako je zrealizovaný PULL UP obvod. Je to jednoducho rezistor ktorého veľkosť je mezdi 20-50kΩ (ako sa podarí vyrobiť). Tento rezistor je možné tranzistorom T pripojiť k napájaciemu napätiu a docieliť tak pullup funkciu.
Na základe znalostí z elektrotechniky z 2 ročníka by ste mali vedieť odpovedať na nasledovné otázky:
  1. Aký prúd prúd potečie diodou D1, D2 ak na vývode bude pripojené napätie 1V?
  2. Aký prúd prúd potečie diodou D1, D2 ak na vývode bude pripojené napätie 5V?
  3. Ktorou diodou potečie prúd ak na vývode bude pripojené napätie 6V?
  4. Ktorou diodou potečie prúd ak na vývode bude pripojené napätie -1V?
  5. K čomu slúžia diody D1 a D2

Teraz sa pozrieme na obrázok 14-2 Už to začína byť trochu komplikovanejšie, ale ak si to rodelíme na menšie celky dá sa to pochopiť so znalosťami ktoré poznáte z predmetu elektrotechnika. Trochu mätúce asi budú schématické značky. Firma ktorá teraz ATMEGA zastrešuje americká, to ale nič neznamená. Navrhovali to "nórsky študenti" a kto kreslil logické diagramy je otázka. Každopádne sú tu ale logické členy kreslené spôsobom ako sa to používa v amerike.

Vstupná časť

Začnime poppisom vstupnej časti. Vidíme že signál z pinu je privedený na nejakú divnú vec ktorá je ovladaná signálom SLEEP. Tento signál je aktívny keď má byť MCU uspatý. Tu slúži na to aby odpojil vonkajšie signály od MCU aby ho v spánku nič nerušilo.

Potom nasleduje tranzistor ktorý je tiež ovládaný signálom SLEEP a privádza tam mulové napätie. Je to opäť preto, aby spiace MCU nič nerušilo.

Nasleduje špeciélne označený zosilňovač značkou hysterézie. Takto sa označuje tzv Schmittov klopný obvod Jeho účelom je tvarovať analógový signál na digitálny. Viac o tomto obvode si môžete prečítať na odkaze.

Potom sa už vytvarvaný digitálny signál dostáva na vstup prvého z dvojice klopných obvodov typu D. Ak rozumiete funkcii D klopného obvodu tak vidíte že vstupný sygnál sa synchronizuje s hodinovými impulzami MCU. pritom sa signál oneskorí o jeden hodinový impulz.
Celé je to ako keby malý posuvný register ktorý posúva signál zo vstupu na výstup na nábežnú aj dobežnú hranu hodinového signálu

Nakonci je už len obyčajné hradlo ktoré je povoľované/blokované označeným RPx Tento signál sa aktivuje v prípade že chce MCU prečítať logickú hodnotu na danom pine.

Výstupná časť

Výstupnú časť budem tiež popisovať zľava doprava, i keď je to opačný smer ako postupuje signál. Úplne nakonci máme obvod ktorý umožnuje vykonávať tzv. pull-up funkciu. Skladá sa z rezistora o hodnote okolo 40kΩ a tranzistora ktorý je pripojený k napájaciemu napätiu. Tento tranzistor je spínaný logickou nulou. Vtedy je pin pripojený cez tento rezistor k napájaciemu napätiu.
Robí sa to vtedy keď používame pin ako vstup ale zvonka sa tam v niektorých situáciách neprivádza žiadne napätie. Nožno viete z elektroniky, že nepripojený logický vstup v obvode je problematická vec a že by sa jej mal konštruktér zásadne vyhnúť. Typicky táto situácia vzikne ak na pin pripojíme tlačítko proti zemi. Ak je tlačítko nestisnuté na vstupe by sme nemali žiadne definované napätie a chytali by sme tak to čo príde z "luftu". Teda to čo sa naindukuje vďaka elektromagnetickým vlnám v okolí. Preto ak zapneme pull-up rezistor, tento bezproblémovo udrží napätie blízke napájaciemu - čo vyhodntíme ako logickú jednotku. Pri stalčení tlačítka obvod skratujeme k zemi. Prúd bude rezistorom obmedzený na malú hodnotu a napätie na pine bude nulové, čo vyhodnotíme ako logickú nulu.

Ďalším prvkom ktorý vidíme je výstupný zosilňovač. Ten výkonovo zosilní digitálny signál tak že môžeme z výstupu odoberať prúd až 60mA. Okrem datového vstupu má zosilňovač aj riadiaci vstup označovaný ako Enable týmto vstupom sa povoľuje činnosť zosilňovača. Ak je povolený prenáša signál zo vstupu na výstup. Ak je zakázaný tak sa výstup uvedie do stavy vysokej impedancie (vypnú sa oba tranzistory). V takomto prípadne sa chová pin iba ako vstup.
Ak je zosilňovač povolený, stále môžeme čítať hodnotu ktorú posielame von a prípadne môžeme detekovať chybu ak prečítame opačnú hodnotu ako sme vyslali.

Povoľovací vstup výstupného zosilňovača je riadený z klopného obvodu D označeného ako DDxn a vstup výstupného zosilňovača je riadený z klopného obvodu ocnačeného ako PORTxn Do týchto klopných obvodov je možné zapísať informáciu z internej datovej zbernice MCU. O tom do ktorého obvodu sa údaj zapíše rozhoduje signál WDx a WPx.

A to je čo sa týka obvodovej stránky veci všetko. Zjednodušene sa dá povedať že je to vhodne prepojených zopár hradiel a klopných obvodov.

Keď už pomerne detalne poznáme logické zapojenie jedného pinu môžeme informácie dať do jednej prehľadnej tabuľky
DDxn PORTxn I/O Pull-up Comment
0 0 Vstup nie Trojstavový (vysoká impedancia)
0 1 Vstup áno Z pinu potečie malý prúd ak ho externý obvod stiahne k nule
1 0 výstup nie vývod je tranzistorom pripojený k nule
1 1 výstup nie vývod je tranzistorom pripojený k napájaciemu napätiu

Táto tabuľka vznikla preložením a zjednodušením tabuľky 14-1

Postup