Obsah:

Prepínače na čítanie s krokmi ATtiny2313: 9
Prepínače na čítanie s krokmi ATtiny2313: 9

Video: Prepínače na čítanie s krokmi ATtiny2313: 9

Video: Prepínače na čítanie s krokmi ATtiny2313: 9
Video: Куликовская Битва. Литература в основе официальных доказательств. 2024, November
Anonim
Prepínače na čítanie s ATtiny2313
Prepínače na čítanie s ATtiny2313

Existuje niekoľko inštrukcií zaoberajúcich sa výstupmi z ATtiny2313 a podobných zariadení AVR. Napríklad https://www.instructables.com/id/Ghetto-Programming%3a-Getting-started-with-AVR-micro/, https://www.instructables.com/id/Drive-a-Stepper- Motor s mikroprocesorom AVR/. Pri práci na najnovšom z The Real Elliot, ktorý ukázal, ako ovládať krokové motory, som zistil, že by bolo veľmi užitočné, keby bolo možné spustiť alternatívne sekcie kódu v rovnakom programe, aby som nemusel preprogramovať každý ATtiny2313. čas som chcel vyskúšať miernu variáciu kódu (napríklad polovičný krok alebo spustenie steppera v opačnom smere). Aj keď je ľahké písať kód pomocou príkazu prepínač/prípad, ktorý umožňuje výber alternatívnych variácií, je potrebný určitý spôsob výberu prípadu. To znamená, že na ovládanie skrinky je potrebné prečítať nejaký druh vstupného zariadenia. Našťastie ATtiny2313 má veľa I/O pinov a je dobre navrhnutý na čítanie vstupov z prepínačov. Tento návod vám ukáže, ako čítať vstupy a rozhodovať sa podľa ich stavu. Pretože len to by bolo dosť nudným návodom, vysvetlím jednoduchý spôsob použitia schopnosti časovača/počítadla ATtiny2313 poháňať malý reproduktor ako bzučiak. Nebude chýbať ani malá odbočka k jednoduchým technikám ladenia.

Krok 1: Vstupné zariadenie

Vstupné zariadenie
Vstupné zariadenie
Vstupné zariadenie
Vstupné zariadenie

Tento Instructable nadväzuje na vynikajúcu prácu The Real Elliot a používa vývojový systém ATtiny2313 Ghetto, ktorý popisuje. Dátový list ATtiny2313 od spoločnosti Atmel je konečným odkazom pre všetky funkcie, ale nie je nevyhnutne ľahké ho čítať. https://www.atmel.com/dyn/products/datasheets.asp?family_id=607 (Link má všetky listy s údajmi AVR, nájdite číslo 2313.) Na obrázku je jednoduchá sada vstupných prepínačov. Toto je jednoducho balík štyroch prepínačov zapnutia/vypnutia; tiež známe ako jednopólové prepínače s jednoduchým vrhaním (SPST). Obvykle je jedno pripojenie alebo pól každého prepínača spojený so zemou, zatiaľ čo druhé pripojenie je ťahané vysoko cez odpor obmedzujúci prúd (približne 10 kB). Na pól s odporom je pripojený vstup mikrokontroléra. Ak je spínač otvorený, mikrokontrolér bude čítať vstup ako HI. Ak je spínač zatvorený, mikrokontrolér načíta vstup LO. Podrobnosti nájdete v schéme. ATtiny2313 zjednodušuje prácu tým, že poskytuje programovateľné výsuvné odpory na I/O piny, ak sú nakonfigurované ako vstupy. To znamená, že prepínače môžu mať jeden pól jednoducho uzemnený (LO) a druhý pól pripojený k vstupu procesora. Prvý príklad ukazuje iba dva prepínače. Prepínače sa načítajú a konfigurujú pomocou nasledujúceho kódu. Nakonfigurujte prepínače ako vstupy: (Nevyžaduje sa žiadny kód; toto je predvolené nastavenie.) Zapnite výsuvné odpory: PORTB = _BV (PB0) | _BV (PB1); Prečítajte si vstupy: but1 = ~ PINB & 0x03; Všimnite si použitia inverzie a maskovania, aby ste získali správnu hodnotu.

Krok 2: Blinkenlights pre signál

Tieto dva prepínače použijeme na to, aby sme mnohokrát blikali LED diódu. LED diódy, ktoré použijeme, budú svetlomety, ktoré preslávil The Real Elliot. Spínače 1 a 2 budú považované za dve binárne číslice, takže kombinácia môže predstavovať čísla 0, 1, 2 a 3. Náš program tieto dva prepínače načíta a príslušným počtom zabliká LED, ale iba vtedy, ak je nastavenia sa zmenili. Prepínače sú odblokované na 500 milisekúnd (nie optimalizované). Algoritmus odstraňovania odskokov je veľmi jednoduchý. Prepínače sa načítajú a hodnoty sa zaznamenajú. Ak sa líši od hodnoty oldBut (posledná uložená hodnota), program sa oneskorí o 500 milisekúnd a spínače sa znova načítajú. Ak je hodnota rovnaká ako predtým načítaná, hodnota oldBut sa aktualizuje a LED dióda bliká, koľkokrát je implikovaná binárnou hodnotou týchto dvoch prepínačov. Všimnite si inverzie hodnoty, pretože prepínač, ktorý je "zapnutý", číta LO. Prepínače budú nepretržite prehľadávané kvôli ďalším zmenám. Ak sa chcete dozvedieť viac o blinkroch, pozrite sa na predchádzajúci návod od The Real Elliot. Pozrite sa na tento https://www.ganssle.com/debouncing.pdf, kde sa dozviete viac o odbúravaní prepínačov. Tu je kód ATtiny2313 pre tento príklad. Počas prevádzky tento program dvakrát zabliká LED na PB4 (fyzický kolík 8), aby ukázal, že je inicializovaný. Potom bude čítať prepínače jeden a dva a jedenkrát až trikrát zabliká v závislosti od nastavenia prepínačov, kedykoľvek sa zmenia. Ak sa prepínače nemenia, LED dióda bude pomaly blikať. Ak chcete spustiť tento kód, vytvorte nový adresár (ak ho chcete nazvať „základný“) a stiahnite si nasledujúci súbor s kódom C a vytvorte do neho makefile. Premenujte súbor Makefile1.txt na iba súbor Makefile. Pomocou programu WinAVR zostavte program a načítajte ho do svojho ATtiny2313.

Krok 3: Menšia odchýlka pri ladení

Ak ste ako ja (a každý ďalší programátor na svete), pravdepodobne ste zažili časy, keď „bezchybný“kód, ktorý ste starostlivo zadali a zostavili, nerobí to, čo od neho očakávate. Možno to jednoducho nič nerobí! V čom je teda problém? Ako to chceš zistiť? Našťastie existuje niekoľko prístupov k tomu, ako veci začať fungovať. (Získajte túto knihu, aby ste získali vynikajúce spracovanie na tému ladenia. Http://www.debuggingrules.com/) Chcel by som ponúknuť niekoľko jednoduchých návrhov týkajúcich sa ladenia aplikácií mikrokontroléra. Prvým krokom je stavať na čo vieš. Ak vám raz začalo fungovať blinkenlight, potom ho znova použite, aby ste zistili, kde sa vo vašom programe nachádza. Rád by som, aby LED dvakrát zablikala, aby signalizovala začiatok programu. Kód môžete vložiť na začiatku programu. Akonáhle viete, že s vašim hardvérom nie je nič v poriadku, vytvorte funkciu, ktorá bude blikať. Tu je funkcia, ktorú používam./*------------------------------------------ ------------------------------ ** blinkEm-funkcia blikania LED pomocou PD4 ** PD4 musí byť nakonfigurovaný ako výstup. ** ------------------------------------------------ ---------------------*/void blinkEm (uint8_t count) {while (count> 0) {PORTD = _BV (PD4); _delay_ms (1000); PORTD = ~ _BV (PD4); _delay_ms (1000); počítať--; }} Teraz je možné použiť túto funkciu v rôznych bodoch kódu ako signál, že sa kód až doteraz vykonal. Vedieť, že kód je spustený, znamená, že môžete starostlivo preskúmať každú spustenú sekciu, ale neurobiť všetko, čo ste očakávali, a nájsť chyby. Zmena jednej veci naraz je tiež kľúčovou technikou ladenia (popísané v odkaze vyššie). Táto klasická metóda funguje spoločne s procesom „rozdeľte a dobývajte“: robte malé kroky na postupné pridávanie funkcií. Môže sa to zdať ako pomalý prístup, ale nie je to ani zďaleka také pomalé, ako keď sa pokúsite odladiť veľkú časť nefungujúceho kódu naraz.

Krok 4: Ďalšie ladenie

Mnohokrát chceme skontrolovať časť kódu tak, že preskočíme väčšinu riadkov v ňom a potom ich povolíme jeden po druhom, keď overíme, či každý funguje. Obvykle to robíme tak, že „komentujeme“riadky, ktoré chceme preskočiť. Rozšírením tejto techniky je vystrihnúť a prilepiť blok kódu, komentovať originál (aby sme ho nestratili) a hacknúť kópiu. C má štyri jednoduché spôsoby, ako komentovať riadky. Umiestnenie „//“pred riadok komentuje tento riadok. Uzavretím jedného alebo viacerých riadkov v „/*“a „*/“sa komentuje celá sekcia. Aby táto metóda fungovala efektívne, v bloku kódu (okrem koncového) nesmie byť žiadne iné „*/“. Účinnou disciplínou je teda použitie // na komentáre v rámci blokov kódu a vyhradenie konštrukcie / * * / na bloky komentárov a na komentovanie častí kódu. Na začiatok bloku vložte komentár „#if 0“a koniec sekcie „#endif“. Selektívnejšie ovládanie je možné pomocou „#ifdef (identifikátor)“na začiatku bloku a „#endif“na konci. Ak chcete, aby bol blok zostavený, použite v programe skôr „#define (identifier)“. Upozorňujeme, že úvodzovky sú len na zdôraznenie a nie sú zahrnuté. Kombinácia týchto techník by mala poskytnúť užitočný prístup k ladeniu vašich programov ATtiny2313. Tieto nástroje môžu byť pre vás užitočné, keď budeme pokračovať v tomto návode.

Krok 5: Použitie časovača/počítadla 0 na pípnutie

Pípanie pomocou časovača/počítadla 0
Pípanie pomocou časovača/počítadla 0

ATtiny2313 má dva výkonné zdroje časovača/počítadla: jeden 8-bitový a jeden 16-bitový. Tieto môžu byť nakonfigurované ako generátory frekvencie, regulátory modulácie modulujúcej šírku impulzu a registre na porovnanie výstupu. Ich plná funkčnosť je popísaná na 49 stranách technického listu. Použijeme však jednoduchý prípad. Bude použitý iba časovač/počítadlo 0 (8-bitový) a bude použitý jednoducho ako frekvenčný generátor. Frekvencia bude smerovaná do malého reproduktora, aby zaznel zvukový signál. Časovač/počítadlo 0 je podrobne popísaný na stranách 66 až 83 údajového listu ATtiny2313. Po dôkladnom prečítaní tohto materiálu získate úplnú znalosť času/počítadla 0. Našťastie na vytvorenie požadovaného zvukového signálu stačí pomerne jednoduchý režim, Clear Timer on Compare (CTC).

Pokiaľ ide o režim, ktorý použijeme, prevádzka časovača/počítadla je jednoduchá. Keď je zvolený hodinový signál, počítadlo začne na nule a zvyšuje každý hodinový impulz. Keď hodnota počítadla dosiahne hodnotu v registri porovnávania výstupov (TOP), počítadlo sa vynuluje a počítanie začne znova. Výstupný bit priradený k časovaču/počítadlu sa prepína, aby sa vytvoril výstup so štvorcovými vlnami. To priamo poháňa zvukový prevodník, aby vydával zvukový signál. Pípnutie vydá malý zvukový prevodník TDK. Vhodnou jednotkou je Digikey 445-2530-ND, TDK SD1209T3-A1 (použil som staršiu verziu). Toto je 3 voltová verzia; 5 voltová verzia bude tiež fungovať, čo očakávam. Vyrážam to priamo z výstupného portu Attiny2313 a zdá sa, že to funguje dobre. Sparkfun má podobné zariadenie.

Krok 6: Konfigurácia časovača/počítadla 0

Režim CTC je možné použiť na prepínanie výstupu OC0A na pin 2, port B (fyzický pin 14). Ak chcete povoliť výstup na tomto pine, musí byť DDRB vhodne nastavený. Kód C je na to rovnaký ako nastavenie výstupu pre blikajúce svetlo. DDRB = _BV (PB2); // Port B2 je výstup. Ďalším krokom je dodanie hodinového signálu a načítanie registra na porovnanie výstupu na vytvorenie priebehu ako frekvencie. Rovnica pre výslednú frekvenciu je uvedená v dátovom liste (strana 72). Podmienky v rovnici budú popísané nižšie. Tu je rovnica: fOC0A = fclk_I/O/2*N*(1+OCR0A) Kde fOC0A: = výstupná frekvencia fclk_I/O: = frekvencia zdroja hodín N: = faktor prescalu hodín OCR0A: = hodnota vo výstupnom porovnávacom registri pre časovač/ Počítadlo 0A. Frekvencia zdroja hodín, fclk_I/O Toto je frekvencia systémových hodín. Predvolená hodnota je 1 MHz. Bity CS00, CS01 a CS02 z TCCR0B riadia tento výber. Pretože tieto bity tiež vyberajú hodnotu N, je to popísané ďalej. Hodnota predbežného merača, NN je hodnota používaná na rozdelenie alebo prednastavenie systémových hodín. Bity CS00, CS01 a CS02 z TCCR0B riadia tento výber. Kombinácie popisuje tabuľka 41 na strane 81 údajového listu ATtiny2313. Pretože je požadovaná frekvencia blízka 1 kHz, budú nastavené bity CS00 a CS01 TCCR0B. Všimnite si toho, že nastavením všetkých troch bitov na 0, čím vyberiete žiadny zdroj hodín, sa výstup efektívne zastaví. Toto je metóda, ktorá bude použitá na spustenie a zastavenie pípnutia. Hodnota TOP, OCR0A Táto hodnota je TOP hodnotou počítadla, ktoré je načítané do registra porovnávania výstupu pre časovač/počítadlo 0A. Keď sa dosiahne táto hodnota, počítadlo sa vynuluje a počítanie sa začne znova, kým sa nedosiahne HORNÁ a cyklus sa opakuje. TOP je ľahko upraviteľný, takže frekvenciu pípača je možné ľahko zmeniť. Pretože je požadovaná frekvencia blízka 1 kHz, TOP je nastavená na 7. (Všimnite si, že predzosilňovač mohol byť nastavený na 8 a TOP na 63. Rovnaký výsledok - váš výber.) Výstupná frekvencia, fOC0APomoc rovnice na výpočet výsledkov výstupnej frekvencie v: fOC0A = 1 000 000 000 /2 * 64 * (1+7) fOC0A = 977 Hz Zatvorte dosť! Tu je kód na načítanie registra porovnávania výstupu a registra 0B počítadla časovača. Pozrite sa na skutočný programový kód, aby ste pochopili, ako sa používajú. OCR0A = 7; // Časová hodnota TCCR0B = _BV (CS01) | _BV (CS00); // Vyberte interné hodiny & prescale = 8 TCCR0B = 0; // žiadny zdroj hodín nevypína tón Nastavenie režimu času/počítadla Ako posledný detail špecifikujeme požadovaný režim časovača/počítadla nastavením vhodných bitov v registri časovača/počítadla 0A. Režim CTC sa vyberá nastavením bitu WGM01, ako je popísané v tabuľke 40, strane 79 listu s údajmi. Pretože chceme, aby výstup prepínal každý cyklus, je potrebné tiež nastaviť bit COM0A0, ako je popísané v tabuľke 34 na strane 77. Tu je kód: TCCR0A = _BV (COM0A0) | _BV (WGM01); // Režim prepínania CTC

Krok 7: Použitie štyroch prepínačov

Keď implementujeme zvukový signál, rozšírime náš hardvér a softvér tak, aby zvládol štyri prepínače. Pretože výstup počítadla časovača 0A je na porte B, kolíku 2, nemôžeme jednoducho pripojiť viac prepínačov postupne k portu B. Jednoduchým riešením by bolo použiť port D, ale ponechajme tento port k dispozícii pre ďalšie funkcie (možno krokový motor). Pripojme teda ďalšie prepínače k PB3 a PB4. Čítanie prepínačov je väčšinou nezmenené. Hodnota masky sa zmení na 0x1B (00011011 binárne), aby sa maskoval bit 2 spolu s 5, 6 a 7. Na vytvorenie 4-bitového binárneho čísla sa používa ďalší trik. Posuňte bity 3 a 4 doprava o jeden bit a skombinujte ich s bitmi 0 a 1 do 4 -bitového binárneho čísla. Toto je štandardná syntax C na posúvanie a kombinovanie bitov, ale nemusí byť pre nováčikov dobre známa. but1a = (but1 & 0x03) | ((but1 & 0x18) >> 1); // but1 má čítanie spínača V prevádzke program dvakrát zabliká a dvakrát zapípa, aby signalizoval inicializáciu. Pri každej zmene prepínačov zapípa číslo, ktoré predstavujú. Keď sa prepínače nemenia, LED dióda bude blikať. Ak chcete spustiť tento kód, vytvorte nový adresár (nazvite ho zvukovým signálom, ak chcete) a stiahnite nasledujúci súbor s kódom C a vytvorte do neho makefile. Premenujte súbor Makefile2.txt na iba súbor Makefile. Pomocou WinAVR skompilujte program a načítajte ho do svojho Attiny2313.

Krok 8: Použitie konštrukcie spínača/puzdra

Posledným krokom je „iba softvér“: Ako sme sľúbili, implementujeme konštrukciu prepínača/puzdra. Napriek tomu, že tento príklad ukazuje iba dve alternatívne akcie, malo by byť úplne jasné, ako použiť túto konštrukciu na výber jednej z niekoľkých sekcií alternatívneho kódu. Tento program v prevádzke monitoruje prepínače a ak dôjde k zmene, pípne príslušné číslo, ak je nepárne; bliká, ak je číslo párne. Nerobí nič, pokiaľ sa nezmení vypínač.

Ak chcete spustiť tento kód, vytvorte nový adresár (ak ho chcete, nazvite ho Prepnúť) a stiahnite si nasledujúci súbor s kódom C a vytvorte do neho makefile. Premenujte súbor Makefile3.txt na iba súbor Makefile. Pomocou WinAVR skompilujte program a načítajte ho do svojho Attiny2313.

Krok 9: Záver

Záver
Záver

Takže to je všetko! Teraz viete, ako používať prepínače na ovládanie vykonávania programu tak, že ich prečítate a vyberiete akciu na základe nastavenia prepínača. Viete tiež, ako vytvoriť tón pípnutia, a naučili ste sa aj stratégiu ladenia.

Ak by ste chceli otestovať svoje porozumenie, skúste upraviť posledný program tak, aby pípal pri vysokom tóne, ak je rovnomerný, pípnite pri nízkych tónoch, ak je nepárny, a nepretržite blikajte diódou LED, ak nedôjde k žiadnej zmene prepínačov. Môžete sa pozrieť späť v sekcii ladenia o pomoc.

Odporúča: