Jedna věc je na integrovaných obvodech mikrokontroléru skvělá, jsou k dispozici téměř ve všech částech světa a v maloobchodech s elektronikou.
Úvod
Mikroprocesorová zařízení se zásadně používají v aplikacích zahrnujících hodnocení okolního prostředí a v podobné elektronice.
Tato zařízení se používají k zobrazování určitých parametrů, v aplikacích řízení motorů, LED osvětlení, senzorech různých typů, jako je senzor náklonu, akcelerometr, měřič rychlosti, datalogery, regulátory teploty, klávesnice atd.
Primární porozumění týkající se mikrokontrolérů lze získat odkazem na mikrokontrolér AVR Amega32, který je tak pokročilý, že se někdy nazývá počítač v čipu.
Toto zařízení je přiřazeno k provádění řady příkazů k vytvoření programu.
Jazyk programu, který byste zde viděli, je C ++. V tomto kurzu se tento jazyk naučíte hlouběji.
Pokud jde o MCU, získáte možnost mít kontrolu a konfiguraci všech jejích vývodů.
Pokud vás to už trochu unavuje, jen chlad, protože to není vůbec nic složitého, budete postupovat napříč všemi aspekty stabilně, ale pevně.
V čipu MCU lze všechny piny kromě Vdd a Vss, které jsou napájecími piny čipu, přiřadit s exkluzivním označením.
Podrobnosti o zapojení
Pokud se podíváte na čip shora, najdete malý trojúhelníkový zářez, který označuje počáteční bod, odkud začínají vývody, počítá, že právě pod tímto zářezem začíná kolík č. 1 čipu.
Počínaje tímto kolíkem najdete 20 kolíků na spodní straně na této straně (vlevo) a dalších 20 kolíků na druhé straně (vpravo), pokračujících zdola nahoru na pravé straně.
Prvních 8 pinů počínaje zářezem je PBO-7, které tvoří indexové piny IC, protože všechny programy zde začínají indexem nula.
Výše uvedená řada pinů se nazývá PORT B, zatímco existují další identické sady portů přiřazených A až D.
Tyto porty lze přiřadit k přijímání a rozpoznávání přiváděných dat s názvem INPUT a také k přenosu dat v určité specifikované formě s názvem OUTPUT.
Dva z kolíků, které přicházejí do obecné kategorie, jsou kolíky (+) / (-), které se také označují jako Vdd a GND.
Jeden kolík z PORT D (PDO-6) je vidět na levé straně čipu ve spodní části.
PD7, který je pinem č. 7 PORTU D, lze vysledovat samostatně stojící a zahájit sérii vývodů na pravé straně.
Nyní se pohybuje od pravé strany čipu, kde končí PORT D, PORT C začíná počítat nahoru v pořadí.
Ty přispívají k mnoha zajímavým pinům MCU přímo z analogových na digitální.
Tyto piny jsou navrženy tak, aby se staly snímacími vstupy pro detekci mnoha parametrů prostřednictvím externě konfigurovaných analogových stupňů obvodu.
Výše uvedené piny tvoří PORT A.
Analogově-digitální převod přes výše uvedené piny lze pochopit pomocí příkladu, kde se analogová úroveň teploty detekovaná pomocí běžného senzoru, jako je termister, aplikuje na jeden z pinů PORT A, který je snadno přijímán a převodník MCU k vytvoření digitálního odečtu od nuly do 255 stupňů F (8bitový údaj, který lze upgradovat pro dosažení 10bitového výstupu).
Dalším rysem, který by mohl být navíc svědkem v MCU, je dostupný programovací prostor nebo paměť, která určuje prostor pro proměnné a program určený pro mikrokontrolér.
Kromě toho mají MCU přiřazené vestavěné hodiny pro počítání příslušných parametrů.
Funkce hodin umožňuje MCU aplikovat se na mnoho různých procesů počítání, které mohou být rychlé v rozsahu mikrosekund v závislosti na specifikaci konkrétního zařízení a také by mohly být pomalejší v jakémkoli požadovaném rozsahu.
Možná jste do určité míry pochopili koncept mikrokontroléru a pokud jde o jeho porty a piny.
Jak vytvořit SPI konektor z programátoru do mikrokontroléru
Nyní je čas jít trochu hlouběji do tématu a prozkoumat svět programování.
To znamená, že než se pustíme do procedury načítání programu do čipu, musíme najít správný způsob integrace konektoru SPI (Serial Peripheral Interface) s MCU.
I po tomto však nemůžeme jen zasunout SPI do pinů MCU, že? Rovněž nemůžeme dovolit, aby se prodloužené vodiče ze SPI přímo zasunuly do desky na chléb. To může také způsobit nesprávné nastavení vodičů připojených k nesprávným kolíkům, které způsobí špatné připojení.
Proto, abychom učinili věci naprosto bezvadnými, provádíme procedury na malém veroboardu, kde dostaneme pájené kovové spojovací kolíky, které se také nazývají „hlavička“. Tyto kolíky záhlaví lze nyní použít pro připojení s konektorem SPI. Spojení z tohoto záhlaví lze ukončit na další paralelní kolíky záhlaví, které lze použít pro připojení na prkénko.
Výše uvedená sestava tedy nyní tvoří pohodlnou a spolehlivou mezilehlou propojovací platformu pro SPI s MCU.
Až teď vše vypadá pěkně a perfektně, pojďme tedy vydělat na programátorovi, který je vyžadován mezi vaším počítačem a MCU.
Mohla by existovat řada společností, které tyto programátorské jednotky vyrábějí a prodávají, takže jejich obstarání by pro vás neměl být problém, například Adafruit Industries, USBtinyISP nebo Sparkfun atd.
Několik z nich by mohlo vypadat úplně jinak než běžné typy, ale v zásadě mají všechno stejné a dodržují standardní programovací pravidla a mohou být použity jako rozhraní mezi vaším počítačem a mikrokontrolérem AVR.
Ujistěte se však, že pokud si myslíte, že používáte nějaký jiný MCU a ne AVR Atmega32, možná budete muset zkontrolovat odpovídající kompatibilní programátor pro tento konkrétní MCU čip.
Lze si všimnout, že poměrně málo z těchto programátorů používá identické ovladače, o něco se musí postarat a my se o tom dovíme více v následujících kapitolách.
Propojení vašeho počítače s čipem mikrokontroléru je skutečně základní a rádi byste věděli, jak jednoduché je pro to řízení zapotřebí. Pojďme tedy hned stisknout tlačítko J.
Vytvoření výše vysvětlené desky rozhraní SPI není obtížné, je to všechno o tom, aby vaše páječka fungovala přes všechna připojení přes zobrazené dvě řady záhlaví kolíků na malé desce pro všeobecné použití.
Obrázek výše ukazuje podrobnosti o připojení, které byste museli dodržovat při propojování vodičů mezi sběrači.
Aby to bylo ještě jednodušší, projdeme si následující podrobnosti připojení stejné podle výše uvedeného obrázku:
Pin SPI začínající zleva nahoře jde do „Master IN, Slave OUT“ (MISO)
Pin SPI od středu vlevo se připojuje k hodinovému kolíku (SCK)
Pin SPI vlevo dole se připojí k Reset. (O tomto pinu se podrobně dozvíme v následujících výukách)
SPI vztahující se k pravému dolnímu konci se spojuje s kolíkem GND MCU, GND se týká kolíku, který tvoří nulové napájecí vedení nebo zápornou (relativní) kolejnici napájení.
SPI zakončená z prostředního pravého záhlaví je propojena s pinem „Master Out, Slave IN“ (MOSI) na MCU.
SPI vycházející z pravého horního konektoru je propojen s (+) MCU, což je zjevně Vdd nebo kladný napájecí kolík MCU.
A je to.
Připojte dva konektory, jak je vysvětleno, a vaše deska rozhraní SPI je připravena na požadované akce.
Další nápovědu můžete najít na obrázku, který je zobrazen výše. Vaše finální deska rozhraní by měla vypadat takto poté, co budou všechna zapojení vodičů správně provedena pomocí výše uvedené diskuse.
Doufám, že jste již zkonstruovali rozhraní SPI, jak je vysvětleno v předchozím tutoriálu, a nyní je čas zajistit, aby náš počítač přijal programátora, který potřebujeme integrovat mezi PC a MCU.
Vytvoření jednoduchého programovacího kódu pro MCU
Vezmeme si jednotku USBTinyISP dostupnou od Sparkfunu pro propojení počítače s mikrokontrolérem.
Víme, že jakýkoli operační systém počítače, jako je Windows, bude vyžadovat ovladače, bez nichž by bylo zbytečné do počítače cokoli načítat, takže náš programátor bude potřebovat ovladače, aby se mohl načíst do vašeho počítače.
Podívejme se na postupy potřebné pro instalaci ovladačů do vašeho operačního systému, zde si vezmeme příklad operačního systému Windows 7 s 32bitovými nebo 64bitovými specifikacemi.
Otevřete web sparkfun.com a klikněte na stránku kapesního programátoru AVR. Odkaz lze snadno zobrazit na stránce.
Dále najděte pod dokumenty „ovladač Windows“ a jednoduše na něj klikněte.
Tím získáte soubor pocketprog-driver.zip ve vašem počítači.
Přejděte do počítače, najděte umístění pro stažení a stažený soubor jednoduše rozbalte do složky.
V případě, že váš počítač má 64bitový operační systém, musíte provést několik dalších kroků, jak je uvedeno níže, u 32bitového operačního systému můžete zahájit instalaci přímo z rozbaleného souboru.
Pro 64bitové postupujte takto, pro 32bitové jednoduše ignorujte:
Google „libusb sourceforge“ a klikněte na nejnovější verzi tohoto odkazu.
Narazili byste na několik dalších souborů, měli byste však zájem najít soubor bib, tj. Libusb-win32-bin - #. #. #. #. Zip
Nyní přejděte a najděte toto umístění pro stahování ve svém počítači, rozbalte jej a uložte do jedné ze složek.
V této složce přejděte na složku bin a pokračujte do složky amd64.
Zde byste viděli několik složek jako: ghcalled libusb0.dll a libusb0.sys.
Chcete je přejmenovat jako: libusb0_x64.dll a libusb0_x64.sys.
Nyní budete muset zkopírovat výše uvedené soubory do složky pocketprog-driver, jednoduše přepsat soubory ve stávající verzi.
Chcete-li nainstalovat výše uvedené ovladače, měla by vás zajímat následující metoda, která je svým způsobem spíše nekonvenční:
Je to režim „přidat starší hardware“.
Klikněte na „Nabídka Start“
Poté pokračujte kliknutím pravým tlačítkem na „počítač“
Klikněte na „Spravovat“ a nakonec klikněte na „Správce zařízení“
Dále v nabídce vyberte možnost „Přidat starší hardware“
Pokračujte stisknutím tlačítka „další“, dokud se průvodce nevloží
Postupujte podle pokynů a klikněte na „Nainstalovat hardware, který byste si měli vybrat ze seznamu Upřesnit“. Tím se ikona přepínače zobrazí v konkrétním výběru. Je to vlastně ovládací tlačítko systému Windows, které by nyní vypadalo jako malý kruh, který má uvnitř kulatý modrý pilník.
Nyní jednoduše klikněte na „Další“
Zobrazí se nabídka „Zobrazit všechna zařízení“, na kterou budete muset kliknout.
Poté pokračujte kliknutím na ikonu „Z diskety“.
S pomocí ikony „Procházet“ přejděte do umístění složky pocketprog-driver. Pokud jste výběr provedli správně, vizualizovali byste soubor pocketprog.inf umístěný v konkrétní složce.
Dvakrát klikněte na tento soubor a určitě byste byli svědky instalace ovladače do vašeho PC.
Znovu a ven !! Pojďme s naším dalším tutoriálem na další stránce.
Nyní jste možná nainstalovali požadovaný software a vytvořili rozhraní SPI.
Jak přenést program do čipu mikrokontroléru
Další krok bude vyžadovat několik komponent, jako je prkénko, LED a vypočítaný rezistor pro zamýšlenou aplikaci.
V této části se naučíme testovací metodu programátoru a potvrdíme instalaci příslušných ovladačů a softwaru.
Abychom ověřili, zda byly ovladače a software nainstalovány správně, implementujeme jednoduchý program známý jako avrdude.
AVRdude je program spojený s nejnovější instalací WinAVR, bez kterého není možný skutečný přenos souboru do MCU.
Tento program je souborový formát .hex, který je pro požadované spuštění v podstatě srozumitelný MCU.
V případě, že ověření nebude úspěšné, programátor nebude schopen provést přenos souboru.
Podívejme se rychle, jak můžeme implementovat testovací postup pomocí následujících pokynů:
Otevřete výzvu systému DOS (Disk operating system) kliknutím na „nabídku Start“ a zadáním cmd.exe do daného vyhledávacího pole.
Nyní lze provést AVRdude jednoduše zadáním avrdude –c usbtiny –p m32 přes výzvu systému DOS. Jakmile to bude implementováno, DOS okamžitě potvrdí, zda bylo připojení úspěšné.
Ve výše uvedeném příkazu je „-c“ oznamovací příznak, který obsahuje specifikaci parametru programátoru „usbtiny“, zatímco značka „-p“ identifikuje zařízení mikrokontroléru („m32 označující Atmega32).
V případě, že jste použili jiný MCU, budete muset zahrnout příslušné předpony pro implementaci.
Jakmile je výše uvedený postup dokončen, můžete do příkazového řádku systému DOS napsat „exit“ a tím se přesunete z okna.
Pokud se vážně zajímáte o skutečné podrobnosti programování, měli bychom nejprve pájet a zkonstruovat externí analogový obvod LED, přes který by mohl být program implementován, protože pokud neexistuje systém, který by potvrzoval odezvu od MCU, programování a provoz mikrokontroléru by byl docela nesmyslný.
Výroba desky LED je velmi jednoduchá, jde o pájení dvou vývodů LED přes kus veroboardu a propojení rezistoru s jedním z vývodů LED. Úlohou této LED je omezit pouze proud na LED tak, aby nespálil kvůli přepětí a proudu z výstupu MCU.
Hodnotu rezistoru lze vypočítat pomocí následujícího jednoduchého vzorce:
R = (Ub - LEDfwd) / I
Kde Ub je napájecí napětí, LEDfwd je optimální provozní napětí použité LED a I je jeho optimální zesilovač.
Předpokládejme, že používáme ČERVENOU LED, která má dopředné napětí LED = 2,5 V a proud I = 20 mA, lze výše uvedenou rovnici vyřešit takto:
Protože napětí z MCU by bylo 5V, lze jej vyjádřit jako:
R = (5 - 2,5) /. 02 = 125 ohmů, ¼ watt, nejbližší hodnota je 120 ohmů.
Nyní máme LED, rezistor 120 ohmů a veroboard, jednoduše propojíme výše uvedené komponenty, jak je uvedeno na schématu, s mikrokontrolérem.
Jakmile je to provedeno, může být MCU naprogramován na zamýšlenou odezvu na výše uvedené LED.
Dále programování MCU.
Aby mohl mikrokontrolér provádět některé smysluplné implementace, je nutné do MCU zapsat příslušné pokyny.
Jak nainstalovat programovací prostředí a prozkoumat WinAVR
K tomu bychom pravděpodobně mohli použít náš vlastní „textový editor“ v našem PC, i když možná bychom ocenili použití profesionálnějšího „programovacího prostředí“ místo běžného textového editoru, jednoduché, protože tento přístup vám umožní užít si vestavěné zajímavé funkce v tomto balíčku „programovacího prostředí“.
Podporovalo by vytváření a úpravy programů v různých jazycích a také jejich kompilaci do doručitelného režimu snadno srozumitelného a akceptovaného čipem mikrokontroléru.
Nakonec by to bylo podporováno WinAVR a přeneseno do příslušného čipu MCU.
WinAVR může být také vybaven k provádění mnoha dalších operací, jako je odstraňování problémů s programy a varování před možnou syntaxí a kompilací chyb a chyb. O tom budeme diskutovat v našich pozdějších tutoriálech.
Kurz instalace WinAVR by byl extrémně rychlý a pohotový. Pojďme se ponořit do podrobností pomocí následujících bodů:
Budete si muset stáhnout nejnovější verze ze složky Forge Files zdroje WinAVR. Na jeho oficiálním webu byste narazili na některé užitečné informace týkající se tohoto stahování.
Budete vyzváni k zadání bezpečnostního dotazu, abyste mohli odpovědět, pokud chcete, aby se stahování uskutečnilo, toto je dotaz, soubor, který se má stáhnout, je spustitelný soubor.
Stáhněte si soubor a kliknutím na něj zahajte proces spuštění. Nechte instalaci začít.
Tento proces vás provede několika odpovědnými otázkami, abyste mohli instalaci zefektivnit podle svého pohodlí. Mnoho z nich byste chtěli ignorovat do jejich výchozích forem, bylo by na vás, abyste vybrali ty, které jsou podle vás pro akce nejvhodnější.
Až dosud byste našli vše docela normální a snadné a našli jste několik možností, jak se na vás vrhá nabídka Start. Žádné obavy, pouze některé z nich by skutečně používaly pouze jeden z tem s názvem „programátorský poznámkový blok“.
Jakmile kliknete na tuto ikonu, spustí se uživatelské rozhraní, abyste mohli použít psaní programů (například vytváření a úpravy). Také byste byli svědky programu skládajícího se z příkazů nabídky, které vám pomohou sestavit kódy a vložit je do mikrokontroléru.
Základní úlohou výše uvedeného poznámkového bloku programátoru je transformovat lidsky čitelný kód, který byste psali, do řady instrukcí srozumitelných pouze pro MCU.
Další výukový program se bude věnovat testování výše uvedeného programátoru, abychom si mohli být jisti jeho kompatibilitou s Windows a tím, zda perfektně „potřásá rukou“ s vaším mikrokontrolérem IC.
Jak naprogramovat MCU pro zapnutí LED
Jakmile se to potvrdí, pokračujeme vytvořením malého kódu „nedělat nic“, jen abychom se ujistili, že postup přenosu kódu nenarazí na chyby.
Samozřejmě jsme nyní připraveni implementovat náš první program uvnitř MCU, ale předtím by bylo zajímavé rychle shrnout, co jsme udělali v průběhu našich předchozích tutoriálů:
Mikrokontrolér AVR Atmel jsme pořídili podle naší požadované specifikace, zde jsme pro ilustraci použili ATMega32. Dále jsme se dozvěděli o základech mikrokontroléru a programátorské jednotce, která je zodpovědná za přenos programu do čipu MCU.
Dále jsme vytvořili konektor rozhraní SP, který je nezbytný, aby mohl být váš počítač propojen s mikrokontrolérem pro programovací akce.
Poté jsme potvrdili, zda byly ovladače v počítači správně nainstalovány pro 32bitový i 64bitový operační systém.
Dále jsme nainstalovali programovací prostředí s názvem Win AVR pro usnadnění snadného přenosu reklamního přenosu kódů do mikrokontroléru, následované implementací avrdudy pro ověření programátoru s vaším PC a propojeným mikrokontrolérem.
Nakonec jsme v předchozí kapitole dokončili budování obvodu LED / rezistorů a propojili jej s příslušnými výstupy MCU.
To je opravdu spousta práce, přesto je čas vyrazit hned do skutečných programovacích věcí!
Nejprve bychom chtěli rozdělit mikrokontrolér do tří kategorií, což by naše porozumění hodně zjednodušilo:
Řízení, detekce a komunikace
Bylo by zajímavé vědět, že výše uvedené funkce lze programovat mnoha různými způsoby.
V našem prvním programu bychom se pokusili přikázat mikrokontroléru „ovládat“ externí parametr, ano máte pravdu, byla by to LED, kterou jsme nedávno postavili.
Abych byl přesný, řekneme MCU, aby rozsvítilo připojenou LED, jo, vím, že to vypadá docela primitivně, ale počáteční fáze musí být vždy snadná.
Pohyb vpřed se současnou úlohou, díky kterému je ovládání MCU LED skutečně jednoduché:
Z tohoto důvodu dáváme pokyn kolíku # 0 na PORTU B, aby vyrobil požadovaných 5 V pro LED.
Připomeňme si z předchozího tutoriálu, že jsme připojili anodu LED k výše uvedenému pinu MCU.
K tomuto kolíku MCU je třeba adresovat dvě základní věci: 1) výstup a 2) 5 voltů
Naučíme se způsob, jakým můžeme instruovat konkrétní pin, aby se stal výstupem MCU.
Jakmile je nastaven jako výstup z čipu, můžeme jej podle potřeby nastavit jako „vysoký“ (5 V) nebo „nízký“ (0 V).
Vzhledem k tomu, že jakýkoli logický obvod, jako je MCU, kolíky by mohly být vadné jako výstup nebo vstup a mohly by být konfigurovány tak, aby vytvářely buď logickou vysokou nebo logickou nízkou hodnotu, pouze je třeba přiřadit kolíky, aby byly logické vysoké nebo logické nízké , neexistují žádné přechodné nebo nedefinované stavy jiné než tyto dva stavy pro mikrokontroléry nebo pro jakýkoli digitální IC. Totéž platí pro každý pin MCU.
Pokud jde o přiřazení vstupních a výstupních pinů, vstupy by byly umístěny tak, aby přijímaly signály z externích analogových stupňů, zatímco výstupy by byly odpovědné za jejich interpretaci do specifikovaných logických stavů nebo frekvence.
Ačkoli výše uvedená přiřazení lze provést mnoha různými metodami, kvůli jednoduchosti bychom o jednom z nich diskutovali. Je však třeba poznamenat, že i když ten, který by byl právě prezentován, vypadá snadno a zajímavě, není tak životaschopný a není doporučeným typem pro všechny aplikace MCU, ze stejného důvodu byste se později v kurzu seznámili s populárnějšími programovacími metodami. . Tyto programy umožní přiřazení pouze požadovaných pinů podle specifikací, aniž by to ovlivnilo další sousední, které by mohly být již přiřazeny k provádění některých dalších funkcí.
Právě teď se však nebudeme tolik trápit s ostatními piny a budeme používat pouze relevantní piny, které nás zajímají, abychom se vyhnuli komplikacím do určité míry.
Pro přiřazení pinu jako výstupu musíme použít Data Direction Register (DDR). Pokud vás zajímá, co zde znamená registr, je to prostě prostor v MCU, který umožňuje mikrokontroléru reagovat určitým způsobem.
Pomocí DDR můžeme nastavit pin tak, aby odesílal data jako „výstup“, nebo přijímal data ve formě „vstupu“.
Můžete však být zmateni ohledně toho slova, co to znamená? Data přidávají ke kolíkům třetí rozměr, kterému lze přiřadit, aby byl nepřetržitě logický nula (0 V) nebo logicky vysoký (5 V), ale co signály, které se mohou rychle měnit, například frekvence pulzů. Frekvence by byla doprovázena vysokou a nízkou logikou (5 V a 0 V) kmitající s určitými specifikovanými intervaly nebo obdobími, takže se stává časově orientovanou a může být upravena s ohledem na čas, proto identifikujeme jako „data“, což znamená parametr, který označuje funkce ve vztahu k jiné funkci (logické stavy a čas).
Jednou z metod přiřazení pin0 jako výstupu je napsání následujícího kódu:
DDRB = 0b00000001
Ve výše uvedeném programu DDRB znamená Data Direction Register pro PORT B 0b dává instrukci kompilátoru ohledně následujícího binárního výrazu čísla, zatímco „1“ na konci výrazu označuje pozici pin0, tj. Jeho umístění ve formuláři prvního kolíku PORTU B.
Pokud si pamatujete, dozvěděli jsme se, že PORT B s ním spojuje 8 pinů (od 0 do pin7), a pokud si všimnete, že výše uvedený kód má také 8 číslic, což znamená, že každá číslice znamená těchto 8 pinů PORT B.
Dalším postupem by bylo přiřadit tomuto kolíku 5V (pin0). Princip fungování je opět shodný s DDR, jak je uvedeno výše, vyjádřený pomocí následujícího binárního kódu:
PORTB = 0b00000001
Jak je vidět, jediný rozdíl mezi výše uvedeným a dřívějším kódem je ten, že v tomto kódu jsme využili registr PORT. Tento registr konkrétně zpracovává přiřazení pinů konkrétního portu, pro který byl umístěn uvnitř MCU. Umožňuje nám tedy přiřadit logiku skutečných dat (0 nebo 1) pro tyto vývody.
Nyní bychom mohli mít zájem diskutovat o některých ohledně přibližných podrobností o našem programu. Jelikož víme, že všechny programy vyžadují určitý prostor k zahájení provádění, lze to přirovnat k kuchaři, který zná všechny ingredience týkající se konkrétního receptu, ale nedostává pokyny od místa, kde má začít.
„Hlavní“ funkcí je zde místo, kde každý z C / C ++ programů iniciuje spuštění. Proto může být hlavní vytvořen jako:
int main (neplatný)
{
}
Aby však program mohl interpretovat podrobnosti registru DDR a PORT a jejich fungování uvnitř čipu MCU, je třeba zahrnout další prohlášení, které se může skládat ze všech údajů týkajících se AVR MCU. Možná bychom chtěli přidat toto zahrnutí do všech našich programů.
#zahrnout
int main (neplatný)
{
}
Jakmile se zahájí kompilace, část před procesorem kompilátoru se zaměřuje na adresář AVR, aby identifikovala soubor „io.h“. Přípona „.h“ zde označuje, že se jedná o soubor záhlaví, a že tento kód uvnitř souboru bude zaveden na začátku (hlava) vytvářeného zdrojového souboru, odtud název „záhlaví“.
Zde můžeme zavést příkazy DDR a PORT do našeho kódu, protože přidání souboru záhlaví io.h by kompilátor na ně nasměrovalo.
#zahrnout
int main (neplatný)
{
DDRB = 0b00000001 // Data Direction Register nastavení pin0 na výstup a zbývající piny jako vstup
PORTB = 0b00000001 // Nastavte pin0 na 5 voltů
}
Výše uvedené opravuje orientaci pin0 jako výstupu, který má velikost 5V. Stále však existuje jeden problém, který pro tento pin není určen, to znamená, že tento pin bude ještě poučen, aby byl zapnut na neurčito, pokud je napájen MCU. Tato nekonečná zpětnovazební smyčka by zajistila, že se tento pin z MCU nevypne, spíše bude pokračovat s výstupem 5 V na neurčito.
Ačkoli existuje mnoho různých metod použití instrukce smyčky pro pin, zkusili bychom zde použít smyčku „while“. Jak název napovídá, smyčka „while“ říká mikrokontroléru, že „zatímco“ je k dispozici napájení, musíte zůstat aktivovaní s přiděleným 5 V pro přiřazený pinout.
#zahrnout
int main (neplatný)
{
DDRB = 0b00000001 // Data Direction Register nastavení pin0 na výstup a zbývající piny jako vstup
PORTB = 0b00000001 // Nastavte pin0 na 5 voltů
zatímco (1)
{
// Kód by zde byl, pokud by byl potřeba provádět znovu a znovu a znovu ... nekonečně
}
}
Možná budete chtít poznamenat, že zde jsme použili „1“ ve formě argumentu pro smyčku „while“, protože vše kromě „0“ lze považovat za logické „true“.
To znamená, že úvaha o smyčce „while“ by nikdy nebyla zodpovědná za nic kromě logického „true“, což znamená, že konkrétní pin by se na neurčito zasekl se zadaným stavem.
LED může být svědkem toho, že trvale svítí přes přiřazený pin, pokud MCU dostává energii přes své Vdd a Vss.
To je ono, nyní máme výsledek, který jsme chtěli získat, a konečně můžeme vidět, jak se to děje po tolika tvrdé práci, ale přesto je vidět sladký výsledek naší tvrdé práce tak uspokojivý.
V dalších výukách se naučíte, jak přidat výše uvedenou LED dimenzi „čas“, a tak ji nechat blikat určitou stanovenou rychlostí.
Ve skutečnosti ve výše uvedené implementaci LED skutečně bliká, ale rychlost smyčky je tak rychlá, že je téměř jako trvalé zapnutí LED osvětlení.
Uvidíme, jak bude možné tuto smyčku přidat se zpožděním podle potřeby, aby LED dioda blikala při této zpožděné frekvenci.
Jak vytvořit LED blikání pomocí mikrokontroléru AVR
V poslední diskusi jsme se naučili, jak provést zapnutí LED pomocí mikrokontroléru, bylo to vynikající, že? Možná ne tolik!
Zde se naučíme, jak okořenit výše uvedené osvětlení LED přidělením obousměrné funkce, tj. Pokusíme se, aby blikalo nebo blikalo určitou specifikovanou frekvencí nebo rychlostí. Uvidíme také, jak lze tuto rychlost zvýšit nebo snížit podle přání uživatele.
Pojďme se na to podívat:
#zahrnout
#zahrnout
int main (neplatný)
{
DDRB | = 1<< PINB0
zatímco (1)
{
PORTB ^ = 1<< PINB0
_delay_ms (100)
}
}
Pokud se cítíte zmateni těmito zvláštními symboly (&, ^, | atd.) Použitými ve výše uvedeném výrazu (& není tam, ale lze je použít v jiných podobných kódech), zde jsou související informace, které by vás zajímaly :
Zahrnuje mnoho standardních logických algoritmů jako AND, OR, NOT a XOR, které se obvykle používají s výše uvedeným kódem.
Tyto logické funkce konkrétně porovnávají dva bity „1“ a „0“ podle jejich přiřazených pravdivostních tabulek.
Nápad získáme analýzou následujícího bitového uspořádání:
01001011 &
10001101
rovná se
00001001
Ve výše uvedeném kódu & odkazuje na AND, jak se používá v programování C.
Čtení řádků svisle naznačuje, že 0 a 1 se rovná 0, 1 a 0 se také rovná 0, 0 a 0 se rovná 0, 1 a 1 se rovná 1. Čtení je tak jednoduché. Jedná se o pravdivostní tabulku operátoru AND.
Pokud posoudíme následující tabulku, znamená to symbol „|“ označující použití funkce „NEBO“, „|“ najdete nalevo od „backspace“ na klávesnici počítače:
01001011 |
10001101
rovná se
11001111
Stejná tabulka pravdivosti logické funkce OR naznačuje, že bity 0 nebo 1 se rovnají 1, 1 nebo 0 se rovnají 1, 0 nebo 0 se rovnají 0, zatímco 1 nebo 1 se rovná 1.
Následující bitová kombinace je pro logický operátor XOR označený ^ a lze ji studovat stejně jako my s pravdivostními tabulkami AND, OR:
01001011 ^
10001101
rovná se
11000110
Nyní pokračujme v prvním programu a zjistíme, co znamená následující řádek:
#zahrnout
Prostřednictvím našich předchozích tutoriálů víme, jak výraz funguje, takže ho nebudeme znovu opakovat, zdá se však, že jde o nový „obsah“ vyjádřený #include, který je třeba prozkoumat.
V tomto „zahrnutí“ nám delay.h umožňuje některé snadné způsoby implementace.
Jak název napovídá, delay.h nám umožňuje vyvolat zpoždění v konkrétním programu.
Další výraz int main (void) lze z probíhající diskuse vynechat, protože jsme to již popsali v našich dřívějších příspěvcích.
Dále přichází změněná DDRB.
Následující příklad ukazuje dřívější formu, která není lepším způsobem přiřazení pinů, protože všechny piny od 0 do 7 byly přepnuty, aby vytvořily vstupy. Jen si ale představte, jaká by byla situace, kdybychom chtěli vytvořit zdlouhavější program vyžadující tyto piny pro další funkce? Například pin2 může být potřebný pro dálkové přepínání zařízení. V takovém případě bychom neocenili přiřazení stejného jako vstupu pouze pomocí pokusu a omylu. To by mohlo znamenat nesprávnou reakci dálkového vysílače na přijímač zařízení.
DDRB = 0b00000001
Raději chceme ovlivnit jen jeden bit, hat pin0 bit, pohled na funkčnost „OR“, kterou by bylo možné provést pomocí binárního maskování.
DDRB = DDRB | 0b00000001
Zde je zahalena maskou „OR“: 0b00000001, i když se zdá, že jde o autentické binární číslo, například v případě dřívější DDRB: 0b01001010, pak použití OR na toto pomocí maskování může dát: 0b01001010 | 0b00000001 = 0b01001011.
Výsledný rozdíl, který lze vidět, je pouze u pin0, jehož bity se změnily!
Komprimace výše uvedeného prohlášení ještě více pomocí C ++ dává:
DDRB | = 0b00000001
Zjistili jsme však, že v daném programu je ještě více. I když to může vypadat docela legitimně a zjevně, měli bychom využít výhod některých příkazů ze souboru záhlaví io.h, zejména když je zásadně vytvořen pro naše pohodlí?
Takže pokud „DDRB | = 1<< PINBO, why it’s like that?
1<< PINBO is implemented for applying the masking effect. The “1” indicates what may be introduced inside the mask, while the < < is simply the left shift functionality. It executes exactly as it’s named, and PINBO is the number of locations that the “1” would sequence across the left hand side. To be precise PINBO may be equivalent of a 0.
Začneme tedy s 0b00000000 a vložením „1“ vytvoříme 0b0000001 a poté jej přeneseme do levých 0 pozic, což dává přesně identickou 0b00000001 jako výše.
Nyní, pokud bychom předpokládali, že jde o PINB4, lze vyjádření vyjádřit jako 1<< PINB4. I this case the “1” would be pushed to the left 4 locations producing: 0b00010000.
Pozor, používáme nulový index, což znamená, že za „1“ jsou čtyři nuly.
Nyní pokračujeme ve smyčce „while“, kterou jsme dříve zaznamenávali přes „nekonečnou smyčku“. Ale možná teď chceme, aby mikrokontrolér implementoval některé z požadovaných provedení. To může být proveditelné pouze uvnitř dané smyčky. Je to smyčka, kde se konkrétní sekvence opakuje znovu a znovu.
V případě, že by provedení bylo umístěno před smyčku, bylo by implementováno pouze jednou.
Aby však LED dioda neomezeně blikala, bylo by nutné ve smyčce střídavě zapínat a vypínat PINB0. Zde také nacházíme zaváděná zpoždění, bez nichž by blikání LED nebylo možné. To by ale přinutilo LED blikat velmi rychlým tempem, které je obtížné rozeznat pouhým okem, bude potřeba trochu zpomalit, aby se stalo identifikovatelným s našimi očima.
Jsme si vědomi postupu nastavení konkrétního bitu v binárním čísle, ale nejsme si jisti metodou použití konkrétního bitu „0“ v případě, že je to ještě „1“.
Je možné vidět následující program, ale zjistíme také, že v programu nemusí být viditelný.
Počáteční dva příkazy změní bit na „1“ (5 V, LED světla), poté je zavedena pauza na 100 ms.
Dalších pár řádků změní bit PINB0 na „0“ (nulové napětí, LED zhasne), ale je mi líto, že AND AND nebude moci z bitu provést „0“, ale pokud použijeme NOT „~“ pro binární masku by mohla přepnout všechny 0 s na 1 s a naopak.
To nám umožní ovlivnit pouze bit PINB0 a otočit jej na „0“. Závorka byla zahrnuta, aby obsahovala provedení maskování, takže operaci NOT bylo možné použít pro celé masky a ne jednoduše nad „1“ před levým posunem „<<”.
PORTB | = 1<< PINB0
_delay_ms (100)
PORTB & = ~ (1<< PINB0)
_delay_ms (100)
Abychom vytvořili zpoždění ON OFF nebo období se stejnou dobou trvání, můžeme zkrátit předchozí čtyři řádky na dva a v naší výhodě použít XOR funkčnost. Je třeba poznamenat, že XOR provedl přiřazený pin na 1 v případě, že je 0 a naopak. Toto provedení by ovlivnilo pouze PINB0. Jak může být příkaz aplikován, jednoduše by bit změnil v opak stávající logiky.
PORTB ^ = 1<< PINB0
_delay_ms (100)
HOTOVO! Vaše LED nyní bude blikat podle nastavené rychlosti… Jednoduché, že?
Předchozí: Obvod dálkového ovládání více spotřebičů Další: Fáze střídavého proudu, neutrál, obvod indikátoru zemního spojení