Mundarija:
- 1 -qadam: Integral Development Platform Atmel Studio 7 yordamida C kodida AVR mikrokontroller dasturini yozish va yaratish
- 2 -qadam: dasturning HEX faylini chipning flesh xotirasiga o'tkazish
- 3 -qadam: Uskuna kalitini o'chirish
- 4 -qadam: Elektr davri
Video: AVR mikrokontroller. Bosish tugmachasi yordamida LEDni yoqing. Bosish tugmachasi: 4 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:25
Bu bo'limda biz ATMega328PU tugmachasining kalitiga ko'ra uchta LED holatini o'zgartirish uchun C kodini qanday yasashni o'rganamiz. Bundan tashqari, biz "Switch Bounce" muammosining echimini topdik. Odatdagidek, biz dastur kodining ishlashini tekshirish uchun AVR ATmega328 bazasida elektr zanjirini yig'amiz.
1 -qadam: Integral Development Platform Atmel Studio 7 yordamida C kodida AVR mikrokontroller dasturini yozish va yaratish
Agar sizda Atmel Studio bo'lmasa, uni yuklab olishingiz va o'rnatishingiz kerak.
www.microchip.com/mplab/avr-support/atmel-studio-7
Birinchi qatorlar bizda ba'zi kompilyatorlar tomonidan belgilanadi.
F_CPU Hertzda soat chastotasini belgilaydi va avr-libc kutubxonasidan foydalanadigan dasturlarda keng tarqalgan. Bunday holda, u kechiktirish tartibida vaqtni kechiktirishni qanday hisoblash kerakligini aniqlash uchun ishlatiladi.
#ifndef F_CPU
#define F_CPU 16000000UL // nazorat qiluvchi kristal chastotasini aytib berish (16 MGts AVR ATMega328P) #endif
#include // sarlavhasi pinlar ustidan ma'lumotlar oqimini boshqarishni yoqish uchun. Pim, port va boshqalarni belgilaydi.
Birinchi qo'shilgan fayl avr-libc tarkibiga kiradi va siz ishlayotgan AVR loyihalarida ishlatiladi. io.h siz foydalanadigan protsessorni aniqlaydi (shuning uchun siz kompilyatsiya paytida qismni ko'rsatasiz) va o'z navbatida biz foydalanadigan chip uchun mos keladigan IO ta'rifi sarlavhasini o'z ichiga oladi. Bu sizning barcha pinlaringiz, portlaringiz, maxsus registrlaringiz va boshqalar uchun doimiylarni belgilaydi.
#include // header dasturda kechiktirish funksiyasini yoqish uchun
Kutubxona util/delay.h qisqa kechikishlar uchun ba'zi tartiblarni o'z ichiga oladi. Biz ishlatadigan funksiya _delay_ms ().
Biz tugmachani va LED portlarini va pinlarini e'lon qilish uchun ta'riflardan foydalanamiz. Bu kabi ta'riflardan foydalanish, agar biz LEDni boshqa kirish-chiqish piniga o'tkazsak yoki boshqa AVRdan foydalansak, topish oson bo'lgan 3 qatorni o'zgartirishimiz mumkin bo'ladi.
#define BUTTON1 1 // tugmachasi B pin 1 portiga ulangan
#define LED1 0 // Led1 B piniga ulangan 0 #LED2 1ni aniqlang // Led2 C portiga ulangan 1 #LEDni belgilang 2 2 // Led3 D pin 2 ga ulangan.
Oxirgi ikkita tugmachani boshqa bosishga ruxsat berishdan oldin kalitni o'chirish va kutish vaqtini millisekundlarda belgilash vaqtini belgilaydi. Chiqib ketish vaqtini raqamli balandlikdan raqamli pastgacha o'tish vaqtiga moslashtirish kerak. O'tish harakati har bir kommutatsiyadan farq qiladi, lekin odatda 20-30 millisekund etarli.
#debine DEBOUNCE_TIME 25 // "o'chirish" tugmachasini kutish vaqti
#define LOCK_INPUT_TIME 300 // tugmani bosgandan keyin kutish vaqti
bekor init_ports_mcu ()
{
Bu funksiya dastur boshida biz kiritadigan kirish chiqish pinlarini ishga tushirish uchun atigi bir marta chaqiriladi.
Tugma uchun biz yozish va o'qish uchun PORT va PIN -registrlardan foydalanamiz. AVR -lar yordamida biz PINx -registr yordamida pinni o'qiymiz va PIN -kodga PORTx -registr yordamida yozamiz. Biz tortishishni yoqish uchun tugma registriga yozishimiz kerak.
LED uchun biz faqat yozish uchun PORT registridan foydalanishimiz kerak, lekin bizga ma'lumot yo'nalishi registri (DDR) kerak, chunki kirish -chiqish pinlari sukut bo'yicha kirish sifatida o'rnatiladi.
Birinchidan, biz LEDlarning kirish/chiqish pinlarini ma'lumot yo'nalishi registri yordamida chiqish sifatida o'rnatamiz.
DDRB = 0xFFu; // PORTB ning barcha pinlarini chiqish sifatida o'rnating.
Keyinchalik, tugma pinini kirish sifatida aniq o'rnating.
DDRB & = ~ (1 <
Keyinchalik, uni yoqish uchun PORTB pinlari yuqori (+5 volt) ga o'rnatiladi. Chiqish pimlari dastlab baland, va bizning LED faol yuqori simi bo'lgani uchun, agar biz uni aniq o'chirmasak, u yoqiladi.
Va nihoyat, biz tugmachamiz uchun ishlatiladigan kirish pinidagi ichki tortish qarshiligini yoqamiz. Bu faqat bittasini portga chiqarish orqali amalga oshiriladi. Kirish sifatida konfiguratsiya qilinganida, bu tortishishlarni faollashtirishga olib keladi va chiqish sifatida konfiguratsiya qilinsa, bu shunchaki yuqori kuchlanishni chiqaradi.
PORTB = 0xFF; // PORTBning barcha pinlarini YUQORI qilib belgilang. Led yoqilgan, // shuningdek, birinchi pinli PORTB ichki tortish qarshiligi yoqilgan. DDRC = 0xFFu; // PORTC ning barcha pinlarini chiqish sifatida o'rnating. PORTC = 0x00u; // PORTC -ning barcha pinlarini pastroq qilib qo'ying, u o'chadi. DDRD = 0xFFu; // PORTD ning barcha pinlarini chiqish sifatida o'rnating. PORTD = 0x00u; // PORTD -ning barcha pinlarini pastroq qilib qo'ying, u o'chadi. }
imzosiz char tugmasi_state ()
{
Bu funksiya tugma bosilgan yoki bosilmaganligini ko'rsatuvchi mantiqiy qiymatni qaytaradi. Bu kod bloki doimiy ravishda infinat tsiklida bajariladi va shu bilan tugma holatini so'roq qiladi. Bu erda biz kalitni bekor qilamiz.
Endi esda tutingki, biz kalitni bosganimizda, kirish pimi erga tortiladi. Shunday qilib, biz pin pastga tushishini kutmoqdamiz.
/ * BUTTON1 biti bo'sh bo'lganda tugma bosiladi */
agar (! (PINB va (1 <
Biz buni bit aniqligini tekshirish orqali qilamiz. Agar bit aniq bo'lsa, bu tugma bosilganligini ko'rsatadi, biz avval DEBOUNCE_TIME tomonidan aniqlangan vaqtni 25 msga kechiktiramiz va tugma holatini yana tekshiramiz. Agar 25 soniyadan keyin tugma bosilsa, bu o'chirilgan deb hisoblanadi va voqeani boshlashga tayyor, shuning uchun biz qo'ng'iroq tartibiga 1 ni qaytaramiz. Agar tugma bosilmasa, biz 0 -ni qo'ng'iroq tartibiga qaytaramiz.
_delay_ms (DEBOUNCE_TIME);
agar (! (PINB va (1 <
int main (bekor)
{
Bizning asosiy tartibimiz. Asosiy funktsiya noyob va boshqa funktsiyalardan ajralib turadi. Har bir C dasturida aynan bitta main () funktsiyasi bo'lishi kerak. Asosiysi, AVR sizning kodingizni birinchi marta ishga tushganda ishga tushiradi, shuning uchun bu dasturning kirish nuqtasi.
imzosiz char n_led = 1; // dastlab LED raqami hozir yoniq
Kiritilgan kirish -chiqish pinlarini ishga tushirish uchun funktsiyani chaqirish:
init_ports_mcu ();
bizning dasturimiz ishlaydigan cheksiz pastadir:
vaqt (1)
{
Button_state tugma bosilganini va o'chirilganligini ko'rsatuvchi bittasini qaytarsa, n_led parametriga muvofiq LEDlarning hozirgi holatini o'zgartiradi.
if (button_state ()) // Agar tugma bosilsa, LED holatini o'zgartiring va 300ms kechiktiring (#define LOCK_INPUT_TIME)
{switch (n_led) {1 -holat: PORTB ^= (1 << LED1); PORTC ^= (1 << LED2); tanaffus;
Ushbu bayonotlar C bitwise operatorlaridan foydalanadi. Bu safar eksklyuziv OR operatoridan foydalaniladi. Agar siz portni bit qiymatiga o'tkazishni xohlasangiz, bitta bit boshqa bitlarga ta'sir qilmasdan o'zgartiriladi.
2 -holat:
PORTC ^= (1 << LED2); PORTD ^= (1 << LED3); tanaffus; 3 -holat: PORTD ^= (1 << LED3); PORTB ^= (1 << LED1); n_led = 0; // LED raqamining uzilishini tiklash; } n_led ++; // keyingi LED _delay_ms (LOCK_INPUT_TIME) yonadi; }} qaytish (0); }
Shunday qilib, endi siz ushbu dasturni ishga tushirganingizda, siz LED tugmachalarini bosib o'tishingiz kerak. LOCK_INPUT_TIME tomonidan aniqlangan kechikishimiz tufayli siz tugmachani bosib turishingiz mumkin, bu esa svetodiodlar mos keladigan tezlikda (har 275 msdan biroz ko'proq) o'chadi va o'chadi.
Dasturlash tugallandi.
Keyingi qadam, avrdude dasturi yordamida loyiha va hex faylini mikrokontrolderga yaratish.
Main.c faylini c kodli dastur bilan yuklab olishingiz mumkin:
2 -qadam: dasturning HEX faylini chipning flesh xotirasiga o'tkazish
AVRDUDE -ni yuklab oling va o'rnating. Eng so'nggi versiya 6.3: zip faylini yuklab oling
Birinchidan, dasturning o'n oltilik faylini AVRDUDE katalogiga nusxalash. Mening holimda bu ButtonAVR.hex
Keyin, DOS buyruqlar oynasiga buyruqni kiriting: avrdude –c [dasturchining ismi] –p m328p –u –U flesh: w: [hex faylingizning nomi].
Mening holimda bu: avrdude –c ISPProgv1 –p m328p –u –U flesh: w: ButtonAVR.hex
Bu buyruq olti burchakli faylni mikrokontroller xotirasiga yozadi.
Videoni mikrokontroller flesh xotirasining yonishi haqida batafsil tavsif bilan tomosha qiling:
Mikrokontroller flesh xotirasi yonmoqda…
Ok! Endi mikrokontroller dasturimiz ko'rsatmalariga muvofiq ishlaydi. Keling, buni tekshirib ko'ramiz!
3 -qadam: Uskuna kalitini o'chirish
Dasturiy ta'minotni o'chirishdan tashqari, biz apparatni o'chirish texnikasidan foydalanishimiz mumkin. Bunday texnikaning asosiy g'oyasi - bu uzatish signalidagi tez o'zgarishlarni filtrlash uchun kondansatkichdan foydalanish.
Kondensator qanday qiymatni tanlashi kerak? Bu oxir -oqibat tugmachaning ushbu muammoning qanchalik yomon ishlashiga bog'liq bo'ladi. Ba'zi tugmalar juda zo'r burilish xatti -harakatini aks ettirishi mumkin, boshqalari esa juda kam bo'ladi. 1.0 nanofarad kabi past kondansatör qiymati juda tez ta'sir qiladi, zıplamaya deyarli ta'sir qilmaydi. Aksincha, 220 nanofarad kabi kondansatkichning yuqori qiymati (bu hali kondansatkichlar jihatidan juda kichik) boshidan oxirigacha (5 voltdan 0 voltgacha) sekin o'tishni ta'minlaydi. 220 nanofaradli o'tish tezligi real ma'noda juda tezdir, shuning uchun uni yomon ishlaydigan tugmalarda ishlatish mumkin.
4 -qadam: Elektr davri
Komponentlarni sxematik sxema bo'yicha ulang.
Tavsiya:
Bosish tugmachasi: 31 qadam
Tugma tugmasi: tugmachali tugma yordamchi kalitning yana bir variantidir. Bu nogiron bolalar uchun mo'ljallangan bo'lib, ularga kundalik narsalardan foydalanish huquqini beradi
LEDni kir bilan yoqing: 10 qadam (rasmlar bilan)
Kirni LED bilan yoqing: bu men zavqlangan tajriba edi! Balki sizga nusxa ko'chirish qiziq tuyuladimi? Menga " Yer batareyasi " uzoq muddatga. Galvanik batareyadan ko'ra, haqiqiy Yer batareyasi bo'lish uchun qurilma
Atollic TrueStudio-LEDni STM32L100 yordamida 4 tugmachasini bosib LEDni yoqing: 4 qadam
STM32L100 yordamida tugmachani bosib LEDni Atollic TrueStudio-ni yoqing: STM32-ning ushbu qo'llanmasida men sizga STM32L100-ning GPIO pinini qanday o'qish kerakligi haqida aytib beraman, shuning uchun men bortda Led porlashni o'rnataman. bosish tugmachasini bosish
Vatson bilan LEDni yoqing: 6 qadam
Uotson bilan LEDni yoqing: Sizga nima kerak: Zagros sun'iy intellekt Raspberry Pi to'plami
AVR mikrokontroller sug'urta bitlarini sozlash. LEDni miltillash dasturini mikrokontrollerning flesh xotirasida yaratish va yuklash: 5 qadam
AVR mikrokontroller sug'urta bitlarini sozlash. LEDni miltillash dasturini mikrokontroller flesh xotirasiga yaratish va yuklash: Bu holda biz C kodida oddiy dastur tuzamiz va uni mikrokontroller xotirasiga yozamiz. Biz o'z dasturimizni yozamiz va integratsiyalashgan rivojlanish platformasi sifatida Atmel Studio -dan foydalanib, olti burchakli faylni tuzamiz. Biz sug'urta bi ni sozlaymiz