Satura rādītājs:
- Piegādes
- 1. darbība
- 2. darbība. Laika diagramma
- 3. solis: programmēšana. Makro un definīcijas
- 4. solis: programmēšana. Galvenā cilpa
- 5. solis: programmēšana. Palīgfunkcijas
- 6. darbība: programmēšana. Prototēvu rutīnas
- 7. solis: Iekšējie
Video: Attiny85 vienlaicīga programmēšana vai ķirbis ar daudzkrāsainām acīm: 7 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:51
Seko vairāk autoram:
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
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 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ēš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
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
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
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
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:
Helovīna ķirbis ar kustīgu animatronisku aci - Šis ķirbis var pagriezt acis!: 10 soļi (ar attēliem)
Helovīna ķirbis ar kustīgu animatronisku aci | Šis ķirbis var izgriezt acis!: Šajā pamācībā jūs uzzināsit, kā pagatavot Helovīna ķirbi, kas biedē visus, kad acs kustas. Noregulējiet ultraskaņas sensora sprūda attālumu līdz pareizajai vērtībai (9. solis), un jūsu ķirbis pārakmeņos ikvienu, kurš uzdrošinās uzņemt sveci
ATtiny85 valkājamo vibrējošo aktivitāšu izsekošanas pulkstenis un programmēšana ATtiny85 ar Arduino Uno: 4 soļi (ar attēliem)
ATtiny85 valkājamo vibrējošo aktivitāšu izsekošanas pulkstenis un programmēšana ATtiny85 ar Arduino Uno: Kā izveidot valkājamu aktivitāšu izsekošanas pulksteni? Šis ir valkājams sīkrīks, kas paredzēts vibrācijai, konstatējot stagnāciju. Vai jūs lielāko daļu laika pavadāt pie datora tāpat kā es? Vai jūs sēdējat stundām ilgi, nemanot? Tad šī ierīce ir f
Attiny85 programmēšana (vairogs), izmantojot Arduino UNO: 7 soļi
Attiny85 programmēšana (vairogs) Arduino UNO izmantošana: Spēlēt ar savu Arduino ir ļoti jautri. Tomēr dažreiz izmēram ir nozīme. Arduino UNO ir mazs, bet, ja vēlaties, lai jūsu projekts būtu nelielā iežogojumā, UNO varētu būt pārāk liels. Jūs varētu mēģināt izmantot NANO vai MINI, bet, ja patiešām vēlaties
Darba sākšana ar Esp 8266 Esp-01 ar Arduino IDE - Esp dēļu instalēšana Arduino Ide programmēšanā un Esp programmēšana: 4 soļi
Darba sākšana ar Esp 8266 Esp-01 ar Arduino IDE | Esp dēļu instalēšana Arduino Ide programmēšanā un Esp programmēšana: Šajā pamācībā mēs iemācīsimies instalēt esp8266 plates Arduino IDE un kā programmēt esp-01 un augšupielādēt kodu tajā. Tā kā esp dēļi ir tik populāri, es domāju par pamācību labošanu šis un lielākā daļa cilvēku saskaras ar problēmu
Vienkāršs 10 minūšu makro objektīvs acīm vai tīmekļa kamerai: 5 soļi
Vienkāršs 10 minūšu makro objektīvs acij/tīmekļa kamerai: šī pamācība sniegs jums detalizētu precīzu un skaidru formulējumu un attēlus 10 minūšu laikā, un jums būs viegli lietojams, viegli un viegli noņemams makro objektīvs jūsu acij/tīmekļa kamerai