A mikrokontroller alapjai feltárva

Próbálja Ki A Műszerünket A Problémák Kiküszöbölésére





Egy dolog remek a mikrokontroller IC-kben, ezek szinte a világ minden részén és az elektronikus kiskereskedőknél elérhetők.

Bevezetés

Alapvetően a mikrovezérlő eszközöket használják a környező környezet értékelését magában foglaló alkalmazásokban és hasonló elektronikában.



Megtalálhatja ezeket az eszközöket egy bizonyos paraméter megjelenítésére, motorvezérlő alkalmazásokban, LED világításban, különféle típusú érzékelőkben, például dőlésérzékelő, gyorsulásmérő, sebességmérő, adatgyűjtők, hőmérséklet-szabályozók, billentyűzetek stb.

Az elsődleges megértés a mikrovezérlőkkel az AVR Amega32 mikrovezérlőre hivatkozva szerezhető meg, amely annyira fejlett, hogy néha a chipen belüli számítógépnek hívják.



Ez az eszköz parancssorok végrehajtására van kijelölve egy program kialakításához.

A program nyelve, amelyet itt látna, a C ++. Az itt leírt tanfolyamon mélyebben megismerheti ezt a nyelvet.

Amikor MCU-król van szó, megkapja azt a lehetőséget, hogy lehetősége legyen az összes pinout vezérlésére és konfigurálására.

Ha kissé belefáradsz ebbe, csak nyugodtan, mert ez egyáltalán nem bonyolult, minden szempontból folyamatosan, de határozottan megkönnyebbülsz, ahogy haladunk előre.

Egy MCU chipben a Vdd és a Vss kivételével az összes érintkezõ exkluzív jelöléssel rendelhetõ meg.

Pinout részletek

Ha a chipet felülről pillantja meg, talál egy kis háromszög alakú bevágást, amely jelzi a kezdőpontot attól a ponttól, ahonnan a pinoutok megkezdődnek, vagyis a chip első számú csapja éppen ezen a bevágás alatt kezdődik.

Ebből a csapból kiindulva 20 csapot találhat fent az alján (balra), és további 20 csapot a másik oldalon (jobb), alulról felfelé haladva a jobb oldalon.

Az első 8 láb, amely a bemetszéstől indul, a PBO-7, amely az IC indexcsapjait képezi, mivel itt minden program nullával kezdődik.

A fenti pinouts-sorozatot PORT B-nek nevezik, míg vannak más azonos portkészletek, amelyek A-tól D-hez vannak rendelve

Ezek a portok hozzárendelhetők az INPUT nevű betáplált adatok elfogadásához és felismeréséhez, valamint az OUTPUT nevű meghatározott formában történő adatok továbbításához.

Az általános kategóriába tartozó csapok közül kettő a (+) / (-) csap, amelyekre Vdd és GND néven is hivatkozunk.

A PORT D (PDO-6) egyik csapja látható a chip bal oldalán, az alsó területen.

A PD7, amely a D PORT 7. tűje, egyedül állva és a jobb oldali tűsorozatot kezdve nyomon követhető.

Most a chip jobb oldaláról haladva, ahol a PORT D véget ér, a C PORT a sorrendben felfelé kezdi a számlálást.

Ezek hozzájárulnak az MCU sok érdekes csapjához, az analógtól a digitálisig.

Ezeknek a csapoknak az a funkciója, hogy érzékelő bemenetekké váljanak a sok paraméter észleléséhez külsőleg konfigurált analóg áramkör szakaszokon keresztül.

A fenti csapok alkotják a PORT A-t.

A fenti csapok közötti analóg-digitális átalakítást meg lehet érteni egy példa segítségével, ahol egy közönséges érzékelő, például egy hőmérő segítségével detektált analóg hőmérsékleti szintet alkalmazunk a PORT A csapok egyikére, amelyet az MCU könnyen elfogad és átalakít digitális nulláról 255 F-ra (8 bites adat, amelyet a 10 bites kimenet elérése érdekében frissíteni lehet) előállítani.

Egy másik jellemző, amely az MCU-kban is megfigyelhető, a rendelkezésre álló programozási terület vagy a memória, amely meghatározza a mikrovezérlőhöz megadott változók és program terét.

Ezenkívül az MCU-k beépített órával rendelkeznek a releváns paraméterek számlálására.

Az órajellemzők lehetővé teszik az MCU számára, hogy számos különféle számlálási folyamatra alkalmazza önmagát, amelyek az adott eszköz specifikációjától függően gyorsak lehetnek a mikroszekundumok tartományában, és bármely kívánt mértékben lassabbak is lehetnek.

Mostanra már bizonyos mértékben megérthette a mikrovezérlő fogalmát, annak portjait és csapjait tekintve.

Hogyan hozzunk létre SPI-csatlakozót a programozótól a mikrovezérlőig

Itt az ideje, hogy egy kicsit elmélyüljünk a témában és megvizsgáljuk a programozás világát.

Ennek ellenére, mielőtt belevágnánk egy programba a chipbe, meg kell találnunk a megfelelő módot az SPI (Serial Peripheral Interface) csatlakozó integrálására az MCU-val.

De még ezek után sem tudjuk csak belökni az SPI-t az MCU csatlakozókba, igaz? Azt sem engedhetjük meg, hogy az SPI meghosszabbított vezetékei közvetlenül a kenyérlapba kerüljenek. Ez azt is okozhatja, hogy a vezetékek helytelen beállítása a rossz csatlakozásokkal rendelkező helytelen csapokhoz kapcsolódik.

Ezért annak érdekében, hogy a dolgok abszolút kifogástalanok legyenek, egy apró fedélzeten végezzük az eljárásokat, ahol megkapjuk a szükséges összekötő fém csapokat, amelyeket forrasztásnak is nevezünk. Ezeket a fejléc-csapokat mostantól fel lehet használni az SPI csatlakozóval való összeköttetéshez. Ennek a fejlécnek a kapcsolatait fel lehet vetni egy másik párhuzamos fejléc-csapra, amelyet fel lehet használni a kenyérlemez-kapcsolatokhoz.

Így a fenti szerelvény most egy szoros és megbízható közbenső összekötő platformot képez az SPI és az MCU között.

A Uptil most minden remekül néz ki, így haladjunk tovább a programozóval kapcsolatban, amelyre szükség van a PC és az MCU között.

Számos olyan vállalat létezhet, akik gyártják és értékesítik ezeket a programozó egységeket, így ezek beszerzése nem jelenthet problémát számodra, például az Adafruit Industries, az USBtinyISP vagy a Sparkfun stb.

Ezek közül néhány teljesen másnak tűnhet, mint a hagyományos típusok, de alapvetően minden megegyezik és megfelel a szokásos programozási szabályoknak, és interfészként használható a számítógép és az AVR mikrovezérlő között.

Mindazonáltal győződjön meg róla, ha más MCU-t használ, és nem AVR Atmega32-et használ, akkor lehet, hogy ellenőriznie kell az adott MCU-chip megfelelő kompatibilis programozóját.

Megfigyelhető, hogy ezek közül a programozók közül jó néhány egyforma illesztőprogramot alkalmaz, valamiről gondoskodni kell, és erről későbbi fejezeteinkben többet megtudunk.

A számítógép csatlakoztatása a mikrovezérlő chiphez valóban alapvető fontosságú, és örömmel tudná, hogy ehhez milyen egyszerű eljárásokra van szükség. Tehát nyomjuk meg azonnal a gombotJ

A fent kifejtett SPI interfészlap elkészítése nem nehéz, csupán arról van szó, hogy a forrasztópáka az összes csatlakozáson keresztül a kisméretű általános célú táblán a bemutatott két fejléc-soron keresztül működik.

A fenti ábra bemutatja azokat a csatlakozási részleteket, amelyeket be kell tartania, miközben összekapcsolja a vezetékeket a fejlécek között.

A dolgok még egyszerűbbé tétele érdekében a fenti képre hivatkozva nézzük át a következő csatlakozási részleteket:

A bal felső saroktól kezdődő SPI tű a „Master IN, Slave OUT” (MISO) felé kerül

Az SPI tű balról középre csatlakozik az óra csaphoz (SCK)

A bal alsó sarokban lévő SPI tű csatlakozik a Visszaállításhoz. (A következő útmutatókban részletesen megismerjük ezt a csapot)

A jobb alsó sarokban lévő SPI felakasztja az MCU GND tüskéjét, a GND pedig azt a csapot jelenti, amely az ellátás nulla tápvezetékét vagy negatív (relatív) sínjét képezi.

A jobb középső fejlécről végződő SPI összekapcsolódik az MCU „Master Out, Slave IN” (MOSI) tűjével.

A jobb felső fejlécből kilépő SPI fel van kötve az MCU (+) jelével, ami nyilvánvalóan az MCU Vdd vagy pozitív tápegysége.

Ez az.

Csatlakoztassa a két csatlakozót az ismertetett módon, és az SPI interfészkártyája készen áll a szükséges műveletekre.

További segítségért olvassa el a fenti ábrát, a végső interfész-kártyának így kell kinéznie, miután az összes vezetékes csatlakozást megfelelően elvégezte a fenti megbeszélés segítségével.

Remélem, hogy már elkészítette az SPI interfészt az előző bemutatóban leírtak szerint, és most itt az ideje annak biztosítására, hogy számítógépünk elfogadja a programozót, amelyet be kell integrálnunk a PC és az MCU közé.

Egy egyszerű programozási kód készítése az MCU számára

Veszünk egy USBTinyISP egységet, amely a Sparkfun cégtől kapható, és összeköti a számítógépet a mikrovezérlővel.

Tudjuk, hogy minden olyan számítógépes operációs rendszerhez, mint a Windows, illesztőprogramokra lesz szükség, amelyek nélkül felesleges bármit betöltenie a számítógépbe, így programozónknak illesztőprogramokra lesz szüksége a számítógépébe történő betöltéshez.

Vessünk egy pillantást az illesztőprogramok számítógépes operációs rendszeréhez történő telepítéséhez szükséges eljárásokra, itt a Windows 7 OS példáját vesszük, akár 32, akár 64 bites specifikációkkal.

Nyissa meg a sparkfun.com webhelyet, és kattintson a „pocket AVR programozó oldal” elemre. A link könnyen megjeleníthető az oldalon belül.

Ezután keresse meg a „Windows illesztőprogramot” a dokumentumok alatt, és egyszerűen kattintson rá.

Ez megkaphatja a pocketprog-driver.zip fájlt a számítógépén.

Menjen a számítógépére, keresse meg a letöltési helyet, és csak csomagolja ki a letöltött fájlt egy mappába.

Abban az esetben, ha számítógépe 64 bites operációs rendszer, akkor még néhány lépést kell végrehajtania az alábbiak szerint: 32 bites operációs rendszer esetén a telepítést közvetlenül a kibontott fájlból kezdheti meg.

64 bites esetén kövesse ezeket, a 32 bites esetén pedig egyszerűen hagyja figyelmen kívül:

A Google „libusb sourceforge” és kattintson erre a linkre a legújabb verzió.

Találna néhány további fájlt, azonban érdekli, hogy megtalálja a bib fájlt, azaz: libusb-win32-bin - #. #. #. #. Zip

Most keresse meg ezt a letöltési helyet a számítógépén, csomagolja ki, és mentse az egyik mappába.

Ebbe a mappába navigáljon a kukamappán, és folytassa az amd64 mappát.

Néhány mappát látna itt: ghcalled libusb0.dll és libusb0.sys.

Nevezze át ezeket: libusb0_x64.dll és libusb0_x64.sys.

Most át kell másolnia a fenti fájlokat a pocketprog-driver mappába, egyszerűen felül kell írni a meglévő verzió fájljait.

A fenti illesztőprogramok telepítéséhez érdekelne a következő módszer, amely a maga típusában meglehetősen nem hagyományos:

Ez egy „régi hardver hozzáadása” mód.

Kattintson a „Start menü” gombra

Ezután folytassa a jobb egérgombbal a „számítógép” gombra

Kattintson a „Kezelés”, végül az „eszközkezelő” elemre

Ezután válassza a menüben a „Régi hardver hozzáadása” lehetőséget.

Nyomja meg a „tovább” gombot, amíg a varázsló be nem kerül

Az utasításokat követve kattintson a „Telepítse azt a hardvert, amelyet ki kell választania a Speciális listából” elemre. Ezzel a választógomb ikonra kattint. Ez valójában egy Windows vezérlőgomb, amely most egy apró körként jelenik meg, amelynek belsejében egy gömbölyű kék ​​reszelő található.

Most egyszerűen kattintson a „Tovább” gombra

Ez megmutatja az „Összes eszköz megjelenítése” menüt, amelyre kattintania kell.

Ezután kattintson a „Lemez van” ikonra.

A „Tallózás” ikon segítségével lépjen tovább a pocketprog-driver mappa helyére. Ha a kiválasztást helyesen végezte el, akkor az adott mappába helyezett pocketprog.inf fájlt jelenítené meg.

Kattintson duplán a fájlra, és biztosan tanúja lehet az illesztőprogram telepítésének a számítógépére.

Újra és kívül !! Folytassuk a következő útmutatónkkal a következő oldalon.

Mostanra lehet, hogy telepítette a szükséges szoftvert és felépítette az SPI felületet.

Hogyan lehet egy programot átvinni egy mikrokontroller chipbe

A következő lépés néhány összetevőt igényel, például kenyérlemezt, LED-et és számított ellenállást a tervezett alkalmazáshoz.

Ebben a részben megismerjük a programozó tesztelési módszerét, és megerősítjük a megfelelő illesztőprogramok és szoftver telepítését.

Annak ellenőrzésére, hogy az illesztőprogramok és a szoftver megfelelően lett-e telepítve, egy egyszerű programot hajtunk végre, amelyet avrdude néven ismerünk.

Az AVRdude a legújabb WinAVR telepítéshez társított program, amely nélkül a fájl tényleges átvitele az MCU-ba nem lehetséges.

Ez a program egy .hex fájlformátum, amely lényegében érthetővé válik az MCU számára a szükséges végrehajtásokhoz.

Abban az esetben, ha az ellenőrzés nem jár sikerrel, a programozó képtelen lesz a fájl átadására.

Lássuk gyorsan, hogyan tudjuk végrehajtani a tesztelési eljárást az alábbi utasítások segítségével:

Nyissa meg a DOS (Disk operációs rendszer) parancsot a „Start menü” gombra kattintva, és írja be a cmd.exe fájlt a megadott keresőmezőbe.

Most az AVRdude végrehajtása egyszerűen elvégezhető az avrdude –c usbtiny –p m32 beírásával a DOS parancssorba. Amint ez megvalósul, a DOS azonnal nyugtázza, hogy a kapcsolat sikeres volt-e.

A fenti parancsban a „-c” egy értesítő jelző, amely tartalmazza az „usbtiny” programozó paraméter-specifikációt, míg a „-p” címke a mikrovezérlő eszközt azonosítja („m32 jelzi az Atmega32-et”).

Abban az esetben, ha más MCU-t használt, akkor a megvalósításhoz meg kell adnia a megfelelő előtagokat.

Miután a fenti eljárás befejeződött, beírhatja az „exit” parancsot a DOS parancssorba, és ezzel kiléphet az ablakból.

Ha komolyan kíváncsi a tényleges programozási részletekre, akkor ehhez először meg kell forrasztanunk és megépítenünk a külső analóg LED áramkört, amelyen keresztül a program megvalósítható, mert hacsak nincs olyan rendszer, amely nyugtázná az MCU válaszát, a programozás és a mikrovezérlő működtetése meglehetősen értelmetlen lenne.

A LED-tábla elkészítése nagyon egyszerű, csupán arról van szó, hogy a LED két vezetékét forrasztjuk egy darab fedélzetre, és összekapcsoljuk az ellenállást a LED egyik vezetékével. Ennek a LED-nek az a szerepe, hogy az áramot csak a LED-re korlátozza, hogy ne égjen el az MCU kimenetéből adódó túlzott feszültség miatt.

Az ellenállás értéke a következő egyszerű képlet segítségével számítható ki:

R = (Ub - LEDfwd) / I

Ahol az Ub a tápfeszültség, a LEDfwd az alkalmazott LED optimális üzemi feszültsége, az I pedig az optimális erősítője.

Tegyük fel, hogy olyan RED LED-et használunk, amelynek LED-es előremenő feszültsége = 2,5 V és áram = I = 20 mA, a fenti egyenlet a következőképpen oldható meg:

Mivel az MCU feszültsége 5V lenne, a következőképpen lehet kifejezni:

R = (5 - 2,5) /. 02 = 125 ohm, ¼ watt, a legközelebbi érték 120 ohm.

Most megvan a LED, egy 120 ohmos ellenállás és egy fedélzet, egyszerűen kösse össze a fenti alkatrészeket az ábra szerint a mikrovezérlővel.

Miután ez megtörtént, az MCU programozható a kívánt válaszra a fenti LED-en.

Ezután az MCU programozása.

Annak érdekében, hogy a mikrovezérlő néhány értelmes megvalósítást hajtson végre, elengedhetetlen, hogy megfelelő utasításokat írjon az MCU-ba.

A programozási környezet telepítése és a WinAVR vizsgálata

Ehhez valószínűleg a saját „szövegszerkesztőnket” is használhatnánk a számítógépünkön, bár lehet, hogy értékelnénk egy professzionálisabb „programozási környezet” használatát a közönséges szövegszerkesztő helyett, egyszerű, mert ez a megközelítés lehetővé teszi, hogy élvezze beépített érdekes funkciók ebben a „programozási környezet” csomagban.

Támogatná a programok létrehozását és szerkesztését különböző nyelveken keresztül, és azokat egy szállítható módba is összeállítaná, amelyet egy mikrovezérlő chip könnyen érthet és elfogad.

Végül ezt a WinAVR támogatná, és átviszi az érintett MCU chipbe.

A WinAVR fel lehet szerelni számos más művelet végrehajtására is, például a programok hibaelhárítására, valamint az esetleges szintaxisra való figyelmeztetésre, valamint a hibák és hibák fordítására. Megbeszéljük ezeket későbbi oktatóinkkal.

A WinAVR telepítési folyamata rendkívül gyors és gyors lenne. Merüljünk bele a részletekbe a következő pontokkal:

Töltse le a legújabb verziókat a WinAVR source forge files mappából. Hasznos információkkal találkozhat a letöltéssel kapcsolatban a hivatalos weboldaláról.

Biztonsági lekérdezéssel kéri Önt, hogy válaszoljon, ha azt szeretné, hogy a letöltés megtörténjen, ezért a letöltendő fájl futtatható fájl.

Töltse le a fájlt, és rákattintva indítsa el a végrehajtási folyamatot. Indítsa el a telepítést.

A folyamat néhány megválaszolható kérdéssel kalauzolja el Önt, hogy Ön kényelmesen ésszerűsíthesse a telepítést. Ezek közül sokat figyelmen kívül akar hagyni az alapértelmezett űrlapon, mindezekből választaná ki azokat, amelyek úgy érzik, hogy a legalkalmasabbak a műveletekhez.

Mostanáig mindent normálisnak és könnyen kezelhetőnek talált, és néhány lehetőséget választott a Start menüben. Semmi gond, ezek közül csak néhány használná csak a „programozók jegyzettömbjének” nevű tematikát.

Ha rákattint erre az ikonra, elindítja a felhasználói felületet, hogy Ön képes legyen alkalmazni a programok írását (például létrehozni és szerkeszteni). Tanúja lehet annak a programnak is, amely menüparancsokból áll, amelyek segítenek a kódok fordításában és beágyazásában a mikrovezérlőbe.

A fenti programozói jegyzettömb alapvető feladata, hogy átalakítsa az ember által olvasható kódot, amelyet csak az MCU számára érthető utasítássorokká alakít.

A következő oktatóanyag a fenti programozó tesztelésére terjed ki, hogy biztosak lehessünk a Windows kompatibilitásában, és abban, hogy tökéletesen „kezet fog-e” a mikrokontroller IC-vel.

Hogyan programozhatunk MCU-t egy LED bekapcsolásához

Amint ez megerősítést nyer, folytatnunk kell egy kis 'semmittevés' kód létrehozását, csak annak biztosítása érdekében, hogy a kódátvitel eljárásában ne találjanak hibák.

Természetesen készen állunk az első programunk végrehajtására az MCU-n belül, de előtte érdekes lenne gyorsan összefoglalni, mit tettünk a korábbi oktatóanyagok során:

Beszereztük az AVR Atmel mikrovezérlőt a szükséges specifikációknak megfelelően, itt az ATMega32-et használtuk az illusztrációkhoz. Ezután megismerkedtünk a mikrovezérlő alapjaival és a programozó egységgel, amely felelős a program MCU chipbe történő átviteléért.

A továbbiakban megépítettük az SP interfész csatlakozót, amely elengedhetetlen annak érdekében, hogy számítógépe összekapcsolható legyen a mikrovezérlővel a programozási műveletekhez.

Ezek után meggyőződtünk arról, hogy az illesztőprogramok helyesen települtek-e a számítógépbe 32 bites és 64 bites, de 64 operációs rendszer esetén.

Ezután telepítettük a Win AVR nevű programozási környezetet, hogy megkönnyítsük a hirdetések hirdetésírásos átírását a mikrovezérlőbe, majd végrehajtjuk az avrdude-t, amellyel ellenőrizhetjük a programozót a számítógépével és az egymással összekapcsolt mikrovezérlővel.

Végül az előző fejezetben befejeztük a LED / ellenállás áramkör felépítését és összekötöttük a vonatkozó MCU kimenetekkel.

Ez sok munka, ennek ellenére itt az ideje, hogy azonnal belevágjak néhány igazi programozási dologba!

Először is szeretnénk felosztani a mikrovezérlőt három kategóriára, ez nagyon leegyszerűsíti a megértésünket:

Irányítás, észlelés és kommunikáció

Érdekes lenne tudni, hogy a fenti funkciók sokféleképpen programozhatók.

Első programunkban megpróbáljuk elrendelni a mikrovezérlőt, hogy „vezéreljen” egy külső paramétert, igen, igazad van, ez lenne a LED, amelyet nemrég építettünk.

Pontosabban elmondjuk az MCU-nak, hogy kapcsolja be a csatlakoztatott LED-et, igen, tudom, hogy ez elég primitívnek tűnik, de a kezdő szakasznak mindig könnyűnek kell lennie.

A jelenlegi feladattal való előrelépés, az MCU vezérlése a LED-mel valójában nagyon egyszerű:

Erre utasítjuk a B PORT # 0 tűjét, hogy állítsa elő a LED-hez szükséges 5V-ot.

Felidézve az előző oktatóanyagot, a LED anódját csatlakoztattuk az MCU fent említett tűjéhez.

Két lényeges dolgot kell megcélozni az MCU ezen tűjével: 1) kimenet és 2) 5 volt

Megtanulunk egy módot, amelyen keresztül utasíthatjuk az adott csapot, hogy legyen az MCU kimenete.

Amint a chip kimenetére van állítva, utasíthatjuk, hogy legyen „magas” (5 V) vagy „alacsony” (0 V), ahogyan azt egy alkalmazás kívánja.

Mivel bármelyik logikai áramkör, például egy MCU, a csapok kimenetet vagy bemenetet hervadhatnak, és konfigurálhatók akár magas logikai, akár alacsony logikai értékek előállítására, ezért a csapokat csak logikai magas vagy logikai alacsony értékre kell kijelölni , nincsenek köztes vagy meghatározatlan állapotok, kivéve ezt a pár állapotot a mikrovezérlőkhöz vagy bármely digitális IC-hez. Ugyanez vonatkozik az MCU minden egyes tűjére.

Ami a bemeneti és kimeneti tűkiosztást illeti, a bemenetek úgy vannak elhelyezve, hogy elfogadják a külső analóg fokozatokból érkező jeleket, míg a kimenetek feladata ezeknek a megadott logikai állapotokba vagy frekvenciába történő értelmezése.

Bár a fenti hozzárendeléseket sokféle módszerrel végezhettük el, az egyszerűség kedvéért az egyiket megvitatnánk. Meg kell azonban jegyeznünk, hogy bár a most bemutatott változat könnyűnek és érdekesnek tűnik, nem annyira életképes és nem ajánlott típus az összes MCU alkalmazáshoz, ugyanezen okból a későbbiekben a kurzus későbbi részében ismertetnék meg a népszerűbb programozási módszerekkel . Ezek a programok csak a kívánt csapok hozzárendelését teszik lehetővé a specifikációk szerint anélkül, hogy befolyásolnák a többi szomszédos elemet, amelyet esetleg már hozzárendelhetnének más funkciók elvégzéséhez.

Azonban most nem fogunk annyira aggódni a többi csap miatt, és csak a releváns érdekelt csapokat használnánk, elkerülve bizonyos mértékig a szövődményeket.

Ahhoz, hogy kimenetként hozzárendelhessük a tűt, használnunk kell az adatirányító regisztert (DDR). Ha kíváncsi arra, hogy itt mit jelent a regisztráció, akkor egyszerűen az MCU-ban található egy olyan hely, amely lehetővé teszi a mikrovezérlő számára, hogy bizonyos módon reagáljon.

A DDR segítségével beállíthatjuk a PIN-kódot, hogy vagy olyan adatokat küldjön, amelyek hasonlóak a „kimenethez”, vagy elfogadja azokat az adatokat, amelyek „bemenet” formájában vannak.

Azonban zavarodhat a szóval kapcsolatban, mit jelent ez? Az adatok hozzáadnak egy harmadik dimenziót a csapokhoz, amelyek hozzárendelhetők állandóan logikai nulla (0 V) vagy logikai magas (5 V) értékre, de mi a helyzet a gyorsan változó jelekkel, például az impulzusok frekvenciájával. A frekvenciához magas és alacsony logikák (5 V és 0 V) ​​társulnak, amelyek bizonyos meghatározott intervallumokkal vagy periódusokkal oszcillálnak, így időorientálttá válik, és az idő függvényében beállítható, ezért 'adatként' azonosítunk egy olyan paramétert, amely jelzi egy függvény egy másik függvényhez (logikai állapotok és idő) képest.

A pin0 kimenetként történő hozzárendelésének egyik módja a következő kód beírása:

DDRB = 0b00000001

A fenti programban a DDRB jelzi a PORT B ​​adatirányának nyilvántartását. A 0b utasítja a fordítót a szám következő bináris kifejezésére, míg a kifejezés végén az „1” jelöli a pin0 helyzetét, vagyis az űrlapban található helyet a PORT B ​​első csapjának

Ha emlékszel, megtudtuk, hogy a PORT B ​​8 tűt társít hozzá (0-tól pin7-ig), és ha észreveszed, a fenti kódban is van 8 számjegy, vagyis minden számjegy a B BORT ezen 8 gombját jelöli.

Most a következő eljárás az lenne, ha 5 V-ot rendelünk ehhez a csaphoz (pin0). A működési elv ismét megegyezik a DDR-vel, ahogyan azt a következő bináris kód fejezi ki:

PORTB = 0b00000001

Mint látható, az egyetlen különbség a fenti és a korábbi kód között az, hogy ebben a kódban a PORT regisztert használtuk. Ez a regisztráció kifejezetten kezeli annak a portnak a pin-hozzárendelését, amelyhez az MCU-n belül van elhelyezve. Így lehetővé teszi számunkra a valós adatlogikák (0 vagy 1) hozzárendelését ezekhez a pinoutokhoz.

Most érdekes lehet, hogy megvitatunk néhányat a programunk hozzávetőleges részleteivel kapcsolatban. Mivel tudjuk, hogy minden programnak külön helyre van szüksége a végrehajtás megkezdéséhez, ezt összehasonlíthatjuk egy olyan szakácsral, aki ismeri az összes összetevőt egy adott recept vonatkozásában, de nincs megadva utasítás, honnan induljon.

A „fő” funkció itt az a hely, ahol az egyes C / C ++ programok megkezdik a végrehajtást. Ezért a fő létrehozható:

int main (érvénytelen)
{
}

Annak érdekében azonban, hogy a program értelmezni tudja a DDR és a PORT regiszter adatait és azok működését az MCU chipen belül, további nyilatkozatot kell mellékelni, amely tartalmazhatja az AVR MCU-ra vonatkozó összes adatot. Talán ezt a felvételt szeretnénk hozzáadni minden programunkhoz.

#include
int main (érvénytelen)
{
}

Amint a fordítás elindul, a fordító előprocesszoros szakasza az AVR könyvtárra összpontosít, hogy azonosítsa az „io.h” fájlt. A „.h” kiterjesztés itt fejlécfájlnak jelzi, és hogy ezt a kódot a fájlban a létrehozandó forrásfájl elején (fején) vezetnék be, ezért a „header” elnevezés.

Itt be tudjuk vezetni a DDR és a PORT utasításokat a kódunkba, mert az io.h fejlécfájl hozzáadása irányította volna a fordítót velük kapcsolatban.

#include

int main (érvénytelen)

{

DDRB = 0b00000001 // Data Direction Regisztrálja a pin0-t a kimenetre és a többi csapot bemenetként

PORTB = 0b00000001 // Állítsa a 0-as tűt 5 voltra

}

A fentiek rögzítik a pin0 mint kimenet orientációját, amelynek nagysága 5V. Azonban még mindig van egy kérdés, amelyet nem határoztak meg ehhez a csaphoz, vagyis ezt a csapot még utasítani kell a korlátlan bekapcsolásra, amíg az MCU be van kapcsolva. Ez a végtelen visszacsatolási hurok biztosítaná, hogy az MCU-ból ez a csap ne kapcsoljon ki, hanem az 5 V-os kimenettel folytassa a végtelenségig.

Bár sokféle módszer létezik a hurok utasítás alkalmazására egy tű számára, megpróbálnánk itt alkalmazni a „while” ciklust. Ahogy a neve is sugallja, a „while” hurok azt mondja a mikrovezérlőnek, hogy „amíg” az energia rendelkezésre áll, a hozzárendelt 5 V-val aktiválva kell maradnia a hozzárendelt pinouthoz.

#include

int main (érvénytelen)

{

DDRB = 0b00000001 // Data Direction Regisztrálja a pin0-t a kimenetre és a többi csapot bemenetként

PORTB = 0b00000001 // Állítsa a 0-as tűt 5 voltra

míg (1)

{

// A kód itt lenne, ha újra és újra és újra végre kellene hajtani ... végtelenül

}

}

Érdemes megjegyezni, hogy itt az „1” -t használtuk argumentumként a „while” ciklusra, mivel a „0” kivételével minden logikai „igaznak” tekinthető.

Ez azt jelenti, hogy a „while” ciklus figyelembe vétele soha nem lesz felelős másért, csak egy logikus „true” -ért, ami azt jelenti, hogy az adott pin a végtelen ideig a megadott állapothoz kapcsolódik.

A LED-nek állandóan be lehet világítani a kijelölt tűn, amíg az MCU áramot kap a Vdd és Vss között.

Ez az, most megvan az az eredmény, amelyet szerettünk volna elérni, és végre láthatjuk, hogy ez megtörténik ennyi kemény munka után, de ennek ellenére a kemény munkánk édes eredményének meglátása annyira kielégítő.

A következő oktatóanyagok során megtanuljuk, hogyan adhatunk hozzá egy „idő” dimenziót a fenti LED-hez, vagyis hogyan lehet egy bizonyos meghatározott sebességgel villogni.

Valójában a fenti megvalósításban a LED valóban villog, de a hurok sebessége olyan gyors, hogy szinte olyan, mint egy állandó bekapcsolás a LED megvilágítás felett.

Meglátjuk, hogyan lehet ezt a kört késleltetve hozzáadni a kívánt módon annak érdekében, hogy a LED ezen késleltetett sebességgel villogjon.

A LED villogása AVR mikrokontroller használatával

A legutóbbi beszélgetés során megtanultuk, hogyan kell bekapcsolni a LED-et egy mikrokontrolleren keresztül, kiemelkedő volt, nem? Lehet, hogy nem annyira!

Itt megtudhatjuk, hogyan fűszerezhetjük a fenti LED-es megvilágítást kétirányú funkciók hozzárendelésével, vagyis megpróbáljuk bizonyos frekvencián vagy sebességgel villogni vagy villogni. Meglátjuk azt is, hogyan lehet ezt az arányt növelni vagy csökkenteni a felhasználó kívánsága szerint.

Vessünk egy pillantást erre:

#include

#include

int main (érvénytelen)

{

DDRB | = 1<< PINB0

míg (1)

{

PORTB ^= 1<< PINB0

_delay_ms (100)

}

}

Ha értetlenül érzi magát a fenti kifejezésben használt furcsa szimbólumoktól (&, ^, | stb.) (& & Nincs ott, de más hasonló kódokban is használható), íme a kapcsolódó információk, amelyeket érdekelne ezekről :

Számos szabványos logikai algoritmust tartalmaz, mint például az AND, OR, NOT és az XOR, amelyeket általában a fenti kóddal együtt használnak.

Ezek a logikai funkciók kifejezetten összehasonlítják a két „1” és „0” bitet a hozzájuk rendelt igazságtáblák szerint.

A következő bitrendezés elemzésével kapunk ötletet:

01001011 &
10001101
egyenlő
00001001

A fenti kódban az & hivatkozik a C programozásban használt ÉS-re.

A sorok függőleges leolvasása azt sugallja, hogy 0 és 1 egyenlő 0-val, 1 és 0 egyenlő 0-val, 0 és 0 egyenlő 0-val, 1 és 1 egyenlő 1. Olvasása ilyen egyszerű. Ezek megfelelnek az AND operátor igazságtáblázatának.

Ha megnézzük a következő táblázatot, akkor az a '|' szimbólumot jelöli az „OR” funkció használatát jelölve, a „|” a számítógép billentyűzetén található „Backspace” bal oldalán található:

01001011 |
10001101
egyenlő
11001111

Ugyanígy az OR logikai funkcionalitás ezen igazságtáblázata azt jelzi, hogy a 0 vagy 1 bit 1, 1 vagy 0 bit 1, 0 vagy 0 egyenlő 0, míg 1 vagy 1 egyenlő 1-vel.

A következő bitkombináció az XOR logikai operátorra vonatkozik, amelyet ^ jelöl, és ugyanúgy tanulmányozható, mint az AND, OR igazság táblákkal:

01001011 ^
10001101
egyenlő
11000110

Most folytassuk az első programmal, és megtanuljuk, mit jelent a következő sor benne:

#include

Korábbi oktatóanyagainkon keresztül tudjuk, hogyan működik a kifejezés, ezért nem fogjuk megismételni, azonban úgy tűnik, hogy egy új 'tartalmazza', amelyet #include fejez ki, és amelyet meg kell vizsgálni.

Ebben „tartalmazza” a delay.h néhány egyszerű megvalósítási módot kínál számunkra.

Ahogy a neve is mutatja, a delay.h lehetővé teszi számunkra, hogy késleltetést indukáljunk az adott programban.

A következő int main (void) kifejezés elhagyható a folyamatban lévő beszélgetésből, mivel ezt már korábbi bejegyzéseinkben kitértünk rá.

Ezután következik a megváltozott DDRB.

Az alábbiakban bemutatjuk a korábbi formát, amely nem jobb módja a csapok hozzárendelésének, mivel az összes 0 és 7 közötti csapot átkapcsolta a bemenetek kialakítására. De képzelje csak el, mi lenne a helyzet, ha egy hosszabb programot szeretnénk létrehozni, amelyhez ezek a csapok valamilyen más funkcióhoz szükségesek? Például a pin2-re lehet szükség egy készülék távkapcsolásának alkalmazásához. Ebben az esetben nem értékelnénk, ha ugyanazt a bemenetet kiosztanánk, csak próbákon keresztül. Ez azt jelentheti, hogy a távoli adó a készülék vevőjére helytelen választ adott.

DDRB = 0b00000001

Inkább csak egy bitet szeretnénk befolyásolni, hat pin0 bitet, rápillantva az „OR” funkcióra, amelyet bináris maszkolással lehetne végrehajtani.

DDRB = DDRB | 0b00000001

Itt egy „OR” maszkkal van leplezve: 0b00000001, bár elég hiteles bináris számnak tűnik, abban az esetben, ha a korábbi DDRB például: 0b01001010, akkor ehhez OR-t alkalmazva maszkolással: 0b01001010 | 0b00000001 = 0b01001011.

Az eredő különbség, amint ez tanúsítható, csak a pin0 esetében van, amelynek bitjei megváltoztak!

A fenti utasítás további tömörítése a C ++ segítségével:

DDRB | = 0b00000001

Megállapítottuk azonban, hogy az adott programban még több van. Bár meglehetősen legitimnek és nyilvánvalónak tűnhet, ki kell használnunk az io.h fejlécfájl egyes állításainak előnyeit, különösen akkor, ha alapvetően a mi kényelmünk érdekében készültek?

Tehát ha „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.

Tehát egy 0b00000000-mal kezdjük, és egy '1' -et teszünk a 0b0000001 előállításához, majd áthelyezzük a bal 0 pozícióba, ami pontosan megegyezik a fentiekkel.

Ha feltételezzük, hogy PINB4, akkor az állítást 1-ként fejezhetjük ki<< PINB4. I this case the “1” would be pushed to the left 4 locations producing: 0b00010000.

Vigyázzon, hogy nulla indexet alkalmazunk, vagyis az „1” után négy nulla van.

Most folytatjuk a „while” ciklust, amelyet korábban a “végtelen cikluson” keresztül észleltünk. De talán most azt akarjuk, hogy a mikrovezérlő megvalósítsa a kívánt kivégzések egy részét. Ez csak az adott hurok belsejében lehetséges. Ez a hurok, ahol az adott szekvenciát újra és újra megismétlik.

Abban az esetben, ha a végrehajtás a ciklus elé kerül, csak egyszer hajtotta volna végre.

Ahhoz azonban, hogy a LED korlátlanul villoghasson, a hurokon belül felváltva be / ki kell kapcsolni a PINB0-t. Itt találjuk a bevezetett késéseket is, amelyek nélkül a LED villogása lehetetlen lenne. De ez arra kényszerítené a LED-et, hogy nagyon gyorsan, szabad szemmel nehezen felismerhető sebességgel villogjon, kissé lassítania kell, hogy a szemünkkel azonosíthatóvá váljon.

Tudjuk, hogy a bináris számban egy adott bit beállítási eljárása van, de nem biztos, hogy egy adott „0” bitet alkalmazunk abban az esetben, ha ez még „1”.

A következő program látható, hogy ezt csinálja, de azt is tapasztalni fogjuk, hogy előfordulhat, hogy nem látható a programban.

Az első két utasítás a bitet „1” -re változtatja (5V, LED-es lámpák), majd 100 ms-ig szünetet vezet be.

A következő pár sor a PINB0 bitet „0” -ra változtatja (nulla feszültség, a LED kikapcsol), de sajnálom, hogy az AND összehasonlítás nem képes végrehajtani a 0-t a bitből, de ha NEM „~” -t használunk a bináris maszkhoz az összes 0-t 1-re és fordítva tudta váltani.

Ez lehetővé teszi számunkra, hogy csak a PINB0 bitet befolyásoljuk, és “0” -ra állítsuk. A zárójelet azért vettük fel, hogy a maszkolás végrehajtása olyan legyen, hogy a NOT műveletet az egész maszkra lehessen alkalmazni, és ne egyszerűen a bal váltás előtti „1” fölött.<<”.

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

Az ON OFF késleltetések vagy az azonos időtartamú periódusok létrehozása érdekében az előző négy sort kettőre rövidíthetjük, és előnyünkre alkalmazhatjuk az XOR funkciókat. Meg kell jegyeznünk egy XOR végrehajtásakor egy hozzárendelt PIN-kódot 1-hez, ha ez 0 és fordítva. Ez a végrehajtás csak a PINB0-ra lenne hatással. A parancs alkalmával előfordulhat, hogy a bitet egyszerűen a meglévő logika ellentétévé változtatja.

PORTB ^= 1<< PINB0
_delay_ms (100)

KÉSZ! A LED most villog a beállított sebesség szerint ... Egyszerű, nem igaz?




Előző: Több készülék távirányító áramköre Következő: AC fázis, semleges, földhiba jelző áramkör