Talaan ng mga Nilalaman:

Attiny85 Kasabay na Programming o Kalabasa Na May Multi-Colored na Mga Mata: 7 Hakbang
Attiny85 Kasabay na Programming o Kalabasa Na May Multi-Colored na Mga Mata: 7 Hakbang

Video: Attiny85 Kasabay na Programming o Kalabasa Na May Multi-Colored na Mga Mata: 7 Hakbang

Video: Attiny85 Kasabay na Programming o Kalabasa Na May Multi-Colored na Mga Mata: 7 Hakbang
Video: WALA KA NA/ MICHAEL DUTCHI LIBRANDA/ OFFICIAL MUSIC VIDEO 2024, Nobyembre
Anonim

Sa pamamagitan ng jumbleviewJumbleview.infoFollow Higit pa ng may-akda:

Ang Sigaw
Ang Sigaw
Ang Sigaw
Ang Sigaw
Kapalit ng NiCd Baterya Na May Panlabas na Suplay ng Lakas
Kapalit ng NiCd Baterya Na May Panlabas na Suplay ng Lakas
Kapalit ng NiCd Baterya Na May Panlabas na Suplay ng Lakas
Kapalit ng NiCd Baterya Na May Panlabas na Suplay ng Lakas
Hawak ng Digital Camera
Hawak ng Digital Camera
Hawak ng Digital Camera
Hawak ng Digital Camera

Tungkol sa: Nagtatrabaho ako bilang software engineer sa isa sa mga kumpanya ng Bay Area (California). Tuwing mayroon akong oras na gusto kong mag-program ng mga micro controler, bumuo ng mga laruang pang-mekanikal, at gumawa ng ilang mga proyekto sa pagpapabuti ng bahay. Karagdagang Tungkol sa jumbleview »

Ipinapakita ng proyektong ito kung paano makontrol ang dalawang 10mm three-color karaniwang anode LEDs (maraming kulay na mga mata ng Pumpkin Halloween Glitter) na may Attiny85 chip. Layunin ng proyekto na ipakilala ang mambabasa sa sining ng kasabay na programa at sa paggamit ng Adam Dunkels protothreads library. Ipinapalagay ng proyektong ito na alam ng mambabasa ang tungkol sa AVR 8-bit Controller, maaaring sumulat ng ilang C-program at may karanasan sa Atmel studio.

Nai-publish ang code ng proyekto sa GitHub:

Mga gamit

Bago ang programa kailangan mo pa ring itayo ang circuit. Narito ang mga bahagi:

  • Attiny85 controller (anumang elektronikong tagapagtustos).
  • Dalawang tatlong kulay na 10mm LEDs na may karaniwang anode. Mga LED ng Adafruit
  • Mga resistorista 100 Ohm, 120 Ohm, 150 Ohm 0.125 o 0.250 Wt (anumang elektronikong tagapagtustos).
  • Anim na Pin header para sa AVR ISP interface. Maaaring gawin mula sa header ng Adafruit na ito
  • Ang ilang mga board ng tinapay o naka-print na template board. Ginamit ko ang isang ito
  • Ang interface ng AVR ISP MKII at Atmel Studio 6.1 (Ang susunod na bersyon ay dapat ding gumana).

Hakbang 1: Circut

Circut
Circut

Gumagamit ang disenyo ng limang mga pin ng chip:

  • Dalawang mga pin na ginamit upang makontrol ang mga anode: bawat LED anode na nakakabit sa nakatuong pin.
  • Tatlong mga pin na nakakabit (sa pamamagitan ng resistors) sa mga LEDs cathode (ang parehong kulay na katod ng bawat humantong na nakakabit sa parehong pin)

Magtatanong ang isa: bakit hindi gamitin ang lahat ng anim na in / out na pin ng maliit na tilad upang ang mga LED anode ay konektado nang direkta sa +5 v at ang bawat katod ay magkakaroon ng nakatuong pin? Gagawin nito ang prangka na programa. Naku, may problema: ang pin PB5 (RESET) ay isang mahinang pin na may kakayahang magbigay ng ~ 2 mA lamang ng kasalukuyang, habang kailangang magkaroon ng ~ 20 mA.

Siyempre ang isa ay maaaring bumuo ng transistor amplifier para sa mahina na pin ngunit ako mismo hangga't maaari ay ginusto na malutas ang problema sa labangan ng code.

Hakbang 2: Diagram ng Oras

Timing Diagram
Timing Diagram

Ang diagram ng tiyempo ay tumutulong sa amin na maunawaan kung ano ang kailangan naming mag-program.

Ang nangungunang dalawang mga hilera sa diagram ay nagpapakita ng pagbabago ng boltahe sa mga LED anode. Boltahe sa mga pin na konektado sa LED anodes oscillates na may dalas ~ 250 Hz. Ang boltahe na pag-oscillation para sa kaliwang LED ay isang kabaligtaran sa pag-oscillation ng kanang LED. Kapag ang boltahe sa anode ay mataas na kaukulang LED ay maaaring maging maliwanag. Kapag mababa ang kaukulang LED ay madilim. Nangangahulugan iyon na ang bawat LED ay maaaring maliwanag sa pagitan ng 2 milliseconds interval at madilim sa isa pang 2 milliseconds. Dahil ang mata ng tao ay may ilang pagkawalang-kilos, ang 250 Hz na kumikislap ay hindi kapansin-pansin ng nagmamasid. Sa ilalim ng tatlong mga hilera sa diagram ay nagpapakita ng pagbabago ng boltahe sa mga pin na konektado sa mga LED cathode. Tingnan natin ang unang haligi ng diagram. Ipinapakita nito ang kaso kapag ang kaliwang LED ay may pulang kulay at kanang LED sa berdeng kulay. Narito ang RED cathode ay mananatiling mababa habang ang kaliwang anode ay mataas, ang GREEN cathode ay mananatiling mababa habang ang kanang anode ay mataas, at ang BLUE cathode ay mananatiling mababa sa lahat ng oras. Ang iba pang mga haligi sa diagram ay nagpapakita ng mga kumbinasyon ng cathode at boltahe ng anode para sa iba't ibang mga kulay.

Tulad ng nakikita natin mayroong pagkakaugnay sa estado ng mga pin. Kung walang ilang balangkas hindi ito madaling malutas. At doon magaling ang protothread library.

Hakbang 3: Programing. Macros at Mga Kahulugan

Programing. Macros at Mga Kahulugan
Programing. Macros at Mga Kahulugan

Ang halimbawa sa mga hakbang sa pagprograma ay kumakatawan sa bahagyang pinasimple na bersyon. Ang programa ay pinaikling, at ang ilang mga simbolikong kahulugan ay pinalitan ng mga mahigpit na pare-pareho.

Magsimula tayo mula sa simula. Kasama sa programa ang mga file na kasama ng Atmel Studio pati na rin ang protothread header ng library. Susunod mayroong dalawang macros upang manipulahin ang mga antas ng mga pin at ilang mga kahulugan upang magbigay ng mga lohikal na pangalan sa mga signal ng pin. Sa ngayon walang espesyal.

Hakbang 4: Programing. Pangunahing Loop

Programing. Pangunahing Loop
Programing. Pangunahing Loop

Pagkatapos tingnan natin ang dulo upang makita kung ano ang naglalaman ng pangunahing pamamaraan.

Pangunahing pagpapaandar matapos ang paggawa ng ilang pagpapasimula ay mananatili sa walang hanggang loop. Sa loop na iyon gumagawa ng mga susunod na hakbang:

  • Inaanyayahan ang regular na protothread para sa kaliwang LED. Binabago nito ang ilang boltahe ng mga pin.
  • Gumawa ng pagkaantala ng dalawang milliseconds. Walang pagbabago sa boltahe ng pin.
  • Inaanyayahan ang protothread para sa tamang LED. Binabago nito ang ilang boltahe ng pin.
  • Gumawa ng pagkaantala ng 2 MS. Walang pagbabago sa boltahe ng pin.

Hakbang 5: Programming. Mga Pantulong na Pag-andar

Programming. Mga Katulong na Pag-andar
Programming. Mga Katulong na Pag-andar

Bago namin simulang talakayin ang mga protothread kailangan nating tingnan ang ilang mga pagpapaandar ng helper. Una may mga pagpapaandar upang magtakda ng partikular na kulay. Prangka sila. Mayroong maraming mga tulad ng mga pag-andar bilang bilang ng mga sinusuportahang kulay (pitong) at isa pang pag-andar upang itakda ang LED dark (NoColor).

At may isa pang pag-andar na direktang tatawagin ng protothread na gawain. Ang pangalan nito ay DoAndCountdown ().

Ang teknikal na pagsasalita ng paggamit ng gayong pagpapaandar ay hindi sapilitan ngunit nahanap ko itong maginhawa. Mayroon itong tatlong mga argumento:

  • Ituro sa pagpapaandar ang setting ng kulay ng LED (tulad ng RedColor o GreenColor o iba pa.)
  • Paunang halaga ng reverse counter: bilang ng kung gaano karaming beses ang pagpapaandar na ito ay dapat na tawagan sa partikular na yugto ng protothread.
  • Pointer upang i-reverse counter. Ipinapalagay na kapag may pagbabago sa kulay na reverse counter ay 0, kaya sa una ang iteration code ay magtatalaga sa counter na paunang halaga. Pagkatapos ng bawat iteration counter ay nabawasan.

Ang function na DoAndCountdown () ay nagbabalik ng halaga ng reverse counter.

Hakbang 6: Programing. Mga Karanasan sa Protothread

Programing. Mga Karanasan sa Protothread
Programing. Mga Karanasan sa Protothread

At narito ang pangunahing istraktura: regular na protothread. Para sa kapakanan ng halimbawang halimbawa limitado lamang sa tatlong mga hakbang: para sa pagbabago ng kulay sa Pula, sa GREEN, at sa BLUE.

Ang pagpapaandar ay tinawag sa dalawang mga argumento:

  • Ituro ang istrakturang protothread. Ang istrakturang iyon ay isinimula ng pangunahing bago magsimula ang pangunahing loop.
  • Pointer upang i-reverse counter. Itinakda ito sa 0 ng pangunahing bago magsimula ang pangunahing loop.

Ang pagpapaandar ng mga voltages upang gawing aktibo ang kaliwang LED at pagkatapos ay magsisimula sa protothread na segment. Ang segment na ito ay nasa pagitan ng macros PT_BEGIN at PT_END. Sa loob mayroong ilang mga code na sa aming kaso ay inuulit lamang ang macros PT_WAIT_UNTIL. Susunod na gumaganap ang macros na ito:

  • Imbitasyon ng pagpapaandar na DoAndCountdown. Nagtatakda iyon ng boltahe sa mga LED cathode upang maglabas ng partikular na kulay.
  • Ang ibinalik na resulta kumpara sa 0. Kung ang kundisyon ay 'maling' protothread function na agad na bumalik at magbubunga ng kontrol sa pangunahing loop.
  • Kapag naimbitahan ang protothread sa susunod na muli itong magpapatupad ng code bago ang PT_BEGIN, pagkatapos ay direktang tumalon sa loob ng PT_WAIT_UNTIL macros kung saan ito bumalik sa huling pagkakataon.
  • Ang mga nasabing pagkilos ay paulit-ulit hanggang sa resulta ng DoAndCountdown ay 0. Sa kasong iyon ay walang pagbabalik, mananatili ang programa sa protothread at nagpapatupad ng susunod na linya ng code. Sa aming kaso ito ay susunod na PT_WAIT_UNTIL ngunit sa pangkalahatan ay nagsasalita ito ay maaaring maging halos anumang C code.
  • Sa paunang pagpapatupad ng pangalawang PT_WAIT_UNTIL reverse counter ay 0, kaya't ang pamamaraan na DoAndCountdown () itakda ito sa paunang halaga. Ang pangalawang macros muli ay papatayin nang 250 beses hanggang sa umabot sa 0 ang counter counter.
  • Ang estado ng struct pt ay nai-reset kaagad sa oras na maabot ng kontrol ang PT_END macros. Kapag ang function ng protothread ay naimbitahan sa susunod na seguro ng protothread ay nagsisimulang magpatupad ng linya ng code pagkatapos ng PT_BEGIN.

Mayroong katulad na protothread na gawain para sa tamang LED. Sa aming halimbawa nagpapatupad lamang ito ng iba't ibang pagkakasunud-sunod ng mga kulay, ngunit kung maaari nating gawin itong ganap na naiiba: walang mahigpit na pagkabit sa pagitan ng kaliwa at kanang gawain ng LED.

Hakbang 7: Mga Panloob

Panloob
Panloob

Ang buong programa ay mas mababa pagkatapos ng 200 mga linya ng code (na may mga komento at walang laman na mga linya) at tumatagal ng mas mababa sa 20% ng Attiny85 code ng memorya. Kung kinakailangan posible na magamit dito ang maraming higit pang mga gawain sa protothread at magtalaga ng mas kumplikadong lohika sa kanila.

Ang library ng Protothreads ay ang pinakasimpleng anyo ng kasabay na programa ng computer. Ang kasabay na pagprogram ay isang diskarte na pinapayagan na hatiin ang programa sa mga lohikal na bahagi: kung minsan ay tinatawag silang mga coroutine, kung minsan ay sinulid, kung minsan ay mga gawain. Ang prinsipyo ay ang bawat ganoong gawain ay maaaring ibahagi ang parehong kapangyarihan ng processor habang pinapanatili ang code nang higit pa o mas mababa sa linear at independiyente sa iba pang mga bahagi. Ang mga gawain mula sa lohikal na pananaw ay maaaring maisagawa nang sabay-sabay.

Para sa mga advanced na kontrol ng system ng mga naturang gawain na isinagawa alinman sa operating system kernel o sa pamamagitan ng runtime ng wika na naka-embed sa maipapatupad ng compiler. Ngunit sa kaso ng protothreads application programmer ay kinokontrol ito nang manu-mano sa pamamagitan ng paggamit ng protothreads macros library sa mga gawain sa gawain at pag-uusap tulad ng mga gawain (karaniwang wala sa pangunahing loop).

Marahil ay nais mong malaman kung paano talagang gumagana ang protothread? Saan itinago ang mahika? Ang mga protothread ay umaasa sa espesyal na tampok na wika ng C: ang katotohanan na ang pahayag ng kaso ng switch ng C ay maaaring naka-embed sa kung o ilang iba pang mga bloke (tulad ng habang o para sa). Mga detalye na maaari mong makita sa site ng Adam Dunkels

Ang mga electronics internals ng proyektong ito ay napaka-simple. Ang larawan sa itaas ay nagbibigay sa iyo ng ilang bakas. Sigurado akong makakabuti ka.

Inirerekumendang: