Orodha ya maudhui:

Programu ya Attiny85 Sambamba au Malenge yenye Macho ya Rangi nyingi: Hatua 7
Programu ya Attiny85 Sambamba au Malenge yenye Macho ya Rangi nyingi: Hatua 7

Video: Programu ya Attiny85 Sambamba au Malenge yenye Macho ya Rangi nyingi: Hatua 7

Video: Programu ya Attiny85 Sambamba au Malenge yenye Macho ya Rangi nyingi: Hatua 7
Video: Atmel-AVR-Programmierung - Ansteuerung eines Modellbau-Servos 2024, Novemba
Anonim

Fuata Zaidi na mwandishi:

Kelele
Kelele
Kelele
Kelele
Uingizwaji wa Betri ya NiCd na Ugavi wa Umeme wa Nje
Uingizwaji wa Betri ya NiCd na Ugavi wa Umeme wa Nje
Uingizwaji wa Betri ya NiCd na Ugavi wa Umeme wa Nje
Uingizwaji wa Betri ya NiCd na Ugavi wa Umeme wa Nje
Ushughulikiaji wa Kamera ya dijiti
Ushughulikiaji wa Kamera ya dijiti
Ushughulikiaji wa Kamera ya dijiti
Ushughulikiaji wa Kamera ya dijiti

Kuhusu: Ninafanya kazi kama mhandisi wa programu katika moja ya kampuni za Bay Area (California). Wakati wowote ninapokuwa na wakati napenda kupanga vidhibiti vidogo, kujenga vitu vya kuchezea vya mitambo, na kufanya miradi ya kuboresha nyumba. Zaidi Kuhusu jumbleview »

Mradi huu unaonyesha jinsi ya kudhibiti mbili za kawaida za anode za 10mm-rangi tatu (macho yenye rangi nyingi ya Glitter ya Malenge ya Halloween) na chip ya Attiny85. Lengo la mradi ni kuanzisha msomaji katika sanaa ya programu ya wakati mmoja na matumizi ya maktaba ya Adam Dunkels protothreads. Mradi huu unafikiria kuwa msomaji anajua juu ya watawala wa AV-8-bit, anaweza kuandika programu-C na ana uzoefu na studio ya Atmel.

Nambari ya mradi iliyochapishwa kwenye GitHub:

Vifaa

Kabla ya programu moja bado inahitaji kujenga mzunguko. Hapa kuna vifaa:

  • Mdhibiti wa Attiny85 (muuzaji yeyote wa elektroniki).
  • Rangi mbili za rangi ya 10mm za LED zilizo na anode ya kawaida. LED za Adafruit
  • Resistors 100 Ohm, 120 Ohm, 150 Ohm 0.125 au 0.250 Wt (muuzaji yeyote wa elektroniki).
  • Kichwa cha pini sita cha kiunga cha AVR ISP. Inaweza kutengenezwa kutoka kwa kichwa hiki cha Adafruit
  • Bodi ya mkate au bodi ya templeti iliyochapishwa. Nilitumia hii
  • Kiunga cha AVR ISP MKII na Atmel Studio 6.1 (Toleo la baadaye linapaswa kufanya kazi pia).

Hatua ya 1: Mzunguko

Mzunguko
Mzunguko

Ubunifu hutumia pini tano za chip:

  • Pini mbili zinazotumiwa kudhibiti anode: kila anode ya LED iliyowekwa kwenye pini iliyowekwa wakfu.
  • Pini tatu zilizounganishwa (kupitia vipinga) kwa cathode za LEDs (rangi sawa ya cathode ya kila iliyoongozwa iliyowekwa kwenye pini moja)

Mtu angeuliza: kwa nini usitumie pini zote sita za ndani / nje za chip ili anode za LED zitaunganishwa moja kwa moja na +5 v na kila cathode itakuwa na pini yake ya kujitolea? Hiyo itafanya programu iwe sawa. Ole, kuna shida: pin PB5 (RESET) ni pini dhaifu inayoweza kutoa ~ 2 mA tu ya sasa, wakati kuna haja ya kuwa na ~ 20 mA.

Kwa kweli mtu anaweza kujenga kipaza sauti cha transistor kwa pini hii dhaifu lakini mimi mwenyewe kila inapowezekana ninapendelea kutatua nambari ya shida.

Hatua ya 2: Mchoro wa Wakati

Mchoro wa Muda
Mchoro wa Muda

Mchoro wa muda unatusaidia kuelewa ni nini tunahitaji kupanga.

Safu mbili za juu kwenye mchoro zinaonyesha mabadiliko ya voltage kwenye anode za LED. Voltage kwenye pini zilizounganishwa na anode za LED hutoka na masafa ~ 250 Hz. Ukomo wa voltage hii kwa mwangaza wa kushoto ni kinyume na utaftaji wa LED ya kulia. Wakati voltage kwenye anode iko sawa na LED inaweza kuwa mkali. Wakati LED ya chini inalingana ni giza. Hiyo inamaanisha kila LED inaweza kuwa mkali wakati wa muda wa milliseconds 2 na ni giza wakati wa milliseconds nyingine 2. Kwa sababu jicho la mwanadamu lina hali fulani, kufumba macho kwa Hz 250 hakuonekani na mwangalizi. Wacha tuangalie safu ya kwanza ya mchoro. Inaonyesha kesi wakati kushoto LED iko kwenye rangi nyekundu na LED ya kulia katika rangi ya kijani. Hapa cathode RED hukaa chini wakati anode ya kushoto iko juu, cathode ya KIJANI inakaa chini wakati anode ya kulia iko juu, na cathode ya BLUE inakaa chini kila wakati. Nguzo zingine kwenye mchoro zinaonyesha mchanganyiko wa cathode na voltage ya anode kwa rangi anuwai.

Kama tunaweza kuona kuna kutegemeana kwa hali ya pini. Bila mfumo fulani isingekuwa rahisi kusuluhisha. Na hapo ndipo maktaba ya protothread inakuja vizuri.

Hatua ya 3: Programu. Macros na Ufafanuzi

Programu. Macros na Ufafanuzi
Programu. Macros na Ufafanuzi

Mfano katika hatua za programu inawakilisha toleo lililorahisishwa kidogo. Mpango umefupishwa, na ufafanuzi fulani wa ishara hubadilishwa na viboreshaji wazi.

Wacha tuanze kutoka mwanzo. Programu ni pamoja na faili zinazokuja na Studio ya Atmel pamoja na kichwa cha maktaba ya protothread. Ifuatayo kuna macros mawili ya kudhibiti viwango vya pini na ufafanuzi kadhaa kutoa majina yenye mantiki kubandika ishara. Hadi sasa hakuna kitu maalum.

Hatua ya 4: Programu. Kitanzi kikuu

Programu. Kitanzi kikuu
Programu. Kitanzi kikuu

Basi wacha tuangalie mwisho ili kuona ni nini utaratibu kuu una.

Kazi kuu baada ya kufanya uanzishaji fulani hukaa kwenye kitanzi cha milele. Katika kitanzi hicho hufanya hatua zifuatazo:

  • Inasisitiza utaratibu wa protothread kwa LED ya kushoto. Inabadilisha pini voltage.
  • Fanya kuchelewa kwa millisekunde mbili. Hakuna mabadiliko katika pini voltage.
  • Inashawishi protothread kwa LED inayofaa. Inabadilisha voltage ya pini.
  • Fanya ucheleweshaji wa 2 MS. Hakuna mabadiliko katika pini voltage.

Hatua ya 5: Kupanga programu. Kazi za Msaidizi

Kupanga programu. Kazi za Msaidizi
Kupanga programu. Kazi za Msaidizi

Kabla ya kuanza kujadili protothreads tunahitaji kuangalia kazi kadhaa za msaidizi. Kwanza kuna kazi za kuweka rangi fulani. Wao ni moja kwa moja. Kuna kazi nyingi kama idadi ya rangi zilizosaidiwa (saba) na kazi moja zaidi ya kuweka giza la LED (NoColor).

Na kuna kazi moja zaidi ambayo itaombwa moja kwa moja na kawaida ya protothread. Jina lake ni DoAndCountdown ().

Matumizi ya kusema kiufundi ya kazi kama hii sio lazima lakini nimeona ni rahisi. Ina hoja tatu:

  • Kitambulisho cha kufanya kazi ya kuweka rangi ya LED (kama RedColor au GreenColor au nk)
  • Thamani ya awali ya kaunta ya nyuma: idadi ya mara ngapi kazi hii inapaswa kutekelezwa katika hatua fulani ya protothread.
  • Kidokezo cha kubadilisha kaunta. Inachukuliwa kuwa wakati kuna mabadiliko katika rangi ambayo kaunta ya nyuma ni 0, kwa hivyo mwanzoni nambari ya iteration itaipa thamani ya awali ya kaunta. Baada ya kila kaunta ya iteration imepungua.

Kazi DoAndCountdown () inarudisha thamani ya kaunta ya nyuma.

Hatua ya 6: Programu. Utaratibu wa Protothread

Programu. Utaratibu wa Protothread
Programu. Utaratibu wa Protothread

Na hapa ni msingi wa mfumo: utaratibu wa protothread. Kwa sababu ya unyenyekevu mfano umepunguzwa tu kwa hatua tatu: kwa mabadiliko ya rangi kuwa RED, kwa GREEN, na kwa BLUE.

Kazi imeombwa na hoja mbili:

  • Kiashiria kwa muundo wa protothread. Muundo huo ulianzishwa na kuu kabla ya kitanzi kuu kuanza.
  • Kidokezo cha kubadilisha kaunta. Iliwekwa kwa 0 kwa kuu kabla ya kitanzi kuu kuanza.

Kazi kuweka voltages kufanya kushoto LED kazi na kisha kuanza protothread sehemu. Sehemu hii iko kati ya macros PT_BEGIN na PT_END. Ndani kuna nambari ambazo kwa upande wetu hurudia tu macros PT_WAIT_UNTIL. Macros hii hufanya ijayo:

  • Kuomba kazi ya DoAndCountdown. Hiyo inaweka voltage kwenye cathode za LED kutoa rangi fulani.
  • Matokeo yaliyorudishwa ikilinganishwa na 0. Ikiwa hali ni 'uwongo' kazi ya protothread inarudi mara moja na inatoa udhibiti kwa kitanzi kuu.
  • Wakati protothread inapoombwa wakati mwingine itafanya tena nambari kabla ya PT_BEGIN, kisha inaruka moja kwa moja ndani ya Pros za PT_WAIT_UNTIL ambazo zilirudi mara ya mwisho.
  • Vitendo kama hivyo hurudiwa mpaka matokeo ya DoAndCountdown ni 0. Katika hali hiyo hakuna kurudi, programu inakaa katika protothread na kutekeleza laini inayofuata ya nambari. Kwa upande wetu ni PT_WAIT_UNTIL ijayo lakini kwa ujumla inaweza kuwa karibu nambari yoyote ya C.
  • Katika utekelezaji wa kwanza wa kaunta ya pili ya PT_WAIT_UNTIL ni 0, kwa hivyo utaratibu DoAndCountdown () uweke kwa thamani ya awali. Macros za pili zitatekelezwa mara 250 hadi revers counter ifikie 0.
  • Hali ya pt pt inarejeshwa mara tu udhibiti unapofikia macros PT_END. Wakati kazi ya protothread ilipoomba wakati mwingine sehemu ya protothread inapoanza kutekeleza mstari wa nambari baada ya PT_BEGIN.

Kuna utaratibu sawa wa protothread kwa LED sahihi. Katika mfano wetu inalazimisha tu mpangilio tofauti wa rangi, lakini ikiwa tunaweza kuifanya tofauti kabisa: hakuna unganisho mkali kati ya kawaida na kushoto ya kawaida ya LED.

Hatua ya 7: Wa ndani

Ndani
Ndani

Programu nzima iko chini ya mistari 200 ya nambari (na maoni na mistari tupu) na inachukua chini ya 20% ya kumbukumbu ya kificho ya Attiny85. Ikihitajika inawezekana kutumia hapa taratibu kadhaa za protothread na kuwapa mantiki ngumu zaidi kwao.

Maktaba ya protothreads ni aina rahisi zaidi ya programu ya wakati mmoja ya kompyuta. Programu ya wakati huo huo ni njia inayoruhusu kugawanya programu katika sehemu zenye mantiki: wakati mwingine huitwa coroutines, wakati mwingine uzi, wakati mwingine kazi. Kanuni ni kwamba kila kazi kama hiyo inaweza kushiriki nguvu sawa ya processor wakati wa kuweka nambari zaidi au chini ya laini na huru ya sehemu zingine. Kazi kutoka kwa mtazamo wa kimantiki zinaweza kutekelezwa wakati huo huo.

Kwa udhibiti wa mifumo ya hali ya juu ya kazi kama hizo zinazofanywa na kernel ya mfumo wa uendeshaji au kwa wakati wa kukimbia wa lugha uliowekwa ndani ya kutekelezwa na mkusanyaji. Lakini ikiwa programu ya programu ya protothreads inadhibiti kwa mikono kwa kutumia maktaba ya macros katika mazoea ya kazi na kutumia njia kama hizo (kawaida nje ya kitanzi kuu).

Labda unataka kujua jinsi protothread inavyofanya kazi kweli? Je! Uchawi umefichwa wapi? Protothreadreads hutegemea kipengee maalum cha lugha ya C: ukweli kwamba taarifa ya kesi ya kubadili C inaweza kupachikwa ikiwa au kizuizi kingine (kama wakati au kwa). Maelezo ambayo unaweza kupata kwenye tovuti ya Adam Dunkels

Wafanyikazi wa umeme wa mradi huu ni rahisi sana. Picha hapo juu inakupa kidokezo. Nina hakika unaweza kufanya vizuri zaidi.

Ilipendekeza: