Tartalomjegyzék:
- 1. lépés: AVR mikrokontroller alkalmazás írása és építése C kódban az Atmel Studio 7 integrált fejlesztői platform használatával
- 2. lépés: A program HEX fájljának átvitele a chip flash memóriájába
- 3. lépés: A hardverkapcsoló kikapcsolása
- 4. lépés: Elektromos áramkör
Videó: AVR mikrovezérlő. Kapcsolja be a LED -eket nyomógombos kapcsolóval. Nyomógomb kikapcsolása: 4 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
Ebben a részben megtanuljuk, hogyan kell C programprogramot készíteni az ATMega328PU számára, hogy a három LED állapotát a gombkapcsoló bemenete szerint változtassa. Ezenkívül feltártunk egy megoldást a „Switch Bounce” problémára. A szokásos módon az AVR ATmega328 bázisán összeszereljük az elektromos áramkört, hogy ellenőrizhessük a programkód működését.
1. lépés: AVR mikrokontroller alkalmazás írása és építése C kódban az Atmel Studio 7 integrált fejlesztői platform használatával
Ha nincs Atmel Studio, töltse le és telepítse.
www.microchip.com/mplab/avr-support/atmel-studio-7
Az első néhány sorban van néhány fordítói definíciónk.
Az F_CPU határozza meg az óra frekvenciáját Hertzben, és gyakori az avr-libc könyvtárat használó programokban. Ebben az esetben a késleltetési rutinok határozzák meg, hogyan kell kiszámítani az időkéséseket.
#ifndef F_CPU
#define F_CPU 16000000UL // megmondja a vezérlő kristályfrekvenciáját (16 MHz AVR ATMega328P) #endif
#include // fejléc lehetővé teszi az adatáramlás vezérlését a csapok felett. Meghatározza a csapokat, portokat stb.
Az első include fájl az avr-libc része, és szinte minden AVR projektben használható lesz. Az io.h meghatározza az Ön által használt CPU -t (ezért adja meg az alkatrészt a fordítás során), és tartalmazza a megfelelő IO definíció fejlécet az általunk használt chiphez. Egyszerűen meghatározza az összes pin, port, speciális regiszter stb.
#include // fejléc a késleltető funkció engedélyezéséhez a programban
A util/delay.h könyvtár tartalmaz néhány rutinot a rövid késésekhez. Az általunk használt függvény a _delay_ms ().
A define -t használjuk a gomb és a LED -ek portjainak és csapjainak deklarálásához. Az ilyen definiálási utasítások használata lehetővé teszi, hogy csak 3 könnyen megtalálható sort kell módosítanunk, ha a LED-et egy másik I/O tűre helyezzük, vagy más AVR-t használunk.
#define BUTTON1 1 // gombkapcsoló a B port 1 -es érintkezőjéhez van csatlakoztatva
#define LED1 0 // Led1 csatlakozik a B porthoz 0 érintőképernyő
Az utolsó kettő meghatározza a beállítási időket, ezredmásodpercben, hogy kikapcsolja a kapcsolót, és a várakozási időt, mielőtt engedélyezheti a gomb újabb megnyomását. A visszapattanási időt hozzá kell igazítani ahhoz az időhöz, ameddig a váltónak szüksége van arra, hogy a digitális magasról digitális mélypontra váltson az összes pattogás után. Az ugrálási viselkedés kapcsolóról kapcsolóra eltérő lehet, de általában 20-30 milliszekundum elég.
#define DEBOUNCE_TIME 25 // ideje várni a "visszapattanás" gomb megnyomására
#define LOCK_INPUT_TIME 300 // a gombnyomásra várni kell
void init_ports_mcu ()
{
Ezt a funkciót csak egyszer hívjuk meg a programunk elején, hogy inicializáljuk az általunk használt bemeneti kimeneti csapokat.
A gombhoz a PORT és PIN regisztereket fogjuk használni íráshoz és olvasáshoz. Az AVR -k esetén PIN -kódot olvasunk a PINx -regiszter segítségével, és írunk egy PIN -kódra a PORTx -regiszter segítségével. A felhúzások engedélyezéséhez írnunk kell a gombnyilvántartásba.
A LED -hez csak a PORT regisztert kell használnunk, hogy írjunk, azonban szükségünk van az adatirány -regiszterre (DDR) is, mivel az I/O tűk alapértelmezés szerint bemenetként vannak beállítva.
Először a LED I/O csapjait állítjuk kimenetként az adatirány -regiszter segítségével.
DDRB = 0xFFu; // Állítsa be a PORTB összes csapját kimenetként.
Ezután kifejezetten állítsa be a gombostűt bemenetként.
DDRB & = ~ (1 <
Ezután a PORTB csapokat magasra állítják (+5 volt), hogy bekapcsolják. A kimeneti csapok kezdetben magasak, és mivel a LED-ek aktív-magasan vannak bekötve, bekapcsol, hacsak nem kapcsoljuk ki kifejezetten.
És végül engedélyezzük a belső felhúzó ellenállást a bemeneti tüskén, amelyet a gombunkhoz használunk. Ez egyszerűen úgy történik, hogy az egyiket kiírja a portra. Ha bemenetként van konfigurálva, ez lehetővé teszi a felhúzást, és kimenetként történő konfigurálás esetén egyszerűen magas feszültséget eredményez.
PORTB = 0xFF; // Állítsa a PORTB összes csapját HIGH értékűre. A LED be van kapcsolva, // az első csap PORTB belső felhúzó ellenállása is engedélyezve van. DDRC = 0xFFu; // A PORTC összes csapjának beállítása kimenetként. PORTC = 0x00u; // Állítsa a PORTC összes csapját alacsonyra, ami kikapcsolja. DDRD = 0xFFu; // A PORTD összes csapjának beállítása kimenetként. PORTD = 0x00u; // Állítsa a PORTD összes csapját alacsonyra, ami kikapcsolja. }
unsigned char button_state ()
{
Ez a függvény logikai értéket ad vissza, jelezve, hogy megnyomta -e a gombot. Ez a kódblokk, amelyet folyamatosan hajtanak végre a végtelenített ciklusban, és így lekérdezi a gomb állapotát. Itt is kikapcsoljuk a kapcsolót.
Ne feledje, hogy amikor megnyomjuk a kapcsolót, a bemeneti kimeneti csap a földhöz húzódik. Így várjuk, hogy a csap alacsony legyen.
/ * a gomb megnyomásakor a BUTTON1 bit tiszta */
ha (! (PINB & (1 <
Ezt úgy tesszük, hogy ellenőrizzük, hogy a bit tiszta -e. Ha a bit világos, jelezve, hogy a gomb le van nyomva, először késleltetjük a DEBOUNCE_TIME által meghatározott ideig, ami 25 ms, majd újra ellenőrizzük a gomb állapotát. Ha a gombot 25 másodperc elteltével lenyomják, akkor a kapcsoló kikapcsolt állapotúnak tekinthető, és készen áll esemény kiváltására, így visszatérünk 1 -hez a hívó rutinunkhoz. Ha a gomb nincs lenyomva, akkor 0 -ra térünk vissza a hívási rutinunkhoz.
_delay_ms (DEBOUNCE_TIME);
ha (! (PINB & (1 <
int main (void)
{
Fő rutinunk. A fő funkció egyedi és elkülönül minden más funkciótól. Minden C programnak pontosan egy fő () függvénnyel kell rendelkeznie. fő, ahol az AVR elkezdi végrehajtani a kódot, amikor először bekapcsol, tehát ez a program belépési pontja.
előjel nélküli char n_led = 1; // kezdetben a LED -szám világít
A funkció hívása a használt I/O érintkezők inicializálásához:
init_ports_mcu ();
végtelen ciklus, ahol a programunk fut:
míg (1)
{
Amikor a button_state visszaad egyet, amely jelzi, hogy a gombot megnyomták és kikapcsolta, majd a LED -ek aktuális állapotát az n_led paraméter szerint váltja.
if (button_state ()) // Ha megnyomja a gombot, kapcsolja be a LED állapotát és a késleltetést 300 ms -ig (#define LOCK_INPUT_TIME)
{switch (n_led) {1. eset: PORTB ^= (1 << LED1); PORTC ^= (1 << LED2); szünet;
Ezek az állítások C bites bázisú operátorokat használnak. Ezúttal az exkluzív OR operátort használja. Ha XOR a portot a váltani kívánt bit bitértékével, akkor az egyik bit megváltozik anélkül, hogy a többi bitre hatással lenne.
2. eset:
PORTC ^= (1 << LED2); PORTD ^= (1 << LED3); szünet; 3. eset: PORTD ^= (1 << LED3); PORTB ^= (1 << LED1); n_led = 0; // reset LED number break; } n_led ++; // a következő LED bekapcsol _delay_ms (LOCK_INPUT_TIME); }} return (0); }
Tehát most, amikor ezt a programot futtatja, képesnek kell lennie arra, hogy megnyomja a nyomógombot a LED-ek váltásához. A LOCK_INPUT_TIME által meghatározott késleltetés miatt lenyomva tarthatja a gombot, aminek következtében a LED -ek állandóan (alig több mint 275 ms -onként) ki- és bekapcsolnak.
A programozás befejeződött.
A következő lépés a projekt és a hex fájl programozása a mikrovezérlőbe az avrdude program segítségével.
Letöltheti a main.c fájlt programmal c kódban:
2. lépés: A program HEX fájljának átvitele a chip flash memóriájába
Töltse le és telepítse az AVRDUDE programot. A legújabb elérhető verzió a 6.3: Töltse le a zip fájlt
Először másolja be a program hexadecimális fájlját az AVRDUDE könyvtárba. Esetemben a ButtonAVR.hex
Ezután írja be a DOS parancssori ablakba a következő parancsot: avrdude –c [programozó neve] –p m328p –u –U flash: w: [a hexafájl neve].
Esetemben ez: avrdude –c ISPProgv1 –p m328p –u –U flash: w: ButtonAVR.hex
Ez a parancs hex fájlt ír a mikrokontroller memóriájába.
Nézze meg a videót a mikrovezérlő flash memóriájának égetésének részletes leírásával:
A mikrokontroller flash memóriájának égetése…
Rendben! Most a mikrokontroller programunk utasításainak megfelelően működik. Nézzük meg!
3. lépés: A hardverkapcsoló kikapcsolása
A szoftverkapcsoló -visszaváltás mellett hardveres kapcsoló -visszaváltási technikát is alkalmazhatunk. Az ilyen technika alapgondolata az, hogy kondenzátort használnak a kapcsolójelben bekövetkező gyors változások kiszűrésére.
Milyen kondenzátort érdemes választani? Ez végső soron attól függ, hogy a gomb milyen rosszul teljesít az adott problémával kapcsolatban. Egyes gombok óriási ugráló viselkedést mutathatnak, mások viszont nagyon keveset. Az alacsony kondenzátorérték, mint az 1,0 nanofarad, nagyon gyorsan reagál, alig vagy egyáltalán nem befolyásolja a visszapattanást. Ezzel szemben egy magasabb kondenzátorérték, például 220 nanofarad (ami még mindig kicsi a kondenzátorok tekintetében), lassú átmenetet biztosít a kezdő feszültségről a végfeszültségre (5 voltról 0 voltra). A 220 nanofarad kapacitású átmenet azonban a valós értelemben még mindig elég gyors, és így használható a gyengén teljesítő gombokra.
4. lépés: Elektromos áramkör
Csatlakoztassa az alkatrészeket a vázlatos rajz szerint.
Ajánlott:
Atollic TrueStudio-Kapcsolja be a LED-et a nyomógomb megnyomásával az STM32L100 használatával: 4 lépés
Atollic TrueStudio-Kapcsolja be a LED-et a nyomógomb megnyomásával az STM32L100 használatával: Az STM32 ebben az oktatóanyagában elmondom, hogyan kell olvasni az STM32L100 GPIO-tűjét, így itt csak egyet fogok készíteni a fedélzeti Led-fényben nyomógomb megnyomásával
Dupla nyomógombos LED áramkör: 5 lépés
Dupla nyomógombos LED áramkör: Minden tőlem telhetőt megpróbálok, hogy régi kéznek tűnjek a programozásnál és az arduino -val való együttműködésnél, de az igazat megvallva, a valóságban csak néhány nappal ezelőtt ismertem meg ezeket a dolgokat, ezért nagy örömömre szolgál sikeresen létrehoztam és programoztam
AVR mikrovezérlő. Ultrahangos távolságérzékelő. HC-SR04 az NOKIA 5110 LCD-n: 4 lépés
AVR mikrovezérlő. Ultrahangos távolságérzékelő. HC-SR04 az LCD-n NOKIA 5110: Üdv mindenkinek! Ebben a részben egyszerű elektronikus eszközt készítek a távolság érzékelésére, és ezek a paraméterek megjelennek az LCD NOKIA 5110-en. A paraméterek diagramként és számként jelennek meg. A készülék az AVR ATMEG mikrokontrollerre épül
AVR mikrovezérlő. Impulzus szélesség moduláció. Az egyenáramú motor és a LED -fényerősség vezérlője: 6 lépés
AVR mikrovezérlő. Impulzus szélesség moduláció. Az egyenáramú motor és a LED -fényerősség vezérlője: Üdv mindenkinek! Az impulzusszélesség -moduláció (PWM) egy nagyon gyakori technika a távközlésben és a teljesítményszabályozásban. általánosan használják az elektromos készülékek áramellátásának szabályozására, legyen az motor, LED, hangszórók stb. Alapvetően modul
AVR mikrovezérlő. A LED -ek villognak az időzítő segítségével. Az időzítők megszakítanak. Időzítő CTC mód: 6 lépés
AVR mikrovezérlő. A LED -ek villognak az időzítő segítségével. Az időzítők megszakítanak. Időzítő CTC mód: Üdv mindenkinek! Az időzítők fontos fogalom az elektronika területén. Minden elektronikus alkatrész időalapon működik. Ez az időalap segít minden munkát szinkronban tartani. Minden mikrokontroller valamilyen előre meghatározott órajel -frekvencián működik, a