Turinys:
- Prekės
- 1 žingsnis: apipjaustymas
- 2 žingsnis: laiko diagrama
- 3 žingsnis: programavimas. Makrokomandos ir apibrėžimai
- 4 žingsnis: programavimas. Pagrindinė kilpa
- 5 žingsnis: programavimas. Pagalbinės funkcijos
- 6 žingsnis: programavimas. Prototipų įpročiai
- 7 žingsnis: vidiniai elementai
Video: „Attiny85“vienu metu programavimas arba moliūgas su įvairiaspalvėmis akimis: 7 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:44
Sekite daugiau autoriaus:
Apie: Dirbu programinės įrangos inžinieriumi vienoje iš Bay Area (Kalifornija) kompanijų. Kai tik turiu laiko, man patinka programuoti mikrovaldiklius, kurti mechaninius žaislus ir kurti kai kuriuos namų tobulinimo projektus. Daugiau apie jumbleview »
Šis projektas parodo, kaip valdyti du 10 mm trijų spalvų bendrus anodo šviesos diodus (įvairiaspalves „Pumpkin Halloween Glitter“akis) su „Attiny85“mikroschema. Projekto tikslas - supažindinti skaitytoją su vienu metu veikiančio programavimo menu ir Adomo Dunkelso prototipų bibliotekos naudojimu. Šiame projekte daroma prielaida, kad skaitytojas žino apie 8 bitų AVR valdiklius, gali parašyti tam tikrą C programą ir turi patirties su „Atmel“studija.
Projekto kodas, paskelbtas „GitHub“:
Prekės
Prieš programuojant dar reikia sukurti grandinę. Čia yra komponentai:
- „Attiny85“valdiklis (bet kuris elektroninis tiekėjas).
- Du trijų spalvų 10 mm šviesos diodai su bendru anodu. „Adafruit“šviesos diodai
- Rezistoriai 100 omų, 120 omų, 150 omų 0,125 arba 0,250 Wt (bet kuris elektroninis tiekėjas).
- Šešių kontaktų antraštė AVR ISP sąsajai. Galima pagaminti iš šios „Adafruit“antraštės
- Kai kuri duonos lenta arba spausdinta šablono lenta. Aš naudoju šį
- AVR ISP MKII sąsaja ir „Atmel Studio 6.1“(taip pat turėtų veikti vėlesnė versija).
1 žingsnis: apipjaustymas
Dizainas naudoja penkis lustų kaiščius:
- Du anodai, naudojami anodams valdyti: kiekvienas LED anodas pritvirtintas prie tam skirto kaiščio.
- Trys kaiščiai (per rezistorius) pritvirtinti prie šviesos diodų katodų (tos pačios spalvos katodas kiekvienam šviesos diodui pritvirtintas prie to paties kaiščio)
Galima paklausti: kodėl gi nenaudojant visų šešių lusto įvesties/išvesties kaiščių, kad LED anodai būtų tiesiogiai prijungti prie +5 V ir kiekvienas katodas turės savo kaištį? Dėl to programavimas bus paprastas. Deja, yra problema: kaištis PB5 (RESET) yra silpnas kaištis, galintis tiekti tik ~ 2 mA srovės, tuo tarpu reikia turėti ~ 20 mA.
Žinoma, šiam silpnam kaiščiui galima sukurti tranzistoriaus stiprintuvą, bet aš pats, kai tik galiu, labiau linkęs išspręsti problemą per kodą.
2 žingsnis: laiko diagrama
Laiko diagrama padeda mums suprasti, ką turime užprogramuoti.
Dvi viršutinės diagramos eilutės rodo įtampos pasikeitimą LED anoduose. Prie LED anodų prijungtų kaiščių įtampa svyruoja dažniu ~ 250 Hz. Šis kairiojo šviesos diodo įtampos svyravimas yra priešingas dešiniojo šviesos diodo virpesiui. Kai anodo įtampa yra aukšta, atitinkamas šviesos diodas gali šviesti. Kai jis yra žemas, atitinkamas šviesos diodas yra tamsus. Tai reiškia, kad kiekvienas šviesos diodas gali būti ryškus 2 milisekundžių intervalais ir tamsus dar 2 milisekundes. Kadangi žmogaus akis turi tam tikrą inerciją, stebėtojas nepastebi 250 Hz mirksėjimo. Trys apatinės diagramos eilutės rodo įtampos pasikeitimą kaiščiuose, prijungtuose prie šviesos diodų katodų. Pažvelkime į pirmąjį diagramos stulpelį. Tai rodo atvejį, kai kairysis šviesos diodas yra raudonos spalvos, o dešinysis - žalios spalvos. Čia raudoni katodai lieka žemi, kai kairysis anodas yra aukštas, ŽALAS katodas lieka žemas, o dešinysis - aukštas, o MĖLYNAS katodas visą laiką lieka žemas. Kiti diagramos stulpeliai rodo katodo ir anodo įtampos derinius įvairioms spalvoms.
Kaip matome, kaiščių būsena yra tarpusavyje susijusi. Be tam tikros sistemos tai nebūtų lengva išspręsti. Ir čia praverčia prototipų biblioteka.
3 žingsnis: programavimas. Makrokomandos ir apibrėžimai
Programavimo žingsnių pavyzdys yra šiek tiek supaprastinta versija. Programa sutrumpinta, o kai kurie simboliniai apibrėžimai pakeisti aiškiomis konstantomis.
Pradėkime nuo pradžių. Programa apima failus, ateinančius su „Atmel Studio“, taip pat prototipų bibliotekos antraštę. Toliau pateikiamos dvi makrokomandos, skirtos manipuliuoti kaiščių lygiais, ir kai kurios apibrėžtys, suteikiančios loginius pavadinimus kaiščių signalams. Kol kas nieko ypatingo.
4 žingsnis: programavimas. Pagrindinė kilpa
Tada pažvelkime į pabaigą, kad pamatytume, kokia yra pagrindinė procedūra.
Pagrindinė funkcija po tam tikro inicijavimo lieka amžinai. Toje grandinėje jis atlieka šiuos veiksmus:
- Suaktyvinama prototipų procedūra kairiajam šviesos diodui. Tai keičia kai kurių kaiščių įtampą.
- Atidėkite dvi milisekundes. Kaiščio įtampa nesikeičia.
- Sukuriamas tinkamo šviesos diodo protoprotas. Tai keičia tam tikrą kaiščio įtampą.
- Padarykite 2 MS atidėjimą. Kaiščio įtampa nesikeičia.
5 žingsnis: programavimas. Pagalbinės funkcijos
Prieš pradėdami diskutuoti apie prototipus, turime pažvelgti į kai kurias pagalbines funkcijas. Pirmiausia yra tam tikros spalvos nustatymo funkcijos. Jie yra tiesmukiški. Yra tiek daug funkcijų, kiek palaikomų spalvų (septynios) ir dar viena funkcija, skirta nustatyti tamsų šviesos diodą („NoColor“).
Ir yra dar viena funkcija, kurią tiesiogiai iškvies prototipų rutina. Jo pavadinimas yra „DoAndCountdown“().
Techniniu požiūriu tokios funkcijos naudojimas nėra privalomas, tačiau man pasirodė patogu. Ji turi tris argumentus:
- Rodyklė į funkcijų nustatymo LED spalvą (pvz., „RedColor“arba „GreenColor“ir pan.)
- Pradinė atvirkštinio skaitiklio vertė: skaičius, kiek kartų ši funkcija turi būti panaudota tam tikru prototipų etapu.
- Rodyklė, norint pakeisti atbulinės eigos skaitiklį. Daroma prielaida, kad pasikeitus spalvai, atvirkštinis skaitiklis yra 0, todėl iš pradžių iteracijos kodas priskiria tam skaitikliui pradinę vertę. Po kiekvieno iteracijos skaitiklis sumažėja.
Funkcija DoAndCountdown () grąžina atvirkštinio skaitiklio vertę.
6 žingsnis: programavimas. Prototipų įpročiai
Ir čia yra pagrindinė esmė: prototipų rutina. Paprastumo dėlei pavyzdys apsiriboja tik trimis etapais: norint pakeisti spalvą į RAUDONĄ, į ŽALIĄ ir į MĖLYNĄ.
Funkcija iškviečiama dviem argumentais:
- Rodyklė į prototipų struktūrą. Ši struktūra buvo inicijuota pagrindiniu prieš prasidedant pagrindinei kilpa.
- Rodyklė, norint pakeisti atbulinės eigos skaitiklį. Prieš pradedant pagrindinę kilpą, jis buvo nustatytas į 0.
Funkcija nustato įtampą, kad kairysis šviesos diodas būtų aktyvus ir tada pradėtų prototipų segmentą. Šis segmentas yra tarp makrokomandų PT_BEGIN ir PT_END. Viduje yra kodas, kuris mūsų atveju kartoja tik makrokomandas PT_WAIT_UNTIL. Šios makrokomandos veikia toliau:
- Funkcijos „DoAndCountdown“iškvietimas. Dėl to LED katodų įtampa skleidžia tam tikrą spalvą.
- Grąžintas rezultatas, lyginant su 0. Jei sąlyga yra „klaidinga“, prototipų funkcija iš karto grįžta ir perduoda valdymą pagrindinei kilpa.
- Kai kitą kartą iškviečiamas prototipas, jis vėl vykdo kodą iki PT_BEGIN, tada pereina tiesiai į PT_WAIT_UNTIL makrokomandas, iš kurių jis grįžo praėjusį kartą.
- Tokie veiksmai kartojami tol, kol „DoAndCountdown“rezultatas yra 0. Tokiu atveju grąžos nėra, programa lieka protone ir vykdo kitą kodo eilutę. Mūsų atveju tai yra kitas PT_WAIT_UNTIL, bet apskritai tai gali būti beveik bet koks C kodas.
- Pradinio vykdymo metu antrasis PT_WAIT_UNTIL atvirkštinis skaitiklis yra 0, todėl procedūra DoAndCountdown () nustatė pradinę vertę. Antrosios makrokomandos vėl bus vykdomos 250 kartų, kol atvirkštinis skaitiklis pasieks 0.
- Struktūros pt būsena iš naujo nustatoma, kai tik valdiklis pasiekia PT_END makrokomandas. Kai kitą kartą bus pradėta naudoti prototipų funkcija, vykdykite kodo eilutę iškart po PT_BEGIN.
Yra panaši protinio sriegio tvarka tinkamam šviesos diodui. Mūsų pavyzdyje jis tik įgyvendina skirtingą spalvų tvarką, bet jei galime tai padaryti visiškai kitaip: nėra tvirtos jungties tarp kairės ir dešinės šviesos diodų.
7 žingsnis: vidiniai elementai
Visa programa yra mažesnė nei 200 kodo eilučių (su komentarais ir tuščiomis eilutėmis) ir užima mažiau nei 20% „Attiny85“kodo atminties. Jei reikia, čia galima panaudoti dar kelias prototipų procedūras ir joms priskirti daug sudėtingesnę logiką.
„Protothreads“biblioteka yra paprasčiausia kompiuterinio programavimo forma. Lygiagretus programavimas yra metodas, leidžiantis programą suskirstyti į logines dalis: kartais jos vadinamos korutinėmis, kartais gijomis, kartais užduotimis. Principas yra tas, kad kiekviena tokia užduotis gali dalintis ta pačia procesoriaus galia, išlaikydama kodą daugiau ar mažiau linijinį ir nepriklausomą nuo kitų dalių. Užduotys loginiu požiūriu gali būti vykdomos vienu metu.
Išplėstinėms sistemoms tokių užduočių valdymas atliekamas operacinės sistemos branduoliu arba kalbos vykdymo laiku, įterptu į kompiliatoriaus vykdomąjį failą. Tačiau prototipų atveju programuotojas valdo jį rankiniu būdu, naudodamas „protothreads“makrokomandų biblioteką užduotims atlikti ir iškviesdamas tokias procedūras (dažniausiai iš pagrindinės kilpos).
Tikriausiai norite sužinoti, kaip prototipas iš tikrųjų veikia? Kur paslėpta magija? Prototipai remiasi specialia C kalbos ypatybe: tai, kad C jungiklio raidžių įrašas gali būti įterptas į „if“arba į kitą bloką (pvz., Tuo tarpu arba už). Išsamią informaciją galite rasti Adam Dunkels svetainėje
Šio projekto elektronikos elementai yra labai paprasti. Aukščiau pateikta nuotrauka suteikia jums tam tikrą užuominą. Esu tikras, kad galite padaryti geriau.
Rekomenduojamas:
Helovino moliūgas su judančia animatronine akimi - Šis moliūgas gali užmerkti akis!: 10 žingsnių (su nuotraukomis)
Helovino moliūgas su judančia animatronine akimi | Šis moliūgas gali užmerkti akis!: Šioje instrukcijoje sužinosite, kaip pasigaminti Helovino moliūgą, kuris baugina visus, kai akys juda. Sureguliuokite ultragarso jutiklio paleidimo atstumą iki tinkamos vertės (9 veiksmas), ir jūsų moliūgas suakmenės visiems, kurie drįsta paimti žvakę
„ATtiny85“nešiojamas vibruojančios veiklos stebėjimo laikrodis ir programavimas „ATtiny85“su „Arduino Uno“: 4 žingsniai (su nuotraukomis)
„ATtiny85“nešiojamas vibruojančios veiklos stebėjimo laikrodis ir programavimas ATtiny85 su „Arduino Uno“: kaip padaryti nešiojamą veiklos stebėjimo laikrodį? Tai nešiojama programėlė, sukurta vibruoti aptikus sąstingį. Ar daug laiko praleidžiate prie kompiuterio kaip aš? Ar tu sėdi valandas to nesuvokdamas? Tada šis įrenginys yra
Kaip naudoti „Neopixel Ws2812“LED arba LED juostelę arba LED žiedą su „Arduino“: 4 žingsniai
Kaip naudoti „Neopixel Ws2812“LED arba LED juostelę arba LED žiedą su „Arduino“: Sveiki vaikinai, nes „Neopixel“LED juostelė yra labai populiari ir ji taip pat vadinama „ws2812 LED“juostele. Jie yra labai populiarūs, nes šioje LED juostelėje mes galime kreiptis į kiekvieną lemputę atskirai, o tai reiškia, kad jei norite, kad keli šviesos diodai švytėtų viena spalva
Kaip matuoti aukšto dažnio ir darbo ciklą vienu metu naudojant mikrovaldiklį: 4 žingsniai
Kaip vienu metu išmatuoti aukšto dažnio ir darbo ciklą naudojant mikrovaldiklį: Aš žinau, ką jūs manote: " Huh? Yra daug instrukcijų, kaip naudoti mikrovaldiklius signalo dažniui matuoti. Žiovauja. &Quot; Bet palaukite, čia yra naujovė: aš aprašau daug didesnių nei mikro dažnių matavimo metodą
Daug kompiuterių užšaldymas vienu metu: 4 žingsniai
Daugelio kompiuterių užšaldymas vienu metu: jei kada nors norėjote užšaldyti visus tinklo kompiuterius (pvz., Darbe ar mokykloje), čia yra jūsų galimybė. Tai gali būti linksma išdaiga, tačiau atminkite, kad kai kurie žmonės gali nusiminti, kai visi jų kompiuteriai yra užšaldyti. (Būkite atsargūs! Jei