Uuritud mikrokontrolleri põhitõed

Proovige Meie Instrumenti Probleemide Kõrvaldamiseks





Üks asi on mikrokontrolleri IC-de puhul suurepärane, need on saadaval peaaegu kõikjal maailmas ja elektrooniliste jaemüüjate hulgas.

Sissejuhatus

Põhimõtteliselt kasutatakse mikrokontrollerseadmeid rakendustes, mis hõlmavad ümbritseva keskkonna hindamist, ja sarnases elektroonikas.



Neid seadmeid võib kasutada teatud parameetri kuvamiseks mootori juhtimisrakendustes, LED-valgustites, erinevat tüüpi andurites, näiteks kallutusandur, kiirendusmõõtur, kiirusemõõtur, andmelogerid, temperatuuri regulaatorid, klaviatuurid jne.

Esmase arusaama mikrokontrolleritest võiks saada, viidates AVR Amega32 mikrokontrollerile, mis on nii arenenud, et mõnikord nimetatakse seda kiibis olevaks arvutiks.



See seade on määratud programmi moodustamiseks käskude jada täitma.

Programmi keel, mida siin näete, on C ++. Siin keeles saate õppida seda keelt põhjalikumalt.

Mis puutub MCU-desse, saate võimaluse kontrollida kõiki selle pinoute ja neid konfigureerida.

Kui olete sellest veidi väsinud, siis lihtsalt jahutage, sest see pole üldse midagi keerulist, teid hõlbustavad kõik aspektid kindlalt, kuid kindlalt, kui me edasi liigume.

MCU kiibis saab kõik tihvtid, välja arvatud Vdd ja Vss, mis on kiibi toitepistikud, määrata eksklusiivsete tähistega.

Pinouti üksikasjad

Kui vaatate kiipi ülevalt, leiate väikese kolmnurkse sälgu, mis tähistab alguspunkti, kust pinouts algab, see tähendab, et kiibi # 1 tihvt algab just selle sälgu alt.

Sellest tihvtist alustades leiate sellel küljel (vasakul) 20 tihvti ülespoole ja teiselt poolt (paremalt) veel 20 tihvti, jätkates paremalt alt ülespoole.

Esimesed 8 sälku alustavat tihvti on PBO-7, mis moodustavad IC indeksnõelad, kuna kogu siinne programm algab indeksiga null.

Ülaltoodud pinoutide seeriat nimetatakse PORT B-ks, samas kui A-D-le on määratud muid identseid pordikomplekte.

Need pordid võiks määrata sisseantud andmete INPUT aktsepteerimiseks ja tuvastamiseks ning andmete edastamiseks mingis konkreetses vormis nimega OUTPUT.

Kaks üldkategooriasse kuuluvat tihvti on (+) / (-) tihvtid, millele viidatakse ka kui Vdd ja GND.

Üks port PORT D-st (PDO-6) võib näha kiibi vasakul küljel alaosas.

PD7, mis on Pordi D tihvt nr 7, saab jälgida üksi seistes ja alustades parempoolsete pinoutide seeriat.

Nüüd liikudes kiibi parempoolsest küljest, kus PORT D lõpeb, alustab PORT C loendamist järjestuses ülespoole.

Need aitavad kaasa MCU paljudele huvitavatele tihvtidele alates analoogist kuni digitaalseni.

Nendest tihvtidest saab väljapoole konfigureeritud analoogahelate etappide kaudu paljude parameetrite tuvastamise sensorid.

Ülaltoodud tihvtid moodustavad PORT A.

Ülaltoodud tihvtide analoog-digitaalmuundamist saab mõista näite abil, kus tavalisele andurile, näiteks termistorile tuvastatud analoogtemperatuuri tase rakendatakse ühele PORT A tihvtidest, mille MCU kergesti aktsepteerib ja muundab digitaalse näidu loomiseks nullist 255 kraadini F (8-bitine näitaja, mida saab 10-bitise väljundi saamiseks uuendada).

Teine omadus, mida MCU-des võib lisaks näha, on olemasolev programmeerimisruum või mälu, mis määrab ruumi mikrokontrollerile määratud muutujate ja programmi jaoks.

Lisaks sellele on MCU-del asjakohaste parameetrite loendamiseks määratud sisseehitatud kell.

Kellafunktsioonid võimaldavad MCU-l rakendada ennast paljude erinevate loendamisprotsesside jaoks, mis võivad olla mikrosekundite vahemikus kiire, sõltuvalt konkreetse seadme spetsifikatsioonist, ja võivad olla ka soovitud ulatuses aeglasemad.

Nüüdseks olete mikrokontrolleri kontseptsioonist mingil määral aru saanud ning seoses selle pordide ja tihvtidega.

Kuidas luua SPI-pistikut programmeerijalt mikrokontrollerile

Nüüd on aeg minna teemasse veidi sügavamale ja uurida programmitöö maailma.

Seda öeldes peame enne kiibile programmi laadimise protseduuri leidmist leidma õige viisi SPI (Serial Peripheral Interface) pistiku integreerimiseks MCU-ga.

Kuid isegi pärast seda ei saa me SPI-d lihtsalt MCU-pistikutesse suruda, kas pole? Samuti ei saa me lubada, et SPI pikendatud juhtmed satuvad otse leivaplaati. See võib põhjustada ka valede juhtmete seadistuse, mis on ühendatud valede tihvtidega, mis ühendavad valesti.

Seetõttu, et asjad oleksid absoluutselt laitmatud, teeme protseduurid väikesel vereraudal, kus saame vajalikud ühendatavad metallist tihvtid, mida nimetatakse ka 'päiseks' joodetuks. Neid päise tihvte sai nüüd kasutada SPI-pistikuga ühendamiseks. Selle päise ühendused võib katkestada teise paralleelse päise tihvtidega, mida võib kasutada leivaplaadi ühenduste jaoks.

Seega moodustab ülaltoodud komplekt SPI ja MCU vahelise mugava ja usaldusväärse vahepealse ühendamise platvormi.

Nüüd on kõik näiliselt kena ja täiuslik, nii et jätkame teenimist teie programmeerijaga seoses, mis on vajalik teie arvuti ja MCU vahel.

Seal võiks olla palju ettevõtteid, kes neid programmeerijaüksusi valmistavad ja müüvad, nii et nende hankimine ei tohiks teile probleem olla, näiteks Adafruit Industries, USBtinyISP või Sparkfun jne.

Mõni neist võib tavalistest tüüpidest täiesti erinev välja näha, kuid põhimõtteliselt on kõik identsed ja järgivad standardseid programmeerimisreegleid ning neid võib kasutada teie arvuti ja AVR mikrokontrolleri vahelise liidesena.

Kuid veenduge ühest mõttest, et kui kasutate mõnda muud MCU-d, mitte AVR Atmega32, peate võib-olla kontrollima, kas selle konkreetse MCU-kiibi jaoks on vastav ühilduv programmeerija.

Võib täheldada, et paljud neist programmeerijatest kasutavad ühesuguseid draivereid, millegi eest tuleb hoolitseda ja me saame sellest lähemalt teada järgmistest peatükkidest.

Arvuti ühendamine mikrokontrolleri kiibiga on tõeliselt lihtne ja teil oleks hea meel teada, kui lihtsad on selleks toimingud. Nii et lööme kohe nuppuJ

Eespool selgitatud SPI-liideseplaadi valmistamine pole keeruline, see seisneb selles, et jootekolb töötab läbi kõigi ühenduste, mis on näidatud kahe üldise üldplaadi näidatud kahe päiserea tihvtide vahel.

Ülaltoodud joonis näitab ühenduse üksikasju, mida peate päiste vahel juhtmete ühendamisel järgima.

Asjade veelgi lihtsamaks tegemiseks läbime ülaltoodud pildile viidates järgmised ühenduse üksikasjad.

SPI tihvt, mis algab ülevalt vasakult, läheb 'Master IN, Slave OUT' (MISO)

SPI tihvt vasakult keskelt ühendub kella tihvtiga (SCK)

SPI tihvt vasakus alanurgas ühendub lähtestamisega. (Me õpime selle tihvti kohta üksikasjalikult järgmistest õpetustest)

Parempoolses alumises osas olev SPI haakub MCU GND tihvtiga, GND viitab tihvtile, mis moodustab toiteallika nulli või negatiivse (suhtelise) rööpa.

SPI, mis lõpeb paremast keskpäisest, ühendub MCU tihvtiga „Master Out, Slave IN” (MOSI).

Parempoolsest päisest väljuv SPI on ühendatud MCU (+) - ga, mis on ilmselgelt VU või MCU positiivne toitetapp.

See on kõik.

Ühendage kaks pistikut, nagu on selgitatud, ja teie SPI-liideseplaat on vajalike toimingute jaoks valmis.

Täiendava abi saamiseks võite vaadata ülaltoodud joonist, et teie lõplik liideseplaat peaks selline välja nägema, kui kõik traadiühendused on ülaltoodud arutelu abil asjakohaselt tehtud.

Loodan, et olete võib-olla juba SPI-liidese konstrueerinud, nagu eelmises õpetuses selgitatud, ja nüüd on aeg tagada, et meie arvuti aktsepteerib programmeerijat, mille peame arvuti ja MCU vahele integreerima.

Lihtsa programmeerimiskoodi loomine MCU-le

Arvuti ühendamiseks mikrokontrolleriga võtame Sparkfunilt saadaval oleva USBTinyISP-seadme.

Me teame, et iga arvuti operatsioonisüsteem, näiteks Windows, nõuab draivereid, ilma milleta oleks mõttetu midagi arvutisse laadida, seega vajab meie programmeerija teie arvutisse laadimiseks draivereid.

Vaadakem draiverite installimiseks vajalikke protseduure oma arvuti operatsioonisüsteemi. Siinkohal võtame näite Windows 7 OS-st koos 32- või 64-bitiste spetsifikatsioonidega.

Avage sparkfun.com ja klõpsake „tasku AVR-i programmeerija leht“. Linki saab lehel hõlpsasti visualiseerida.

Järgmisena leidke dokumentide alt „Windowsi draiver” ja klõpsake sellel lihtsalt.

See annab teile arvutis faili pocketprog-driver.zip.

Minge arvutisse, leidke allalaadimiskoht ja pakkige allalaaditud fail lihtsalt kausta.

Kui teie arvuti on 64-bitine operatsioonisüsteem, peate järgima veel mõnda sammu, nagu on toodud allpool. 32-bitise operatsioonisüsteemiga saate installimist otse lahti pakkimata failist alustada.

Järgige neid 64-bitiste puhul 32-bitiste puhul lihtsalt:

Google 'libusb sourceforge' ja klõpsake sellel lingil uusimat versiooni.

Teile satuks mõni täiendav fail, kuid oleksite siiski huvitatud rinnanibude leidmisest, see tähendab: libusb-win32-bin - #. #. #. #. Zip

Minge ja leidke see allalaadimiskoht arvutisse, pakkige see lahti ja salvestage see ühte kausta.

Selles kaustas navigeerige prügikasti kausta ja jätkake kausta amd64.

Siin näete paari kausta: ghcalled libusb0.dll ja libusb0.sys.

Soovite need ümber nimetada järgmisteks: libusb0_x64.dll ja libusb0_x64.sys.

Nüüd peate ülaltoodud failid kopeerima taskprog-draiveri kausta, lihtsalt kirjutage olemasoleva versiooni failid üle.

Eespool nimetatud draiverite installimiseks pakuks teile huvi järgmine meetod, mis on oma olemuselt pigem tavapärane:

See on režiim „lisage päritud riistvara”.

Klõpsake nuppu „Start Menu”

Seejärel jätkake paremklõpsuga nupul „arvuti”

Klõpsake nupul „Halda” ja lõpuks valikul „Seadmehaldur”

Järgmisena valige menüüs „Add Legacy Hardware”

Vajutage nuppu „Järgmine“, kuni viisard sisestatakse

Järgides juhiseid, klõpsake nuppu „Installige riistvara, mille peaksite loendist Täpsem valima valima”, see viib raadionupu ikooni sellesse valikusse. See on tegelikult akende juhtnupp, mis näib nüüd nagu väike ring, mille sees on ümmargune sinine viil.

Klõpsake lihtsalt nuppu „Järgmine“

See näitab teile menüüd 'Kuva kõik seadmed', millele peate klõpsama.

Pärast seda klõpsake ikoonil 'Kas ketas'.

Ikooni „Sirvi” abil minge taskuprog-draiveri kausta asukohta. Kui teie olete valiku õigesti teinud, visualiseeriksite just sellesse kausta paigutatud faili pocketprog.inf.

Topeltklõpsake selle faili kohal ja näete kindlasti draiveri arvutisse installimist.

Üle ja välja !! Jätkame oma järgmise õpetusega järgmisel lehel.

Nüüdseks võite olla installinud vajaliku tarkvara ja ehitanud SPI-liidese.

Kuidas programmi mikrokontrolleri kiibi teisaldada

Järgmine samm nõuab kavandatud rakenduse jaoks mõningaid komponente, nagu leivaplaat, LED ja arvutatud takisti.

Selles jaotises õpime programmeerija testimismeetodit ja kinnitame asjakohaste draiverite ja tarkvara installimise.

Draiverite ja tarkvara õigesti installimise kontrollimiseks rakendame lihtsa programmi, mida nimetatakse avrdude'ks.

AVRdude on viimane WinAVR-i installiga seotud programm, ilma milleta pole faili tegelik ülekandmine MCU-sse võimalik.

See programm on .hex-failivorming, mis muutub MCU-le sisuliselt arusaadavaks vajalike teostuste jaoks.

Juhul kui kontrollimine ei õnnestu, ei saa programmeerija faili üle kanda.

Vaatame kiiresti, kuidas saame testimisprotseduuri järgmiste juhiste abil rakendada:

Avage DOS-i (ketta opsüsteem) viip, klõpsates nuppu „Start menu” ja tippides antud otsingukasti cmd.exe.

Nüüd saab AVRdude'i teostada, kirjutades DOS-i viipale lihtsalt avrdude –c usbtiny –p m32. Niipea kui see on rakendatud, tunnistab DOS koheselt, kas ühendus õnnestus.

Ülalolevas käsus on “-c” teatav lipp, mis sisaldab programmeerija parameetreid “usbtiny”, samas kui silt “-p” tuvastab mikrokontrolleri seadme (“m32 tähistab Atmega32”).

Kui olete kasutanud mõnda muud MCU-d, peate rakenduse jaoks lisama asjakohased eesliited.

Kui ülaltoodud protseduur on lõppenud, võite DOS-i viipale sisestada „exit” ja see viib teid aknast välja.

Kui te tõsiselt mõtlete programmeerimise tegelike üksikasjade osas, siis selleks peaksime kõigepealt jootma ja ehitama välise analoog-LED-ahela, mille kaudu programmi saaks rakendada, sest kui MCU vastuse kinnitamiseks pole süsteemi, ja mikrokontrolleri töötamine oleks üsna mõttetu.

LED-plaadi valmistamine on väga lihtne, see seisneb LED-i kahe juhtme jootmises üle parda ja ühendage takisti ühe LED-i juhtmega. Selle LED-i roll on ainult piirata voolutugevust LED-ga, nii et see ei põleks MCU väljundist tuleneva üleliigse pinge tõttu.

Takisti väärtuse võib arvutada järgmise lihtsa valemi abil:

R = (Ub - LEDfwd) / I

Kui Ub on toitepinge, on LEDfwd kasutatava LED-i optimaalne tööpinge ja I on selle optimaalne ampr.

Oletame, et kasutame punast LED-i, millel on LED-i pinge = 2,5 V ja vool I = 20 mA, ülaltoodud võrrandi saab lahendada järgmiselt:

Kuna MCU pinge oleks 5 V, võib seda väljendada järgmiselt:

R = (5 - 2,5) /. 02 = 125 oomi, ¼ vatt, lähim väärtus on 120 oomi.

Nüüd on meil LED, 120 oomi takisti ja verbaar, lihtsalt ühendage ülaltoodud komponendid, nagu on diagrammil näidatud, mikrokontrolleriga.

Kui see on tehtud, saab MCU-d programmeerida ülaltoodud LED-i jaoks ettenähtud vastuseks.

Järgmisena MCU programmeerimine.

Selleks, et mikrokontroller saaks teha sisukaid rakendusi, on hädavajalik kirjutada MCU-sse asjakohased juhised.

Kuidas installida programmeerimiskeskkond ja uurida WinAVR-i

Selleks võiksime arvutis ilmselt kasutada omaenda tekstiredaktorit, ehkki meist võib olla lugu professionaalsema „programmeerimiskeskkonna” kasutamisest tavalise tekstiredaktori asemel, kuna see lähenemine võimaldaks teil mõningaid võimalusi nautida selle 'programmeerimiskeskkonna' paketi sisseehitatud huvitavaid funktsioone.

See toetaks programmide loomist ja redigeerimist erinevate keelte kaudu ning kompileeriks need ka edastatavasse režiimi, mida mikrokontrolleri kiip hõlpsasti mõistab ja aktsepteerib.

Lõppkokkuvõttes toetaks seda WinAVR ja viiks see üle vastavasse MCU kiibi.

WinAVR võib olla varustatud ka paljude muude toimingute sooritamiseks, näiteks programmide tõrkeotsing ja hoiatamine võimaliku süntaksi eest ning vigade ja vigade kompileerimine. Me arutame neid meie hilisemaid õpetusi.

Oleksite WinAVR-i installikursus ülikiire ja kiire. Sukeldume üksikasjadesse järgmiste punktidega:

Peate alla laadima uusimad versioonid kaustast WinAVR source forge files. Selle ametliku veebisaidi kaudu leiate selle allalaadimisega seotud kasulikku teavet.

Teil palutakse sisestada turvaküsimus, et saaksite vastata, kui soovite allalaadimist, küsitakse, kas allalaaditav fail on käivitatav fail.

Laadige fail alla ja alustage täitmisprotsessi sellel klõpsates. Las installimine algab.

Protsess juhatab teid vastatavate küsimustega, et saaksite installimist oma mugavuse huvides lihtsustada. Sooviksite paljusid neist vaikevormides ignoreerida, oleksite kõik valmis valima need, mis teie arvates toiminguteks kõige paremini sobivad.

Siiani leidsite kõike üsna normaalset ja lihtsat ning leidsite mõned võimalused, mida ma teile viskan. Pole muret, ainult mõned neist kasutaksid tegelikult ainult ühte nimega 'programmeerijate märkmik'.

Kui klõpsate sellel ikoonil, käivitatakse kasutajaliides, et saaksite rakendada programmide kirjutamist (näiteks luua ja redigeerida). Samuti oleksite tunnistajaks programmile, mis koosneb menüükäskudest, mis aitavad teil koode koostada ja mikrokontrollerisse manustada.

Eespool nimetatud programmeerija märkmiku põhiülesanne on muuta inimese loetav kood, mille kirjutaksite, reaks juhisteks, mis on arusaadavad ainult MCU-le.

Järgmine õpetus hõlmab ülaltoodud programmeerija testimist, et saaksime olla kindlad selle ühilduvuses Windowsiga ja selles, kas see teie mikrokontrolleri IC-ga täiuslikult kätt annab.

Kuidas programmeerida LED-i sisselülitamiseks MCU-d

Kui see on kinnitatud, jätkame väikese koodiga 'ära tee midagi' loomiseks, lihtsalt tagamaks, et koodi edastamise protseduur ei esine vigu.

Muidugi oleme nüüd valmis oma esimest programmi MCU-s rakendama, kuid enne seda oleks huvitav kiiresti kokku võtta, mida me oma eelmiste õpetuste käigus tegime:

Hankisime AVR Atmeli mikrokontrolleri vastavalt meie nõutavale spetsifikatsioonile, siin kasutasime illustratsioonide jaoks ATMega32. Järgmisena õppisime mikrokontrolleri põhitõdesid ja programmeerimisseadet, mis vastutab programmi MCU kiibi teisaldamise eest.

Edasi ehitasime SP-liidese pistiku, mis on hädavajalik, et teie arvutit saaks programmeerimistoimingute jaoks ühendada mikrokontrolleriga.

Pärast seda kinnitasime, kas draiverid on arvutisse õigesti installitud nii 32-bitise kui ka 64-bitise, kuid operatsioonisüsteemi jaoks.

Järgmisena installisime koodide Win AVR nimelise programmeerimiskeskkonna, et hõlbustada koodide mikrokontrollerisse kuulutuste kirjutamise hõlbustamist, millele järgnes avrdude'i rakendamine kontrollimiseks programmeerija arvutiga ja ühendatud mikrokontrolleriga.

Lõpuks eelmises peatükis lõpetasime LED / takisti vooluahela ehitamise ja ühendasime selle vastavate MCU väljunditega.

See on tõepoolest palju tööd, kuid on aeg kohe tegeleda tõelise programmeerimiskraamiga!

Alustuseks tahaksime jagada mikrokontrolleri kolme kategooriasse, mis lihtsustaks meie arusaamist palju:

Juhtimine, tuvastamine ja suhtlemine

Oleks huvitav teada, et ülaltoodud funktsioone saab programmeerida mitmel erineval viisil.

Esimeses programmis proovime mikrokontrollerit tellida välise parameetri 'juhtimiseks', jah, teil on õigus, see oleks LED, mille me hiljuti ehitasime.

Täpsusena ütleme MCU-le, et lülitage ühendatud LED sisse, jah, ma tean, et see tundub üsna primitiivne, kuid algusetapp peab alati olema lihtne.

Praeguse tööga edasi liikumine, pannes MCU-d LED-i juhtima, on tegelikult üsna lihtne:

Selleks juhendame sadama B tihvti nr 0 tootma LED-i jaoks vajalikku 5V.

Meenutades eelmist õpetust, ühendasime LED-i anoodi ülalnimetatud MCU tihvtiga.

MCU selle tihvti jaoks tuleb adresseerida kaks olulist asja: 1) väljund ja 2) 5 volti

Õpime viisi, kuidas juhendame konkreetset tihvti saama MCU väljundiks.

Kui see on kiibi väljundiks seatud, võime soovitada, et see oleks rakenduse jaoks kas 'kõrge' (5 V) või 'madal' (0 V).

Kuna mis tahes loogikalülitus, näiteks MCU, võivad tihvtid väljundi või sisendi närbuda ja neid saab konfigureerida nii, et see tooks loogika kõrge või loogika madal, tuleb tihvtidele määrata ainult kas loogiline kõrge või loogiline madal , pole ühtegi vahe- või määratlemata olekut, välja arvatud need paar olekut mikrokontrollerite või mis tahes digitaalse IC jaoks. Sama kehtib ka MCU iga tihvti kohta.

Mis puutub sisendi ja väljundi pin-määrangutesse, siis sisendid oleksid paigutatud nii, et nad võtaksid vastu signaale välistest analoogastmetest, samas kui väljundid vastutaksid nende tõlgendamise eest määratud loogilistesse olekutesse või sagedusse.

Kuigi ülaltoodud ülesandeid sai teha mitmel erineval viisil, arutaksime ühe neist lihtsuse huvides. Siiski tuleb märkida, et kuigi praegu esitatav näeb välja lihtne ja huvitav, pole see nii elujõuline ega soovitatav tüüp kõigi MCU-rakenduste jaoks, samal põhjusel tutvustatakse teile kursuse lõpus ka populaarsemaid programmeerimismeetodeid . Need programmid võimaldavad määratleda ainult soovitud tihvtid vastavalt spetsifikatsioonidele, mõjutamata teisi külgnevaid, mis võiksid olla juba määratud mõne muu funktsiooni täitmiseks.

Kuid praegu ei häiri me enam teiste tihvtide pärast ja kasutaksime ainult asjakohaseid huvipakkuvaid tihvte, vältides mingil määral komplikatsioone.

PIN-koodi määramiseks väljundina peame kasutama andmesuunaregistrit (DDR). Kui te ei tea, mida siin register tähendab, on see lihtsalt MCU-s olev ruum, mis võimaldab mikrokontrolleril teatud viisil reageerida.

DDR-i abil saame seadistada tihvti kas saatma andmeid, mis sarnanevad väljundiga, või aktsepteerima andmeid, mis on sisendi kujul.

Kuid mida võib sõna suhtes segadusse ajada, mida see tähendab? Andmed lisavad tihvtidele kolmanda mõõtme, mille võib määrata pidevalt loogilisele nullile (0 V) või kõrgele loogikale (5 V), kuid mis saab signaalidest, mis võivad kiiresti erineda, näiteks impulsside sagedus. Sagedusega kaasnevad kõrge ja madala loogikaga (5 V ja 0 V) ​​võnkuvad teatud kindlaksmääratud intervallide või ajavahemike järel, seega muutub see ajale orienteerituks ja seda saab aja suhtes kohandada, seetõttu määratleme kui 'andmed', mis tähendab parameetrit, mis näitab funktsioon teise funktsiooni suhtes (loogika olekud ja aeg).

Üks meetod pin0 määramiseks väljundiks on järgmise koodi kirjutamine:

DDRB = 0b00000001

Ülalolevas programmis tähistab DDRB PORT B ​​andmesuunaregistrit. 0b juhendab kompilaatorit järgmise arvu binaarse avaldise osas, samas kui avaldise lõpus olev “1” tähistab pin0 asukohta, see tähendab selle asukohta vormis PORT B ​​esimese tihvti

Kui mäletate, saime teada, et PORT B ​​seob sellega 8 nööpnõela (0-st kuni pin7-ni) ja kui märkate, et ülaltoodud koodil on ka 8 numbrit, mis tähendab, et iga number tähistab neid PORT B ​​8 nööpnõela.

Nüüd oleks järgmine protseduur sellele pinile (pin0) 5V määramine. Jällegi on tööpõhimõte identne DDR-iga, nagu on väljendatud järgmise binaarkoodi kaudu:

PORTB = 0b00000001

Nagu näha, on ainus erinevus ülaltoodud ja varasema koodi vahel see, et selles koodis oleme kasutanud PORT-registrit. See register haldab konkreetselt selle pordi pin-määranguid, mille jaoks see on MCU-s asetatud. Seega võimaldab see meil määrata nende pinoutide jaoks tegelikud andmeloogikad (0 või 1).

Nüüd võime olla huvitatud arutama mõningaid meie programmi ligikaudseid üksikasju. Kuna me teame, et kõik programmid vajavad käivitamise alustamiseks kindlat ruumi, saab seda võrrelda peakokaga, kes teab kõiki konkreetse retsepti koostisosi, kuid pole juhendatud, kust alustada.

Põhifunktsioon on siin koht, kus iga C / C ++ programm käivitab käivitamise. Seetõttu võib peamise luua järgmiselt:

int main (tühine)
{
}

Kuid selleks, et programm saaks DDR- ja PORT-registri andmeid tõlgendada ja nende toimimist MCU-kiibis, tuleb lisada täiendav avaldus, mis võib koosneda kõikidest AVR-MCU-ga seotud andmetest. Võib-olla tahaksime selle kaasamise lisada kõikidesse oma programmidesse.

# kaasata
int main (tühine)
{
}

Niipea kui kompileerimine on algatatud, keskendub kompilaatori eeltöötleja osa AVR-kataloogile, et tuvastada fail “io.h”. Laiend “.h” näitab siin, et tegemist on päisefailiga ja see failis olev kood lisatakse loodava lähtefaili algusesse (pea), sellest ka nimi “päis”.

Siit saame tutvustada DDR- ja PORT-lauseid oma koodi, sest päisefaili io.h lisamine oleks kompilaatorit nende suhtes suunanud.

# kaasata

int main (tühine)

{

DDRB = 0b00000001 // Data Direction Registreerige pin0 väljundiks ja ülejäänud tihvtid sisendiks

PORTB = 0b00000001 // Seadke tihvt 0 5-voldiseks

}

Eespool kirjeldatu kinnitab pin0 kui väljundi orientatsiooni, mille suurus on 5V. Siiski on veel üks probleem, mida selle tihvti jaoks pole kindlaks määratud, see tähendab, et seda tihvti tuleb veel määramata ajaks sisse lülitada, kui MCU on toites. See lõpmatu tagasiside ahel tagaks, et see MCU tihvt ei lülituks välja, vaid jätkab 5V väljundiga lõputult.

Kuigi on palju erinevaid meetodeid silmuse käsu rakendamiseks tihvti jaoks, prooviksime siin kasutada silmust 'samas'. Nagu nimest võib järeldada, ütleb „while” silmus mikrokontrollerile, et kui toide on saadaval, peate määratud 5V juures määratud pinouti jaoks aktiveeritud olema.

# kaasata

int main (tühine)

{

DDRB = 0b00000001 // Data Direction Registreerige pin0 väljundiks ja ülejäänud tihvtid sisendiks

PORTB = 0b00000001 // Seadke tihvt 0 5-voldiseks

samas (1)

{

// Kood oleks siin, kui seda oleks vaja täita veel ja veel ja veel ... lõputult

}

}

Võiksite märkida, et siin oleme silmuseks „while” kasutanud argumenti kujul „1”, kuna kõike muud kui „0” võib pidada loogiliseks „tõeks”.

See tähendab, et silmus 'samas' ei vastutaks kunagi millegi muu eest, välja arvatud loogiline 'tõene', mis tähendab, et konkreetne tihvt kinnituks määramata olekuga määramata ajaks.

Valgusdiood võib olla määratud sisselülitatud kontakti kohal püsivalt sees, kuni MCU sai toite Vdd ja Vss kaudu.

See on kõik, nüüd on meil tulemus, mida soovisime saada ja lõpuks näeme, et see juhtub pärast nii palju rasket tööd, kuid vaatamata sellele on meie raske töö magusate tulemuste vaatamine nii rahuldust pakkuv.

Järgmistes õpetustes õpime, kuidas lisada ülaltoodud LED-ile dimensioon „aeg”, see on, kuidas panna see teatud kindla kiirusega vilkuma.

Tegelikult ülaltoodud teostuses vilgub LED tegelikult, kuid silmuskiirus on nii kiire, et see on peaaegu nagu LED-i valgustuse püsiv sisse lülitamine.

Näeme, kuidas saab seda silmust soovitud viitega lisada, et LED vilkuks selle viivitusega.

Kuidas panna LED vilkuma AVR mikrokontrolleri abil

Viimases arutelus õppisime, kuidas LED-lüliti mikrokontrolleri kaudu sisse lülitada, see oli silmapaistev, kas pole? Võib olla mitte nii palju!

Siit saame teada, kuidas ülaltoodud LED-valgustust vürtsitada, määrates kahesuunalise funktsionaalsuse, see tähendab, et proovime panna selle vilkuma või vilkuma kindla sageduse või kiirusega. Samuti näeme, kuidas seda määra saaks kasutaja soovil suurendada või vähendada.

Vaatame seda:

# kaasata

# kaasata

int main (tühine)

{

DDRB | = 1<< PINB0

samas (1)

{

PORTB ^ = 1<< PINB0

_hiline_ms (100)

}

}

Kui tunnete end hämmeldunud ülaltoodud avaldises kasutatud kummaliste sümbolitega (&, ^, | jne) (& pole seal, kuid võiks kasutada ka teistes sarnastes koodides), siis siin on seotud teave, mida oleksite nende kohta teadlik :

See sisaldab palju standardseid loogilisi algoritme nagu AND, OR, NOT ja XOR, mida tavaliselt kasutatakse ülaltoodud koodiga.

Need loogilised funktsioonid võrdlevad kahte bitti “1” ja “0” vastavalt neile määratud tõetabelitele.

Saame idee, analüüsides järgmist bittide paigutust:

01001011 &
10001101
võrdub
00001001

Ülaltoodud koodis viitab & C-le programmeerimisel kasutatavale AND-le.

Lugedes ridu vertikaalselt, viitab see sellele, et 0 ja 1 võrduvad 0, 1 ja 0 võrduvad ka 0-ga, 0 ja 0 võrdub 0, 1 ja 1 on võrdne 1. Selle lugemine on sama lihtne. Need vastavad AND-operaatori tõetabelile.

Kui hindame järgmist tabelit, tähistab see sümbolit '|' tähistab funktsiooni „VÕI“ kasutamist, tähistab „|“ võib leida just arvuti klaviatuuri tagasilükkeklahvi vasakul küljel:

01001011 |
10001101
võrdub
11001111

Samamoodi näitab see OR-loogika funktsionaalsuse tõestustabel, et bitid 0 või 1 on võrdsed 1, 1 või 0 on samuti võrdsed 1, 0 või 0 on võrdsed 0-ga, samas kui 1 või 1 on võrdne 1-ga.

Järgmine bittide kombinatsioon on mõeldud XOR-i loogikaoperaatorile, mida tähistatakse tähega ^ ja mida võib uurida täpselt nagu me tegime tabelitega AND, OR

01001011 ^
10001101
võrdub
11000110

Jätkame nüüd esimese programmiga ja õpime, mida järgmine rida selles tähistab:

# kaasata

Oma varasemate õpetuste kaudu teame, kuidas väljend töötab, nii et me ei korrata seda, kuid nende näib olevat uus kaasamine, mida väljendab #include ja mida tuleb uurida.

Selles „kaasata” võimaldab delay.h meile lihtsaid rakendamismeetodeid.

Nagu nimigi viitab delay.h, võimaldab meil konkreetse programmi puhul viivitust esile kutsuda.

Järgmise avaldise int main (void) võiks käimasolevast arutelust välja jätta, kuna oleme seda juba oma varasemates postitustes käsitlenud.

Järgmisena tuleb muudetud DDRB.

Järgnev näitab varasemat vormi, mis ei ole parem viis tihvtide määramiseks, kuna sisendite moodustamiseks vahetati kõik tihvtid vahemikus 0 kuni 7. Kuid kujutage vaid ette, milline oleks olukord, kui me tahaksime luua pikema programmi, mis nõuab neid tihvte mõne muu funktsionaalsuse jaoks? Näiteks võib seadme kauglülitamise rakendamiseks vajada pin2-d. Sellisel juhul ei hindaks me sisendi sama määramist lihtsalt katse-eksituse meetodil. See võib tähendada kaugsaatja valesti reageerimist seadme vastuvõtjale.

DDRB = 0b00000001

Pigem tahame mõjutada vaid ühte bitti, müts pin0 bitti, heites pilgu funktsionaalsusele “OR”, mida saaks teha binaarse maskeerimise abil.

DDRB = DDRB | 0b00000001

Siin on see looritatud maskiga „OR”: 0b00000001, kuigi see näib olevat autentne kahendarv, juhul kui varasem DDRB näiteks: 0b01001010, siis OR-i rakendamine sellele maskeerimise kaudu võib anda: 0b01001010 | 0b00000001 = 0b01001011.

Sellest tulenev erinevus, mida võis näha, on ainult pin0 puhul, mille bitid on muutunud!

Ülaltoodud avalduse tihendamine C ++ kaudu veelgi annab:

DDRB | = 0b00000001

Kuid leiame, et antud programmis on veelgi rohkem. Kuigi see võib tunduda üsna õigustatud ja ilmne, peaksime kasutama mõnda io.h päisefaili lauset, eriti kui see on põhimõtteliselt loodud meie mugavuse huvides?

Nii et kui „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.

Alustame tähega 0b00000000 ja paneme 0b0000001 tootmiseks tähe “1” ning seejärel teisaldame selle vasakule 0 positsioonile, mis annab täpselt sama 0b00000001 nagu ülal.

Kui oletada, et see on PINB4, võib avaldust väljendada kui 1<< PINB4. I this case the “1” would be pushed to the left 4 locations producing: 0b00010000.

Pidage meeles, et kasutame nullindeksit, mis tähendab, et pärast tähte “1” on neli nulli.

Nüüd jätkame silmusega 'samas', mille märkisime varem läbi 'lõpmatu silmuse'. Kuid võib-olla tahame nüüd, et mikrokontroller rakendaks soovitud hukkamisi. See võib olla teostatav ainult antud silmuse sees. See on silmus, kus konkreetset järjestust korratakse ikka ja jälle.

Juhul, kui käivitamine asetatakse enne tsüklit, oleks see rakendatud vaid üks kord.

Kuid selleks, et LED vilkuks lõputult, oleks vaja PINB0 vaheldumisi lülitada sisse / välja silmusesse. Siit leiame ka viivitused, ilma milleta oleks LED-i vilkumine võimatu. Kuid see sunniks LED-i vilkuma väga kiiresti, seda on palja silmaga raske ära tunda, see peaks meie silmadega tuvastatavaks muutmiseks veidi aeglustuma.

Oleme teadlikud kahendnumbri konkreetse biti seadistamise protseduurist, kuid pole kindlad, kuidas konkreetset bitti '0' rakendada, kui see on veel '1'.

Järgmist programmi võib näha seda tehes, kuid leiame ka, et see ei pruugi programmis nähtav olla.

Esimesed kaks lauset muudavad biti väärtuseks “1” (5V, LED-tuled), seejärel kehtestatakse 100 ms pikkune paus.

Järgmised paar rida muudavad PINB0-biti väärtuseks “0” (nullpinge, LED on välja lülitatud), kuid vabandust, et AND võrdlus ei saa bitist “0” käivitada, kuid kui me kasutame EI “~” binaarmaski jaoks võis see kõik 0 vahetada 1-ks ja vastupidi.

See võimaldab meil mõjutada ainult PINB0-bitti ja viia see nulli. Sulud lisati selleks, et sisaldada maskeerimist, et NOT-toimingut saaks rakendada tervetele maskidele, mitte lihtsalt vasakule nihkele eelneva “1” kohal.<<”.

SADAM | = 1<< PINB0
_hiline_ms (100)
SADAM & = ~ (1<< PINB0)
_hiline_ms (100)

ON OFF viivituste või võrdse kestusega perioodide loomiseks võime eelmised neli rida lühendada kahele ja rakendada oma kasuks XOR-funktsionaalsust. XOR-i täitmisel tuleb märkida 1-le määratud pin, kui see on 0 ja vastupidi. See täitmine mõjutaks ainult PINB0-d. Kuna käsku võidakse rakendada korduvalt, muudaks see biti lihtsalt vastupidiseks olemasolevale loogikale.

PORTB ^ = 1<< PINB0
_hiline_ms (100)

TEHTUD! Teie valgusdiood vilguks nüüd vastavalt määratud kiirusele ... Lihtne, kas pole?




Paari: Mitme seadme kaugjuhtimispult Järgmine: vahelduvvoolu faas, neutraalne, maandusrikke indikaatorahel