15- ma’ruza arduino buyruqlari va ularni qo’llash reja
Nimalarga diqqat qaratish kerak
Download 38.82 Kb.
|
15-ma\'ruza
- Bu sahifa navigatsiya:
- 15.2. ARDUINO TAYMERLARI BILAN ISHLASH
- Taymerni initsiallashtirish
Nimalarga diqqat qaratish kerak:
YOrug‘lik diodi yorqinliginio‘zgartirish odimi (keltirilgan misolda o‘zgaruvchan fade) maksimal yorqinlik qiymatiga (masalan, 255 soniga) karrali bo‘lishi shart; Agar sketyach ishini mashg‘ulot boshida rasmda joylashtirilgan grafik bilan solishtirilsa, u holda fade — bu kvantlash odimi, ya’ni uzatiladigan kuchlanish o‘sib boradigan kattalik, delay esa — bu diskretlashtirish odimi, ya’ni u o‘tishi bilan fade qiymati o‘zgaradigan vaqt davri1. 15.2. ARDUINO TAYMERLARI BILAN ISHLASH Aslini olganda, taymer bilan ishlash ikki muhim komponentdan iborat: Taymerdan uzilishlar mexanizmini o‘zimiz uchun qulay rejimda initsiallashtirish Uzilishlarga ishlov berishning o‘zi Taymerni initsiallashtirish Bizga kerakli bo‘lgan uzilishlarni ola boshlash uchun protsessorni ularni generatsiyalaydigan qiladigan tarzda sozlab qo‘yish zarur. Buning uchun bizga kerakli registrlarni kerakli qiymatlarga o‘rnatish talab etiladi. Aynan qaysi registrlar va qaysi qiymatlarni o‘rnatish kerakligini.... protsessorda datashit da qarash kerak: (To‘g‘risini aytganda, bu axborotni Arduino ning o‘z hujjatlarida topish mumkin bo‘ladi deb umid qilgan edim, yo‘q, bu juda ham oson bo‘lar ekan. Bundan tashqari, seriyaning turli protsessorlari uchun bit raqamlari farq qilishi mumkin. Mening o‘zim bitlarni datashit ga muvofiq o‘rnatishga urinish ayanchli oqibatlarga olib kelishi kabi hodisaga duch keldim… shunga qaramay, bari u qadar ham qo‘rqinchli emas, chunki ana shu bitlarning nomlari ham bo‘lib, ular turli protsessorlar uchun nisbatan bir xil, umumiydir. SHu sababli biz raqamli qiymatlarni emas, balki faqat nom(ism)larni qo‘llaymiz. Boshlanishiga AVR mikrokontrollerlarida bir necha taymer borligini esga olaylik. Nolinchi taymer delay() qiymatlarini hisoblab topish va shu kabi harakatlar uchun ishlatiladi, shuning uchun biz undan foydalanmaymiz. Mos ravishda, birinchisini ishlatamiz. SHuning uchun quyida registrlarni belgilashda ko‘pincha bir soni ko‘rinib qolsa, misol uchun, ikkinchi taymerni sozlash uchun esa ikkini qo‘yishimiz kerak bo‘ladi Taymerni barcha initsiallashtirish ishlari setup() amaliyotida yuz berishi kerak. U qiymatlarni4 registr, ya’ni TCCR1A, TCCR1B, TIMSK1, OCR1Aga joylashdan iborat bo‘ladi. Ulardan dastlabki 2 tasi «1 taymer-hisoblagichni boshqarishga qaratilgan A va B registrlari». Uchinchisi — «1 taymer-hisoblagichni uzish maskasi registri», va so‘nggisi — «1 taymer-hisoblagichni A qiyoslash registri» deb nomlanadi. Bitlarni o‘rnatish uchun mo‘ljallangan quyidagi komandalarni qo‘llash qabul qilingan (variantlar ko‘pligi tushunarli hol, lekin ko‘pincha aynan ana shulari ishlatiladi): BITE |= (1 << POSITION) ya’ni «1» ni POSITION ga o‘ngdan tap tomonga siljitamiz va maqsaddagi va olingan baytlar orasida logik «ili»ni o‘tkazamiz. Kontroller yoqilganida barcha ana shu registrlar qiymatlaritarkibida 0 ga ega, shuning uchun nollar haqida biz shunchaki esdan chiqaramiz. SHu tarzda, navbatdagi kod bajarilganidan keyin A=0; A |= (1 << 3) A qiymati8 ga aylanadi. Taymerni sozlash variantlari juda ko‘p, lekin biz taymer bilan quyidagilarga erishishimiz kerak: Taymer CTC ish rejimiga o‘tishi uchun (ya’ni hisoblashrejimiga mos kelishni tashlab yuborish bilan, «Clear Timer on Compare match»), datashitga qaraganda bunga bitlarni WGM12:0 = 2 o‘rnatish bilan erishiladi, buning o‘zi ikkinchidan nolinchigacha bitlarni «2» qiymatiga o‘rnatilishini anglatadi, ya’ni, «010», komanda TCCR1B |= (1 << WGM12); 16MGs ekanligi sababli (mening platamda kvarsli rezonator aynan ana shu chastotaga ega) bu katta bo‘lib, imkon qadar kattaroq bo‘lgich tanlansin, 1024 (ya’ni har bir 1024-nchi takt bizning hisoblagichgacha etib boradi), CS12:0=5 Uzilish A registri bilan mos tushganda ro‘y beradigan qilib bajarilsin, ushbu hisoblagich uchunTIMSK1 |= (1 << OCIE1A) Aynan qaysi qiymatga erishilganida uzilishga ishlov berish keltirib chiqarilishi ko‘rsatilsin, bu qiymat 1 hisoblagichning biz avvalgi bandda moslashishi bilan uzilishni qo‘shgan xuddi ana shu A registriga joylanadi (uning yaxlit (butun) nomi OCR1A). Qanday hisoblash kerak, hisob-kitobni nechagacha davom ettirishimiz lozim? — Oson, agar kvarsli rezonatorning taktli chastotasi 16MGs bo‘lsa, unda hisoblagich16000 qiymatiga etganida, bo‘lish koeffitsienti 1 ga teng bo‘lsa, u holda bir soniya o‘tgan bo‘lar edi. U 1024 bo‘lgani uchun, u holda biz bir soniyada 16000000/1024=15625 ga ega bo‘lamiz. Hammasi ham yaxshi bo‘lardiyu, lekin biz har yarim soniyada qiymatlarga ega bo‘lishimiz kerak, 15625 esa 2 ga bo‘linmaydi. Demak, biz bunga qadar xato qilibmiz va kichikroq bo‘linish koeffitsientini olishga to‘g‘ri keladi. Kichrayib borish bo‘yicha navbatdagi son esa bizda 256, bu bir soniyada 62500 tik, yoki yarim soniyada 31250 tik beradi. Hisoblagichimiz16-bitli, shuning uchun 65536 gacha hisoblab etishi mumkin. Boshqacha aytganda, u bizga yarim soniyaga ham, bir soniyaga ham etadi. Datashitga kirib, keyin boshlang‘ichga kiramiz, hamda uni CS12:0=4 ga tuzatamiz, keyin esa OCR1A = 31249; (to‘g‘ri tushungan bo‘lsam, bir takt olib tashlashga, yoki yana allaqayoqqa ketadi, shu sababli olingan raqamdan yana birni olib tashlashga oid maslahatlar uchrab turadi). Download 38.82 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling