Obsah:

Přepínače čtení s kroky ATtiny2313: 9
Přepínače čtení s kroky ATtiny2313: 9

Video: Přepínače čtení s kroky ATtiny2313: 9

Video: Přepínače čtení s kroky ATtiny2313: 9
Video: Rychločtení Návod | 4 principy, které zrychlí tvé čtení 5x 2024, Červenec
Anonim
Přepínače čtení s ATtiny2313
Přepínače čtení s ATtiny2313

Existuje několik instrukcí zabývajících se výstupy z ATtiny2313 a podobných zařízení AVR. Například https://www.instructables.com/id/Ghetto-Programming%3a-Getting-started-with-AVR-micro/, https://www.instructables.com/id/Drive-a-Stepper- Motor s mikroprocesorem AVR/. Při práci na posledním z The Real Elliot, který ukázal, jak ovládat krokové motory, jsem zjistil, že by bylo velmi užitečné mít možnost spouštět alternativní části kódu ve stejném programu, takže jsem nemusel přeprogramovat ATtiny2313 každý čas jsem chtěl vyzkoušet mírnou variaci kódu (jako napůl krokování nebo běh stepperu vzad). I když je snadné psát kód pomocí příkazu switch/case, který umožňuje výběr alternativních variací, je potřeba nějaký způsob výběru případu. To znamená, že k ovládání případu je třeba přečíst nějaký druh vstupního zařízení. Naštěstí má ATtiny2313 spoustu I/O pinů a je dobře navržen pro čtení vstupů z přepínačů. Tento Instructable ukáže, jak číst vstupy a rozhodovat se podle jejich stavu. Protože to samo o sobě by bylo docela nudné Instructable, vysvětlím jednoduchý způsob použití funkce časovače/čítače ATtiny2313 k ovládání malého reproduktoru jako bzučáku. Dojde také k malé odbočce k jednoduchým technikám ladění.

Krok 1: Vstupní zařízení

Vstupní zařízení
Vstupní zařízení
Vstupní zařízení
Vstupní zařízení

Tento Instructable navazuje na vynikající práci The Real Elliot a používá vývojový systém ATtiny2313 Ghetto, který popisuje. Datový list ATtiny2313 od společnosti Atmel je konečnou referencí pro všechny funkce, ale není nutně snadno čitelný. https://www.atmel.com/dyn/products/datasheets.asp?family_id=607 (Link má všechny datové listy AVR, vyhledejte číslo 2313.) Obrázek ukazuje jednoduchou sadu vstupních přepínačů. Toto je jednoduše balíček čtyř přepínačů zapnutí/vypnutí; také známé jako jednopólové přepínače s jedním vrháním (SPST). Typicky je jedno připojení nebo pól každého spínače spojeno se zemí, zatímco druhé připojení je vytaženo vysoko přes odpor omezující proud (přibližně 10 kB). Na pól s odporem je připojen vstup mikrokontroléru. Pokud je spínač otevřený, mikrokontrolér načte vstup jako HI. Pokud je spínač sepnutý, mikrokontrolér načte vstup LO. Podrobnosti najdete ve schématu. ATtiny2313 věci zjednodušuje tím, že poskytuje programovatelné výsuvné odpory na I/O pinech, když jsou konfigurovány jako vstupy. To znamená, že přepínače mohou mít jednoduše jeden pól spojený se zemí (LO) a druhý pól připojený ke vstupu procesoru. První příklad ukazuje pouze dva přepínače. Přepínače jsou načteny a nakonfigurovány pomocí následujícího kódu. Konfigurujte přepínače jako vstupy: (Není vyžadován žádný kód; toto je výchozí.) Zapněte výsuvné odpory: PORTB = _BV (PB0) | _BV (PB1); Přečíst vstupy: but1 = ~ PINB & 0x03; Všimněte si použití inverze a maskování, abyste získali správnou hodnotu.

Krok 2: Blinkenlights pro signál

Tyto dva přepínače použijeme k tomu, abychom několikrát blikli LED diodou. LED diody, které použijeme, budou blinkenlights, které The Real Elliot proslavil. Přepínače 1 a 2 budou považovány za dvě binární číslice, takže kombinace může představovat čísla 0, 1, 2 a 3. Náš program přečte dva přepínače a příslušným počtem bliknutí LED, ale pouze pokud přepínač nastavení se změnilo. Přepínače jsou odpojeny po dobu 500 milisekund (není optimalizováno). Algoritmus odskoku je velmi jednoduchý. Přepínače jsou načteny a čtení je zaznamenáno. Pokud se liší od hodnoty oldBut (poslední uložená hodnota), program se zpozdí o 500 milisekund a přepínače se znovu načtou. Pokud je hodnota stejná jako dříve načtená, hodnota oldBut bude aktualizována a LED bliká, kolikrát je implikováno binární hodnotou obou přepínačů. Všimněte si převrácení hodnoty, protože přepínač, který je „zapnutý“, čte LO. Přepínače budou průběžně prohledávány kvůli dalším změnám. Další informace o blinkenlights najdete v dřívějších instrukcích od The Real Elliot. Podívejte se na tento https://www.ganssle.com/debouncing.pdf, kde se dozvíte více o odskakování přepínačů. Zde je kód ATtiny2313 pro tento příklad. Za provozu tento program dvakrát zabliká LED na PB4 (fyzický kolík 8), aby ukázal, že je inicializován. Poté přečte spínače jedna a dvě a jednou nebo třikrát zabliká v závislosti na nastavení přepínačů, kdykoli jsou změněny. Pokud se přepínače nemění, LED bude pomalu blikat. Chcete -li tento kód spustit, vytvořte nový adresář (pokud chcete, nazvěte jej „Basic“) a stáhněte si následující soubor s kódem C a vložte do něj makefile. Přejmenujte soubor Makefile1.txt na Makefile. Pomocí WinAVR zkompilujte program a načtěte jej do ATtiny2313.

Krok 3: Menší odbočka při ladění

Pokud jste jako já (a každý další programátor na světě), pravděpodobně jste zažili časy, kdy „bezchybný“kód, který jste pečlivě zadali a zkompilovali, nedělá to, co od něj očekáváte. Možná to prostě nic nedělá! Tak co je za problém? Jak to chceš zjistit? Naštěstí existuje několik přístupů k tomu, aby věci fungovaly. (Získejte tuto knihu pro vynikající zpracování tématu ladění. Http://www.debuggingrules.com/) Rád bych nabídl několik jednoduchých návrhů týkajících se tématu ladění aplikací mikrokontrolérů. Prvním krokem je stavět na co víš. Pokud vám jednou svítilo blinkenlight, pak jej znovu použijte, abyste zjistili, kde se ve vašem programu nacházíte. Rád bych, aby LED dvakrát blikla, aby signalizovala začátek programu. Kód můžete vložit na začátku programu. Jakmile víte, že s hardwarem není nic v nepořádku, vytvořte funkci, která provede blikání. Zde je funkce, kterou používám./*------------------------------------------ ------------------------------ ** blinkEm-funkce blikání LED pomocí PD4 ** PD4 musí být nakonfigurován jako výstup. ** ------------------------------------------------ ---------------------*/void blinkEm (počet uint8_t) {while (počet> 0) {PORTD = _BV (PD4); _delay_ms (1000); PORTD = ~ _BV (PD4); _delay_ms (1000); počet--; }} Tuto funkci je nyní možné použít v různých bodech kódu jako signál, že se kód dosud provedl. Vědět, že je kód spuštěn, znamená, že můžete pečlivě prozkoumat každou spuštěnou část, ale neudělat to, co jste očekávali, a najít chyby. Změna jedné věci najednou je také klíčovou technikou pro ladění (popsáno v odkazu výše). Tato klasická metoda funguje společně s „rozděl a panuj“: dělání dětských kroků k postupnému přidávání funkcí. Může se to zdát jako pomalý přístup, ale není to zdaleka tak pomalé, jako když se pokoušíte ladit velkou část nepracujícího kódu najednou.

Krok 4: Více ladění

Mnohokrát chceme zkontrolovat část kódu tak, že přeskočíme většinu řádků v něm a poté je povolíme jeden po druhém, když ověříme, že každý funguje. Obvykle to děláme „komentováním“řádků, které chceme přeskočit. Rozšířením této techniky je vyjmout a vložit blok kódu, okomentovat originál (abychom jej neztratili) a hacknout kopii. C má čtyři snadné způsoby, jak komentovat řádky. Umístěním "//" před řádek tento řádek okomentuje. Uzavřením jednoho nebo více řádků do "/*" a "*/" se okomentuje celá sekce. Aby tato metoda fungovala efektivně, nesmí být v bloku kódu žádné jiné „*/“(kromě koncového). Účinnou disciplínou je tedy použít // pro komentáře v blocích kódu a vyhradit konstrukci / * * / pro bloky komentářů a pro komentování částí kódu. Umístění „#if 0“na začátek bloku pro komentář a ukončení sekce „#endif“. Více selektivní ovládání je možné pomocí „#ifdef (identifier)“na začátku bloku a „#endif“na konci. Pokud chcete, aby byl blok kompilován, použijte v programu dříve „#define (identifier)“. Všimněte si, že uvozovky jsou pouze pro zdůraznění a nejsou zahrnuty. Kombinace těchto technik by měla poskytnout užitečný přístup k ladění programů ATtiny2313. Při procházení tohoto Instructable vám mohou tyto nástroje připadat užitečné.

Krok 5: Použití časovače/čítače 0 pro pípnutí

Pípnutí pomocí časovače/čítače 0
Pípnutí pomocí časovače/čítače 0

ATtiny2313 má dva výkonné zdroje časovače/čítače: jeden 8bitový a jeden 16bitový. Ty mohou být konfigurovány jako generátory frekvence, regulátory modulace šířky pulzů a registry pro porovnávání výstupů. Jejich plná funkčnost je popsána na 49 stránkách datového listu. Použijeme však jednoduchý případ. Bude použit pouze časovač/čítač 0 (8bitový) a bude použit jednoduše jako frekvenční generátor. Frekvence bude směrována do malého reproduktoru, aby se ozvalo pípnutí. Časovač/čítač 0 je podrobně popsán na stranách 66 až 83 datového listu ATtiny2313. Blízké čtení tohoto materiálu poskytne člověku úplné porozumění času/čítače 0. Naštěstí k vytvoření požadovaného tónu pípnutí stačí poměrně jednoduchý režim, Clear Timer on Compare (CTC).

V režimu, který použijeme, je ovládání časovače/čítače přímočaré. Když je vybrán hodinový signál, počitadlo začíná na nule a zvyšuje každý hodinový impuls. Když hodnota čítače dosáhne hodnoty ve výstupním porovnávacím registru (TOP), čítač se vynuluje a počítání začne znovu. Výstupní bit spojený s časovačem/čítačem je přepnut, aby vytvořil výstup se čtvercovou vlnou. To přímo pohání zvukový měnič, aby vydával zvukový signál. Pípnutí vydá malý zvukový převodník TDK. Vhodnou jednotkou je Digikey 445-2530-ND, TDK SD1209T3-A1 (použil jsem starší verzi). Toto je 3 voltová verze; 5 voltová verze bude také fungovat, očekávám. Řídím to přímo z výstupního portu Attiny2313 a zdá se, že to funguje dobře. Sparkfun má podobné zařízení.

Krok 6: Konfigurace časovače/čítače 0

Režim CTC lze použít k přepínání výstupu OC0A na Pin 2, Port B (fyzický pin 14). Chcete -li povolit výstup na tomto pinu, musí být DDRB příslušně nastaveno. C kód pro to je stejný jako nastavení výstupu pro blinkenlight. DDRB = _BV (PB2); // Port B2 je výstup. Dalším krokem je dodat hodinový signál a načíst registr pro porovnávání výstupu, aby se vytvořil průběh jako frekvence. Rovnice pro výslednou frekvenci je uvedena v datovém listu (strana 72). Podmínky v rovnici budou popsány níže. Zde je rovnice: fOC0A = fclk_I/O/2*N*(1+OCR0A) Kde fOC0A: = výstupní frekvence fclk_I/O: = frekvence zdroje hodin N: = faktor prescale hodin OCR0A: = hodnota ve výstupu porovnat registr pro časovač/ Počitadlo 0A. Frekvence zdroje hodin, fclk_I/O Toto je frekvence systémových hodin. Výchozí hodnota je 1 MHz. Bity CS00, CS01 a CS02 TCCR0B řídí tento výběr. Vzhledem k tomu, že tyto bity také vybírají hodnotu N, je to popsáno dále. Hodnota precaleru, NN je hodnota používaná k rozdělení nebo přednastavení systémových hodin. Bity CS00, CS01 a CS02 TCCR0B řídí tento výběr. Kombinace popisuje tabulka 41 na straně 81 datového listu ATtiny2313. Protože je požadována frekvence blízká 1kHz, budou nastaveny bity CS00 a CS01 TCCR0B. Všimněte si toho, že nastavení všech tří bitů na 0, tedy výběr bez zdroje hodin, efektivně zastaví výstup. Toto je metoda, která bude použita ke spuštění a zastavení pípnutí. Hodnota TOP, OCR0A Tato hodnota je NEJLEPŠÍ hodnotou pro čítač, který je načten do výstupního porovnávacího registru pro časovač/čítač 0A. Po dosažení této hodnoty se počitadlo vynuluje a počítání začne znovu, dokud není dosaženo HORNÍ a cyklus se opakuje. TOP lze snadno upravit, takže frekvenci bzučáku lze snadno změnit. Protože je požadována frekvence blízká 1kHz, je TOP nastaveno na 7. (Všimněte si, že prescaler mohl být nastaven na 8 a TOP nastaven na 63. Stejný výsledek - vaše volba.) Output Frequency, fOC0A Použití rovnice pro výpočet výsledků výstupní frekvence in: fOC0A = 1 000 000 000 /2 * 64 * (1+7) fOC0A = 977Hz Zavřete dost! Zde je kód pro načtení registru porovnávání výstupu a registru 0B čítače časovače. Podívejte se prosím na skutečný kód programu, abyste pochopili, jak se používají. OCR0A = 7; // Časová hodnota TCCR0B = _BV (CS01) | _BV (CS00); // Vyberte interní hodiny & prescale = 8 TCCR0B = 0; // žádný zdroj hodin nevypíná tón Nastavení režimu čas/čítač Jako poslední detail specifikujeme požadovaný režim časovače/čítače nastavením příslušných bitů v registru časovače/čítače 0A. Režim CTC se volí nastavením bitu WGM01, jak je popsáno v tabulce 40, strana 79 datového listu. Protože chceme, aby výstup přepínal každý cyklus, je třeba také nastavit bit COM0A0, jak je popsáno v tabulce 34 na straně 77. Zde je kód: TCCR0A = _BV (COM0A0) | _BV (WGM01); // Režim přepínání CTC

Krok 7: Použití čtyř přepínačů

Když implementujeme bzučák, rozšíříme náš hardware a software, aby zvládl čtyři přepínače. Vzhledem k tomu, že výstup čítače časovače 0A je na portu B, pin 2, nemůžeme jednoduše připojit více přepínačů postupně k portu B. Jednoduchým řešením by bylo použít port D, ale ponechme tento port k dispozici pro další funkce (možná krokový motor). Pojďme tedy připojit další přepínače k PB3 a PB4. Čtení přepínačů se většinou nezmění. Hodnota masky se změní na 0x1B (00011011 binární), aby se maskoval bit 2 spolu s 5, 6 a 7. Jeden další trik se používá k vytvoření 4bitového binárního čísla. Posuňte bity 3 a 4 doprava o jeden bit a zkombinujte je s bity 0 a 1 do 4bitového binárního čísla. Toto je standardní syntaxe jazyka C pro posouvání a kombinování bitů, ale nemusí být pro nováčka dobře známá. but1a = (but1 & 0x03) | ((but1 & 0x18) >> 1); // but1 má čtení spínače V provozu program dvakrát zabliká a dvakrát pípne, aby signalizoval inicializaci. Při každé změně přepínačů pípne číslo, které představují. Když se přepínače nemění, LED bude blikat. Chcete -li tento kód spustit, vytvořte nový adresář (říkejte mu Pípněte, chcete -li) a stáhněte si následující soubor s kódem C a vložte do něj makefile. Přejmenujte Makefile2.txt na Makefile. Pomocí WinAVR zkompilujte program a načtěte jej do Attiny2313.

Krok 8: Použití konstrukce přepínače/pouzdra

Posledním krokem je „jen software“: Jak jsme slíbili, implementujeme konstrukci přepínače/případu. Přestože tento příklad ukazuje pouze dvě alternativní akce, mělo by být velmi jasné, jak pomocí této konstrukce vybrat jednu z několika sekcí alternativního kódu. Za provozu tento program sleduje spínače a pokud dojde ke změně, pípne příslušné číslo, pokud je liché; bude blikat, pokud je číslo sudé. Nedělá nic, pokud se nezmění přepínač.

Chcete -li tento kód spustit, vytvořte nový adresář (pokud chcete, nazvěte ho Přepnout) a stáhněte si následující soubor kódu C a vložte do něj makefile. Přejmenujte soubor Makefile3.txt na Makefile. Pomocí WinAVR zkompilujte program a načtěte jej do Attiny2313.

Krok 9: Závěr

Závěr
Závěr

Tak to je vše! Nyní víte, jak pomocí přepínačů řídit provádění programu tím, že je načtete a vyberete akci na základě nastavení přepínače. Také víte, jak vytvořit pípnutí, a také jste se naučili nějakou strategii ladění.

Pokud si chcete vyzkoušet své porozumění, zkuste upravit poslední program tak, aby pípal při vysoké výšce, pokud je sudý, pípněte nízký tón, pokud je lichý, a nepřetržitě blikejte LED, pokud nedojde ke změně přepínačů. zpět v sekci ladění o pomoc.

Doporučuje: