Arduino-da apparat uzilishlari

|
Arduino-da apparat uzilishlari
|
bet | 6/10 | Sana | 13.02.2024 | Hajmi | 52,35 Kb. | | #155674 |
1.5 Arduino-da apparat uzilishlari
Nomidan ko'rinib turibdiki, uzilishlar dasturning normal oqimini to'xtatuvchi signallardir. Uzilishlar odatda hodisalarga darhol javob berishni talab qiluvchi apparat qurilmalari uchun ishlatiladi. Masalan, yangi belgi olinganda mikrokontrollerning ketma-ket port tizimi yoki UART (universal asinxron qabul qiluvchi) xizmat ko'rsatishi kerak. Agar bu tezda bajarilmasa, yangi belgi yo'qolishi mumkin. Yangi belgi kelganda, UART uzilish hosil qiladi. Mikrokontroller asosiy dasturning (ilovaning) bajarilishini to'xtatadi va ushbu uzilishga bag'ishlangan uzilishlar xizmatiga (ISR) o'tadi. Bunday holda, bu qabul qilingan belgiga asoslangan uzilishdir. Ushbu ISR UART dan yangi belgini oladi, uni buferga joylashtiradi, so'ngra uzilishni o'chiradi va qaytaradi. ISR qaytsa, mikrokontroller asosiy dasturga qaytadi va chaqiruv nuqtasidan davom etadi. Bularning barchasi fonda sodir bo'ladi va ilovangizning asosiy kodiga bevosita ta'sir qilmaydi. Agar ko'plab uzilishlar qo'zg'atilgan bo'lsa yoki yuqori tezlikdagi taymer tomonidan uzilish hosil bo'lsa, asosiy dastur sekinroq ishlaydi, chunki mikrokontroller o'zining mashina vaqtini asosiy dastur va barcha uzilishlarni boshqarish funktsiyalari o'rtasida taqsimlaydi. Keling, uzilish jarayonlari qanchalik muhimligini ko'rish uchun misolni hisoblaylik. Aytaylik, sizda ma'lumotlarni uzatish tezligi 9600 bod bo'lgan ketma-ket port mavjud. Bu shuni anglatadiki, har bir belgi biti 9600 Gts yoki taxminan 10 kHz tezlikda yuboriladi. Har bir bit 100 mks oladi. Bitta belgini yuborish uchun taxminan 10 bit kerak bo'ladi, shuning uchun biz har millisekundda bitta to'liq belgi olamiz. Agar bizning UART buferlangan bo'lsa, keyingisi qabul qilinmaguncha oxirgi belgini olishimiz kerak, bu butun ish uchun 1ms beradi. Agar UART buferlanmagan bo'lsa, 1 bit yoki 1 mksda belgidan xalos bo'lishingiz kerak. Avval buferlangan misolni ko'rib chiqaylik. Ma'lumotlar yo'qolishining oldini olish uchun bayt qabulini har millisekunddan tezroq tekshirishingiz kerak. Arduino nuqtai nazaridan, bu bizning loop funksiyamiz UART holatiga va ehtimol ma'lumotlar baytiga soniyasiga 1000 marta kirishi kerakligini anglatadi. Buni qilish oson, lekin yozishingiz kerak bo'lgan kodni ancha murakkablashtiradi. Loop funktsiyasini bajarish uchun 1ms dan ortiq vaqt talab qilinmasa, siz undan qutulishingiz mumkin. Biroq, bir nechta kiritish/chiqarish qurilmalariga xizmat ko'rsatish kerak bo'lishi yoki u ancha yuqori uzatish tezligida ishlashi kerak bo'lishi mumkin. Bu tez orada bunday muammolarni keltirib chiqarishi mumkin. Uzilishlar bilan xarakterning kelishini kuzatishning hojati yo'q. Uskuna uzilishdan foydalangan holda signal beradi va protsessor belgini vaqtida qo'lga kiritish uchun ISR ga tezda qo'ng'iroq qiladi. UART holatini tekshirish uchun protsessorning katta qismini ajratish o'rniga, siz hech qachon holatni tekshirmasligingiz kerak, faqat apparat uzilishini o'rnating va ISRda kerakli ishni bajaring. Asosiy dastur to'g'ridan-to'g'ri ta'sir qilmaydi va apparat qurilmasidan maxsus imkoniyatlar talab qilinmaydi.
1.5.1 Taymer uzilishi
Ushbu bo'limda davriy uzilishlar uchun dasturiy ta'minot taymeridan 2 foydalanish tasvirlanadi. Asl g'oya Arduino audio loyihalarida urish chastotasini yaratish uchun ushbu taymerdan foydalanish edi. Ohang yoki chastotani chiqarish uchun I/U portini mos keladigan chastotada almashtirishimiz kerak. Buni kechiktirish looplari yordamida amalga oshirish mumkin. Bu oddiy, lekin bizning protsessorimiz band bo'lib, aniq pinni almashtirish vaqtini kutishdan boshqa hech narsa qilmasligini anglatadi. Taymer uzilishidan foydalanib, biz boshqa narsalarni qilishimiz mumkin va taymer vaqt kelganligini bildirganda ISR ni almashtirishga ruxsat beramiz.
Signal to'g'ri vaqtda uzilib qolishi uchun taymerni o'rnatish kifoya. Vaqtni kechiktirish uchun foydasiz pastadirni aylantirish o'rniga, asosiy dastur harakat sensorini kuzatish yoki elektr haydovchini boshqarish kabi boshqa narsalarni qilishi mumkin. Loyiha nima talab qilmasin, kechikish uchun protsessor vaqti kerak emas. Quyida ISR umumiy tarzda tavsiflanadi, chunki u taymer 2 uzilishlari bilan bog'liq. AVR protsessorlarida uzilishlardan foydalanish haqida batafsil ma'lumotni avr-libc foydalanuvchi qo'llanmasida topishingiz mumkin (inglizcha). Ushbu bosqichda to'liq tushunish talab qilinmaydi, lekin oxir-oqibat siz uzilishlardan foydalanishni tezlashtirishni xohlashingiz mumkin, chunki ular mikrokontroller ilovalari uchun muhim vositadir.
|
| |