Tartalomjegyzék:

Olvasási kapcsolók az ATtiny2313 segítségével: 9 lépés
Olvasási kapcsolók az ATtiny2313 segítségével: 9 lépés

Videó: Olvasási kapcsolók az ATtiny2313 segítségével: 9 lépés

Videó: Olvasási kapcsolók az ATtiny2313 segítségével: 9 lépés
Videó: LDmicro 3: PIC16F628A и Arduino Nano (программирование лестничной логики ПЛК микроконтроллера с помощью LDmicro) 2024, November
Anonim
Olvasási kapcsolók az ATtiny2313 segítségével
Olvasási kapcsolók az ATtiny2313 segítségével

Az ATtiny2313 és hasonló AVR eszközök kimeneteivel több Instructables foglalkozott. Például: https://www.instructables.com/id/Ghetto-Programming%3a-Getting-started-with-AVR-micro/, https://www.instructables.com/id/Drive-a-Stepper- Motor-AVR-mikroprocesszorral/. A The Real Elliot legújabb verzióján dolgozva, amely bemutatta a léptetőmotorok vezérlését, azt tapasztaltam, hogy nagyon hasznos lenne, ha ugyanazon a programon alternatív kódrészleteket futtathatnék, így nem kellett újraprogramoznom az ATtiny2313 -at idővel ki akartam próbálni egy kis kódváltozatot (például fél lépést vagy a léptető fordított futtatását). Míg a kapcsoló/eset utasítással könnyen írható kód, hogy lehetővé váljon az alternatív változatok kiválasztása, az eset kiválasztásának valamilyen módja szükséges. Ez azt jelenti, hogy valamilyen beviteli eszközt kell olvasni a tok irányításához. Szerencsére az ATtiny2313 rengeteg I/O tűvel rendelkezik, és jól megtervezett a kapcsolók bemeneteinek olvasására. Ez az utasítás megmutatja, hogyan kell olvasni a bemeneteket és döntéseket hozni állapotuk alapján. Mivel ez önmagában elég unalmas Instructable -t eredményezne, elmagyarázok egy egyszerű módszert, amellyel az ATtiny2313 időzítő/számláló képességét használhatja egy kis hangszóró hangjelzésként történő meghajtásához. Lesz egy kis kitérő az egyszerű hibakeresési technikákról is.

1. lépés: A beviteli eszköz

A beviteli eszköz
A beviteli eszköz
A beviteli eszköz
A beviteli eszköz

Ez az Instructable a The Real Elliot kiváló munkájára épül, és az általa leírt ATtiny2313 Ghetto fejlesztőrendszert használja. Az Atmel ATtiny2313 adatlapja minden funkció végső referenciája, de nem feltétlenül könnyű olvasni. https://www.atmel.com/dyn/products/datasheets.asp?family_id=607 (A Link tartalmazza az összes AVR adatlapot, keresse meg a 2313 -at.) Az ábra a bemeneti kapcsolók egyszerű készletét mutatja. Ez egyszerűen egy négy ki/be kapcsolóból álló csomag; más néven egypólusú, egy dobású kapcsolók (SPST). Általában mindegyik kapcsoló egyik csatlakozása vagy pólusa a földhöz van kötve, míg a másik csatlakozó magasra van húzva egy áramkorlátozó ellenálláson (kb. 10K). Az ellenállással egy mikrokontroller bemenet csatlakozik a pólushoz. Ha a kapcsoló nyitva van, a mikrokontroller a bemenetet HI -ként olvassa fel. Ha a kapcsoló zárva van, a mikrokontroller leolvassa az LO bemenetet. A részleteket lásd a sematikus ábrán. Az ATtiny2313 egyszerűsíti a dolgokat azáltal, hogy programozható felhúzó ellenállásokat biztosít az I/O érintkezőkön, amikor azok bemenetként vannak konfigurálva. Ez azt jelenti, hogy a kapcsolók egyszerűen az egyik pólust a földhöz kötik (LO), a másik pólust pedig a processzor bemenetéhez. Az első példa csak két kapcsolót mutat. A kapcsolók olvasása és konfigurálása a következő kóddal történik. Konfigurálja a kapcsolókat bemenetként: (Nincs szükség kódra, ez az alapértelmezett.) Kapcsolja be a felhúzó ellenállásokat: PORTB = _BV (PB0) | _BV (PB1); Olvassa el a bemeneteket: but1 = ~ PINB & 0x03; Vegye figyelembe az inverzió és a maszkolás használatát a helyes érték eléréséhez.

2. lépés: Villogó fények jelzéshez

Ezzel a két kapcsolóval programozhatóan villogni fogunk egy LED -et. Az általunk használt LED -ek azok a villogó fények, amelyeket a The Real Elliot tett híressé. Az 1 -es és 2 -es kapcsolókat két bináris számjegyként kell kezelni, így a kombináció a 0, 1, 2 és 3 számokat jelenítheti meg. beállítások megváltoztak. A kapcsolók 500 milliszekundumig le vannak kapcsolva (nincs optimalizálva). A visszakapcsolási algoritmus meglehetősen egyszerű. A kapcsolók beolvasásra kerülnek, és az értékek feljegyezhetők. Ha eltér az oldBut értékétől (az utolsó mentett érték), akkor a program 500 ezredmásodpercig késik, és a kapcsolók újra beolvasásra kerülnek. Ha az érték megegyezik az előzőleg olvasottakkal, akkor az oldBut értéke frissül, és a LED villogni fog, ahányszor a két kapcsoló bináris értéke utal. Vegye figyelembe az érték inverzióját, mivel egy "be" kapcsoló LO -t olvas. A kapcsolókat folyamatosan ellenőrizni fogják a további változtatásokhoz. A villogó fényekről további információt a The Real Elliot korábbi utasításaiban talál. Tekintse meg ezt a https://www.ganssle.com/debouncing.pdf fájlt, hogy többet megtudjon a visszaváltó kapcsolókról. Íme a példa ATtiny2313 kódja. Működés közben ez a program kétszer felvillan a PB4 LED -jén (8. fizikai érintkező), jelezve, hogy inicializálva van. Ekkor kiolvassa az első és a második kapcsolót, és a váltás beállításától függően egy -három alkalommal villog. Ha a kapcsolók nem változnak, a LED lassan villog. A kód futtatásához hozzon létre egy új könyvtárat (ha úgy tetszik, hívja "Basic" -nek), és töltse le a következő C kódfájlt és makefile -t. Nevezze át a Makefile1.txt fájlt csak a Makefile fájlra. A WinAVR segítségével fordítsa le a programot, és töltse be az ATtiny2313 -ba.

3. lépés: Egy kisebb eltérés a hibakeresésnél

Ha olyan, mint én (és a világ többi programozója), akkor valószínűleg tapasztalt olyan eseteket, amikor a gondosan begépelt és összeállított "hibamentes" kód nem azt teszi, amit elvárt. Talán egyszerűen nem tesz semmit! Tehát mi a probléma? Hogyan fogja megtudni? Szerencsére többféle módszer létezik a dolgok működésének biztosítására. (Szerezze meg ezt a könyvet a hibakeresés témájának kiváló kezeléséhez. Http://www.debuggingrules.com/) Néhány egyszerű javaslatot szeretnék ajánlani a mikrokontroller alkalmazások hibakeresésének témakörével kapcsolatban. Az első lépés a továbbfejlesztés amit tudsz. Ha egyszer villogó fényt kapott, hogy újra működjön, akkor használja újra, hogy megnézze, hol tart a programban. Szeretem, ha a LED kétszer villog, jelezve a program kezdetét. A program kezdetekor beírhatja ezt a kódot. Ha már tudja, hogy a hardverrel nincs semmi baj, hozzon létre egy funkciót a villogáshoz. Itt a funkció, amit használok. /-------------------------------------------------- ------------------------------ ** blinkEm-a LED villogására szolgáló funkció a PD4 használatával ** A PD4-et kimenetként kell konfigurálni. ** ------------------------------------------------ ---------------------*/void blinkEm (uint8_t count) {while (count> 0) {PORTD = _BV (PD4); _delay_ms (1000); PORTD = ~ _BV (PD4); _delay_ms (1000); számol--; }} Mostantól lehetőség van arra, hogy ezt a funkciót a kód különböző pontjain használjuk jeleként, hogy a kód eddig végrehajtotta. A kód futásának ismerete azt jelenti, hogy alaposan megvizsgálhatja az összes futtatott részt, de nem azt, amit elvárt, hogy hibákat találjon. Egy -egy dolog megváltoztatása kulcsfontosságú technika a hibakereséshez is (a fenti hivatkozásban leírtak). Ez a klasszikus módszer együtt működik az „oszd meg és hódítsd” funkcióval: csecsemő lépések megtétele a funkcionalitás fokozatos növeléséhez. Ez lassú megközelítésnek tűnhet, de közel sem olyan lassú, mint a nem működő kód nagy részének hibakeresése egyszerre.

4. lépés: További hibakeresés

Sokszor szeretnénk ellenőrizni egy kódrészletet úgy, hogy a legtöbb sort kihagyjuk, majd egyenként engedélyezzük őket, miközben ellenőrizzük, hogy mindegyik működik. Általában ezt úgy tesszük, hogy kihagyjuk azokat a sorokat, amelyeket ki akarunk hagyni. Ennek a technikának a kibővítése a kódblokk kivágása és beillesztése, az eredeti megjegyzés megjegyzése (így nem veszítjük el), és a másolat feltörése. A C négy egyszerű módon írhatja ki a sorokat. Ha a "//" karaktert egy sor elé helyezi, akkor megjegyzi ezt a sort. Ha egy vagy több sort beilleszt a "/*" és a "*/" közé, az egész szakasz megjegyzéseket tartalmaz. Ahhoz, hogy ez a módszer hatékonyan működjön, a kódblokkban nem lehet más "*/" (kivéve a befejezőt). Tehát hatékony fegyelem, ha a // kódot használjuk a kódblokkokon belüli megjegyzésekhez, a / * * / konstrukciót pedig a megjegyzésblokkokhoz és a kódrészletek megjegyzéséhez tartjuk fenn. A "#if 0" elhelyezése a blokk elején a megjegyzéshez és a szakasz befejezése "#endif" -el. A szelektívebb vezérlés lehetséges a "#ifdef (identifier)" használatával a blokk elején, és a "#endif" használatával a végén. Ha azt szeretné, hogy a blokkot lefordítsák, használja a program "#define (identifier)" parancsát. Ne feledje, hogy az idézőjelek csak hangsúlyozásra szolgálnak, és nem tartoznak ide. Ezeknek a technikáknak a kombinálása hasznos megközelítést jelenthet az ATtiny2313 programok hibakereséséhez. Ezeket az eszközöket hasznosnak találhatja, amikor továbbhaladunk ezen az utasításban.

5. lépés: Az időzítő/számláló 0 használata sípoláshoz

Az időzítő/számláló 0 használata sípoláshoz
Az időzítő/számláló 0 használata sípoláshoz

Az ATtiny2313 két erős időzítő/számláló erőforrással rendelkezik: egy 8 bites és egy 16 bites. Ezek konfigurálhatók frekvenciagenerátorokként, változó impulzusszélességű modulációs vezérlőkként és kimeneti összehasonlító regiszterekként. Ezek teljes funkcionalitását az adatlap 49 oldala írja le. Azonban használunk egy egyszerű esetet. Csak a 0-as időzítőt/számlálót (a 8 biteset) kell használni, és egyszerűen frekvenciagenerátorként kell használni. A frekvenciát egy kis hangszóró irányítja, hogy hangjelzést adjon. A 0. időzítőt/számlálót az ATtiny2313 adatlap 66-83. Oldala tartalmazza. Ennek az anyagnak az alapos elolvasása lehetővé teszi az idő/számláló 0 teljes megértését. Szerencsére egy meglehetősen egyszerű mód, a Clear Timer on Compare (CTC), minden, ami szükséges a kívánt hangjelzés létrehozásához.

Az általunk használt módban az időzítő/számláló működése egyszerű. Órajel kiválasztásakor a számláló nulláról indul, és minden óraimpulzust növel. Amikor a számláló értéke eléri a kimeneti összehasonlítási nyilvántartás (TOP) értékét, a számláló nullázódik, és a számlálás újra kezdődik. Az időzítőhöz/számlálóhoz tartozó kimeneti bit négyzethullámú kimenetet hoz létre. Ez közvetlenül vezérli az audio jeladót, hogy sípoljon. Egy kis TDK hangjelző hangjelzést ad. Megfelelő egység a Digikey 445-2530-ND, TDK SD1209T3-A1 (ennek egy korai változatát használtam). Ez egy 3 voltos változat; az 5 voltos verzió is működni fog, remélem. Ezt közvetlenül az Attiny2313 kimeneti portjáról hajtom le, és úgy tűnik, hogy jól működik. A Sparkfun rendelkezik hasonló eszközzel.

6. lépés: Az időzítő/számláló konfigurálása 0

A CTC mód használható az OC0A kimenet átkapcsolására a 2 -es érintkezőn, a B porton (fizikai 14 -es tű). A kimenet engedélyezéséhez ezen a tűn a DDRB -t megfelelően be kell állítani. A C kód ehhez hasonló, mint egy villogó fény kimenet beállítása. DDRB = _BV (PB2); // A B2 port egy kimenet. A következő lépés az órajel szolgáltatása és a kimeneti összehasonlító regiszter betöltése, hogy frekvenciaként hullámformát állítson elő. A kapott gyakoriság egyenletét az adatlap tartalmazza (72. oldal). Az egyenletben szereplő kifejezéseket az alábbiakban ismertetjük. Íme az egyenlet: fOC0A = fclk_I/O/2*N*(1+OCR0A) ahol fOC0A: = kimeneti frekvencia fclk_I/O: = óraforrás frekvencia N: = óra előskálázási tényező OCR0A: = érték a kimeneti összehasonlító regiszterben az időzítőhöz/ 0A számláló. Óraforrás frekvenciája, fclk_I/OEz a rendszeróra frekvenciája. Az alapértelmezett érték 1MHz. A TCCR0B CS00, CS01 és CS02 bitjei vezérlik ezt a választást. Mivel ezek a bitek az N értékét is kiválasztják, ezt a következőkben ismertetjük. Előbeosztási érték, NN a rendszeróra felosztására vagy előskálázására használt érték. A TCCR0B CS00, CS01 és CS02 bitjei vezérlik ezt a választást. A 41. táblázat az ATtiny2313 adatlap 81. oldalán írja le a kombinációkat. Mivel 1kHz közeli frekvenciára van szükség, a TCCR0B CS00 és CS01 bitjei kerülnek beállításra. Ne feledje, hogy mindhárom bit 0 -ra állítása, így nem az óraforrás kiválasztása, hatékonyan leállítja a kimenetet. Ezt a módszert fogják használni a hangjelzés indításához és leállításához. TOP érték, OCR0A Ez az érték a számláló TOP értéke, amely a 0A időzítő/számláló kimeneti összehasonlítási nyilvántartásába van betöltve. Amikor eléri ezt az értéket, a számláló nullázódik, és a számlálás újra kezdődik, amíg el nem éri a TOP értéket, és a ciklus megismétlődik. A TOP könnyen módosítható, így a hangjelzés frekvenciája könnyen megváltoztatható. Mivel az 1 kHz közeli frekvencia a kívánatos, a TOP értéke 7 (Megjegyzés: az előskálázó 8, a TOP pedig 63. lehet. Ugyanaz az eredmény - az Ön választása.) Kimeneti frekvencia, fOC0A in: fOC0A = 1, 000, 000 /2 * 64 * (1+7) fOC0A = 977HzElég közel! Íme a kód a kimeneti összehasonlító regiszter és a 0B időzítő számláló vezérlő regiszter betöltéséhez. Kérjük, nézze meg a tényleges programkódot, hogy megértse ezek használatát. OCR0A = 7; // Időérték TCCR0B = _BV (CS01) | _BV (CS00); // Válassza ki a belső órát & prescale = 8 TCCR0B = 0; // egyik óraforrás sem kapcsolja ki a hangot Az idő/számláló mód beállítása Az utolsó részletben megadjuk a kívánt időzítő/számláló módot a megfelelő bitek beállításával a 0A időzítő/számláló vezérlő regiszterben. A CTC módot a WGM01 bit beállításával lehet kiválasztani az adatlap 40. táblázatának 79. oldalán leírtak szerint. Mivel azt akarjuk, hogy a kimenet minden ciklusban váltakozzon, a COM0A0 bitet is be kell állítani a 34. táblázat 77. oldalán leírtak szerint. Íme a kód: TCCR0A = _BV (COM0A0) | _BV (WGM01); // CTC váltási mód

7. lépés: Négy kapcsoló használata

A hangjelzés megvalósításakor bővítsük hardverünket és szoftverünket négy kapcsoló kezelésére. Mivel a 0A időzítő számláló kimenete a B porton, a 2. érintkezőn van, nem tudunk egyszerűen több kapcsolót egymás után csatlakoztatni a B porthoz. Egyszerű megoldás a D port használata, de hagyjuk, hogy ez a port elérhető legyen más funkciókhoz (talán léptetőmotor). Csatlakoztassuk tehát a további kapcsolókat a PB3 és PB4 -hez. A kapcsolók olvasása többnyire változatlan. A maszk értéke 0x1B (00011011 bináris) értékre változik, hogy elfedje a 2-es bitet az 5-ös, a 6-os és a 7-es mellett. Egy további trükköt használunk egy 4 bites bináris szám létrehozására. Váltsa jobbra a 3. és 4. bitet, és egyesítse őket a 0 -as és 1 -es bitekkel 4 bites bináris számmá. Ez a szabványos C szintaxis a bitek eltolásához és kombinálásához, de lehet, hogy nem ismerik jól a kezdőket. but1a = (but1 & 0x03) | ((but1 & 0x18) >> 1); // A but1 kapcsolóolvasással rendelkezik Működés közben a program kétszer villog, és kétszer sípol, hogy jelezze az inicializálást. Bármikor, amikor a kapcsolókat megváltoztatják, az általuk jelzett szám sípol. Ha a kapcsolók nem változnak, a LED villogni fog. A kód futtatásához hozzon létre egy új könyvtárat (hívja Beep -nek, ha úgy tetszik), és töltse le a következő C -kódfájlt és makefile -t. Nevezze át a Makefile2.txt fájlt csak a Makefile fájlra. A WinAVR segítségével fordítsa le a programot, és töltse be az Attiny2313 -ba.

8. lépés: A Switch/case Construct használata

Az utolsó lépés a "csak szoftver": Ahogy ígértük, megvalósítjuk a kapcsoló/tok konstrukciót. Bár ez a példa csak két alternatív műveletet mutat be, nagyon világosnak kell lennie, hogyan kell ezt a konstrukciót használni a több alternatív kódrész közül. Működés közben ez a program figyeli a kapcsolókat, és ha változás történik, akkor pittyeg a megfelelő számra, ha páratlan; villog, ha a szám páros. Semmit sem tesz, ha nem változik a kapcsoló.

Ennek a kódnak a futtatásához hozzon létre egy új könyvtárat (hívja Switch -nek, ha úgy tetszik), és töltse le a következő C -kódfájlt és makefile -t. Nevezze át a Makefile3.txt fájlt csak a Makefile fájlra. A WinAVR segítségével fordítsa le a programot, és töltse be az Attiny2313 -ba.

9. lépés: Következtetés

Következtetés
Következtetés

Szóval ennyi! Most már tudja, hogyan használhatja a kapcsolókat a program végrehajtásának vezérléséhez, olvassa el őket, és válasszon egy műveletet a kapcsoló beállítása alapján. Ön is tudja, hogyan kell hangjelzést létrehozni, és megtanult néhány hibakeresési stratégiát is.

Ha szeretné tesztelni a megértését, próbálja meg az utolsó programot úgy módosítani, hogy magas hangjelzést adjon, ha páros, csipogjon egy alacsony hangot, ha páratlan, és folyamatosan villog a LED, ha nincsenek változások a kapcsolókban. vissza a hibakeresés szakaszhoz segítségért.

Ajánlott: