Агуулгын хүснэгт:

Attiny85 зэрэг програмчлах эсвэл олон өнгийн нүдтэй хулуу: 7 алхам
Attiny85 зэрэг програмчлах эсвэл олон өнгийн нүдтэй хулуу: 7 алхам

Видео: Attiny85 зэрэг програмчлах эсвэл олон өнгийн нүдтэй хулуу: 7 алхам

Видео: Attiny85 зэрэг програмчлах эсвэл олон өнгийн нүдтэй хулуу: 7 алхам
Видео: M#1: Настройка ПЛК Outseal Mega с отладочной платой ATmega128 | Аутсил Дев. ПЛК Мега 2024, Арваннэгдүгээр
Anonim

Зохиогчийн бусад зүйлийг дагах:

Хашгираан
Хашгираан
Хашгираан
Хашгираан
NiCd батерейг гадаад тэжээлээр солих
NiCd батерейг гадаад тэжээлээр солих
NiCd батерейг гадаад тэжээлээр солих
NiCd батерейг гадаад тэжээлээр солих
Дижитал камерын бариул
Дижитал камерын бариул
Дижитал камерын бариул
Дижитал камерын бариул

Тухайн талаар: Би Bay Area (Калифорниа) компаниудын нэгэнд програм хангамжийн инженерээр ажилладаг. Зав гарах бүрт би микро хянагч програмчлах, механик тоглоом бүтээх, байшингаа сайжруулах төсөл хийх дуртай. Jumbleview -ийн тухай дэлгэрэнгүй »

Энэхүү төсөл нь Attiny85 чип ашиглан 10мм хэмжээтэй гурван өнгийн нийтлэг анодын хоёр LED (Хулууны Halloween-ийн гялалзсан нүдний олон өнгийн нүд) -ийг хэрхэн удирдахыг харуулсан болно. Төслийн зорилго нь уншигчдыг нэгэн зэрэг програмчлах урлаг, Адам Дюнкелсийн прототек номын сангийн хэрэглээнд нэвтрүүлэх явдал юм. Энэхүү төсөл нь уншигч AVR 8 битийн хянагчийн талаар мэддэг, C програм бичиж, Atmel студид ажиллаж байсан туршлагатай гэж үздэг.

GitHub дээр нийтлэгдсэн төслийн код:

Хангамж

Програмчлахаас өмнө хэлхээг бий болгох шаардлагатай хэвээр байна. Энд бүрэлдэхүүн хэсгүүд байна:

  • Attiny85 хянагч (ямар ч электрон нийлүүлэгч).
  • Нийтлэг анод бүхий гурван өнгийн 10 мм хэмжээтэй хоёр LED. Adafruit LED
  • 100 Ом, 120 Ом, 150 Ом 0.125 эсвэл 0.250 Вт эсэргүүцэл (ямар ч электрон нийлүүлэгч).
  • AVR ISP интерфэйсийн зургаан зүү толгой. Энэ Adafruit толгойноос хийж болно
  • Зарим талхны самбар эсвэл хэвлэмэл загварын самбар. Би үүнийг ашигласан
  • AVR ISP MKII интерфэйс ба Atmel Studio 6.1 (Дараагийн хувилбар нь бас ажиллах ёстой).

Алхам 1: Цахилгаан эргэлт

Цирк
Цирк

Дизайн нь таван чип тээглүүр ашигладаг:

  • Анодыг хянахад ашигладаг хоёр зүү: тусгай зориулалтын зүү дээр бэхлэгдсэн LED анод тус бүр.
  • LED катодод гурван тээглүүр (резистороор) залгагдсан (нэг зүү дээр холбосон LED бүрийн ижил өнгийн катод)

Нэг нь асуух болно: яагаад чипийн зургаан оролтыг бүхэлд нь ашиглахгүй байгаа юм бол LED анодыг +5 в -т шууд холбож, катод тус бүр зориулалтын зүүтэй болно гэж? Энэ нь програмчлалыг шууд хийх болно. Харамсалтай нь нэг асуудал байна: зүү PB5 (RESET) нь ~ 2 мА гүйдлийг хангах чадвартай сул зүү бөгөөд ~ 20 мА байх шаардлагатай.

Мэдээжийн хэрэг, энэ сул зүүнд зориулж транзистор өсгөгч барьж болно, гэхдээ би өөрөө кодын тусламжтайгаар асуудлыг шийдэхийг илүүд үздэг.

Алхам 2: Хугацааны диаграм

Хугацааны диаграм
Хугацааны диаграм

Хугацааны диаграм нь бидэнд програмчлахад юу хэрэгтэй байгааг ойлгоход тусалдаг.

Диаграм дээрх эхний хоёр эгнээ нь LED анод дээрх хүчдэлийн өөрчлөлтийг харуулж байна. LED анодтой холбогдсон зүү дээрх хүчдэл ~ 250 Гц давтамжтай хэлбэлздэг. Зүүн LED -ийн хүчдэлийн хэлбэлзэл нь баруун LED -ийн хэлбэлзлийн эсрэг юм. Анод дээрх хүчдэл өндөр байвал харгалзах LED гэрэл асах боломжтой. Бага байхад харгалзах LED нь харанхуй болно. Энэ нь LED тус бүр 2 миллисекундын интервалаар гэрэлтэж, 2 миллисекундын турш харанхуй болно гэсэн үг юм. Хүний нүд бага зэрэг инерцтэй байдаг тул ажиглагчид 250 Гц -ийн анивчдагийг анзаардаггүй бөгөөд диаграм дээрх гурван эгнээний доод хэсэгт LED катодтой холбогдсон зүү дээрх хүчдэлийн өөрчлөлтийг харуулав. Эхний диаграмын баганыг харцгаая. Энэ нь зүүн талын LED нь улаан өнгөтэй, баруун талынх нь ногоон өнгөтэй байгааг харуулдаг. Энд RED катодууд бага, зүүн анод өндөр байхад НОГООН катод бага, баруун анод өндөр, Цэнхэр катод үргэлж нам хэвээр байна. Диаграм дээрх бусад багана нь янз бүрийн өнгөт катод ба анодын хүчдэлийн хослолыг харуулдаг.

Бидний харж байгаагаар тээглүүрийн төлөв байдлаас харилцан хамааралтай байдаг. Зарим хүрээ байхгүй бол үүнийг шийдвэрлэхэд амаргүй байх болно. Энд прототектор номын сан хэрэгтэй болно.

Алхам 3: Програмчлал. Макро ба тодорхойлолт

Програмчлал. Макро ба тодорхойлолт
Програмчлал. Макро ба тодорхойлолт

Програмчлалын алхамуудын жишээ нь арай хялбаршуулсан хувилбар юм. Хөтөлбөрийг богиносгож, зарим бэлгэдлийн тодорхойлолтыг тодорхой тогтмолуудаар сольсон.

Эхнээс нь эхэлье. Хөтөлбөрт Atmel Studio -той хамт ирдэг файлууд болон номын сангийн толгойн протоколыг багтаасан болно. Дараа нь тээглүүрийн түвшинг удирдах хоёр макро, дохиог залгаад логик нэр өгөх зарим тодорхойлолт байдаг. Одоогоор онцгой зүйл алга.

Алхам 4: Програмчлал. Үндсэн гогцоо

Програмчлал. Үндсэн гогцоо
Програмчлал. Үндсэн гогцоо

Дараа нь үндсэн процедур нь юу агуулж байгааг харахын тулд эцэст нь үзье.

Зарим эхлүүлэлтийг хийсний дараа үндсэн функц үүрд үргэлжлэх болно. Энэ гогцоонд дараах алхмуудыг хийнэ.

  • Зүүн талын LED -ийн протоколыг ажиллуулах горимыг дууддаг. Энэ нь зарим тээглүүрийн хүчдэлийг өөрчилдөг.
  • Хоёр миллисекундын хоцролт хийх. Зүүний хүчдэлд өөрчлөлт ороогүй болно.
  • Зөв LED -ийн протоколыг дууддаг. Энэ нь зарим зүүний хүчдэлийг өөрчилдөг.
  • 2 MS хойшлуулах. Зүүний хүчдэлд өөрчлөлт ороогүй болно.

Алхам 5: Програмчлал. Туслах функцууд

Програмчлал. Туслах функцууд
Програмчлал. Туслах функцууд

Прототекторуудын талаар ярилцаж эхлэхээсээ өмнө зарим туслах функцийг авч үзэх хэрэгтэй. Эхлээд тодорхой өнгө тохируулах функцууд байдаг. Тэд шулуухан хэлдэг. Дэмжигдсэн өнгөний тоо (долоон), LED харанхуй (NoColor) тохируулах өөр нэг функц гэх мэт олон функц байдаг.

Мөн прототекторын горимоор шууд дуудагдах өөр нэг функц байдаг. Түүний нэр нь DoAndCountdown () юм.

Техникийн үүднээс авч үзвэл ийм функцийг ашиглах нь заавал байх албагүй боловч надад тохиромжтой санагдсан. Энэ нь гурван аргументтай:

  • LED өнгийг тохируулах чиглүүлэгч (RedColor эсвэл GreenColor гэх мэт)
  • Урвуу тоолуурын анхны утга: прототекторын тодорхой үе шатанд энэ функцийг хэдэн удаа дуудах ёстой тоо.
  • Урвуу тоолуурын заагч. Өнгөний өөрчлөлт гарсан тохиолдолд урвуу тоолуур нь 0 байх тул эхний давталтын код нь тоолуурын анхны утгыг өгнө. Давталт бүрийн тоолуур буурдаг.

DoAndCountdown () функц нь урвуу тоолуурын утгыг буцаана.

Алхам 6: Програмчлал. Protothread горимууд

Програмчлал. Protothread горимууд
Програмчлал. Protothread горимууд

Энд хүрээний цөм байна: протоколын урсгал. Энгийн байхын тулд жишээг зөвхөн улаан, ногоон, цэнхэр болгож өөрчлөх гэсэн гурван алхамаар хязгаарласан болно.

Функцийг хоёр аргументаар дууддаг:

  • Прототекторын бүтцийн заагч. Энэ бүтцийг үндсэн давталт эхлэхээс өмнө main -ээр эхлүүлсэн.
  • Урвуу тоолуурын заагч. Үндсэн давталт эхлэхээс өмнө үүнийг үндсэн утгаар нь 0 болгосон.

Функц нь зүүн LED -ийг идэвхжүүлэхийн тулд хүчдэлийг тогтоож, дараа нь протоколын хэсгийг эхлүүлнэ. Энэ сегмент нь PT_BEGIN ба PT_END макро хооронд байна. Дотор нь бидний тохиолдолд зөвхөн PT_WAIT_UNTIL макруудыг давтдаг код байдаг. Энэ макро нь дараахь зүйлийг гүйцэтгэдэг.

  • DoAndCountdown функцийг дуудах. Энэ нь LED катод дээрх хүчдэлийг тодорхой өнгө ялгаруулдаг.
  • 0 -тэй харьцуулахад үр дүнг буцаана. Хэрэв нөхцөл нь "худал" бол протоколын функц нэн даруй буцаж, хяналтыг үндсэн давталтад өгнө.
  • Дараагийн удаа протоколыг дуудах үед энэ нь PT_BEGIN -ээс өмнө кодыг дахин ажиллуулж, сүүлчийн удаа буцаж ирсэн PT_WAIT_UNTIL макрост шууд ордог.
  • DoAndCountdown -ийн үр дүн 0 болох хүртэл ийм үйлдэл давтагдана. Энэ тохиолдолд буцаалт байхгүй тохиолдолд програм протоколд хадгалагдаж кодын дараагийн мөрийг ажиллуулдаг. Манай тохиолдолд энэ нь дараагийн PT_WAIT_UNTIL боловч ерөнхийдөө энэ нь бараг ямар ч C код байж болно.
  • Хоёрдахь PT_WAIT_UNTIL урвуу тоолуурыг анх гүйцэтгэх үед 0 байх тул DoAndCountdown () процедур нь үүнийг анхны утга болгон тохируулна. Урвуу тоолуур 0 болох хүртэл хоёр дахь макро дахин 250 удаа хийгдэх болно.
  • PT_END макрост хяналт тавигдахад бүтэц pt төлөв дахин тохируулагдана. Дараагийн удаа прототекторын функц дуудагдах үед кодын мөрийг PT_BEGIN -ийн дараа шууд ажиллуулна.

Зөв LED -ийн хувьд ижил төстэй прототекторууд байдаг. Бидний жишээн дээр энэ нь өнгөний өөр өөр дарааллыг мөрддөг, гэхдээ хэрэв бид үүнийг огт өөрөөр хийх юм бол зүүн ба баруун LED горимын хооронд хатуу холболт байдаггүй.

Алхам 7: Дотоод засал

Дотоод
Дотоод

Бүх програм нь 200 мөр кодоос бага (тайлбар, хоосон мөртэй) бөгөөд Attiny85 кодын санах ойн 20% -иас бага хувийг эзэлдэг. Шаардлагатай бол энд прототекторын хэд хэдэн горимыг ашиглаж, тэдэнд илүү төвөгтэй логикийг зааж өгөх боломжтой болно.

Protothreads номын сан нь компьютерын нэгэн зэрэг програмчлалын хамгийн энгийн хэлбэр юм. Зэрэгцээ програмчлал нь програмыг логик хэсгүүдэд хуваах боломжийг олгодог арга юм: заримдаа тэдгээрийг корутин, заримдаа урсгал, заримдаа даалгавар гэж нэрлэдэг. Зарчим бол ийм даалгавар бүр ижил процессорын хүчийг хуваалцах бөгөөд кодыг их бага хэмжээгээр шугаман, бусад хэсгээс хамааралгүй хадгалах явдал юм. Логик үүднээс даалгавруудыг нэгэн зэрэг гүйцэтгэж болно.

Дэвшилтэт системийн хувьд ийм даалгаврыг үйлдлийн системийн цөм эсвэл хөрвүүлэгчийн гүйцэтгэх боломжтой хэлний ажиллах хугацаанд гүйцэтгэдэг. Гэхдээ протоколыг ашиглах тохиолдолд програмист нь протоколыг макро номын санг ашиглан даалгаврыг гүйцэтгэх, ийм горимыг дуудах замаар удирддаг.

Прототектор хэрхэн ажилладаг талаар та мэдэхийг хүсч магадгүй юм. Ид шид хаана нуугдсан бэ? Protothreads нь C хэлний тусгай онцлогт тулгуурладаг: C switch case -ийн мэдэгдлийг хэрэв эсвэл өөр блок (жишээ нь while эсвэл for гэх мэт) -д суулгаж болно. Дэлгэрэнгүй мэдээллийг Адам Дюнкелсийн https://dunkels.com/adam/pt/expansion.html сайтаас авах боломжтой.

Энэхүү төслийн электроникийн дотоод засал нь маш энгийн. Дээрх зураг танд ямар нэгэн ойлголт өгөх болно. Та илүү сайн хийж чадна гэдэгт итгэлтэй байна.

Зөвлөмж болгож буй: