Preskúmané základy mikrokontroléra

Vyskúšajte Náš Nástroj Na Odstránenie Problémov





Jedna vec je skvelá na integrovaných obvodoch mikrokontrolérov, ktoré sú dostupné takmer vo všetkých častiach sveta a u elektronických maloobchodných predajcov.

Úvod

Zariadenia mikrokontrolérov sa v zásade populárne používajú v aplikáciách zahŕňajúcich hodnotenie okolitého prostredia a v podobnej elektronike.



Tieto zariadenia sa používajú na zobrazovanie určitých parametrov, v aplikáciách na riadenie motorov, LED osvetlení, snímačoch rôznych typov, ako je snímač náklonu, akcelerometer, merač rýchlosti, záznamníky dát, regulátory teploty, klávesnice atď.

Primárne porozumenie týkajúce sa mikrokontrolérov je možné získať odkazom na mikrokontrolér AVR Amega32, ktorý je tak pokročilý, že sa niekedy nazýva počítač v čipe.



Toto zariadenie je určené na vykonávanie série príkazov na vytvorenie programu.

Jazyk programu, ktorý by ste tu videli, je C ++. Tento jazyk sa tu naučíte hlbšie.

Pokiaľ ide o MCU, získate možnosť ovládať a konfigurovať všetky jej pinouty.

Ak vás to už trochu unavuje, len chill, pretože to nie je vôbec nič zložité, budete napredovaní vo všetkých aspektoch vytrvalo, ale pevne.

V čipu MCU je možné priradiť všetky piny okrem Vdd a Vss, ktoré sú napájacími piny čipu, s exkluzívnym označením.

Podrobnosti o zapojení

Ak sa pozriete na čip zhora, našli by ste malý trojuholníkový zárez, ktorý označuje začiatočný bod od začiatku pinoutov, pričom sa počíta, že práve čap čipu číslo 1 začína práve pod týmto zárezom.

Počnúc týmto špendlíkom by ste na tejto strane (vľavo) našli 20 špendlíkov smerom dole, a na druhej (vpravo) ďalších 20 špendlíkov, pokračujúcich zdola nahor na pravej strane.

Prvých 8 pinov začínajúcich od zárezu sú PBO-7, ktoré tvoria indexové piny IC, pretože všetky programy tu začínajú indexom nula.

Vyššie uvedená séria pinov sa nazýva PORT B, zatiaľ čo existujú ďalšie identické sady portov priradených A až D.

Týmto portom je možné priradiť prijímanie a rozpoznávanie privádzaných údajov s názvom INPUT a tiež na prenos údajov v určitej špecifikovanej podobe s názvom OUTPUT.

Dva z pinov, ktoré prichádzajú do všeobecnej kategórie, sú (+) / (-) piny, ktoré sa tiež označujú ako Vdd a GND.

Jeden kolík z PORT D (PDO-6) je umiestnený na ľavej strane čipu v spodnej časti.

PD7, ktorý je pinom č. 7 na PORT D, je možné vysledovať samostatne a začať sériu pinoutov na pravej strane.

Teraz postupujúc z pravej strany čipu, kde končí PORT D, PORT C začína počítať smerom hore v poradí.

Tieto prispievajú k mnohým zaujímavým pinom MCU priamo z analógových na digitálne.

Tieto kolíky sú určené na to, aby sa stali snímacími vstupmi na detekciu mnohých parametrov prostredníctvom externe nakonfigurovaných stupňov analógového obvodu.

Vyššie uvedené piny tvoria PORT A.

Analógovo-digitálnu konverziu cez vyššie uvedené piny je možné pochopiť pomocou príkladu, kde sa na jeden z pinov PORT A aplikuje analógová teplotná úroveň detegovaná pomocou bežného snímača, ako je termister, ktorý je ľahko prijatý a prevádza ho MCU. na výrobu digitálneho odpočtu od nuly do 255 stupňov F (8-bitový údaj, ktorý je možné upgradovať na dosiahnutie 10-bitového výstupu).

Ďalšou vlastnosťou, ktorú môžu byť v MCU dodatočne zaznamenané, je dostupný programovací priestor alebo pamäť, ktorá určuje priestor pre premenné a program určený pre mikrokontrolér.

Ďalej majú MCU zabudované hodiny určené na počítanie príslušných parametrov.

Funkcie hodiniek umožňujú MCU aplikovať sa na mnoho rôznych procesov počítania, ktoré môžu byť rýchle v rozsahu mikrosekúnd v závislosti od špecifikácie konkrétneho zariadenia a tiež môžu byť pomalšie v akomkoľvek požadovanom rozsahu.

Možno ste už do istej miery pochopili koncept mikrokontroléra a jeho portov a pinov.

Ako vytvoriť SPI konektor z programátora do mikrokontroléra

Teraz je čas ísť trochu hlbšie do predmetu a preskúmať svet programovania.

Avšak predtým, ako sa pustíte do procedúry načítania programu do čipu, musíme nájsť správny spôsob integrácie konektora SPI (Serial Peripheral Interface) s MCU.

Aj potom však nemôžeme SPI zatlačiť do pinoutov MCU, však? Nemôžeme tiež dovoliť, aby sa predĺžené vodiče zo SPI priamo zasunuli do chleba. Môže to tiež spôsobiť nesprávne nastavenie vodičov pripojených k nesprávnym kolíkom, čo spôsobí zlé pripojenie.

Preto, aby boli veci úplne bezchybné, robíme procedúry na malom verobore, kde dostaneme spájané kovové spojovacie kolíky, ktoré sa tiež nazývajú „spájkovačka“. Tieto kolíky záhlavia sa teraz dajú použiť na pripojenie s konektorom SPI. Spojenia z tejto hlavičky je možné ukončiť k ďalším paralelným kolíkom hlavičky, ktoré sa môžu použiť na prepojenie kontaktnej dosky.

Vyššie uvedená zostava teda teraz tvorí pohodlnú a spoľahlivú prechodnú spojovaciu platformu pre SPI s MCU.

Do teraz všetko vyzerá pekne a perfektne, takže poďme zarobiť peniaze týkajúce sa programátora, ktorý je vyžadovaný medzi vašim počítačom a MCU.

Mohla by existovať kopa spoločností, ktoré vyrábajú a predávajú tieto programátorské jednotky, takže zaobstaranie týchto by vám nemalo robiť problém, napríklad Adafruit Industries, USBtinyISP alebo Sparkfun atď.

Niektoré z nich môžu vyzerať úplne inak ako bežné typy, ale v zásade majú všetko identické a riadia sa štandardnými pravidlami programovania. Môžu sa použiť ako rozhranie medzi vašim počítačom a mikrokontrolérom AVR.

Nezabudnite však na jedno, ak používate iné MCU a nie AVR Atmega32, možno budete musieť vyhľadať zodpovedajúcim spôsobom kompatibilný programátor pre konkrétny čip MCU.

Možno pozorovať, že pomerne veľa z týchto programátorov zamestnáva identické ovládače, o niečo sa treba postarať a viac sa o nich dozvieme v ďalších kapitolách.

Prepojenie vášho počítača s čipom mikrokontroléra je skutočne základné a boli by ste radi, keby ste vedeli, aké jednoduché je na to potrebné konanie. Poďme teda okamžite stlačiť tlačidlo J.

Urobiť vyššie vysvetlenú dosku rozhrania SPI nie je ťažké, je to všetko o tom, aby vaša spájkovačka fungovala cez všetky spojenia cez zobrazené dva rady hlavičiek kolíkov na malej doske na všeobecné použitie.

Obrázok vyššie zobrazuje podrobnosti pripojenia, ktoré by ste museli dodržiavať pri prepájaní vodičov medzi hlavičkami.

Aby sme to ešte zjednodušili, prejdime si nasledujúce podrobnosti o pripojení, ktoré odkazujeme na obrázok vyššie:

Pin SPI začínajúci zľava hore smeruje na „Master IN, Slave OUT“ (MISO)

Pin SPI zo stredu vľavo sa pripája k hodinovému kolíku (SCK)

Pin SPI vľavo dole sa pripája k Reset. (O tomto špendlíku sa podrobne dozvieme v nasledujúcich tutoriáloch)

SPI, ktorý sa týka pravého dolného rohu, sa pripája k kolíku GND MCU, GND sa vzťahuje na kolík, ktorý tvorí nulové napájacie vedenie alebo zápornú (relatívnu) koľajnicu napájacieho zdroja.

SPI zakončený z prostrednej pravej hlavičky je prepojený s pinom „Master Out, Slave IN“ (MOSI) na MCU.

SPI vychádzajúci z pravého horného rohu je prepojený s (+) MCU, čo je zjavne Vdd alebo kladný napájací kolík MCU.

To je všetko.

Pripojte dva konektory, ako je vysvetlené, a vaša doska rozhrania SPI je pripravená na požadované akcie.

Ak potrebujete ďalšiu pomoc, pozrite si obrázok, ktorý je uvedený vyššie. Vaša konečná doska rozhrania by mala vyzerať takto, keď sa pomocou predchádzajúcej diskusie vykonajú všetky pripojenia káblov.

Dúfam, že ste už možno vytvorili rozhranie SPI, ako je vysvetlené v predchádzajúcom návode, a teraz je čas zaistiť, aby náš počítač akceptoval programátora, ktorý je potrebné integrovať medzi počítač a MCU.

Vytvorenie jednoduchého programovacieho kódu pre MCU

Vezmeme si jednotku USBTinyISP dostupnú od Sparkfunu na prepojenie počítača s mikrokontrolérom.

Vieme, že akýkoľvek operačný systém počítača, ako napríklad Windows, bude vyžadovať ovládače, bez ktorých by bolo zbytočné čokoľvek do počítača načítať, takže náš programátor bude potrebovať ovládače, aby mohol načítať do vášho počítača.

Pozrime sa na postupy potrebné na inštaláciu ovládačov v operačnom systéme vášho počítača, tu si vezmeme príklad operačného systému Windows 7 s 32-bitovými alebo 64-bitovými špecifikáciami.

Otvorte stránku sparkfun.com a kliknite na „stránku vreckového programátora AVR“. Odkaz je možné ľahko vizualizovať na stránke.

Ďalej vyhľadajte pod dokumentmi „ovládač systému Windows“ a jednoducho na ne kliknite.

Takto získate súbor pocketprog-driver.zip vo svojom počítači.

Prejdite do svojho počítača, nájdite miesto na stiahnutie a stiahnutý súbor jednoducho rozbaľte do priečinka.

V prípade, že váš počítač má 64-bitový operačný systém, musíte postupovať podľa ďalších krokov uvedených nižšie. V prípade 32-bitového operačného systému môžete inštaláciu spustiť priamo z rozbaleného súboru.

Pre 64-bitové postupujte nasledovne, pre 32-bitové verzie jednoducho ignorujte:

Google „libusb sourceforge“ a kliknite na túto verziu najnovšej verzie.

Narazili by ste na niekoľko ďalších súborov, mali by ste však záujem o súbor bib, ktorý je: libusb-win32-bin - #. #. #. #. Zip

Teraz choďte a nájdite toto umiestnenie na stiahnutie vo svojom počítači, rozbaľte ho a uložte do jedného z priečinkov.

V tomto priečinku prejdite na priečinok bin a pokračujte k priečinku amd64.

Tu by ste videli niekoľko priečinkov ako: ghcalled libusb0.dll a libusb0.sys.

Budete ich chcieť premenovať na: libusb0_x64.dll a libusb0_x64.sys.

Teraz budete musieť skopírovať vyššie uvedené súbory do priečinka pocketprog-driver, jednoducho prepísať súbory v existujúcej verzii.

Pri inštalácii vyššie uvedených ovládačov by vás zaujímala nasledujúca metóda, ktorá je svojím spôsobom dosť nekonvenčná:

Je to režim „pridať starší hardvér“.

Kliknite na „Štart Menu“

Potom pokračujte kliknutím pravým tlačidlom myši na „počítač“

Kliknite na možnosť „Spravovať“ a nakoniec na položku „správca zariadenia“.

Ďalej v ponuke zvoľte možnosť „Pridať starší hardvér“

Ďalej stlačte „ďalšie“, kým sa sprievodca nepripojí

Podľa pokynov kliknite na možnosť „Inštalovať hardvér, ktorý by ste chceli zvoliť zo zoznamu Rozšírené“. Týmto sa ikona prepínača zobrazí v konkrétnom výbere. Je to vlastne ovládacie tlačidlo systému Windows, ktoré by teraz vyzeralo ako malý kruh, ktorý má vo vnútri guľatomodrú vrstvu.

Teraz jednoducho kliknite na „Ďalej“

Zobrazí sa ponuka „Zobraziť všetky zariadenia“, na ktorú budete musieť kliknúť.

Potom kliknite na ikonu „Z diskety“.

Pomocou ikony „Prehľadávať“ pokračujte do umiestnenia priečinka pocketprog-driver. Ak ste výber vykonali správne, vizualizovali by ste si súbor pocketprog.inf umiestnený v tomto konkrétnom priečinku.

Dvojitým kliknutím na tento súbor by ste určite boli svedkami inštalácie ovládača do vášho PC.

Znova a znova !! Poďme na náš ďalší návod na nasledujúcej stránke.

Možno ste už nainštalovali požadovaný softvér a vytvorili rozhranie SPI.

Ako preniesť program na čip mikrokontroléra

V ďalšom kroku bude potrebných niekoľko komponentov, ako je nepájivá pole, LED dióda a vypočítaný odpor pre zamýšľanú aplikáciu.

V tejto časti sa dozvieme testovacie metódy programátora a potvrdíme inštaláciu príslušných ovládačov a softvéru.

Na overenie, či sú ovládače a softvér nainštalované správne, implementujeme jednoduchý program známy ako avrdude.

AVRdude je program spojený s najnovšou inštaláciou WinAVR, bez ktorého nie je možný skutočný prenos súboru do MCU.

Tento program je vo formáte súboru .hex, ktorý je pre požadované spustenie v podstate pochopiteľný pre MCU.

V prípade, že overenie nebude úspešné, programátor nebude schopný vykonať prenos súboru.

Pozrime sa rýchlo, ako môžeme implementovať postup testovania pomocou nasledujúcich pokynov:

Otvorte výzvu DOS (operačný systém disku) kliknutím na „ponuku Štart“ a zadaním príkazu cmd.exe do daného vyhľadávacieho poľa.

Teraz je možné vykonať program AVRdude jednoduchým napísaním avrdude –c usbtiny –p m32 do príkazového riadku systému DOS. Hneď ako je implementovaný, DOS okamžite potvrdí, či bolo pripojenie úspešné.

Vo vyššie uvedenom príkaze je „-c“ oznamovací príznak, ktorý obsahuje špecifikáciu parametra programátora „usbtiny“, zatiaľ čo značka „-p“ identifikuje zariadenie mikrokontroléra („m32 označuje Atmega32).

V prípade, že ste použili iný MCU, budete musieť zahrnúť príslušné predvoľby pre implementáciu.

Po dokončení vyššie uvedeného postupu môžete do príkazového riadku systému DOS napísať príkaz „exit“, čím sa presuniete z okna.

Ak sa vážne zaujímate o podrobnosti skutočného programovania, najskôr by bolo potrebné spájkovať a zostrojiť externý analógový obvod LED, cez ktorý by sa dal program implementovať, pretože pokiaľ neexistuje systém na potvrdenie odozvy od MCU, programovanie a chod mikrokontroléra by bol celkom nezmyselný.

Výroba dosky LED je veľmi jednoduchá, všetko spočíva v spájkovaní dvoch vodičov LED cez kus veroboardu a prepojení rezistora s jedným z vodičov LED. Úlohou tejto LED je iba obmedziť prúd na LED tak, aby nehorel kvôli nadmernému napätiu a prúdu z výstupu MCU.

Hodnota odporu sa dá vypočítať pomocou nasledujúceho jednoduchého vzorca:

R = (Ub - LEDfwd) / I

Kde Ub je napájacie napätie, LEDfwd je optimálne prevádzkové napätie použitej LED a ja je jeho optimálny zosilňovač.

Predpokladajme, že použijeme ČERVENÚ LED, ktorá má LED dopredné napätie = 2,5 V a prúd I = 20 mA, vyššie uvedenú rovnicu možno vyriešiť nasledovne:

Pretože napätie z MCU by bolo 5V, môže byť vyjadrené ako:

R = (5 - 2,5) / .02 = 125 ohmov, ¼ watt, najbližšia hodnota je 120 ohmov.

Teraz máme LED, 120 ohmový odpor a veroboard, jednoducho prepojíme vyššie uvedené komponenty, ako je uvedené na diagrame, s mikrokontrolérom.

Akonáhle je to hotové, MCU by mohlo byť naprogramované na zamýšľanú odozvu na hore nastavenej LED.

Ďalej programovanie MCU.

Aby mohol mikrokontrolér vykonávať niektoré zmysluplné implementácie, je nevyhnutné do MCU zapísať príslušné pokyny.

Ako nainštalovať programovacie prostredie a preskúmať program WinAVR

Na tento účel by sme pravdepodobne mohli použiť náš vlastný „textový editor“ v našom PC, hoci by sme možno ocenili použitie profesionálnejšieho „programovacieho prostredia“ namiesto bežného textového editora, jednoduché, pretože tento prístup vám umožní vychutnať si niektoré zabudované zaujímavé funkcie v rámci tohto balíka „programovacieho prostredia“.

Podporoval by vytváranie a editovanie programov v rôznych jazykoch a tiež ich kompiláciu do režimu dodávania ľahko zrozumiteľného a akceptovateľného čipom mikrokontroléra.

Nakoniec by to WinAVR podporilo a prenieslo do príslušného čipu MCU.

WinAVR môže byť tiež vybavený na vykonávanie mnohých ďalších operácií, ako je napríklad odstraňovanie problémov s programami a varovanie pred možnou syntaxou a kompiláciou chýb a chýb. Budeme o nich diskutovať v nasledujúcich príručkách.

Kurz inštalácie programu WinAVR by bol veľmi rýchly a svižný. Poďme sa ponoriť do podrobností s nasledujúcimi bodmi:

Najnovšie verzie si budete musieť stiahnuť z priečinka forge files zdroja WinAVR. Na jeho oficiálnej webovej stránke by ste narazili na niektoré užitočné informácie týkajúce sa tohto sťahovania.

Budete vyzvaní k zadaniu bezpečnostného dotazu, aby ste mohli odpovedať, ak chcete, aby sa uskutočnilo sťahovanie. Toto je otázka. Súbor, ktorý sa má stiahnuť, je spustiteľný súbor.

Stiahnite si súbor a kliknutím na neho spustite proces vykonávania. Inštalácia sa môže začať.

Tento proces vás prevedie niekoľkými zodpovednými otázkami, aby ste mohli inštaláciu zjednodušiť podľa svojho pohodlia. Mnohé z nich by ste chceli ignorovať do svojich predvolených foriem. Bolo by na vás, aby ste vybrali tie, ktoré sú podľa vás pre akcie najvhodnejšie.

Doteraz by ste našli všetko celkom normálne a ľahké a našli by ste niekoľko možností, ako sa na vás vrhá ponuka Štart. Žiadny strach, iba niektoré z nich by skutočne využívali iba jeden z programov s názvom „Poznámkový blok programátorov“.

Po kliknutí na túto ikonu by sa spustilo užívateľské rozhranie, aby ste mohli aplikovať písanie programov (napríklad vytváranie a úpravy). Boli by ste tiež svedkami programu pozostávajúceho z príkazov ponuky, ktorý vám pomôže zostaviť kódy a vložiť ich do mikrokontroléra.

Základnou úlohou vyššie uvedeného poznámkového bloku programátora je transformácia ľudsky čitateľného kódu, ktorý by ste písali, na sériu pokynov zrozumiteľných iba pre MCU.

Nasledujúci tutoriál sa bude venovať testovaniu vyššie uvedeného programátora, aby sme si mohli byť istí ohľadom jeho kompatibility s Windows a či s vaším mikrokontrolérom IC dokonale „podáva ruku“.

Ako naprogramovať MCU na rozsvietenie LED

Len čo sa to potvrdí, pokračujeme vytvorením malého kódu „nerobiť nič“, len aby sme zaistili, že postup prenosu kódu nebude obsahovať chyby.

Teraz sme samozrejme pripravení implementovať náš prvý program do MCU, ale predtým by bolo zaujímavé rýchlo zhrnúť, čo sme urobili v priebehu našich predchádzajúcich tutoriálov:

Mikrokontrolér AVR Atmel sme zaobstarali podľa našej požadovanej špecifikácie, tu sme pre ilustrácie použili ATMega32. Ďalej sme sa dozvedeli základné informácie o mikrokontroléri a programátorskej jednotke, ktorá je zodpovedná za prenos programu do čipu MCU.

Ďalej sme vytvorili konektor rozhrania SP, ktorý je nevyhnutný na to, aby mohol byť váš počítač prepojený s mikrokontrolérom pre účely programovania.

Potom sme potvrdili, či boli ovládače správne nainštalované v počítači pre 32-bitový aj 64-operačný systém.

Ďalej sme nainštalovali programovacie prostredie s názvom Win AVR, ktoré uľahčuje ľahké prenášanie kódov do mikrokontroléra, po ktorom nasleduje implementácia možnosti overenia programátora s počítačom a prepojeným mikrokontrolérom.

Nakoniec v predchádzajúcej kapitole sme dokončili budovanie obvodu LED / rezistorov a prepojili sme ich s príslušnými výstupmi MCU.

To je naozaj veľa práce, napriek tomu je čas okamžite sa pustiť do skutočných programovacích vecí!

Na začiatok by sme chceli rozdeliť mikrokontrolér do troch kategórií, čo by veľmi zjednodušilo naše chápanie:

Kontrola, detekcia a komunikácia

Bolo by zaujímavé vedieť, že vyššie uvedené funkcie je možné programovať rôznymi spôsobmi.

V našom prvom programe by sme sa pokúsili nariadiť mikrokontroléru, aby „ovládal“ externý parameter, áno, máte pravdu, bola by to LED, ktorú sme nedávno vytvorili.

Aby sme boli presní, povieme MCU, aby zapla pripojenú LED, áno, viem, že to vyzerá dosť primitívne, ale počiatočná fáza musí byť vždy ľahká.

Pokračovať v súčasnej práci, urobiť kontrolku MCU pomocou LED, je vlastne celkom jednoduché:

Z tohto dôvodu dáme príkazu pin # 0 na PORTE B, aby vyprodukoval požadovaných 5V pre LED.

Pripomeňme si z predchádzajúceho tutoriálu, že sme pripojili anódu LED k vyššie uvedenému pinu MCU.

S týmto pinom MCU musia byť spojené dve základné veci: 1) výstup a 2) 5 voltov

Naučíme sa spôsob, ktorým dáme konkrétnemu kolíku pokyn, aby sa stal výstupom MCU.

Akonáhle je nastavený na výstup z čipu, môžeme mu dať pokyn, aby bol pre aplikáciu buď „vysoký“ (5 V) alebo „nízky“ (0 V).

Pretože akýkoľvek logický obvod, ako napríklad MCU, mohli kolíky vädnúť na výstup alebo na vstup a mohli by byť nakonfigurované tak, aby produkovali buď logicky vysokú alebo logickú nízku úroveň, týmto pinom teda musí byť priradený buď iba logický vysoký, alebo logický nízky signál , neexistujú žiadne prechodné alebo nedefinované stavy okrem týchto pár stavov pre mikrokontroléry alebo pre akýkoľvek digitálny integrovaný obvod. To isté platí pre každý pin MCU.

Pokiaľ ide o priradenie vstupných a výstupných pinov, vstupy by boli umiestnené tak, aby prijímali signály z externých analógových stupňov, zatiaľ čo výstupy by boli zodpovedné za ich interpretáciu do určených logických stavov alebo na frekvenciu.

Aj keď je možné vyššie uvedené úlohy vykonať mnohými rôznymi metódami, pre zjednodušenie by sme diskutovali o jednej z nich. Je však potrebné poznamenať, že hoci ten, ktorý by bol teraz predstavený, vyzerá ľahko a zaujímavo, nie je tak životaschopný a nie je odporúčaným typom pre všetky aplikácie MCU, z rovnakého dôvodu by ste sa neskôr v kurze zoznámili s populárnejšími programovacími metódami. . Tieto programy umožnia priradiť iba požadované piny podľa špecifikácií, bez toho, aby to ovplyvnilo ďalšie susedné, ktoré by už mohli byť priradené k vykonaniu niektorých ďalších funkcií.

Momentálne sa však nebudeme toľko trápiť ostatnými kolíkmi a budeme používať iba príslušné zaujímavé kolíky, aby sme sa vyhli komplikáciám do istej miery.

Na priradenie kolíka ako výstupu je potrebné použiť Data Direction Register (DDR). Ak vás zaujíma, čo tu znamená register, je to jednoducho priestor v MCU, ktorý umožňuje mikrokontroléru reagovať nejakým konkrétnym spôsobom.

Pomocou DDR môžeme nastaviť kolík buď na odoslanie údajov, ktoré sú ako „výstup“, alebo na prijatie údajov, ktoré sú vo forme „vstupu“.

Čo vás však môže zmiasť v súvislosti so slovom, čo to znamená? Dáta pridávajú tretiu dimenziu k pinom, ktorým je možné priradiť, aby boli kontinuálne na logickej nule (0 V) alebo logicky vysokej (5 V), ale čo so signálmi, ktoré sa môžu rýchlo meniť, napríklad frekvenciou impulzov. Frekvencia by bola sprevádzaná vysokou a nízkou logikou (5 V a 0 V) ​​oscilujúcou s niektorými špecifikovanými intervalmi alebo periódami, takže sa stáva časovo orientovanou a môže byť upravená s ohľadom na čas, preto ju označujeme ako „údaj“, čo znamená parameter, ktorý označuje funkcia vo vzťahu k inej funkcii (logické stavy a čas).

Jedným zo spôsobov priradenia kódu pin0 ako výstupu je napísanie nasledujúceho kódu:

DDRB = 0b00000001

Vo vyššie uvedenom programe znamená DDRB Register dátových smerov pre PORT B ​​0b dáva pokyn kompilátoru ohľadom nasledujúceho binárneho výrazu čísla, zatiaľ čo „1“ na konci výrazu označuje pozíciu pin0, to znamená jeho umiestnenie vo forme prvého čapu PORT B.

Ak si pamätáte, dozvedeli sme sa, že PORT B ​​s ním spája 8 pinov (od 0 do pin7), a ak si všimnete, že vyššie uvedený kód má aj 8 číslic, znamená to, že každá číslica znamená týchto 8 pinov PORT B.

Ďalším krokom by teraz bolo priradiť 5V k tomuto kolíku (pin0). Princíp činnosti je opäť identický s DDR, ako je uvedené vyššie, vyjadrené v nasledujúcom binárnom kóde:

PORTB = 0b00000001

Ako je zrejmé, jediný rozdiel medzi vyššie uvedeným a predchádzajúcim kódom je ten, že v tomto kóde sme použili register PORT. Tento register špecificky spracováva priradenia pinov konkrétneho portu, pre ktorý bol umiestnený vo vnútri MCU. Umožňuje nám to priradiť logiku skutočných údajov (0 alebo 1) pre tieto zásuvky.

Teraz by nás mohlo zaujímať niekoľko, ktoré sa týkajú približných podrobností nášho programu. Pretože vieme, že všetky programy vyžadujú na zahájenie vykonávania určitý priestor, dá sa to porovnať s kuchárom, ktorý pozná všetky ingrediencie týkajúce sa konkrétneho receptu, ale nemá pokyny, odkiaľ začať.

„Hlavnou“ funkciou je tu umiestnenie, kde každý z C / C ++ programov iniciuje spustenie. Preto môže byť hlavný vytvorený ako:

int main (void)
{
}

Aby však program mohol interpretovať podrobnosti registra DDR a PORT a ich fungovanie vo vnútri čipu MCU, je potrebné zahrnúť ďalšie vyhlásenie, ktoré môže pozostávať zo všetkých údajov týkajúcich sa AVR MCU. Možno by sme chceli pridať toto zahrnutie do všetkých našich programov.

#include
int main (void)
{
}

Hneď ako sa kompilácia spustí, predprocesorová časť kompilátora sa zameriava na adresár AVR, aby identifikovala súbor „io.h“. Prípona „.h“ tu naznačuje, že sa jedná o hlavičkový súbor, a že tento kód vo vnútri súboru by bol zavedený na začiatku (hlavičke) zdrojového súboru, ktorý sa vytvára, preto má názov „header“.

Tu môžeme zaviesť príkazy DDR a PORT do nášho kódu, pretože pridanie hlavičkového súboru io.h by kompilátora nasmerovalo na ne.

#include

int main (void)

{

DDRB = 0b00000001 // Dátový smerový register nastavujúci pin0 na výstup a zvyšné piny ako vstup

PORTB = 0b00000001 // Nastavte pin0 na 5 voltov

}

Vyššie uvedené fixuje orientáciu kolíka0 ako výstupu s veľkosťou 5V. Stále však existuje jeden problém, ktorý pre tento pin nie je určený, to znamená, že tento pin je ešte potrebné poučiť, aby bol zapnutý na neurčito, pokiaľ je napájený MCU. Táto nekonečná spätnoväzbová slučka by zabezpečila, že sa tento pin z MCU nevypne, skôr bude pokračovať s výstupom 5 V na neurčito.

Aj keď existuje veľa rôznych spôsobov použitia inštrukcie slučky pre pin, skúsili by sme tu použiť slučku „while“. Ako názov napovedá, slučka „while“ informuje mikrokontrolér o tom, že „kým“ je napájanie k dispozícii, musíte pre aktivovaný pinout zostať aktívny s priradeným 5 V.

#include

int main (void)

{

DDRB = 0b00000001 // Dátový smerový register nastavujúci pin0 na výstup a zvyšné piny ako vstup

PORTB = 0b00000001 // Nastavte pin0 na 5 voltov

zatiaľ čo (1)

{

// Kód by tu bol, ak by bol potrebný na vykonávanie znova a znova a znova ... nekonečne

}

}

Možno budete chcieť poznamenať, že tu sme použili „1“ vo forme argumentu pre slučku „while“, pretože všetko okrem „0“ možno považovať za logické „pravdivé“.

To znamená, že úvaha o cykle „while“ by nikdy nebola zodpovedná za nič iné ako logické „true“, čo znamená, že konkrétny pin by sa uchytil v zadanom stave na neurčito.

LED môže byť svedkom toho, že trvale svieti na priradenom kolíku, pokiaľ MCU prijíma napájanie cez svoje Vdd a Vss.

A je to, teraz máme výsledok, ktorý sme chceli dosiahnuť, a konečne môžeme vidieť, že sa to deje po toľkej tvrdej práci, ale napriek tomu je pohľad na sladký výsledok našej tvrdej práce taký uspokojivý.

V nasledujúcich tutoriáloch sa dozvieme, ako pridať dimenziu „čas“ do vyššie uvedenej LED, ako ju nechať blikať určitou zadanou rýchlosťou.

V skutočnosti vo vyššie uvedenej implementácii LED skutočne bliká, ale rýchlosť slučky je taká rýchla, že je to takmer ako trvalé zapnutie LED osvetlenia.

Uvidíme, ako bude možné túto slučku podľa potreby pridať s oneskorením, aby LED dióda blikala takouto oneskorenou rýchlosťou.

Ako vytvoriť LED blikanie pomocou mikrokontroléra AVR

V poslednej diskusii sme sa naučili, ako zapnúť LED pomocou mikrokontroléra, bolo to vynikajúce, však? Možno nie toľko!

Tu sa naučíme, ako okoreniť vyššie uvedené osvetlenie LED prisúdením obojsmernej funkčnosti, to znamená, že sa ho pokúsime rozblikať alebo blikať určitou zadanou frekvenciou alebo rýchlosťou. Uvidíme tiež, ako by sa táto rýchlosť mohla podľa potreby zvýšiť alebo znížiť.

Pozrime sa na to:

#include

#include

int main (void)

{

DDRB | = 1<< PINB0

zatiaľ čo (1)

{

PORTB ^ = 1<< PINB0

_delay_ms (100)

}

}

Ak sa cítite zmätení s tými zvláštnymi symbolmi (&, ^, | atď.) Použitými vo vyššie uvedenom výraze (& nie je tam, ale môžu sa použiť v iných podobných kódoch), tu sú súvisiace informácie, ktoré by vás zaujímali :

Zahŕňa mnoho štandardných logických algoritmov ako AND, OR, NOT a XOR, ktoré sa zvyčajne používajú s vyššie uvedeným kódom.

Tieto logické funkcie špecificky porovnávajú dva bity „1“ a „0“ podľa ich priradených tabuliek pravdy.

Získame nápad analýzou tohto usporiadania bitov:

01001011 a
10001101
rovná sa
00001001

Vo vyššie uvedenom kóde & odkazuje na AND, ako sa používa v programovaní C.

Čítanie riadkov zvisle naznačuje, že 0 a 1 sa rovná 0, 1 a 0 sa tiež rovná 0, 0 a 0 sa rovná 0, 1 a 1 sa rovná 1. Čítanie je také jednoduché. Sú podľa tabuľky pravdivosti operátora AND.

Ak posúdime nasledujúcu tabuľku, znamená to symbol „|“ označujúce použitie funkcionality „ALEBO“ je „|“ nájdete na ľavej strane „backspace“ na klávesnici počítača:

01001011 |
10001101
rovná sa
11001111

Rovnako táto pravdivostná tabuľka logickej funkcie OR naznačuje, že bity 0 alebo 1 sa rovnajú 1, 1 alebo 0 sa rovnajú 1, 0 alebo 0 sa rovnajú 0, zatiaľ čo 1 alebo 1 sa rovná 1.

Nasledujúca bitová kombinácia je pre logický operátor XOR označená ^ a je možné ju študovať rovnako ako v prípade pravdivostných tabuliek AND, OR:

01001011 ^
10001101
rovná sa
11000110

Teraz pokračujme s prvým programom a zistíme, čo znamená jeho nasledujúci riadok:

#include

Prostredníctvom našich predchádzajúcich tutoriálov vieme, ako výraz funguje, takže ho nebudeme opakovať, zdá sa však, že ide o nové „zahrnutie“ vyjadrené #include, ktoré je potrebné preskúmať.

V tomto „zahrnutí“ nám delay.h umožňuje niektoré jednoduché spôsoby implementácie.

Ako naznačuje názov, delay.h nám umožňuje vyvolať oneskorenie v konkrétnom programe.

Nasledujúci výraz int main (neplatný) je možné z prebiehajúcej diskusie vynechať, pretože sme sa tomu už v našich predchádzajúcich príspevkoch venovali.

Ďalej prichádzajú zmenené DDRB.

Nasleduje ukážka staršej formy, ktorá nie je lepším spôsobom priradenia pinov, pretože všetky piny od 0 do 7 boli prepnuté tak, aby tvorili vstupy. Len si však predstavte, aká by bola situácia, keby sme chceli vytvoriť zdĺhavejší program vyžadujúci tieto piny pre ďalšie funkcie? Napríklad pin2 môže byť potrebný na diaľkové prepínanie prístroja. V takom prípade by sme ocenili priradenie toho istého ako vstupu iba pomocou pokusov a omylov. To by mohlo znamenať nesprávnu reakciu diaľkového vysielača na prijímač prístroja.

DDRB = 0b00000001

Radšej chceme ovplyvniť iba jeden bit, klobúk pin0 bit, letmý pohľad na funkčnosť „ALEBO“, ktorú by bolo možné vykonať pomocou binárneho maskovania.

DDRB = DDRB | 0b00000001

Tu je zakryté maskou „OR“: 0b00000001, aj keď sa zdá, že je to autentické binárne číslo, napríklad pre staršie DDRB: 0b01001010, potom použitie OR na toto pomocou maskovania môže poskytnúť: 0b01001010 | 0b00000001 = 0b01001011.

Výsledný rozdiel, aký bol svedkom, je iba u pin0, ktorého bity sa zmenili!

Ďalšou kompresiou vyššie uvedeného príkazu pomocou jazyka C ++ získate:

DDRB | = 0b00000001

Zistili sme však, že v danom programe je ešte viac. Aj keď to môže vyzerať celkom legitímne a očividne, mali by sme využiť niektoré výroky zo súboru hlavičiek io.h, najmä keď je zásadne vytvorený pre naše pohodlie?

Takže ak „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.

Takže začneme s 0b00000000 a vložením „1“ vytvoríme 0b0000001 a potom ho prenesieme do ľavých 0 pozícií, čo dá presne identickú 0b00000001 ako je uvedené vyššie.

Teraz, ak by sme predpokladali, že ide o PINB4, vyhlásenie by sa dalo vyjadriť ako 1<< PINB4. I this case the “1” would be pushed to the left 4 locations producing: 0b00010000.

Pozor, používame nulový index, čo znamená, že po „1“ sú štyri nuly.

Teraz pokračujeme do slučky „while“, ktorú sme si predtým všímali cez „nekonečnú slučku“. Ale možno teraz chceme, aby mikrokontrolér implementoval niektoré z požadovaných vykonaní. To je možné iba vo vnútri danej slučky. Je to slučka, kde sa konkrétna postupnosť opakuje znova a znova.

V prípade, že by sa vykonanie umiestnilo pred cyklus, implementovalo by sa to iba raz.

Aby však LED mohla blikať donekonečna, bolo by potrebné v rámci slučky striedavo zapnúť / vypnúť PINB0. Tu tiež zisťujeme zavedenie oneskorení, bez ktorých by blikanie LED nebolo možné. To by ale prinútilo LED diódu blikať veľmi rýchlou rýchlosťou, ktorú je ťažké rozpoznať voľným okom, na to, aby bola identifikovateľná pre naše oči, bude treba trochu spomaliť.

Poznáme postup nastavenia konkrétneho bitu v binárnom čísle, ale nie sme si istí metódou použitia konkrétneho bitu „0“ v prípade, že je to ešte „1“.

Je možné vidieť nasledujúci program, ale tiež zistíme, že nemusí byť v programe viditeľný.

Počiatočné dva príkazy zmenia bit na „1“ (5 V, svetlá LED), potom sa na 100 ms zavedie pauza.

Nasledujúcich pár riadkov zmení bit PINB0 na „0“ (nulové napätie, LED zhasne), ale je nám ľúto, že AND AND nebude schopné z bitu vykonať „0“, ale ak použijeme NOT „~“ pre binárnu masku mohla prepnúť všetky 0 s na 1 s a naopak.

To nám umožní ovplyvniť iba bit PINB0 a otočiť ho na „0“. Zátvorka bola zahrnutá preto, aby obsahovala vykonanie maskovania, takže operáciu NOT bolo možné aplikovať na celé masky a nie iba nad „1“ pred ľavým posunom „<<”.

PORTB | = 1<< PINB0
_delay_ms (100)
PORTB & = ~ (1<< PINB0)
_delay_ms (100)

Aby sme vytvorili oneskorenia ZAPNUTIA VYPNUTIA alebo obdobia rovnakého trvania, môžeme predchádzajúce štyri riadky skrátiť na dva a v náš prospech použiť funkčnosť XOR. Je potrebné poznamenať, že pri vykonávaní XOR bol priradený pin k 1 v prípade, že je 0 a naopak. Toto vykonanie by malo vplyv iba na PINB0. Ako je možné, príkaz sa aplikuje, jednoducho by bit zmenil na opak existujúcej logiky.

PORTB ^ = 1<< PINB0
_delay_ms (100)

HOTOVÝ! Vaša LED dióda by teraz blikala podľa nastavenej rýchlosti ... Jednoduché, že?




Dvojica: Obvod diaľkového ovládania viacerých spotrebičov Ďalej: Fáza striedavého prúdu, neutrál, obvod indikátora zemnej poruchy