Satura rādītājs:

Attiny85 vienlaicīga programmēšana vai ķirbis ar daudzkrāsainām acīm: 7 soļi
Attiny85 vienlaicīga programmēšana vai ķirbis ar daudzkrāsainām acīm: 7 soļi

Video: Attiny85 vienlaicīga programmēšana vai ķirbis ar daudzkrāsainām acīm: 7 soļi

Video: Attiny85 vienlaicīga programmēšana vai ķirbis ar daudzkrāsainām acīm: 7 soļi
Video: Знакомство с Digispark ATtiny85. "Arduino для чайников" 2024, Novembris
Anonim

Seko vairāk autoram:

Kliedziens
Kliedziens
Kliedziens
Kliedziens
NiCd akumulatora nomaiņa ar ārēju barošanas avotu
NiCd akumulatora nomaiņa ar ārēju barošanas avotu
NiCd akumulatora nomaiņa ar ārēju barošanas avotu
NiCd akumulatora nomaiņa ar ārēju barošanas avotu
Digitālās kameras rokturis
Digitālās kameras rokturis
Digitālās kameras rokturis
Digitālās kameras rokturis

Par: Es strādāju par programmatūras inženieri vienā no Bay Area (Kalifornija) uzņēmumiem. Ikreiz, kad man ir laiks, man patīk programmēt mikrokontrolierus, veidot mehāniskas rotaļlietas un veidot dažus mājas uzlabošanas projektus. Vairāk par jumbleview »

Šis projekts parāda, kā ar Attiny85 mikroshēmu kontrolēt divas 10 mm trīs krāsu kopējas anoda gaismas diodes (daudzkrāsainas ķirbju Helovīna mirdzuma acis). Projekta mērķis ir iepazīstināt lasītāju ar vienlaicīgas programmēšanas mākslu un Adam Dunkels prototēku bibliotēkas izmantošanu. Šajā projektā tiek pieņemts, ka lasītājs zina par AVR 8 bitu kontrolieriem, var rakstīt kādu C programmu un viņam ir zināma pieredze Atmel studijā.

Projekta kods, kas publicēts vietnē GitHub:

Piegādes

Pirms programmēšanas vēl ir jāveido ķēde. Šeit ir sastāvdaļas:

  • Attiny85 kontrolieris (jebkurš elektroniskais piegādātājs).
  • Divas trīs krāsu 10 mm gaismas diodes ar kopēju anodu. Adafruit gaismas diodes
  • Rezistori 100 omi, 120 omi, 150 omi 0,125 vai 0,250 Wt (jebkurš elektroniskais piegādātājs).
  • Sešu kontaktu galvene AVR ISP interfeisam. Var izgatavot no šīs Adafruit galvenes
  • Kāds maizes dēlis vai iespiesta veidņu tāfele. Es izmantoju šo
  • AVR ISP MKII saskarne un Atmel Studio 6.1 (arī jaunākajai versijai vajadzētu darboties).

1. darbība

Circut
Circut

Dizains izmanto piecas mikroshēmas tapas:

  • Anodu vadīšanai tiek izmantotas divas tapas: katrs LED anods ir piestiprināts pie speciālās tapas.
  • Trīs tapas (caur rezistoriem) piestiprinātas pie LED katodiem (katras gaismas diodes vienas krāsas katods piestiprināts pie vienas tapas)

Varētu jautāt: kāpēc neizmantot visas sešas mikroshēmas ieejas/izejas tapas, lai LED anodi tiktu savienoti tieši ar +5 V un katram katodam būs sava tapa? Tas padarīs programmēšanu vienkāršu. Diemžēl pastāv problēma: pin PB5 (RESET) ir vāja tapa, kas spēj nodrošināt tikai ~ 2 mA strāvu, bet ir jābūt ~ 20 mA.

Protams, šim vājajam tapam var izveidot tranzistora pastiprinātāju, bet es pats, kad vien iespējams, dod priekšroku problēmas risināšanai caur kodu.

2. darbība. Laika diagramma

Laika diagramma
Laika diagramma

Laika diagramma palīdz mums saprast, kas mums jāprogrammē.

Diagrammas augšējās divas rindas parāda sprieguma izmaiņas uz LED anodiem. Spriegums uz tapām, kas savienotas ar LED anodiem, svārstās ar frekvenci ~ 250 Hz. Šī kreisās gaismas diodes sprieguma svārstība ir pretēja labās gaismas diodes svārstībām. Ja spriegums uz anoda ir augsts, atbilstošā gaismas diode var būt spilgta. Ja tas ir zems, atbilstošais gaismas diode ir tumšs. Tas nozīmē, ka katra gaismas diode var būt spilgta 2 milisekundes intervālā un tumša vēl 2 milisekundēs. Tā kā cilvēka acij ir zināma inerce, novērotājs nemana 250 Hz mirgošanas. Diagrammas trīs apakšējās rindas parāda sprieguma izmaiņas uz tapām, kas savienotas ar LED katodiem. Apskatīsim diagrammas pirmo kolonnu. Tas parāda gadījumu, kad kreisais gaismas diode ir sarkanā krāsā, bet labais - zaļā krāsā. Šeit SARKANIE katodi paliek zemi, kamēr kreisais anods ir augsts, ZAĻAIS katods paliek zems, bet labais - augsts, un ZILAIS katods visu laiku ir zems. Citas diagrammas kolonnas parāda katoda un anoda sprieguma kombinācijas dažādām krāsām.

Kā redzam, tapas stāvoklis ir savstarpēji atkarīgs. Bez kāda ietvara to nebūtu viegli atrisināt. Un tieši šeit noder prototipa bibliotēka.

3. solis: programmēšana. Makro un definīcijas

Programmēšana. Makro un definīcijas
Programmēšana. Makro un definīcijas

Programmēšanas soļu piemērs ir nedaudz vienkāršota versija. Programma ir saīsināta, un dažas simboliskas definīcijas tiek aizstātas ar skaidrām konstantēm.

Sāksim no sākuma. Programma ietver failus, kas tiek piegādāti kopā ar Atmel Studio, kā arī prototipa bibliotēkas galveni. Tālāk ir divi makro, lai manipulētu ar tapu līmeņiem, un dažas definīcijas, lai piešķirtu loģiskus nosaukumus tapas signāliem. Pagaidām nekas īpašs.

4. solis: programmēšana. Galvenā cilpa

Programmēšana. Galvenā cilpa
Programmēšana. Galvenā cilpa

Tad apskatīsim beigās, lai redzētu, kāda ir galvenā procedūra.

Galvenā funkcija pēc inicializācijas paliek mūžīgi. Šajā ciklā tā veic šādas darbības:

  • Tiek izsaukts kreisās gaismas diodes prototipa process. Tas maina dažu tapu spriegumu.
  • Kavējiet divas milisekundes. Tapas spriegums nemainās.
  • Tiek izsaukts prototipa pareizajam LED. Tas maina kādu sprieguma spriegumu.
  • Padariet 2 MS kavēšanos. Tapas spriegums nemainās.

5. solis: programmēšana. Palīgfunkcijas

Programmēšana. Palīgfunkcijas
Programmēšana. Palīgfunkcijas

Pirms sākam apspriest prototēkas, mums jāaplūko dažas palīga funkcijas. Vispirms ir noteiktas krāsas iestatīšanas funkcijas. Tie ir vienkārši. Ir tik daudz funkciju kā atbalstīto krāsu skaits (septiņas) un vēl viena funkcija, lai iestatītu tumšu LED (NoColor).

Un ir vēl viena funkcija, kuru tieši izmantos prototipa rutīna. Tās nosaukums ir DoAndCountdown ().

Tehniski šādas funkcijas izmantošana nav obligāta, bet man tas šķita ērti. Tam ir trīs argumenti:

  • Rādītājs uz funkciju iestatīšanas LED krāsu (piemēram, RedColor vai GreenColor utt.)
  • Reversā skaitītāja sākotnējā vērtība: skaits, cik reižu šī funkcija jāizsauc noteiktā prototipa posmā.
  • Rādītājs apgrieztam skaitītājam. Tiek pieņemts, ka, mainoties krāsai, reversais skaitītājs ir 0, tāpēc sākumā iterācijas kods šim skaitītājam piešķirs sākotnējo vērtību. Pēc katras iterācijas skaitītāja tiek samazināts.

Funkcija DoAndCountdown () atgriež apgrieztā skaitītāja vērtību.

6. darbība: programmēšana. Prototēvu rutīnas

Programmēšana. Prototēvu rutīnas
Programmēšana. Prototēvu rutīnas

Un šeit ir ietvara kodols: prototipa rutīna. Vienkāršības labad piemērs aprobežojas tikai ar trim soļiem: krāsas maiņai uz SARKANU, uz ZAĻU un uz ZILU.

Funkcija tiek izsaukta ar diviem argumentiem:

  • Rādītājs uz prototipa struktūru. Šo struktūru inicializēja galvenais pirms galvenās cilpas sākuma.
  • Rādītājs apgrieztam skaitītājam. Pirms galvenās cilpas sākuma tā tika iestatīta uz 0.

Funkcija nosaka spriegumus, lai kreisā gaismas diode būtu aktīva un pēc tam sāk prototipa segmentu. Šis segments atrodas starp makro PT_BEGIN un PT_END. Iekšpusē ir kods, kas mūsu gadījumā atkārto tikai makro PT_WAIT_UNTIL. Šie makro darbojas tālāk:

  • Funkcijas DoAndCountdown piesaukšana. Tas nosaka LED katodu spriegumu, lai izstarotu noteiktu krāsu.
  • Atgriezts rezultāts salīdzinājumā ar 0. Ja nosacījums ir “nepatiesa” prototipa funkcija nekavējoties atgriežas un nodod kontroli galvenajai cilpai.
  • Kad nākamreiz tiek izsaukts prototips, tas atkal izpilda kodu pirms PT_BEGIN, pēc tam pāriet tieši tajā PT_WAIT_UNTIL makro, no kura tas atgriezās pagājušajā reizē.
  • Šādas darbības tiek atkārtotas, līdz DoAndCountdown rezultāts ir 0. Tādā gadījumā atgriešanās nenotiek, programma paliek prototēkā un izpilda nākamo koda rindu. Mūsu gadījumā tas ir nākamais PT_WAIT_UNTIL, bet kopumā tas varētu būt gandrīz jebkurš C kods.
  • Sākotnējā otrā PT_WAIT_UNTIL reversā skaitītāja izpilde ir 0, tāpēc procedūra DoAndCountdown () iestatīja to uz sākotnējo vērtību. Otrie makro atkal tiks izpildīti 250 reizes, līdz reverss skaitītājs sasniegs 0.
  • Struktūras pt stāvoklis tiek atiestatīts, tiklīdz vadība sasniedz PT_END makro. Kad prototipa funkcija tiek izsaukta nākamreiz, kad prototipa segments sāk izpildīt koda rindu uzreiz pēc PT_BEGIN.

Labajam LED ir līdzīga prototipa kārtība. Mūsu piemērā tas vienkārši ievieš atšķirīgu krāsu secību, bet, ja mēs to darām pilnīgi citādi: starp kreiso un labo LED rutīnu nav ciešas saiknes.

7. solis: Iekšējie

Iekšējie
Iekšējie

Visa programma ir mazāka par 200 koda rindām (ar komentāriem un tukšām rindām) un aizņem mazāk nekā 20% no Attiny85 koda atmiņas. Vajadzības gadījumā šeit ir iespējams izmantot vēl vairākas prototipa procedūras un tām piešķirt daudz sarežģītāku loģiku.

Protothreads bibliotēka ir vienkāršākais vienlaicīgas datorprogrammēšanas veids. Vienlaicīga programmēšana ir pieeja, kas ļauj sadalīt programmu loģiskās daļās: dažreiz tos sauc par korutīniem, dažreiz pavedienus, dažreiz uzdevumus. Princips ir tāds, ka katram šādam uzdevumam var būt vienāda procesora jauda, vienlaikus saglabājot kodu vairāk vai mazāk lineāru un neatkarīgu no citām daļām. Uzdevumus no loģiskā viedokļa var izpildīt vienlaikus.

Uzlabotām sistēmām šādu uzdevumu kontrole tiek veikta vai nu ar operētājsistēmas kodolu, vai ar valodas izpildlaiku, kas iegults izpildītājprogrammā ar kompilatora palīdzību. Bet prototinu gadījumā lietojumprogrammatūra to kontrolē manuāli, uzdevumu kārtās izmantojot prototinu makro bibliotēku un izsaucot šādas darbības (parasti ārpus galvenās cilpas).

Jūs droši vien vēlaties zināt, kā prototēka patiesībā darbojas? Kur slēpjas maģija? Prototēkas paļaujas uz īpašo C valodas funkciju: faktu, ka C pārslēgšanās reģistrs var tikt iestrādāts, ja vai kādā citā blokā (piemēram, kamēr vai uz). Sīkāka informācija, ko varat atrast Adam Dunkels vietnē

Šī projekta elektronikas iekšējie elementi ir ļoti vienkārši. Augšējais fotoattēls sniedz jums norādes. Esmu pārliecināts, ka jūs varat darīt labāk.

Ieteicams: