Turinys:

„Attiny85“vienu metu programavimas arba moliūgas su įvairiaspalvėmis akimis: 7 žingsniai
„Attiny85“vienu metu programavimas arba moliūgas su įvairiaspalvėmis akimis: 7 žingsniai

Video: „Attiny85“vienu metu programavimas arba moliūgas su įvairiaspalvėmis akimis: 7 žingsniai

Video: „Attiny85“vienu metu programavimas arba moliūgas su įvairiaspalvėmis akimis: 7 žingsniai
Video: ATTINY85 en modulo PCB prográmalo directo en la PC 😎#shorts #arduino 2024, Lapkritis
Anonim

Sekite daugiau autoriaus:

Klyksmas
Klyksmas
Klyksmas
Klyksmas
NiCd baterijos pakeitimas išoriniu maitinimo šaltiniu
NiCd baterijos pakeitimas išoriniu maitinimo šaltiniu
NiCd baterijos pakeitimas išoriniu maitinimo šaltiniu
NiCd baterijos pakeitimas išoriniu maitinimo šaltiniu
Skaitmeninio fotoaparato rankena
Skaitmeninio fotoaparato rankena
Skaitmeninio fotoaparato rankena
Skaitmeninio fotoaparato rankena

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

Circut
Circut

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
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

Programavimas. Makrokomandos ir apibrėžimai
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

Programavimas. Pagrindinė kilpa
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

Programavimas. Pagalbinės funkcijos
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

Programavimas. Prototipų įpročiai
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

Vidiniai
Vidiniai

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: