Istražene osnove mikrokontrolera

Isprobajte Naš Instrument Za Uklanjanje Problema





Jedno je sjajno u vezi s mikrokontrolerom, oni su dostupni gotovo u svim dijelovima svijeta i elektroničkim trgovcima.

Uvod

U osnovi mikrokontroleri se popularno koriste u aplikacijama koje uključuju procjene okolnog okoliša i u sličnoj elektronici.



Ovi uređaji se mogu koristiti za prikaz određenog parametra, u aplikacijama za upravljanje motorom, LED osvjetljenju, senzorima različitih vrsta poput senzora nagiba, akcelerometra, mjerača brzine, zapisnika podataka, regulatora temperature, tipkovnica itd.

Primarno razumijevanje mikrokontrolera moglo bi se dobiti pozivanjem na AVR Amega32 mikrokontroler koji je toliko napredan da se ponekad naziva računalom u čipu.



Ovaj je uređaj dodijeljen za izvršavanje niza naredbi za formiranje programa.

Jezik programa koji biste ovdje vidjeli je C ++. Na ovom ćete tečaju ovaj jezik naučiti dublje.

Što se tiče MCU-a, dobivate mogućnost kontrole i konfiguriranja svih njegovih pinouta.

Ako se pomalo umorite od ovoga, samo se ohladite jer to uopće nije ništa složeno, bit ćete lagani kroz sve aspekte stabilno, ali čvrsto kako idemo dalje.

U MCU čipu svi pinovi, osim Vdd i Vss koji su napojni pinovi čipa, mogu se dodijeliti s ekskluzivnim oznakama.

Pojedinosti o pinoutima

Ako bacite pogled na čip s vrha, naći ćete mali trokutasti usjek koji označava početnu točku odakle započinju pinouti, računa se da prvi pin čipa započinje odmah ispod ovog usjeka.

Polazeći od ovog pina, pronašli biste 20 pribadača do dna s te strane (lijevo), i još 20 pribadača s druge strane (desno), nastavljajući odozdo prema gore s desne strane.

Prvih 8 pinova počevši od usjeka su PBO-7 koji čine indeksne pinove IC-a, jer svi ovdje programi započinju indeksom nula.

Gornja serija izvoda se naziva PORT B, dok postoje drugi identični skupovi priključaka dodijeljeni od A do D.

Ovim priključcima može se dodijeliti prihvaćanje i prepoznavanje podataka koji se nazivaju INPUT, kao i za prijenos podataka u nekom određenom obliku koji se naziva OUTPUT.

Dvije igle koje spadaju u opću kategoriju su (+) / (-) igle koje se također nazivaju Vdd i GND.

Može se vidjeti jedan pin iz PORTA D (PDO-6) koji se nalazi na lijevoj strani čipa na donjem dijelu.

PD7 koji je pin # 7 PORTA D mogao bi se pratiti samostalno i započinjući s nizom pinouta s desne strane.

Sada krećući se s desne strane čipa gdje završava PORT D, PORT C započinje odbrojavanje prema gore u redoslijedu.

To pridonosi mnogim zanimljivim iglama MCU-a, od analognih do digitalnih.

Ovi pinovi postaju senzorski ulazi za otkrivanje mnogih parametara kroz vanjski konfigurirane faze analognih krugova.

Gornje pribadače čine LUKU A.

Analogna u digitalnu pretvorbu preko gornjih pinova mogla bi se razumjeti uz pomoć primjera u kojem se analogna razina temperature otkrivena pomoću uobičajenog senzora, poput termistra, primjenjuje na jedan od PORT A pinova koji MCU lako prihvaća i pretvara. za stvaranje digitalnog očitanja od nula do 255 stupnjeva F (8-bitna brojka koja se može nadograditi za postizanje 10-bitnog izlaza).

Sljedeća značajka koja bi se dodatno mogla vidjeti u MCU-ima je dostupan programski prostor ili memorija koja određuje prostor za varijable i program određen za mikrokontroler.

Uz to, MCU-ovi imaju ugrađeni sat za brojanje relevantnih parametara.

Značajke sata omogućuju MCU-u da se primijeni na mnogo različitih procesa brojanja koji mogu biti brzi u rasponu mikrosekundi, ovisno o specifikacijama određenog uređaja, a također mogu biti sporiji u bilo kojem željenom opsegu.

Do sada ste možda već donekle razumjeli koncept mikrokontrolera i njegove priključke i pinove.

Kako stvoriti SPI konektor od programera do mikrokontrolera

Sad je vrijeme da malo dublje zađemo u temu i istražimo svijet programiranja.

Rekavši to, prije nego što se upuštamo u postupak učitavanja programa u čip, moramo pronaći pravi način za integraciju SPI (serijsko periferno sučelje) konektora s MCU-om.

Međutim, čak i nakon ovoga ne možemo samo gurnuti SPI u MCU pinouts, zar ne? Ne možemo dopustiti da se produžene žice s SPI-a izravno umetnu u ploču za kruh. To bi također moglo dovesti do pogrešne postavke žica povezanih s pogrešnim pinovima koji stvaraju loše veze.

Stoga, kako bismo stvari učinili apsolutno besprijekornima, postupke radimo na sićušnoj veroboardi u kojoj dobivamo potrebne za spajanje metalne igle nazvane i 'zaglavlje' zalemljene. Ovi zatiči zaglavlja sada bi se mogli koristiti za spajanje s SPI konektorom. Priključci s ovog zaglavlja mogu se prekinuti s drugim paralelnim zatičima zaglavlja koji se mogu koristiti za veze na ploči.

Stoga gornji sklop sada čini čvrstu i pouzdanu međupoveznicu za SPI na MCU.

Do sada sve izgleda lijepo i savršeno, pa krenimo na zaradu od programera koji je potreban između vašeg računala i MCU-a.

Mogla bi postojati mnoštvo tvrtki koje proizvode i prodaju ove jedinice za programiranje, pa vam nabava ovih ne bi trebao predstavljati problem, kao što su Adafruit Industries, USBtinyISP ili Sparkfun itd.

Nekoliko od njih može izgledati potpuno drugačije od uobičajenih tipova, ali u osnovi imaju sve identično i slijede standardna pravila programiranja i mogu se koristiti kao sučelje između vašeg računala i AVR mikrokontrolera.

Ipak, razmislite ako koristite neki drugi MCU, a ne AVR Atmega32, možda ćete morati potražiti odgovarajuće kompatibilni programer za taj određeni MCU čip.

Može se primijetiti da dosta takvih programera zapošljava identične upravljačke programe, o čemu se mora voditi računa, a o tome ćemo saznati više u sljedećim poglavljima.

Povezivanje vašeg računala s mikrokontrolerskim čipom zaista je osnovno i bilo bi vam drago kad biste saznali koliko su jednostavni postupci za to potrebni. Hajdemo odmah pritisnuti gumbJ

Izrada gore objašnjene ploče sučelja SPI nije teška, sve je u tome da vaše željezno lemilo radi kroz sve veze na prikazana dva reda zaglavlja igala na maloj ploči opće namjene.

Gornja slika prikazuje detalje veze koje biste trebali slijediti dok međusobno povezujete žice između zaglavlja.

Da bismo stvari učinili još jednostavnijima, prođite kroz sljedeće detalje povezivanja za iste pozivajući se na gornju sliku:

SPI pin počevši od gornjeg lijevog dijela ide na 'Master IN, Slave OUT' (MISO)

SPI klin s lijeve strane spaja se s klinom za sat (SCK)

SPI klin u donjem lijevom kutu spaja se sa Resetiranjem. (O ovom pribadači ćemo detaljno naučiti u sljedećim vodičima)

SPI relevantan za donje desne kuke s GND zatičem MCU-a, GND se odnosi na zatik koji čini nultu opskrbnu liniju ili negativnu (relativnu) šinu opskrbe.

SPI koji se završava iz srednjeg desnog zaglavlja povezuje se s 'Master Out, Slave IN' (MOSI) pinom MCU-a.

SPI koji izlazi iz gornjeg desnog zaglavlja povezan je s (+) MCU-a, što je očito Vdd ili pozitivni opskrbni pin MCU-a.

To je to.

Spojite dva konektora kako je objašnjeno i vaša ploča SPI sučelja spremna je za potrebne radnje.

Za daljnju pomoć možete pogledati gornju sliku, vaša konačna ploča sučelja trebala bi izgledati ovako nakon što se svi žičani spojevi na odgovarajući način izvedu uz pomoć gornje rasprave.

Nadam se da ste možda već izgradili SPI sučelje kako je objašnjeno u prethodnom vodiču, a sada je vrijeme da osiguramo da naše računalo prihvati programer koji trebamo integrirati između računala i MCU-a.

Izrada jednostavnog programskog koda za MCU

Uzimamo USBTinyISP jedinicu dostupnu od Sparkfuna za povezivanje računala s mikrokontrolerom.

Znamo da će svaki računalni operativni sustav poput Windows-a zahtijevati upravljačke programe bez kojih bi bilo beskorisno učitati bilo što u računalo, stoga će naš programer trebati upravljačke programe kako bi se učitao u vaše računalo.

Zavirimo u postupke potrebne za instaliranje upravljačkih programa u OS vašeg računala, ovdje ćemo uzeti primjer OS Windows 7 s 32-bitnim ili 64-bitnim specifikacijama.

Otvorite sparkfun.com i kliknite na „stranicu džepnog AVR programera“. Poveznica se može lako vizualizirati na stranici.

Zatim ispod dokumenata pronađite 'Windows driver' i jednostavno ga kliknite.

Ovo će vam pružiti datoteku pocketprog-driver.zip na vašem računalu.

Idite na svoje računalo, pronađite mjesto za preuzimanje i jednostavno otpakirajte preuzetu datoteku u mapu.

U slučaju da je vaše računalo 64-bitni OS, trebate slijediti još nekoliko koraka kako je navedeno u nastavku, s 32-bitnim OS-om možete izravno započeti instalaciju iz raspakirane datoteke.

Za 64-bitne slijedite ove, za 32-bitne jednostavno zanemarite:

Google 'libusb sourceforge' i kliknite na ove veze najnoviju verziju.

Naišli biste na nekoliko dodatnih datoteka, no zanimalo bi vas da pronađete datoteku bib, to jest: libusb-win32-bin - #. #. #. #. Zip

Sada idite i pronađite ovo mjesto za preuzimanje na računalu, raspakirajte ga i spremite u jednu od mapa.

U ovu mapu prijeđite preko mape bin, nastavljajući do mape amd64.

Ovdje biste vidjeli nekoliko mapa kao: ghcalled libusb0.dll i libusb0.sys.

Morali biste ih preimenovati u: libusb0_x64.dll i libusb0_x64.sys.

Sada ćete morati kopirati gore navedene datoteke u mapu pocketprog-driver, jednostavno prepisati datoteke na postojeću verziju.

Da biste instalirali gornje upravljačke programe, zanimala bi vas sljedeća metoda koja je prilično nekonvencionalna:

To je način 'dodaj naslijeđeni hardver'.

Kliknite 'Izbornik Start'

Zatim nastavite desnim klikom na 'računalo'

Kliknite 'Upravljanje' i na kraju kliknite 'Upravitelj uređaja'

Dalje, u izborniku odaberite 'Dodaj naslijeđeni hardver'

Nastavite pritiskati 'next', dok se čarobnjak ne umetne

Slijedeći upute, kliknite 'Instaliraj hardver koji biste trebali odabrati s naprednog popisa', to će tražiti ikonu radio gumba u taj odabir. To je zapravo gumb za upravljanje prozorom koji bi se sada činio poput majušnog kruga koji u sebi ima okruglasto plavu podlogu.

Sada jednostavno kliknite 'Dalje'

Ovo će vam prikazati izbornik 'Prikaži sve uređaje' na koji ćete trebati kliknuti.

Nakon toga kliknite na ikonu “Have Disk”.

Uz pomoć ikone 'Pregledaj' idite na mjesto mape pocketprog-driver. Ako ste odabir pravilno obavili, vizualizirali biste datoteku pocketprog.inf smještenu u toj određenoj mapi.

Dvaput kliknite ovu datoteku i sigurno biste bili svjedoci instaliranja upravljačkog programa na vaše računalo.

Više i više !! Krenimo s našim sljedećim uputstvom na sljedećoj stranici.

Do sada ste možda instalirali potreban softver i izgradili SPI sučelje.

Kako prenijeti program u čip mikrokontrolera

Sljedeći će korak zahtijevati nekoliko komponenata kao što su ploča, LED i proračunski otpor za predviđenu primjenu.

U ovom ćemo odjeljku naučiti metodu testiranja programera i potvrditi instalaciju odgovarajućih upravljačkih programa i softvera.

Kako bismo provjerili jesu li upravljački programi i softver ispravno instalirani, implementirat ćemo jednostavan program poznat kao avrdude.

AVRdude je program povezan s najnovijom instalacijom WinAVR-a bez kojeg stvarni prijenos datoteke u MCU ne može biti moguć.

Ovaj je program .hex format datoteke koji u osnovi postaje razumljiv MCU-u za potrebna izvršenja.

U slučaju da provjera ne uspije, programer neće moći izvršiti prijenos datoteke.

Pogledajmo brzo kako možemo provesti postupak testiranja uz pomoć sljedećih uputa:

Otvorite upit DOS (Disk operativni sustav) klikom na 'izbornik start' i upisivanjem cmd.exe u zadani okvir za pretraživanje.

Sada se izvođenje AVRdude može obaviti jednostavnim upisivanjem avrdude -c usbtiny -p m32 preko DOS-ove obavijesti. Čim se ovo primijeni, DOS će odmah prepoznati je li veza uspješna.

U gornjoj naredbi, “-c” je obavijesna zastava koja uključuje specifikaciju parametra programera “usbtiny”, dok oznaka “-p” identificira uređaj mikrokontrolera (“m32 koji označava Atmega32).

U slučaju da ste koristili drugačiji MCU, morat ćete uključiti odgovarajuće prefikse za implementaciju.

Kad je gornji postupak završen, možete upisati 'exit' preko DOS-ove obavijesti i to će vas odvesti van prozora.

Ako se ozbiljno pitate u vezi sa stvarnim detaljima programiranja, dobro bismo za to prvo trebali lemiti i konstruirati vanjski analogni LED krug preko kojeg bi se program mogao implementirati, jer ako ne postoji sustav koji potvrđuje odgovor MCU-a, programiranje a pokretanje mikrokontrolera bilo bi sasvim besmisleno.

Izrada LED ploče je vrlo jednostavna, radi se o lemljenju dva vodiča LED-a preko komada vero-ploče i spojite otpornik s jednim od kabela LED-a. Uloga ove LED diode je samo ograničiti struju na LED kako ona ne bi izgorjela zbog prekomjernog napona ad struje s izlaza MCU-a.

Vrijednost otpora može se izračunati pomoću sljedeće jednostavne formule:

R = (Ub - LEDfwd) / I

Gdje je Ub napon napajanja, LEDfwd je optimalni radni napon korištene LED diode, a I optimalna pojačala.

Pretpostavimo da koristimo CRVENU LED diodu koja ima LED napon = 2,5V i struju I = 20mA, gornja jednadžba može se riješiti na sljedeći način:

Budući da bi napon iz MCU-a bio 5V, on se može izraziti kao:

R = (5 - 2,5) /. 02 = 125 ohma, ¼ vat, a najbliža vrijednost je 120 ohma.

Sada imamo LED, otpor od 120 ohma i veroboard, jednostavno spojite gore navedene komponente kako je dato na dijagramu s mikrokontrolerom.

Nakon što se to učini, MCU se može programirati za željeni odgovor na gore postavljenoj LED lampici.

Dalje, programiranje MCU-a.

Da bi se mikrokontroleru omogućilo da izvrši neke značajne implementacije, nužno je upisati odgovarajuće upute u MCU.

Kako instalirati programsko okruženje i istražiti WinAVR

Za ovo bismo vjerojatno mogli koristiti svoj vlastiti 'uređivač teksta' na svom računalu, iako bi svi od nas cijenili upotrebu profesionalnijeg 'programskog okruženja' umjesto uobičajenog uređivača teksta, jednostavnog jer bi vam ovaj pristup omogućio uživanje u nekim ugrađene zanimljive značajke unutar ovog paketa 'programskog okruženja'.

Podržao bi stvaranje i uređivanje programa na različitim jezicima, a također bi ih kompilirao u način isporuke koji lako može razumjeti i prihvatiti čip mikrokontrolera.

U konačnici bi to podržao WinAVR i prebacio u dotični MCU čip.

WinAVR bi mogao biti opremljen i za izvršavanje mnogih drugih operacija, poput rješavanja problema s programima i upozorenja na moguću sintaksu i sastavljanje pogrešaka i pogrešaka. O njima ćemo razgovarati u našim kasnijim tutorijalima.

Kurs instalacije WinAVR-a biste učinili izuzetno brzim i brzim. Zaronimo u detalje sa sljedećim točkama:

Morat ćete preuzeti najnovije verzije iz mape izvornih datoteka WinAVR. Našli biste korisne informacije povezane s ovim preuzimanjem sa njegove službene web stranice.

Od vas će se zatražiti sigurnosni upit, tako da možete odgovoriti ako želite da se preuzimanje izvrši, postavilo se da je datoteka koja se preuzima izvršna datoteka.

Preuzmite datoteku i započnite postupak izvršenja klikom na nju. Neka instalacija započne.

Postupak će vas voditi s nekoliko pitanja koja odgovaraju, tako da ćete moći usmjeriti instalaciju prema svojoj udobnosti. Mnoge od njih želite zanemariti prema zadanim obrascima, a na vama bi bilo da odaberete one za koje smatrate da su najprikladniji za radnje.

Do sada biste sve smatrali sasvim normalnim i laganim i pronašli biste nekoliko opcija u početnom izborniku. Bez brige, samo bi neki od njih zapravo koristili samo jedan od naziva 'programerska bilježnica'.

Jednom kada kliknete na ovu ikonu, pokrenut će korisničko sučelje kako biste mogli primijeniti pisanje programa (poput stvaranja i uređivanja). Također biste bili svjedoci programa koji se sastoji od naredbi izbornika za pomoć u sastavljanju kodova i ugradnji u mikrokontroler.

Temeljni posao gornjeg programa za bilješke programera je transformacija čitljivog koda koji biste napisali u niz uputa razumljivih samo MCU-u.

Sljedeći vodič obuhvatit će testiranje gore navedenog programera kako bismo mogli biti sigurni u njegovu kompatibilnost sa sustavom Windows i da li se savršeno 'rukuje' s IC-om vašeg mikrokontrolera.

Kako programirati MCU za uključivanje LED diode

Jednom kada se to potvrdi, nastavili bismo s izradom malog koda 'ništa ne raditi', samo da bismo osigurali da postupak prijenosa koda ne nailazi na pogreške.

Naravno da smo sada spremni implementirati svoj prvi program unutar MCU-a, ali prije toga bilo bi zanimljivo brzo sažeti ono što smo radili tijekom naših prethodnih vodiča:

Mi smo nabavili AVR Atmel mikrokontroler prema našoj potrebnoj specifikaciji, ovdje smo za ilustracije koristili ATMega32. Sljedeće smo naučili o osnovama mikrokontrolera i programskoj jedinici koja je odgovorna za prijenos programa u MCU čip.

Dalje, izradili smo konektor za sučelje SP koji je neophodan kako bi vaše računalo moglo biti povezano s mikrokontrolerom za programiranje.

Nakon toga potvrdili smo jesu li upravljački programi ispravno instalirani u računalo za 32-bitni i 64-operativni sustav.

Dalje, instalirali smo programsko okruženje nazvano Win AVR za olakšavanje jednostavnog pisanja prijenosa oglasa kodova u mikrokontroler, nakon čega slijedi implementacija avrdude za provjeru programera s vašim računalom i mikrokontrolerom koji su međusobno povezani.

Napokon smo u prethodnom poglavlju završili s izradom kruga LED / otpornika i povezali ga s odgovarajućim MCU izlazima.

To je doista puno posla, ipak je vrijeme da se odmah upustite u neke stvarne programske stvari!

Za početak bismo željeli podijeliti mikrokontroler u tri kategorije što bi nam puno pojednostavilo razumijevanje:

Kontrola, otkrivanje i komunikacija

Bilo bi zanimljivo znati da se gore navedene funkcije mogu programirati na mnogo različitih načina.

U našem prvom programu pokušali bismo narediti mikrokontroleru da 'kontrolira' vanjski parametar, da, u pravu ste, to bi bila LED dioda koju smo nedavno izgradili.

Da budemo precizni, reći ćemo MCU-u da uključi spojeni LED, da, znam da ovo izgleda prilično primitivno, ali početna faza uvijek mora biti lagana.

Kretanje prema sadašnjem poslu, čineći da MCU upravlja LED diodom, zapravo je prilično jednostavno:

Zbog toga upućujemo na pin # 0 na PORTU B da proizvede potrebnih 5 V za LED.

Podsjetimo iz prethodnog vodiča, anodu LED-a povezali smo na gore spomenuti pin MCU-a.

Dvije su bitne stvari koje je potrebno adresirati na ovaj pin MCU-a: 1) izlaz i 2) 5 volti

Naučit ćemo način na koji ćemo uputiti određeni pin da postane izlaz MCU-a.

Jednom kada se postavi kao izlaz čipa, možemo ga uputiti da bude ili 'visok' (5 V) ili 'nizak' (0 V) za aplikaciju.

Budući da bilo koji logički sklop, kao što je MCU, pinovi mogu biti ili izlaz ili ulaz i mogu biti konfigurirani da proizvode ili logičku visoku ili logičku nisku vrijednost, pinovi trebaju biti dodijeljeni samo da budu logički visoki ili logički niski , ne postoje nikakva srednja ili nedefinirana stanja, osim ovih nekoliko stanja za mikrokontrolere ili bilo koji digitalni IC, što se toga tiče. Također se isto odnosi na svaki pin MCU-a.

Što se tiče dodjele ulaznih i izlaznih pinova, ulazi bi bili pozicionirani da prihvaćaju signale s vanjskih analognih stupnjeva, dok bi izlazi bili odgovorni za njihovo tumačenje u navedena logička stanja ili frekvenciju.

Iako bi se gornji zadaci mogli izvoditi na mnogo različitih metoda, mi bismo radi jednostavnosti razgovarali o jednom od njih. Međutim, moramo imati na umu da iako onaj koji bi se sada predstavio izgleda lako i zanimljivo, nije toliko održiv i nije preporučljiv tip za sve MCU aplikacije, iz istog razloga iz kojeg biste kasnije upoznali popularnije metode programiranja . Ovi će programi omogućiti dodjeljivanje samo željenih pribadača prema specifikacijama, bez utjecaja na ostale susjedne koje bi mogle biti već dodijeljene za obavljanje nekih drugih funkcija.

Međutim, trenutno se nećemo toliko mučiti oko ostalih pribadača i koristili bismo samo relevantne pribadače, izbjegavajući u određenoj mjeri komplikacije.

Za dodjelu pin-a kao izlaza trebamo upotrijebiti Data Direction Register (DDR). Ako se pitate što ovdje znači registar, to je jednostavno prostor u MCU-u koji omogućuje mikrokontroleru da odgovori na neki određeni način.

Korištenjem DDR-a možemo postaviti pin da šalje podatke koji su poput 'izlaza' ili prihvaćamo podatke koji su u obliku 'ulaza'.

No što se tiče riječi, što to znači? Podaci dodaju treću dimenziju na pinove kojima se može dodijeliti kontinuirano logička nula (0V) ili logička visoka (5V), ali što je sa signalima koji mogu brzo varirati, poput frekvencije impulsa. Frekvencija bi bila popraćena visokom i niskom logikom (5 V i 0 V) ​​koja oscilira s određenim intervalima ili razdobljima, pa postaje vremenski orijentirana i može se prilagoditi u odnosu na vrijeme, zato identificiramo kao „podatak” što znači parametar funkcija u odnosu na drugu funkciju (logička stanja i vrijeme).

Jedna metoda dodjeljivanja pin0 kao izlaza je pisanjem sljedećeg koda:

DDRB = 0b00000001

U gornjem programu DDRB označava Registar usmjerenja podataka za PORT B ​​0b upućuje sastavljača u vezi sa sljedećim binarnim izrazom broja dok '1' na kraju izraza označava položaj pin0, odnosno njegovo mjesto u obliku prvog pina LUKE B.

Ako se sjećate, saznali smo da PORT B ​​s njim povezuje 8 pinova (od 0 do pin7), a ako primijetite da gornji kôd ima i 8 znamenki, što znači da svaka znamenka označava ovih 8 pinova LUKA B.

Sada bi sljedeći postupak bio dodijeliti 5V ovom pinu (pin0). Opet je princip rada identičan DDR-u kako je gore izraženo kroz sljedeći binarni kod:

PORTB = 0b00000001

Kao što se može vidjeti, jedina razlika između gornjeg koda i ranijeg je u tome što smo u ovom kodu koristili PORT registar. Ovaj registar posebno obrađuje dodjele pinova određenog priključka za koji je postavljen unutar MCU-a. Stoga nam omogućuje da dodijelimo stvarne logike podataka (0 ili 1) za te pinoute.

Sada bismo mogli biti zainteresirani za raspravu o nekim približnim detaljima našeg programa. Kao što znamo da svi programi zahtijevaju određeni prostor za pokretanje izvršenja, to se može usporediti s kuharom koji zna sve sastojke u vezi s određenim receptom, ali nije upućen odakle početi.

Ovdje je 'glavna' funkcija mjesto na kojem svaki od C / C ++ programa pokreće izvršavanje. Stoga se glavni može stvoriti kao:

int main (void)
{
}

Međutim, da bi program mogao interpretirati detalje DDR i PORT registra i njihovo funkcioniranje unutar MCU čipa, potrebno je uključiti dodatnu izjavu koja se može sastojati od svih podataka koji se odnose na AVR MCU. Možda bismo željeli dodati ovo uključivanje u sve naše programe.

#include
int main (void)
{
}

Čim započne kompilacija, odjeljak pretprocesora kompajlera usredotočuje se na AVR direktorij kako bi identificirao datoteku 'io.h'. Proširenje '.h' ovdje označava da je to datoteka zaglavlja i da će ovaj kôd unutar datoteke biti uveden na početku (glava) izvorne datoteke koja se stvara, pa otuda i naziv 'zaglavlje'.

Ovdje dalje možemo uvesti DDR i PORT izjave u naš kod, jer bi dodavanje datoteke zaglavlja io.h uputilo prevoditelja na njih.

#include

int main (void)

{

DDRB = 0b00000001 // Podatkovni registar registra postavki postavljanje pin0 na izlaz i preostale pinove kao ulaz

PORTB = 0b00000001 // Postavite pin0 na 5 volti

}

Gore navedeno popravlja orijentaciju pin0 kao izlaza, magnitude 5V. Međutim, još uvijek postoji jedan problem koji nije utvrđen za ovaj pin, odnosno taj pin treba još biti uključen na neodređeno vrijeme dok je MCU uključen. Ova beskonačna povratna sprega osigurala bi da se ovaj pin s MCU-a ne ISKLJUČI, već nastavlja s 5V izlazom na neodređeno vrijeme.

Iako postoji mnogo različitih metoda primjene uputa petlje za pin, ovdje bismo pokušali upotrijebiti petlju 'while'. Kao što i samo ime govori, petlja 'while' govori mikrokontroleru da je 'dok je napajanje dostupno trebate ostati aktivirani s dodijeljenih 5 V za dodijeljeni pinout.

#include

int main (void)

{

DDRB = 0b00000001 // Podatkovni registar registra postavki postavljanje pin0 na izlaz i preostale pinove kao ulaz

PORTB = 0b00000001 // Postavite pin0 na 5 volti

dok (1)

{

// Kôd bi bio ovdje ako bi se trebao izvoditi uvijek iznova i iznova ... beskrajno

}

}

Možda biste htjeli primijetiti da smo ovdje koristili '1' u obliku argumenta za petlju 'while', jer se sve osim '0' moglo smatrati logičnim 'istinitim'.

To podrazumijeva da razmatranje petlje 'while' nikada ne bi bilo odgovorno ni za što osim za logično 'true', što znači da bi se određeni pin na neodređeno vrijeme zakačio s navedenim stanjem.

Može se posvjedočiti da LED dioda svijetli trajno na dodijeljenom pinu sve dok MCU prima snagu preko svojih Vdd i Vss.

To je to, sada imamo rezultat koji smo željeli dobiti i napokon možemo vidjeti da se to događa nakon toliko napornog rada, ali unatoč tome gledanje slatkog rezultata našeg napornog rada toliko je zadovoljavajuće.

U sljedećim tutorijalima naučit ćemo kako dodati dimenziju 'vrijeme' gornjoj LED lampici, odnosno kako treptati određenom brzinom.

Zapravo, u gornjoj implementaciji, LED zapravo trepće, ali brzina petlje je toliko brza da je gotovo poput trajnog UKLJUČIVANJA preko LED osvjetljenja.

Vidjet ćemo kako se ova petlja može dodati sa zakašnjenjem po želji kako bi LED trepnuo pri toj odgođenoj brzini.

Kako napraviti LED žmigavac pomoću AVR mikrokontrolera

U posljednjoj raspravi naučili smo kako LED uključiti preko mikrokontrolera, bilo je izvanredno zar ne? Možda nije toliko!

Ovdje ćemo naučiti kako začiniti gornje LED osvjetljenje pripisujući dvosmjernu funkcionalnost, odnosno pokušat ćemo ga treptati ili treptati na određenoj frekvenciji ili brzini. Vidjet ćemo i kako bi se ta stopa mogla povećati ili smanjiti po želji korisnika.

Pogledajmo ovo:

#include

#include

int main (void)

{

DDRB | = 1<< PINB0

dok (1)

{

PORTB ^ = 1<< PINB0

_zakašnjenje_ms (100)

}

}

Ako se zbunjujete onim čudnim simbolima (&, ^, | itd.) Koji se koriste u gornjem izrazu (& nije tamo, ali bi se mogao koristiti u drugim sličnim kodovima), evo povezanih informacija koje biste željeli znati o njima :

Uključuje mnoge standardne logičke algoritme poput AND, OR, NOT i XOR koji se obično koriste s gornjim kodom.

Te logičke funkcije posebno uspoređuju dva bita '1' i '0' u skladu s dodijeljenim tablicama istine.

Ideju ćemo dobiti analizirajući sljedeći raspored bitova:

01001011 &
10001101
jednako
00001001

U gornjem kodu & odnosi se na AND kao što se koristi u programiranju C.

Vertikalno čitanje redova sugerira da su 0 i 1 jednaki 0, 1 i 0, jednako je 0, 0 i 0 jednako je 0, 1 i 1 jednako je 1. Čitanje je jednostavno kao to. To su prema tablici istine operatora AND.

Ako procijenimo sljedeću tablicu, ona označava simbol '|' označavajući upotrebu funkcionalnosti 'ILI', '|' može se naći s lijeve strane 'backspace' na tipkovnici računala:

01001011 |
10001101
jednako
11001111

Ovako tablica istinitosti funkcionalnosti OR logike ukazuje da su bitovi 0 ili 1 jednaki 1, 1 ili 0 također jednaki 1, 0 ili 0 jednako 0, dok je 1 ili 1 jednako 1.

Sljedeća kombinacija bitova je za XOR logički operator označen sa ^ i može se proučavati baš kao što smo to učinili s tablicama I, ILI istine:

01001011 ^
10001101
jednako
11000110

Sada nastavimo s prvim programom i naučimo što znači sljedeći redak u njemu:

#include

Kroz naše prethodne vodiče znamo kako izraz funkcionira, pa ga nećemo ponavljati, no čini se da su oni novi 'uključuju' izraženi s #include koji treba istražiti.

U ovo 'uključi' odgodu.h omogućuje nam nekoliko jednostavnih metoda implementacije.

Kao što naziv sugerira kašnjenje.h omogućuje nam kašnjenje u određenom programu.

Sljedeći izraz int main (void) mogao bi se izostaviti iz tekuće rasprave jer smo to već obrađivali u našim ranijim postovima.

Slijedi izmijenjeni DDRB.

Sljedeće prikazuje raniji oblik koji nije bolji način dodjeljivanja pinova jer su sve pinove od 0 do 7 prebačene u oblik ulaza. Ali samo zamislite kakva bi bila situacija kad bismo željeli stvoriti duži program koji zahtijeva te igle za neku drugu funkcionalnost? Na primjer, pin2 može biti potreban za primjenu daljinskog prebacivanja uređaja. U tom slučaju ne bismo htjeli dodijeliti isti kao ulaz samo putem pokušaja i pogrešaka. To može značiti netočan odgovor daljinskog predajnika na prijemnik uređaja.

DDRB = 0b00000001

Radije želimo utjecati samo na jedan bit, na pin0 bit, bacajući pogled na 'ILI' funkcionalnost koja se može izvršiti binarnim maskiranjem.

DDRB = DDRB | 0b00000001

Ovdje je zastrto maskom „ILI“: 0b00000001, iako se čini da je autentičan binarni broj, u slučaju da bi ranija DDRB, na primjer: 0b01001010, tada primjenom OR na ovo putem maskiranja moglo dobiti: 0b01001010 | 0b00000001 = 0b01001011.

Dobivena razlika kao što se moglo vidjeti samo je kod pin0 čiji su se bitovi promijenili!

Komprimiranje gornje izjave još dalje putem C ++ daje:

DDRB | = 0b00000001

Međutim, otkrivamo da u danom programu ima još više. Iako može izgledati sasvim legitimno i očito, trebali bismo iskoristiti neke od izjava iz datoteke zaglavlja io.h, pogotovo kada je u osnovi stvorena za našu udobnost?

Dakle, ako je „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.

Dakle, započinjemo s 0b00000000 i stavljamo '1' da proizvedemo 0b0000001, a zatim ga prebacujemo u lijeve 0 pozicije, što daje točno identičan 0b00000001 kao gore.

Ako se pretpostavlja da je PINB4, izjava se može izraziti kao 1<< PINB4. I this case the “1” would be pushed to the left 4 locations producing: 0b00010000.

Pazimo da koristimo indeks nula što znači da nakon '1' postoje četiri nule.

Sada prelazeći na petlju 'while' ranije smo imali bilješke preko 'beskonačne petlje'. Ali možda sada želimo da mikrokontroler provede neka od željenih izvršenja. To je moguće samo unutar zadane petlje. To je petlja u kojoj se određeni slijed ponavlja iznova i iznova.

U slučaju da bi se izvršenje postavilo prije petlje, implementiralo bi se samo jednom.

Međutim, da bi LED neprekidno treptao, bilo bi potrebno naizmjence UKLJUČITI / ISKLJUČITI PINB0 unutar petlje. Ovdje također pronalazimo kašnjenja koja bi bila uvedena, bez kojih bi treptanje LED-a bilo nemoguće. Ali to bi natjeralo LED da trepće vrlo brzo, teško ga je prepoznati golim okom, trebat će malo usporiti da bi postalo prepoznatljivo s našim očima.

Svjesni smo postupka postavljanja određenog bita u binarnom broju, ali nismo sigurni u način primjene određenog bita '0' u slučaju da je to još '1'.

Sljedeći program mogao bi se vidjeti kako to radi, ali također ćemo utvrditi da možda nije vidljiv u programu.

Početne dvije izjave mijenjaju bit u „1“ (5 V, LED svjetla), a zatim se uvodi pauza od 100 ms.

Sljedećih nekoliko redaka pretvara bit PINB0 u '0' (nulti napon, LED isključen), ali nažalost, AND usporedba neće moći izvršiti '0' iz bita, ali ako koristimo NOT '~' za binarnu masku mogao bi prebaciti sve 0 na 1 i obrnuto.

To će nam omogućiti da utječemo samo na bit PINB0 i preokrenemo ga na '0'. Zagrada je bila uključena kako bi sadržavala izvršavanje maskiranja tako da se operacija NOT može primijeniti na cijele maske, a ne samo na '1' prije lijevog pomaka '<<”.

PORTB | = 1<< PINB0
_zakašnjenje_ms (100)
PORTB & = ~ (1<< PINB0)
_zakašnjenje_ms (100)

Kako bismo stvorili kašnjenja UKLJUČENO ISKLJUČENO ili razdoblja jednakog trajanja, možemo smanjiti prethodna četiri retka na dva i primijeniti XOR funkcionalnost u svoju korist. Potrebno je napomenuti da je XOR izvršavanje dodijeljeno pin-u 1 u slučaju da je 0 i obrnuto. Ovo izvršavanje utjecalo bi samo na PINB0. Kao što se možda primjenjuje naredba, ona bi jednostavno pretvorila bit u suprotno od postojeće logike.

PORTB ^ = 1<< PINB0
_zakašnjenje_ms (100)

GOTOVO! Vaša LED dioda sada bi treptala prema zadanoj brzini ... Jednostavno, zar ne?




Prethodno: Daljinski upravljački krug više uređaja Dalje: Faza izmjenične struje, neutralna, krug indikatora zemljospoja