Obsah:
- Krok 1: Písanie a vytváranie aplikácie mikrokontroléra AVR v kóde C pomocou integrovanej vývojovej platformy Atmel Studio 7
- Krok 2: Prenos súboru HEX programu do pamäte Flash čipu
- Krok 3: Odsunutie hardvérového prepínača
- Krok 4: Elektrický obvod
Video: Mikrokontrolér AVR. Prepínajte diódy LED pomocou tlačidlového spínača. Odskakovanie tlačidlom: 4 kroky
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:58
V tejto časti sa naučíme Ako vytvoriť programový kód C pre ATMega328PU na prepínanie stavu troch LED diód podľa vstupu z tlačidlového spínača. Tiež sme preskúmali riešenia problému s „Switch Bounce“. Ako obvykle, zostavíme elektrický obvod na základni AVR ATmega328, aby sme skontrolovali prácu programového kódu.
Krok 1: Písanie a vytváranie aplikácie mikrokontroléra AVR v kóde C pomocou integrovanej vývojovej platformy Atmel Studio 7
Ak nemáte Atmel Studio, mali by ste si ho stiahnuť a nainštalovať.
www.microchip.com/mplab/avr-support/atmel-studio-7
Prvých niekoľko riadkov, ktoré definuje kompilátor.
F_CPU definuje taktovaciu frekvenciu v Hertzoch a je bežný v programoch používajúcich knižnicu avr-libc. V tomto prípade ho používajú rutiny oneskorenia na určenie spôsobu výpočtu časových oneskorení.
#ifndef F_CPU
#define F_CPU 16000000UL // informujúci o kryštálovej frekvencii ovládača (16 MHz AVR ATMega328P) #endif
#include // hlavička na povolenie riadenia toku údajov nad kolíkmi. Definuje piny, porty atď.
Prvý súbor zahrnutia je súčasťou avr-libc a bude použitý v takmer akomkoľvek projekte AVR, na ktorom pracujete. io.h určí procesor, ktorý používate (čo je dôvod, prečo uvediete časť pri kompilácii) a následne zahrnie príslušnú hlavičku definície IO pre čip, ktorý používame. Jednoducho definuje konštanty pre všetky vaše piny, porty, špeciálne registre atď.
#include // hlavička na povolenie funkcie oneskorenia v programe
Knižnica util/delay.h obsahuje niektoré rutiny pre krátke oneskorenia. Funkcia, ktorú budeme používať, je _delay_ms ().
Na deklarovanie portov a pinov našich tlačidiel a diód LED používame definície. Použitie takto definovaných príkazov nám umožňuje zmeniť iba 3 ľahko dostupné riadky, iba ak premiestnime diódu LED na iný I/O pin alebo použijeme iný AVR.
#define BUTTON1 1 // tlačidlový spínač pripojený k portu B, kolík 1
#define LED1 0 // Led1 pripojený k portu B pin 0 #define LED2 1 // Led2 pripojený k portu C pin 1 #define LED3 2 // Led3 pripojený k portu D pin 2
Posledné dva definujú časy nastavenia príkazov v milisekundách na odblokovanie prepínača a čas čakania, než povolíte ďalšie stlačenie tlačidla. Čas odskoku je potrebné prispôsobiť času, po ktorom prepínač prejde z digitálneho maxima na digitálne minimum po každom odrazení. Chovanie pri odraze sa bude líšiť od prepínača k prepínaču, ale 20-30 milisekúnd je zvyčajne celkom dostačujúcich.
#define DEBOUNCE_TIME 25 // čas čakania na tlačidlo „de-bouncing“
#define LOCK_INPUT_TIME 300 // čas čakania po stlačení tlačidla
neplatné init_ports_mcu ()
{
Táto funkcia sa nazýva iba raz na začiatku nášho programu, aby inicializovala vstupné výstupné piny, ktoré budeme používať.
Pokiaľ ide o tlačidlo, budeme na zápis a čítanie používať registre PORT a PIN. Pri AVR čítame pin pomocou registra PINx a zapisujeme na pin pomocou registra PORTx. Aby sme povolili vyťahovanie, musíme zapísať do registra tlačidiel.
V prípade diódy LED potrebujeme na zápis iba register PORT, potrebujeme však aj register smerov údajov (DDR), pretože vstupno -výstupné kolíky sú predvolene nastavené ako vstupy.
Najprv nastavíme I/O piny LED ako výstup pomocou registra smeru údajov.
DDRB = 0xFFu; // Nastaviť všetky piny PORTB ako výstup.
Ďalej explicitne nastavte kolík tlačidla ako vstup.
DDRB & = ~ (1 <
Ďalej sú kolíky PORTB nastavené na vysokú hodnotu (+5 voltov), aby sa zapli. Výstupné piny sú spočiatku vysoké a pretože naša LED dióda je zapojená aktívne-vysoko, zapne sa, pokiaľ ju výslovne nevypneme.
A nakoniec povolíme vnútorný výsuvný odpor na vstupnom kolíku, ktorý používame pre naše tlačidlo. To sa deje jednoducho odoslaním jedného do portu. Keď je to nakonfigurované ako vstup, výsledkom bude umožnenie príťahov a keď je to nakonfigurované ako výstup, bude to znamenať jednoducho výstup vysokého napätia.
PORTB = 0xFF; // Nastavte všetky piny PORTBU na VYSOKÉ. LED dióda je zapnutá, // taktiež je povolený interný pull up odpor prvého pinu PORTB. DDRC = 0xFFu; // Nastaviť všetky piny PORTC ako výstup. PORTC = 0x00u; // Nastavte všetky piny PORTC na minimum, čím sa vypne. DDRD = 0xFFu; // Nastaviť všetky piny portu ako výstup. PORTD = 0x00u; // Nastavením všetkých pinov PORTD na minimum sa vypne. }
nepodpísaný znak button_state ()
{
Táto funkcia vráti booleovskú hodnotu, ktorá označuje, či bolo tlačidlo stlačené alebo nie. Toto je blok kódu, ktorý sa neustále vykonáva v nekonečnej slučke, a preto zisťuje stav tlačidla. Tu tiež odpojíme prepínač.
Teraz si pamätajte, že keď stlačíme spínač, vstupný výstupný kolík je vytiahnutý na zem. Preto čakáme, kým kolík klesne.
/ * tlačidlo je stlačené, keď je BUTTON1 bit jasný */
if (! (PINB & (1 <
Robíme to tak, že skontrolujeme, či je bit jasný. Ak je bit jasný, čo naznačuje, že je tlačidlo stlačené, najskôr oneskoríme dobu definovanú DEBOUNCE_TIME, ktorá je 25 ms, a potom znova skontrolujeme stav tlačidla. Ak je tlačidlo stlačené po 25 ms, potom je spínač považovaný za odpojený a pripravený na spustenie udalosti, a tak sa vrátime k svojmu volajúcemu postupu 1. Ak tlačidlo nie je stlačené, vrátime sa 0 k rutine volania.
_delay_ms (DEBOUNCE_TIME);
if (! (PINB & (1 <
int main (prázdny)
{
Naša hlavná rutina. Hlavná funkcia je jedinečná a odlišuje sa od všetkých ostatných funkcií. Každý program C musí mať presne jednu hlavnú () funkciu. hlavné je miesto, kde AVR začne vykonávať váš kód pri prvom zapnutí napájania, takže je to vstupný bod programu.
znak bez znamienka n_led = 1; // LED číslo pôvodne svieti
Volanie funkcie na inicializáciu používaných I/O pinov:
init_ports_mcu ();
nekonečná slučka, v ktorej beží náš program:
zatiaľ čo (1)
{
Keď button_state vráti stav indikujúci, že bolo tlačidlo stlačené a zrušené, potom sa prepne aktuálny stav LED diód podľa parametra n_led.
if (button_state ()) // Ak je tlačidlo stlačené, prepnite stav LED a oneskorenie na 300 ms (#define LOCK_INPUT_TIME)
{prepínač (n_led) {prípad 1: PORTB ^= (1 << LED1); PORTC ^= (1 << LED2); prestávka;
Tieto príkazy používajú bitové operátory C. Tentoraz používa výhradného operátora ALEBO. Keď XOR PORT s bitovou hodnotou bitu, ktorý chcete prepnúť, tento jeden bit sa zmení bez ovplyvnenia ostatných bitov.
prípad 2:
PORTC ^= (1 << LED2); PORTD ^= (1 << LED3); prestávka; prípad 3: PORTD ^= (1 << LED3); PORTB ^= (1 << LED1); n_led = 0; // reset LED prerušenia čísla; } n_led ++; // ďalšia LED sa rozsvieti _delay_ms (LOCK_INPUT_TIME); }} návrat (0); }
Takže teraz, keď spustíte tento program, mali by ste byť schopní stlačiť tlačidlo, aby sa LED diódy prepínali. Vzhľadom na naše oneskorenie definované LOCK_INPUT_TIME môžete stlačiť a podržať tlačidlo, čo spôsobí vypnutie a zapnutie LED diód konzistentnou rýchlosťou (o niečo viac ako každých 275 ms).
Programovanie je dokončené.
Ďalším krokom je zostavenie projektu a naprogramovanie hexadecimálneho súboru do mikrokontroléra pomocou programu avrdude.
Môžete si stiahnuť súbor main.c s programom v kóde c:
Krok 2: Prenos súboru HEX programu do pamäte Flash čipu
Prevezmite a nainštalujte AVRDUDE. Najnovšia dostupná verzia je 6.3: Stiahnite si súbor zip
Najprv skopírujte hexadecimálny súbor programu do adresára AVRDUDE. V mojom prípade je to ButtonAVR.hex
Potom do okna výzvy DOS zadajte príkaz: avrdude –c [meno programátora] –p m328p –u –U flash: w: [názov vášho hexadecimálneho súboru].
V mojom prípade je to: avrdude –c ISPProgv1 –p m328p –u –U flash: w: ButtonAVR.hex
Tento príkaz zapíše hexadecimálny súbor do pamäte mikrokontroléra.
Pozrite si video s podrobným popisom napaľovania pamäte flash mikrokontroléra:
Napaľovanie pamäte flash mikrokontroléra…
Dobre! Mikrokontrolér teraz pracuje v súlade s pokynmi nášho programu. Pozrime sa na to!
Krok 3: Odsunutie hardvérového prepínača
Okrem softvérového deboundingu softvérových prepínačov môžeme použiť aj techniku hardvérového debounouncing. Základnou myšlienkou tejto techniky je použiť kondenzátor na odfiltrovanie rýchlych zmien signálu prepínača.
Akú hodnotu kondenzátora by ste mali zvoliť? To bude v konečnom dôsledku závisieť od toho, ako zle tlačidlo funguje v súvislosti s týmto konkrétnym problémom. Niektoré tlačidlá môžu zobrazovať obrovské správanie pri odrážaní, iné však budú mať veľmi málo. Nízka hodnota kondenzátora, ako napríklad 1, 0 nanofarád, bude reagovať veľmi rýchlo, s malým alebo žiadnym vplyvom na odskakovanie. Naopak, vyššia hodnota kondenzátora, ako je 220 nanofarád (čo je na kondenzátory stále dosť malé), poskytne pomalý prechod z počiatočného na koncové napätie (5 voltov na 0 voltov). Prechod pozorovaný pri kapacite 220 nanofarád je však stále veľmi rýchly v zmysle skutočného sveta, a preto ho možno použiť na tlačidlách so slabým výkonom.
Krok 4: Elektrický obvod
Pripojte komponenty podľa schematického diagramu.
Odporúča:
Ľahko namontovateľné blikanie spínača svetla: Ovládané pomocou smartfónu s BLYNK: 10 krokov
Ľahko namontovateľné blikanie prepínača svetla: Ovládané pomocou smartphonu pomocou BLYNK: Zariadenia IoT sa rýchlo stávajú čoraz obľúbenejšími, tak prečo sa neučíte a nevytvoríte si vlastné zariadenia IoT z lacných materiálov a tvrdej práce, aby ste urobili veci, ktoré ste predtým nemohli „Moje mená Szehuai a ja sa vždy ocitneme tak, že zaspíme, ale
Textilné LED diódy na vianočný stromček // LED diódy Árbol Navidad Textil Y: 3 kroky
Textilné LED diódy na vianočný stromček // LED diódy Árbol Navidad Textil Y: Jedná sa o jednoduchý obvodový projekt s použitím textilu na vianočné obdobie. Je to nositeľné, pretože ho môžete pridať do akéhokoľvek trička a v noci budete žiariť ako diamant! ---- Čo je jednoduché pre básne, ako pre dočasnú navigáciu, ako pre vestibul
Generátor - generátor jednosmerného prúdu pomocou jazýčkového spínača: 3 kroky
Generátor - generátor jednosmerného prúdu využívajúci jazýčkový spínač: Jednoduchý generátor jednosmerného prúdu Generátor jednosmerného prúdu (DC) je elektrický stroj, ktorý premieňa mechanickú energiu na elektrickú energiu na jednosmerný prúd. Dôležité: Generátor jednosmerného prúdu (DC) môže byť použitý ako jednosmerný motor bez akejkoľvek konštrukcie zmeny
Mikrokontrolér AVR. LED diódy blikajú pomocou časovača. Časovače sa prerušujú. Režim CTC s časovačom: 6 krokov
Mikrokontrolér AVR. LED diódy blikajú pomocou časovača. Časovače sa prerušujú. Režim časovača CTC: Ahoj všetci! Časovače sú dôležitým konceptom v oblasti elektroniky. Každý elektronický komponent pracuje na časovej báze. Táto časová základňa pomáha udržiavať všetku prácu synchronizovanú. Všetky mikrokontroléry pracujú na nejakej vopred definovanej hodinovej frekvencii,
Vytvorte automatický obvod spínača nočného svetla pomocou Mosfetu: 6 krokov (s obrázkami)
Vytvorte automatický obvod spínača nočného svetla pomocou Mosfetu: AKO VYROBIŤ AUTOMATICKÝ NOCNÝ SPÍNAČ S MOSFETOM Dobrý deň, priatelia v tomto projekte ukážem jednoduchý schéma zapojenia, ako vytvoriť automatický naktívny spínač pomocou jedného mosfetu a niektorých malých komponentov, ktoré sa mi podarilo. záchrana zo