Izpētīti mikrokontrolleru pamati

Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai





Viena lieta ir lieliski par mikrokontrolleru IC, tie ir pieejami gandrīz visās pasaules daļās un elektroniskajos mazumtirgotājos.

Ievads

Būtībā mikrokontrolleru ierīces tiek plaši izmantotas lietojumos, kas saistīti ar apkārtējās vides novērtēšanu, un līdzīgā elektronikā.



Šīs ierīces var izmantot, lai parādītu noteiktu parametru, motora vadības programmās, LED apgaismojumā, dažādu veidu sensoros, piemēram, slīpuma sensorā, akselerometrā, ātruma mērītājā, datu reģistratoros, temperatūras kontrolieros, tastatūrās utt.

Primāro izpratni par mikrokontrolleriem varētu iegūt, atsaucoties uz AVR Amega32 mikrokontrolleru, kas ir tik attīstīts, ka dažreiz to sauc par datoru mikroshēmā.



Šī ierīce ir norīkota veikt virkni komandu, lai izveidotu programmu.

Programmas valoda, kuru jūs šeit redzētu, ir C ++. Šeit apgūsit šo valodu dziļāk.

Runājot par MCU, jūs saņemat iespēju kontrolēt un konfigurēt visus tā pinouts.

Ja jūs esat mazliet noguris no tā, vienkārši atdzesējiet, jo tas vispār nav nekas sarežģīts, kad jūs virzīsities uz priekšu, jūs vienmērīgi, bet stingri atvieglosiet visus aspektus.

MCU mikroshēmā visas tapas, izņemot Vdd un Vss, kas ir mikroshēmas barošanas tapas, var piešķirt ar ekskluzīviem apzīmējumiem.

Sīkāka informācija par pinout

Ja paskatīsit mikroshēmu no augšas, jūs atradīsit nelielu trīsstūrveida iegriezumu, kas norāda sākuma punktu no vietas, kur sākas pinouts, kas skaitās, ka mikroshēmas # 1 tapa sākas tieši zem šī roba.

Sākot ar šo tapu, jūs atradīsit 20 tapas līdz apakšai tajā pusē (pa kreisi) un vēl 20 tapas otrā pusē (labajā pusē), turpinot no apakšas uz augšu labajā pusē.

Pirmie 8 tapas, sākot no roba, ir PBO-7, kas veido IC indeksa tapas, jo visa programma šeit sākas ar nulles indeksu.

Iepriekš minēto pinouts sēriju sauc par PORT B, bet ir arī citas identiskas ostu kopas, kas piešķirtas no A līdz D.

Šīs porti var tikt piešķirti, lai pieņemtu un atpazītu ievadītos datus ar nosaukumu INPUT, kā arī lai pārsūtītu datus noteiktā formā, ko sauc par OUTPUT.

Divas no tapām, kas ietilpst vispārējā kategorijā, ir (+) / (-) tapas, kuras dēvē arī par Vdd un GND.

Vienu tapu no PORT D (PDO-6) var redzēt, kas atrodas mikroshēmas kreisajā pusē apakšējā zonā.

PD7, kas ir D ostas 7. kontakts, varēja izsekot, stāvot vienatnē un uzsākot labās puses pinouts sēriju.

Tagad pārejot no mikroshēmas labās puses, kur beidzas PORT D, PORT C sāk skaitīšanu secībā uz augšu.

Tie veicina daudzos interesantos MCU tapas, sākot no analogā līdz digitālajam.

Šīs tapas ir raksturīgas, lai tās kļūtu par sensoru ievadi daudzu parametru noteikšanai, izmantojot ārēji konfigurētus analogās ķēdes posmus.

Iepriekš minētie tapas veido PORT A.

Analogā uz ciparu pārveidošanu iepriekš minētajās tapās var saprast, izmantojot piemēru, kur analogajam temperatūras līmenim, kas noteikts, izmantojot parastu sensoru, piemēram, termistoru, tiek piemērots viens no PORT A tapām, kuru MCU viegli pieņem un pārveido lai izveidotu digitālo rādījumu no nulles līdz 255 grādiem F (8 bitu skaitlis, kuru varētu uzlabot, lai sasniegtu 10 bitu izvadi).

Vēl viena iezīme, ko varēja redzēt MCU, ir pieejamā programmēšanas vieta vai atmiņa, kas nosaka vietu mainīgajiem un programmai, kas norādīta mikrokontrollerim.

Turklāt MCU ir iebūvēts pulkstenis, kas piešķirts attiecīgo parametru skaitīšanai.

Pulksteņa funkcijas ļauj MCU sevi pielietot daudziem dažādiem skaitīšanas procesiem, kas varētu būt ātri mikrosekundu diapazonā atkarībā no konkrētās ierīces specifikācijas, kā arī varētu būt lēnāki jebkurā vēlamajā apjomā.

Tagad jūs, iespējams, zināmā mērā esat sapratis mikrokontrolleru jēdzienu un attiecībā uz tā pieslēgvietām un tapām.

Kā izveidot SPI savienotāju no programmētāja uz mikrokontrolleru

Tagad ir pienācis laiks iedziļināties tēmā un izpētīt programmēšanas pasauli.

Tas nozīmē, ka pirms programmas ielādes mikroshēmā mums jāatrod piemērots veids, kā SPI (Serial Peripheral Interface) savienotāju integrēt MCU.

Tomēr pat pēc tam mēs nevaram vienkārši iebīdīt SPI MCU tapās, vai ne? Mēs arī nevaram pieļaut, ka pagarinātās vadi no SPI tiek tieši ievietoti maizes dēlī. Tas var izraisīt arī nepareizu vadu iestatīšanu, kas saistīts ar nepareizām tapām, kas savieno slikti.

Tāpēc, lai padarītu lietas absolūti nevainojamas, mēs veicam procedūras uz neliela verborda, kur mēs iegūstam nepieciešamās savienojošās metāla tapas, kuras sauc arī par 'header'. Šīs galvenes tapas tagad varēja izmantot savienošanai ar SPI savienotāju. Savienojumus no šīs galvenes var pārtraukt ar citām paralēlām galvenes tapām, kuras var izmantot paneļa savienojumiem.

Tādējādi iepriekšminētā montāža tagad veido ērtu un uzticamu starpposma savienojuma platformu SPI ar MCU.

Tagad viss izskatās jauki un nevainojami, tāpēc turpināsim nopelnīt attiecībā uz programmētāju, kas nepieciešams starp datoru un MCU.

Varētu būt daudz uzņēmumu, kas ražo un pārdod šīs programmētāja vienības, tāpēc to iegādei nevajadzētu būt jums problēmai, piemēram, Adafruit Industries, USBtinyISP vai Sparkfun utt.

Daži no tiem varētu izskatīties pilnīgi atšķirīgi no parastajiem veidiem, taču būtībā viss ir identisks un atbilst standarta programmēšanas noteikumiem, un tos var izmantot kā saskarni starp datoru un AVR mikrokontrolleru.

Tomēr pārliecinieties, ka domājat, ja izmantojat kādu citu MCU, nevis AVR Atmega32, jums, iespējams, būs jāpārbauda, ​​vai attiecīgajam MCU mikroshēmai ir atbilstoši saderīgs programmētājs.

Var novērot, ka diezgan daudzi no šiem programmētājiem izmanto identiskus draiverus, par kaut ko ir jārūpējas, un mēs par to uzzināsim vairāk mūsu nākamajās nodaļās.

Datora savienošana ar mikrokontrollera mikroshēmu ir patiešām vienkārša, un jūs priecātos uzzināt, cik vienkārši tam ir nepieciešamas procedūras. Tāpēc tūlīt nospiediet poguJ

Iepriekš aprakstītās SPI interfeisa plāksnes izgatavošana nav grūta, viss ir par to, lai lodēšanas gludeklis darbotos visos savienojumos pāri parādītajām divām galvenes tapu rindām uz mazas vispārējas nozīmes plāksnes.

Iepriekš redzamajā attēlā ir parādīta informācija par savienojumu, kas jums būtu jāievēro, savienojot vadus starp galvenēm.

Lai viss būtu vēl vienkāršāk, apskatīsim šādu savienojuma informāciju, atsaucoties uz iepriekš redzamo attēlu:

SPI tapa, kas sākas ar augšējo kreiso pusi, nonāk “Master IN, Slave OUT” (MISO)

SPI tapa no centra kreisās puses savienojas ar pulksteņa tapu (SCK)

SPI tapa apakšējā kreisajā stūrī pievienojas atiestatīšanai. (Mēs detalizēti uzzināsim par šo tapu turpmākajās apmācībās)

SPI, kas attiecas uz labo apakšējo labo daļu, savienojas ar MCU GND tapu, GND attiecas uz tapu, kas veido padeves nulles padeves līniju vai negatīvo (relatīvo) sliedi.

SPI, kas beidzas no labās vidējās labās galvenes, savienojas ar MCU tapu “Master Out, Slave IN” (MOSI).

SPI, kas nāk no augšējās labās galvenes, ir savienots ar MCU (+), kas acīmredzami ir Vdd vai MCU pozitīvais padeves tapa.

Tieši tā.

Savienojiet abus savienotājus, kā paskaidrots, un jūsu SPI interfeisa plate ir gatava nepieciešamajām darbībām.

Lai saņemtu papildu palīdzību, varat iepazīties ar attēlu, kas parādīts iepriekš, jūsu gala interfeisa panelim vajadzētu izskatīties šādi, pēc tam, kad visi vadu savienojumi ir atbilstoši veikti ar iepriekšminētās diskusijas palīdzību.

Es ceru, ka jūs, iespējams, jau esat izveidojis SPI saskarni, kā paskaidrots iepriekšējā apmācībā, un tagad ir pienācis laiks nodrošināt, ka mūsu dators pieņem programmētāju, kas mums jāintegrē starp datoru un MCU.

Vienkārša programmēšanas koda izveidošana MCU

Mēs izmantojam USBTinyISP ierīci, kas pieejama vietnē Sparkfun, lai sasaistītu datoru ar mikrokontrolleru.

Mēs zinām, ka jebkurai datora operētājsistēmai, piemēram, Windows, būs nepieciešami draiveri, bez kuriem neko nevajadzētu ielādēt datorā, tāpēc mūsu programmētājam būs nepieciešami draiveri, lai tos ielādētu datorā.

Apskatīsim procedūras, kas nepieciešamas draiveru instalēšanai datora operētājsistēmā. Šeit mēs izmantojam Windows 7 OS piemēru ar 32 vai 64 bitu specifikācijām.

Atveriet sparkfun.com un noklikšķiniet uz “pocket AVR programmer page”. Saiti lapā var viegli vizualizēt.

Pēc tam atrodiet “Windows draiveris” zem dokumentiem un vienkārši noklikšķiniet uz tā.

Tas nodrošinās datorā failu pocketprog-driver.zip.

Dodieties uz savu datoru, atrodiet lejupielādes vietu un vienkārši izpakojiet lejupielādēto failu mapē.

Gadījumā, ja jūsu dators ir 64 bitu operētājsistēma, jums jāveic vēl dažas darbības, kā norādīts zemāk, izmantojot 32 bitu operētājsistēmu, jūs varat tieši sākt instalēšanu no nesaspiesta faila.

Lai izpildītu 64 bitu, 32 bitu gadījumā vienkārši ignorējiet:

Google “libusb sourceforge” un noklikšķiniet uz šīm saitēm jaunākā versija.

Jūs varētu sastapties ar dažiem papildu failiem, tomēr jūs interesētu atrast bib failu, tas ir: libusb-win32-bin - #. #. #. #. Zip

Tagad ejiet un atrodiet šo lejupielādes vietu savā datorā, izpakojiet to un saglabājiet to vienā no mapēm.

Šajā mapē pārejiet pa atkritnes mapi, pārejiet uz mapi amd64.

Šeit jūs redzētu pāris mapes kā: ghcalled libusb0.dll un libusb0.sys.

Jūs vēlaties tos pārdēvēt kā: libusb0_x64.dll un libusb0_x64.sys.

Tagad iepriekš minētie faili būs jākopē mapē pocketprog-driver, vienkārši jāpārraksta faili esošajā versijā.

Lai instalētu iepriekš minētos draiverus, jūs interesētu šāda metode, kas pēc sava veida ir netradicionāla:

Tas ir režīms “pievienot mantoto aparatūru”.

Noklikšķiniet uz Sākt izvēlni

Pēc tam turpiniet, ar peles labo pogu noklikšķinot uz “dators”

Noklikšķiniet uz Pārvaldīt un visbeidzot - uz ierīces pārvaldnieks

Pēc tam izvēlnē izvēlieties “Pievienot mantoto aparatūru”

Turpiniet nospiest “Next”, līdz vednis tiek ievietots

Izpildot norādījumus, noklikšķiniet uz “Instalēt aparatūru, kas jums jāizvēlas no izvērstā saraksta”, tas uzvedinās radiopogas ikonu konkrētajā atlasē. Tā faktiski ir loga vadības poga, kas tagad parādās kā mazs aplis, kura iekšpusē ir apaļi zila kartotēka.

Tagad vienkārši noklikšķiniet uz Tālāk

Tas parādīs izvēlni “Rādīt visas ierīces”, kas jums būs jānoklikšķina.

Pēc tam noklikšķiniet uz ikonas “Ir disks”.

Izmantojot ikonu “Pārlūkot”, dodieties uz mapi pocketprog-driver. Ja jūs pareizi izdarījāt atlasi, jūs vizualizētu failu pocketprog.inf, kas ievietots konkrētajā mapē.

Veiciet dubultklikšķi uz šī faila, un jūs noteikti redzētu draivera instalēšanu jūsu datorā.

Vairāk un vairāk !! Turpināsim nākamo pamācību nākamajā lapā.

Tagad jūs, iespējams, esat instalējis nepieciešamo programmatūru un izveidojis SPI saskarni.

Kā pārsūtīt programmu mikrokontrollera mikroshēmā

Nākamajā solī būs vajadzīgi daži komponenti, piemēram, maizes dēlis, LED un aprēķinātais rezistors paredzētajam pielietojumam.

Šajā sadaļā mēs uzzināsim programmētāja testēšanas metodi un apstiprināsim attiecīgo draiveru un programmatūras instalēšanu.

Lai pārbaudītu, vai draiveri un programmatūra ir instalēti pareizi, mēs ieviesīsim vienkāršu programmu, kas pazīstama kā avrdude.

AVRdude ir programma, kas saistīta ar jaunāko WinAVR instalāciju, bez kuras faila faktiskā pārsūtīšana uz MCU nav iespējama.

Šī programma ir .hex faila formāts, kas būtībā kļūst saprotams MCU nepieciešamajām izpildēm.

Gadījumā, ja verifikācija neizdodas, programmētājs nevarēs pārsūtīt failu.

Apskatīsim ātri, kā mēs varam ieviest testēšanas procedūru, izmantojot šādus norādījumus:

Atveriet uzvedni DOS (diska operētājsistēma), noklikšķinot uz Sākt izvēlne un attiecīgajā meklēšanas lodziņā ierakstot cmd.exe.

Tagad AVRdude var veikt, vienkārši ierakstot avrdude –c usbtiny –p m32 virs DOS uzvednes. Tiklīdz tas tiks ieviests, DOS uzreiz atzīs, vai savienojums bija veiksmīgs.

Iepriekšminētajā komandā “-c” ir paziņojošs karogs, kas ietver “usbtiny” programmētāja parametru specifikāciju, savukārt “-p” tags identificē mikrokontrollera ierīci (“m32 norāda Atmega32”).

Gadījumā, ja esat izmantojis citu MCU, ieviešanai jāiekļauj attiecīgie prefiksi.

Kad iepriekš minētā procedūra ir pabeigta, virs DOS uzvednes varat ierakstīt “exit”, un tas jūs pārvietos ārpus loga.

Ja jūs nopietni domājat par faktiskajām programmēšanas detaļām, tad mums vispirms ir jālodē un jākonstruē ārējā analogā LED ķēde, kurā varētu īstenot programmu, jo, ja vien nav sistēmas, kas apstiprinātu MCU atbildi, programmēšana un mikrokontrollera darbība būtu diezgan bezjēdzīga.

LED dēļa izgatavošana ir ļoti vienkārša, viss ir saistīts ar divu LED vadu lodēšanu virs verborda gabala un rezistora pievienošanu ar vienu no LED vadiem. Šīs gaismas diodes uzdevums ir tikai ierobežot strāvas stiprumu līdz LED, lai tas nedegtu liekā sprieguma reklāmas strāvas dēļ no MCU izejas.

Rezistora vērtību var aprēķināt, izmantojot šādu vienkāršu formulu:

R = (Ub - LEDfwd) / I

Kur Ub ir barošanas spriegums, LEDfwd ir optimālais izmantotās LED darbības spriegums, un I ir tā optimālais ampērs.

Pieņemsim, ka mēs izmantojam RED LED, kura LED spriegums uz priekšu = 2.5V un strāva I = 20mA, iepriekš minēto vienādojumu var atrisināt šādi:

Tā kā spriegums no MCU būtu 5V, to var izteikt kā:

R = (5 - 2,5) /. 02 = 125 omi, ¼ vats, tuvākā vērtība būs 120 omi.

Tagad mums ir LED, 120 omu rezistors un verbords, vienkārši savienojiet iepriekš minētos komponentus, kā norādīts diagrammā, ar mikrokontrolleru.

Kad tas ir izdarīts, MCU var ieprogrammēt paredzētajai reakcijai uz iepriekš iestatīto LED.

Nākamais - MCU programmēšana.

Lai mikrokontrolleris varētu veikt dažas jēgpilnas ieviešanas, obligāti MCU jāieraksta atbilstošas ​​instrukcijas.

Kā instalēt programmēšanas vidi un izpētīt WinAVR

Šim nolūkam mēs droši vien savā personālajā datorā varētu izmantot mūsu pašu “teksta redaktoru”, lai gan, iespējams, kāds no mums novērtēs profesionālākas “programmēšanas vides” izmantošanu parastā teksta redaktora vietā, kas ir vienkārša, jo šī pieeja ļaus jums izbaudīt dažus iebūvētās interesantās iespējas šajā “programmēšanas vides” paketē.

Tas atbalstītu programmu izveidi un rediģēšanu dažādās valodās, kā arī apkopotu tās izpildāmā režīmā, ko viegli saprot un pieņem mikrokontrollera mikroshēma.

Galu galā to atbalstīs WinAVR un pārsūtīs uz attiecīgo MCU mikroshēmu.

WinAVR varētu būt arī aprīkots, lai veiktu daudzas citas darbības, piemēram, programmu traucējummeklēšanu un brīdināšanu par iespējamo sintaksi un kļūdu un kļūdu apkopošanu. Mēs tos apspriedīsim par mūsu vēlākām apmācībām.

Jūs gribētu, lai WinAVR instalēšanas kurss būtu ārkārtīgi ātrs un veikls. Iegremdēsimies detaļās ar šādiem punktiem:

Jums būs jālejupielādē jaunākās versijas no mapes WinAVR source forge files. Jūs varētu uzzināt noderīgu informāciju, kas saistīta ar šo lejupielādi no tās oficiālās vietnes.

Jums tiks piedāvāts ievadīt drošības vaicājumu, lai jūs varētu atbildēt, ja vēlaties, lai lejupielāde notiktu, tiek jautāts, vai lejupielādējamais fails ir izpildāms fails.

Lejupielādējiet failu un sāciet izpildes procesu, noklikšķinot uz tā. Ļaujiet sākt instalēšanu.

Šis process palīdzēs jums atrast dažus atbildamus jautājumus, lai jūs varētu vienkāršot instalēšanu atbilstoši jūsu ērtībām. Jūs vēlaties ignorēt daudzas no tām noklusējuma veidlapās, un tas viss ir atkarīgs no jums, lai izvēlētos tās, kuras, jūsuprāt, ir vispiemērotākās darbībām.

Līdz šim jūs atradīsit visu diezgan normālu un ērtu, un jūs atradīsit dažas izvēles iespējas, sākot no sākuma izvēlnes. Neuztraucieties, tikai daži no tiem faktiski izmantos tikai vienu no tematiem ar nosaukumu “programmētāju piezīmju bloks”.

Noklikšķinot uz šīs ikonas, tiek sākta lietotāja saskarne, lai jūs varētu pielietot programmu rakstīšanu (piemēram, izveidot un rediģēt). Jūs būtu arī liecinieks programmai, kas sastāv no izvēlnes komandām, lai palīdzētu jums sastādīt kodus un iegult tos mikrokontrollerī.

Iepriekšminētā programmētāja piezīmju bloka pamatuzdevums ir pārveidot cilvēka lasāmu kodu, kuru jūs rakstāt, instrukciju virknē, kas ir saprotama tikai MCU.

Nākamā apmācība aptvers iepriekšminētā programmētāja testēšanu, lai mēs varētu būt pārliecināti par tā saderību ar Windows un to, vai tas lieliski “paspiež roku” ar jūsu mikrokontrollera IC.

Kā ieprogrammēt MCU LED ieslēgšanai

Kad tas ir apstiprināts, mēs turpināsim izveidot nelielu kodu 'nedarīt neko', lai tikai nodrošinātu, ka koda pārsūtīšanas procedūrā nav kļūdu.

Protams, tagad mēs esam gatavi ieviest savu pirmo programmu MCU, taču pirms tam būtu interesanti ātri apkopot to, ko mēs darījām iepriekšējo apmācību laikā:

Mēs iegādājāmies AVR Atmel mikrokontrolleru saskaņā ar mūsu nepieciešamo specifikāciju, šeit ilustrācijām izmantojām ATMega32. Pēc tam mēs uzzinājām par mikrokontrolleru pamatiem un programmētāja bloku, kas ir atbildīgs par programmas pārsūtīšanu uz MCU mikroshēmu.

Tālāk mēs izveidojām SP interfeisa savienotāju, kas ir būtisks, lai jūsu datoru varētu saistīt ar mikrokontrolleru programmēšanas darbībām.

Pēc tam mēs apstiprinājām, vai draiveri ir pareizi instalēti datorā 32 bitu, kā arī 64 bitu operētājsistēmai.

Pēc tam mēs instalējām programmēšanas vidi ar nosaukumu Win AVR, lai atvieglotu kodu koda pārsūtīšanu uz mikrokontrolieri, pēc tam tika ieviesta avrdude, lai verificētu programmētāju ar datoru un savstarpēji savienotu mikrokontrolleru.

Visbeidzot iepriekšējā nodaļā mēs pabeidzām veidot LED / rezistora ķēdi un savienojām to ar attiecīgajiem MCU izvadiem.

Tas tiešām ir daudz darba, tomēr ir pienācis laiks uzreiz pievērsties īstām programmēšanas lietām!

Vispirms mēs vēlētos sadalīt mikrokontrolleru trīs kategorijās, kas daudz vienkāršotu mūsu izpratni:

Kontrole, noteikšana un saziņa

Būtu interesanti zināt, ka iepriekš minētās funkcijas var ieprogrammēt dažādos veidos.

Pirmajā programmā mēs mēģinātu pasūtīt mikrokontrolleru, lai tas 'kontrolētu' ārēju parametru, jā, jums taisnība, tas būtu LED, kuru mēs nesen izveidojām.

Precīzāk sakot, mēs pateiksim MCU ieslēgt pievienoto LED, jā, es zinu, ka tas izskatās diezgan primitīvi, bet sākuma fāzei vienmēr jābūt vieglai.

Pārejot uz priekšu ar pašreizējo darbu, liekot MCU vadīt LED faktiski ir diezgan vienkārši:

Šim nolūkam PORT B ​​tapai # 0 uzdod ražot nepieciešamo 5 V gaismas diodei.

Atsaucot no iepriekšējās apmācības, mēs savienojām LED anodu ar iepriekš minēto MCU tapu.

Šajā MCU tapā ir jārisina divas būtiskas lietas: 1) izeja un 2) 5 volti

Mēs uzzināsim veidu, kā mēs norādīsim konkrēto tapu kļūt par MCU izvadi.

Kad tā ir iestatīta kā mikroshēmas izeja, mēs varam norādīt, ka tā ir vai nu “augsta” (5 V), vai “zema” (0 V), kā vēlams lietojumprogrammai.

Tā kā jebkura loģiskā shēma, piemēram, MCU, tapas var nokalst izeju vai ieeju, un tās var konfigurēt, lai radītu vai nu loģisku augstu, vai zemu loģiku, tapām jāpiešķir tikai vai nu loģiski augsts, vai loģiski zems , nav neviena starpposma vai nedefinēta stāvokļa, izņemot šos pāris mikrokontrolleru stāvokļus vai jebkuru citu digitālo IC. Tas pats attiecas arī uz katru MCU tapu.

Kas attiecas uz ieejas un izejas kontaktu piešķiršanu, ieejas būtu novietotas tā, lai pieņemtu signālus no ārējiem analogajiem posmiem, savukārt izejas būtu atbildīgas par to interpretēšanu noteiktos loģiskos stāvokļos vai frekvencē.

Lai gan iepriekš minētos uzdevumus varēja veikt ar daudzām dažādām metodēm, vienkāršības labad mēs apspriestu vienu no tiem. Tomēr jāatzīmē, ka, lai arī tas, kas tagad tiktu parādīts, izskatās viegli un interesanti, tas nav tik dzīvotspējīgs un nav ieteicams veids visām MCU lietojumprogrammām, tā paša iemesla dēļ vēlāk kursa laikā jūs iepazīstinātu ar populārākām programmēšanas metodēm . Šīs programmas ļaus piešķirt tikai vēlamās tapas atbilstoši specifikācijām, neietekmējot citas blakus esošās, kuras, iespējams, jau var piešķirt citu funkciju veikšanai.

Tomēr šobrīd mēs tik ļoti neuztraucamies par citām tapām un izmantosim tikai attiecīgos interesējošos tapas, dažos gadījumos izvairoties no sarežģījumiem.

Lai piešķirtu tapu kā izvadi, mums jāizmanto datu virziena reģistrs (DDR). Ja jums rodas jautājums, ko šeit nozīmē reģistrs, tā vienkārši ir vieta MCU, kas ļauj mikrokontrollerim reaģēt noteiktā veidā.

Izmantojot DDR, mēs varam iestatīt tapu vai nu nosūtīt datus, kas ir līdzīgi “izejai”, vai arī pieņemt datus, kas ir “ievades” formā.

Tomēr, ja jūs domājat par vārdu, jūs nesaprotat, ko tas nozīmē? Dati pievieno tapām trešo dimensiju, kurai var piešķirt nepārtrauktu loģisko nulli (0 V) vai loģisko augstumu (5 V), bet kā ir ar signāliem, kas varētu ātri mainīties, piemēram, impulsu biežums. Frekvencei būtu pievienota augsta un zema loģika (5 V un 0 V), kas svārstās ar noteiktiem intervāliem vai periodiem, tādējādi tā kļūst orientēta uz laiku un var tikt koriģēta attiecībā pret laiku, tāpēc mēs identificējam kā “datus”, kas nozīmē parametru, kas norāda funkcija attiecībā pret citu funkciju (loģiskie stāvokļi un laiks).

Viena metode pin0 piešķiršanai kā izeja ir, ierakstot šādu kodu:

DDRB = 0b00000001

Iepriekš minētajā programmā DDRB apzīmē PORT B ​​datu virzienu reģistru. 0b uzdod sastādītājam par šādu skaitlisko bināro izteiksmi, savukārt izteiksmes beigās “1” norāda pin0 pozīciju, tas ir, tās atrašanās vietu formā PORT B ​​pirmās tapas

Ja atceraties, mēs uzzinājām, ka PORT B ​​ar to saista 8 tapas (no 0 līdz pin7), un, ja pamanāt, ka iepriekš minētajā kodā ir arī 8 cipari, kas nozīmē, ka katrs cipars apzīmē šīs 8 PORT B ​​tapas.

Tagad nākamā procedūra būtu 5V piešķiršana šai tapai (pin0). Atkal darbības princips ir identisks DDR, kā norādīts iepriekš, izmantojot šādu bināro kodu:

PORTB = 0b00000001

Kā redzams, vienīgā atšķirība starp iepriekš minēto kodu un agrāko ir tā, ka šajā kodā mēs izmantojām PORT reģistru. Šis reģistrs īpaši apstrādā tās porta piespraudes, kurai tas ir novietots MCU. Tādējādi tas ļauj mums piešķirt reālo datu loģiku (0 vai 1) šiem pinouts.

Tagad mēs varētu būt ieinteresēti apspriest dažus jautājumus par mūsu programmas aptuvenajām detaļām. Tā kā mēs zinām, ka visām programmām ir nepieciešama īpaša vieta, lai sāktu izpildi, to var salīdzināt ar šefpavāru, kurš zina visas sastāvdaļas attiecībā uz konkrēto recepti, bet nav instruēts, no kā sākt.

Galvenā funkcija šeit ir vieta, kur katra C / C ++ programma sāk izpildi. Tāpēc galveno var izveidot kā:

int main (anulēts)
{
}

Tomēr, lai programma varētu interpretēt DDR un PORT reģistra datus un to darbību MCU mikroshēmā, ir jāiekļauj papildu paziņojums, kas var sastāvēt no visiem datiem par AVR MCU. Varbūt mēs vēlētos pievienot šo iekļaušanu visās mūsu programmās.

# iekļaut
int main (anulēts)
{
}

Tiklīdz kompilācija tiek sākta, kompilatora pirmapstrādātāja sadaļa koncentrējas uz AVR direktoriju, lai identificētu “io.h” failu. Paplašinājums “.h” šeit norāda, ka tas ir galvenes fails un ka šis kods faila iekšienē tiks ieviests izveidojamā avota faila sākumā (galvā), līdz ar to nosaukums “header”.

Šeit mēs varam ieviest DDR un PORT paziņojumus mūsu kodā, jo io.h galvenes faila pievienošana būtu novirzījusi kompilatoru par tiem.

# iekļaut

int main (anulēts)

{

DDRB = 0b00000001 // Datu virziena reģistra iestatījums pin0 izvadīšanai un atlikušās tapas kā ievade

PORTB = 0b00000001 // Iestatiet pin0 uz 5 voltiem

}

Iepriekšminētais nosaka pin0 kā izejas orientāciju, kuras lielums ir 5 V. Tomēr joprojām ir viena problēma, kas šai tapai nav noteikta, proti, šī tapa vēl ir jāiesniedz ieslēgt bezgalīgi ilgi, kamēr MCU ir ieslēgts. Šī bezgalīgā atgriezeniskā saite nodrošinās, ka šī tapa no MCU neizslēdzas, drīzāk turpinās ar 5V izeju bezgalīgi.

Lai gan ir daudz dažādu metožu, kā lietot cilpas instrukciju tapai, mēs šeit mēģinātu izmantot cilpu “kamēr”. Kā norāda nosaukums, cilpa “kamēr” saka mikrokontrollerim, ka, kamēr ir pieejama enerģija, jums jāpaliek aktivizētam ar piešķirto 5V piešķirtajam pinoutam.

# iekļaut

int main (anulēts)

{

DDRB = 0b00000001 // Datu virziena reģistra iestatījums pin0 izvadīšanai un atlikušās tapas kā ievade

PORTB = 0b00000001 // Iestatiet pin0 uz 5 voltiem

kamēr (1)

{

// Kods būtu šeit, ja tas būtu jāizpilda vēl un vēl un vēl ... bezgalīgi

}

}

Varat atzīmēt, ka šeit mēs esam izmantojuši “1” kā argumentu kā “loop”, jo visu, izņemot “0”, varētu uzskatīt par loģisku “true”.

Tas nozīmē, ka “kamēr” cilpas apsvērums nekad nebūs atbildīgs par neko, izņemot loģisku “true”, kas nozīmē, ka konkrētā tapa līdz noteiktajam stāvoklim uz nenoteiktu laiku.

Par LED var liecināt, ka tas visā iedalītajā tapā ir pastāvīgi ieslēgts, kamēr MCU ir saņēmis strāvu visā Vdd un Vss.

Tas ir viss, tagad mums ir rezultāts, ko mēs vēlējāmies iegūt, un beidzot varam redzēt, kā tas notiek pēc tik daudz smaga darba, tomēr, neskatoties uz to, ka mūsu smagā darba saldais rezultāts ir tik apmierinošs.

Nākamajās apmācībās mēs uzzināsim, kā pievienot dimensijai “laiks” iepriekšminēto LED, tas ir, kā padarīt to mirgot ar noteiktu ātrumu.

Faktiski iepriekšminētajā ieviešanā LED faktiski mirgo, bet cikla ātrums ir tik ātrs, ka tas ir gandrīz kā pastāvīgs LED apgaismojuma ieslēgšana.

Mēs redzēsim, kā šo cilpu var pievienot ar vēlmi pēc vēlēšanās, lai LED mirgotu ar šo aizkavēto ātrumu.

Kā padarīt mirgot LED, izmantojot AVR mikrokontrolleru

Pēdējā diskusijā mēs iemācījāmies ieslēgt LED slēdzi, izmantojot mikrokontrolleru, vai tas bija izcils, vai ne? Var būt ne tik daudz!

Šeit mēs uzzināsim, kā uzlabot iepriekšminēto LED apgaismojumu, piešķirot divvirzienu funkcionalitāti, tas ir, mēs centīsimies panākt, lai tas mirgo vai mirgo noteiktā frekvencē vai ātrumā. Mēs redzēsim arī to, kā šo likmi varētu palielināt vai samazināt pēc lietotāja vēlēšanās.

Apskatīsim to:

# iekļaut

# iekļaut

int main (anulēts)

{

DDRB | = 1<< PINB0

kamēr (1)

{

PORTB ^ = 1<< PINB0

_delay_ms (100)

}

}

Ja jūtaties neizpratnē par šiem dīvainajiem simboliem (&, ^, | utt.), Kas izmantoti iepriekš minētajā izteiksmē (& & # 39; s tur nav, bet varētu tikt izmantoti citos līdzīgos kodos), šeit ir saistītā informācija, kuru jūs interesētu uzzināt par šiem :

Tas ietver daudzus standarta loģiskos algoritmus, piemēram, AND, OR, NOT un XOR, kurus parasti izmanto ar iepriekš minēto kodu.

Šī loģiskā funkcionalitāte salīdzina abus bitus “1” un “0” atbilstoši tām piešķirtajām patiesības tabulām.

Iegūsim ideju, analizējot šādu bitu izvietojumu:

01001011 &
10001101
ir vienāds
00001001

Iepriekš minētajā kodā & atsaucas uz AND, ko izmanto C programmēšanā.

Lasot rindas vertikāli, tas liek domāt, ka 0 un 1 ir vienāds ar 0, 1 un 0 ir vienāds ar 0, 0 un 0 ir vienāds ar 0, 1 un 1 ir vienāds ar 1. Lasīšana ir tikpat vienkārša kā tas. Tie atbilst AND operatora patiesības tabulai.

Ja mēs novērtējam nākamo tabulu, tas norāda simbolu “|” kas apzīmē “OR” funkcionalitāti, “|” var atrast tieši datora tastatūras “atpakaļatkāpes” kreisajā pusē:

01001011 |
10001101
ir vienāds
11001111

Identiski šī OR loģiskās funkcionalitātes patiesības tabula norāda, ka biti 0 vai 1 ir vienādi ar 1, 1 vai 0 ir vienādi ar 1, 0 vai 0 ir vienādi ar 0, bet 1 vai 1 ir vienādi ar 1.

Šī bitu kombinācija ir paredzēta XOR loģikas operatoram, ko apzīmē ar ^, un to var izpētīt tāpat kā mēs darījām ar AND, OR patiesības tabulām:

01001011 ^
10001101
ir vienāds
11000110

Tagad turpināsim ar pirmo programmu un uzzināsim, ko nozīmē šī rindiņa:

# iekļaut

Izmantojot mūsu iepriekšējās apmācības, mēs zinām, kā izteiksme darbojas, tāpēc mēs to vairs neatkārtosim, tomēr šķiet, ka tās ir jauns 'iekļaut', ko izsaka #include un kas ir jāizpēta.

Šajā “iekļaujiet” delay.h ļauj mums izmantot dažas vienkāršas ieviešanas metodes.

Kā norāda nosaukums, delay.h ļauj mums izraisīt kavēšanos konkrētajā programmā.

Nākamo izteicienu int main (void) varētu izlaist no notiekošās diskusijas, jo mēs to jau esam aprakstījuši savos iepriekšējos ierakstos.

Tālāk nāk mainītais DDRB.

Turpmāk parādīta agrākā forma, kas nav labāks veids, kā piešķirt tapas, jo visas tapas no 0 līdz 7 tika pārslēgtas, lai izveidotu ieejas. Bet tikai iedomājieties, kāda būtu situācija, ja mēs vēlētos izveidot garāku programmu, kurai šie tapas būtu nepieciešamas kādai citai funkcionalitātei? Piemēram, pin2 varētu būt vajadzīgs ierīces tālvadības pārslēgšanai. Tādā gadījumā mēs nenovērtētu to, ka to pašu kā ievadi piešķir tikai izmēģinājuma un kļūdu dēļ. Tas varētu nozīmēt nepareizu attālā raidītāja atbildi uz ierīces uztvērēju.

DDRB = 0b00000001

Mēs drīzāk vēlamies ietekmēt tikai vienu bitu, hat pin 0 bit, ieskatoties “OR” funkcionalitātē, ko varētu izpildīt, izmantojot bināro maskēšanu.

DDRB = DDRB | 0b00000001

Šeit tas ir aizsegts ar “OR” masku: 0b00000001, lai gan tas, šķiet, ir autentisks binārs skaitlis, ja agrākais DDRB, piemēram, 0b01001010, tad, izmantojot OR, izmantojot šo maskēšanu, varētu iegūt: 0b01001010 | 0b00000001 = 0b01001011.

Rezultātā atšķirība, ko varēja redzēt, ir tikai ar pin0, kura biti ir mainījušies!

Vēl vairāk saspiežot iepriekš minēto paziņojumu, izmantojot C ++, iegūst:

DDRB | = 0b00000001

Tomēr mēs uzskatām, ka dotajā programmā ir vēl vairāk. Lai gan tas var izskatīties diezgan likumīgi un acīmredzami, mums vajadzētu izmantot dažus no io.h galvenes faila izteikumiem, it īpaši, ja tas ir pamatā izveidots mūsu ērtībām?

Tātad, ja “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.

Tātad, mēs sākam ar 0b00000000 un uzliekam “1”, lai iegūtu 0b0000001, un pēc tam mēs to pārvietojam uz kreiso 0 pozīciju, kas dod tieši identisku 0b00000001 kā iepriekš.

Ja pieņemsim, ka tas bija PINB4, paziņojumu varētu izteikt kā 1<< PINB4. I this case the “1” would be pushed to the left 4 locations producing: 0b00010000.

Uzmanieties, ka mēs izmantojam nulles indeksu, kas nozīmē, ka aiz “1” ir četras nulles.

Tagad turpinām cilpu “kamēr”, kuru mēs iepriekš atzīmējām pāri “bezgalīgajai cilpai”. Bet varbūt tagad mēs vēlamies, lai mikrokontrolleris īstenotu dažus no vēlamajiem nāvessodiem. Tas var būt iespējams tikai noteiktās cilpas iekšienē. Tā ir cilpa, kur konkrētā secība tiek atkārtota atkal un atkal.

Gadījumā, ja izpilde tiktu ievietota pirms cikla, tā būtu ieviesta tikai vienu reizi.

Tomēr, lai gaismas diode mirgotu bezgalīgi, būtu nepieciešams ieslēgt / izslēgt PINB0 pārmaiņus kontūrā. Šeit mēs atrodam arī ieviestās kavēšanās, bez kurām gaismas diode nemirgo. Bet tas liks LED mirgot ļoti ātri, un to ir grūti atpazīt ar neapbruņotu aci, tam vajadzētu nedaudz palēnināties, lai kļūtu identificējams ar mūsu acīm.

Mēs zinām, ka binārā skaitļa noteikšanas procedūra ir noteikta, taču vēl neesam pārliecināti, kā izmantot konkrētu bitu “0”, ja tas vēl ir “1”.

Var redzēt, ka to dara šī programma, taču mēs arī atklāsim, ka tā, iespējams, nav redzama programmā.

Sākotnējie divi paziņojumi maina bitu uz “1” (5V, LED gaismas), pēc tam tiek ieviesta pauze uz 100 ms.

Nākamās pāris rindas PINB0 bitu pārvērš par “0” (nulles spriegums, LED izslēgts), bet atvainojiet, ka AND salīdzināt nevarēs izpildīt “0” no bita, bet, ja mēs izmantojam NAV “~” binārajai maskai tā varēja visus 0 pārslēgt uz 1 un otrādi.

Tas ļaus mums ietekmēt tikai PINB0 bitu un pagriezt to uz “0”. Iekavas tika iekļautas, lai ietvertu maskēšanas izpildi tā, lai NOT darbību varētu piemērot visai maskai, nevis vienkārši pāri “1” pirms kreisās maiņas “<<”.

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

Lai izveidotu ON OFF aizkavi vai vienāda ilguma periodus, mēs varam saīsināt iepriekšējās četras rindas uz divām un izmantot mūsu labā XOR funkcionalitāti. Jāatzīmē, ka XOR izpildē piešķirto piespraudi 1 gadījumā, ja tas ir 0 un otrādi. Šī izpilde ietekmētu tikai PINB0. Kā reizēm tiek lietota komanda, tā bitu vienkārši pārvērš par pretējo esošajai loģikai.

PORTB ^ = 1<< PINB0
_delay_ms (100)

GATAVS! Jūsu gaismas diode tagad mirgo atbilstoši noteiktajam ātrumam ... Vienkārši, vai ne?




Pāri: Vairāku ierīču tālvadības shēma Nākamais: maiņstrāvas fāze, neitrāla, zemes bojājuma indikatora shēma