Mundarija:

Attiny85 bir vaqtning o'zida dasturlash yoki ko'p rangli ko'zli qovoq: 7 qadam
Attiny85 bir vaqtning o'zida dasturlash yoki ko'p rangli ko'zli qovoq: 7 qadam

Video: Attiny85 bir vaqtning o'zida dasturlash yoki ko'p rangli ko'zli qovoq: 7 qadam

Video: Attiny85 bir vaqtning o'zida dasturlash yoki ko'p rangli ko'zli qovoq: 7 qadam
Video: Bir dona bo'lay o'zim 2024, Noyabr
Anonim

Muallif tomonidan yozilgan:

Qichqiriq
Qichqiriq
Qichqiriq
Qichqiriq
NiCd batareyasini tashqi quvvat manbai bilan almashtirish
NiCd batareyasini tashqi quvvat manbai bilan almashtirish
NiCd batareyasini tashqi quvvat manbai bilan almashtirish
NiCd batareyasini tashqi quvvat manbai bilan almashtirish
Raqamli kamera tutqichi
Raqamli kamera tutqichi
Raqamli kamera tutqichi
Raqamli kamera tutqichi

Haqida: Men Bay Area (Kaliforniya) kompaniyalaridan birida dastur muhandisi bo'lib ishlayman. Vaqtim bo'lganda, men mikro -kontrollerlarni dasturlashni, mexanik o'yinchoqlar yasashni va uyni obodonlashtirish loyihalarini qilishni yaxshi ko'raman. Jumbleview haqida ko'proq ma'lumot »

Ushbu loyiha Attiny85 chipli ikkita 10 mmli uch rangli umumiy anodli LEDlarni (Qovoq Hallowen Glitterining ko'p rangli ko'zlari) qanday boshqarilishini ko'rsatadi. Loyihaning maqsadi - o'quvchini bir vaqtning o'zida dasturlash san'ati va Adam Dunkels prototekalari kutubxonasidan foydalanish. Ushbu loyiha o'quvchi AVR 8-bitli kontrollerlar haqida bilishini, C dasturini yozishni va Atmel studiyasi bilan tajribaga ega bo'lishini taxmin qiladi.

GitHub -da e'lon qilingan loyiha kodi:

Ta'minotlar

Dasturlashdan oldin siz hali ham sxemani tuzishingiz kerak. Mana komponentlar:

  • Attiny85 tekshiruvi (har qanday elektron etkazib beruvchi).
  • Umumiy anodli ikkita uchta rangli 10 mmli LED. Adafruit LEDlari
  • Rezistorlar 100 Ohm, 120 Ohm, 150 Ohm 0,125 yoki 0,250 Vt (har qanday elektron etkazib beruvchi).
  • AVR ISP interfeysi uchun olti pinli sarlavha. Bu Adafruit sarlavhasidan tayyorlanishi mumkin
  • Ba'zi non taxtasi yoki bosilgan shablon taxtasi. Men buni ishlatganman
  • AVR ISP MKII interfeysi va Atmel Studio 6.1 (keyingi versiya ham ishlashi kerak).

1 -qadam: aylanish

Sirk
Sirk

Dizaynda beshta chipli pin ishlatiladi:

  • Anodlarni boshqarish uchun ikkita pin ishlatiladi: har bir LED anod maxsus pinga biriktirilgan.
  • LEDlarning katodlariga uchta rezina (rezistorlar orqali) biriktirilgan (har bir svetodiodning bitta rangli katodi bir xil pinga ulangan)

Biri so'rashi mumkin: nima uchun chipning oltita kirish -chiqish pinini ishlatmasligingiz kerak, shuning uchun LED anodlari +5 v ga to'g'ridan -to'g'ri ulanadi va har bir katodda maxsus pin bo'ladi? Bu dasturlashni soddalashtiradi. Afsuski, muammo bor: pin PB5 (RESET) - bu ~ 2 mA tokni etkazib bera oladigan zaif pin, ~ 20 mA bo'lishi kerak.

Albatta, bu zaif pin uchun tranzistorli kuchaytirgichni qurish mumkin, lekin men imkoni boricha kod orqali muammoni hal qilishni afzal ko'raman.

2 -qadam: Vaqt diagrammasi

Vaqt diagrammasi
Vaqt diagrammasi

Vaqt sxemasi bizga nima dasturlash kerakligini tushunishimizga yordam beradi.

Diagrammadagi yuqori ikkita satrda LED anodlaridagi kuchlanish o'zgarishi ko'rsatilgan. LED anodlariga ulangan pinlardagi kuchlanish ~ 250 Gts chastotada tebranadi. Chap LED uchun bu kuchlanish tebranishi o'ng LEDning tebranishiga ziddir. Anoddagi kuchlanish yuqori bo'lsa, mos keladigan LED yorqin bo'lishi mumkin. Kam bo'lganda mos keladigan LED qorong'i bo'ladi. Bu shuni anglatadiki, har bir LED 2 millisekund oralig'ida yorqin bo'lishi mumkin va yana 2 millisekundda qorong'i bo'ladi. Odamning ko'zida bir oz inertlik bo'lgani uchun, kuzatuvchi 250 Gts chastotali miltillashni sezmaydi. Diagrammaning pastki uch qatorida LEDlarning katodlariga ulangan pinlardagi kuchlanish o'zgarishi ko'rsatilgan. Keling, birinchi diagramma ustunini ko'rib chiqaylik. Chap LED qizil rangda va o'ng LED yashil rangda bo'lgan holatni ko'rsatadi. Bu erda RED katodlar pastda, chap anod baland bo'lganda, Yashil katot pastda, o'ng anod balandda va KO'K katod doimo past bo'ladi. Diagrammadagi boshqa ustunlar turli xil ranglar uchun katod va anod kuchlanishining kombinatsiyasini ko'rsatadi.

Ko'rib turganimizdek, pin holatiga o'zaro bog'liqlik mavjud. Agar biron bir ramka bo'lmasa, uni hal qilish oson bo'lmaydi. Va bu erda prototipli kutubxona yordam beradi.

3 -qadam: dasturlash. Makrolar va ta'riflar

Dasturlash. Makrolar va ta'riflar
Dasturlash. Makrolar va ta'riflar

Dasturlash bosqichlariga misol biroz soddalashtirilgan versiyani ko'rsatadi. Dastur qisqartirildi va ba'zi ramziy ta'riflar aniq konstantalar bilan almashtirildi.

Keling, boshidan boshlaylik. Dasturga Atmel Studio bilan kelgan fayllar, shuningdek, kutubxona sarlavhasi prototipi kiradi. Keyin pinlar darajasini boshqarish uchun ikkita makro va pin signallariga mantiqiy nom berish uchun ba'zi ta'riflar mavjud. Hozircha hech qanday maxsus narsa yo'q.

4 -qadam: Dasturlash. Asosiy halqa

Dasturlash. Asosiy halqa
Dasturlash. Asosiy halqa

Keling, oxirigacha qaraylik, qaysi asosiy protsedura o'z ichiga oladi.

Boshlang'ichni ishga tushirgandan so'ng asosiy funktsiya abadiy pastadirda qoladi. Bu davrda u keyingi qadamlarni qo'yadi:

  • Chap diodli LED prototipini chaqiradi. U qisqichlarning kuchlanishini o'zgartiradi.
  • Ikki millisekundga kechiktiring. Pin kuchlanishida hech qanday o'zgarish yo'q.
  • To'g'ri LED uchun prototipni chaqiradi. U qisman pin kuchlanishini o'zgartiradi.
  • 2 ta MS kechikishini qiling. Pin kuchlanishida hech qanday o'zgarish yo'q.

5 -qadam: Dasturlash. Yordamchi funktsiyalar

Dasturlash. Yordamchi funktsiyalar
Dasturlash. Yordamchi funktsiyalar

Prototiplarni muhokama qilishni boshlashdan oldin, biz yordamchi funktsiyalarni ko'rib chiqishimiz kerak. Birinchidan, ma'lum bir rangni sozlash funktsiyalari mavjud. Ular sodda. Qo'llab -quvvatlanadigan ranglar soni (etti) va LED qorong'i (NoColor) ni sozlash uchun yana bir qancha funktsiyalar mavjud.

Va yana bitta funktsiya bor, u to'g'ridan -to'g'ri prototip yordamida chaqiriladi. Uning nomi DoAndCountdown ().

Texnik jihatdan bunday funktsiyani ishlatish majburiy emas, lekin men buni qulay deb topdim. Unda uchta dalil bor:

  • LED rangini sozlash uchun ko'rsatkich (masalan, RedColor yoki GreenColor yoki boshqalar).
  • Teskari hisoblagichning boshlang'ich qiymati: prototipning ma'lum bosqichida bu funktsiyani necha marta chaqirish kerakligi.
  • Hisoblagichni teskari yo'naltirish uchun ko'rsatgich. Rang o'zgarganda, teskari hisoblagich 0 ga teng deb taxmin qilinadi, shuning uchun dastlab iteratsiya kodi hisoblagichga boshlang'ich qiymatini beradi. Har bir takrorlashdan keyin hisoblagich kamayadi.

DoAndCountdown () funktsiyasi teskari hisoblagich qiymatini qaytaradi.

6 -qadam: Dasturlash. Prototeka tartiblari

Dasturlash. Prototeka tartiblari
Dasturlash. Prototeka tartiblari

Va bu erda ramka yadrosi: prototiplar tartibi. Oddiylik uchun misol faqat uchta qadam bilan cheklangan: rangni qizil, yashil va ko'k rangga o'zgartirish uchun.

Funktsiya ikkita dalil bilan chaqiriladi:

  • Prototip tuzilishiga ko'rsatgich. Ushbu tuzilma asosiy tsikl boshlanishidan oldin main tomonidan boshlangan.
  • Hisoblagichni teskari yo'naltirish uchun ko'rsatgich. Asosiy tsikl boshlanishidan oldin u asosiy tomonidan 0 ga o'rnatildi.

Chap LEDni faol qilish uchun funktsiya kuchlanishlarni o'rnatadi va keyin prototip segmentini ishga tushiradi. Bu segment PT_BEGIN va PT_END makrolari orasida. Bizda faqat PT_WAIT_UNTIL makrosini takrorlaydigan ba'zi kodlar mavjud. Bu makrolar quyidagilarni bajaradi:

  • DoAndCountdown funktsiyasini chaqirish. Bu LED katodlarining kuchlanishini ma'lum bir rang chiqarish uchun o'rnatadi.
  • Qaytgan natija 0 bilan taqqoslaganda. Agar shart "noto'g'ri" bo'lsa, prototip funktsiyasi darhol qaytadi va boshqaruvni asosiy tsiklga beradi.
  • Keyingi safar prototeka chaqirilganda, u yana PT_BEGIN kodini bajaradi, so'ngra oxirgi marta qaytgan PT_WAIT_UNTIL makrosiga o'tadi.
  • DoAndCountdown natijasi 0 ga qadar takrorlanadigan bunday harakatlar. Qaytish bo'lmasa, dastur prototipda qoladi va kodning keyingi qatorini bajaradi. Bizning holatda, bu keyingi PT_WAIT_UNTIL, lekin umuman aytganda, bu deyarli har qanday C kodi bo'lishi mumkin.
  • Ikkinchi PT_WAIT_UNTIL teskari hisoblagichni dastlabki bajarishda 0 bo'ladi, shuning uchun DoAndCountdown () protsedurasi uni boshlang'ich qiymatiga o'rnatadi. Ikkinchi makroslar teskari hisoblagich 0 ga yetguncha yana 250 marta bajariladi.
  • Struktura holati nazorat PT_END makrosiga etib borishi bilanoq tiklanadi. Keyingi safar prototipli segment chaqirilganda, protokolli segment PT_BEGINdan keyin kod satrini ishga tushiradi.

To'g'ri LED uchun shunga o'xshash prototipli protsedura mavjud. Bizning misolimizda u ranglarning turli tartibini bajaradi, lekin agar biz buni boshqacha qilsak: chap va o'ng LED rejimlari o'rtasida qattiq bog'lanish yo'q.

7 -qadam: ichki qism

Ichki
Ichki

Butun dastur 200 satrdan kam (izohlar va bo'sh satrlar bilan) va Attiny85 kod xotirasining 20% dan kamini oladi. Agar kerak bo'lsa, bu erda yana bir nechta prototipli protseduralardan foydalanish va ularga ancha murakkab mantiq tayinlash mumkin.

Protothreads kutubxonasi - bu kompyuter bilan bir vaqtda dasturlashning eng oddiy shakli. Bir vaqtning o'zida dasturlash - bu dasturni mantiqiy qismlarga bo'lishga imkon beradigan yondashuv: ba'zan ularni korutinlar, ba'zan iplar, ba'zan vazifalar deb atashadi. Printsip shundaki, har bir bunday vazifa bir xil protsessor quvvatiga ega bo'lishi mumkin, shu bilan birga kod ko'p yoki kamroq chiziqli bo'lib, boshqa qismlarga bog'liq emas. Mantiqiy nuqtai nazardan vazifalar bir vaqtning o'zida bajarilishi mumkin.

Murakkab tizimlar uchun bunday vazifalarni operatsion tizim yadrosi yoki kompilyator tomonidan bajariladigan tilning ish vaqti boshqaradi. Ammo prototiplar bo'lsa, dasturchi uni protokolli makroslar kutubxonasi yordamida vazifalar tartibida va bunday tartiblarni chaqirish orqali qo'lda boshqaradi (odatda asosiy tsikldan tashqari).

Ehtimol, prototip aslida qanday ishlashini bilmoqchimisiz? Sehr qaerda yashiringan? Prototiplar C tilining maxsus xususiyatiga tayanadi: C switch holatining bayoni if yoki boshqa bloklarga joylashtirilishi mumkin (masalan, vaqt yoki uchun). Tafsilotlarni Adam Dunkels saytida topishingiz mumkin

Ushbu loyihaning elektronika ichki qismi juda oddiy. Yuqoridagi fotosurat sizga ba'zi maslahatlarni beradi. Ishonchim komilki, siz yaxshiroq qila olasiz.

Tavsiya: