Sisukord:
- Tarvikud
- 1. samm: katkestus
- 2. samm: ajastusdiagramm
- 3. samm: programmeerimine. Makrod ja definitsioonid
- 4. samm: programmeerimine. Peamine silmus
- Samm: programmeerimine. Abifunktsioonid
- 6. samm: programmeerimine. Protothread rutiinid
- Samm 7: Sisemised
Video: Attiny85 Samaaegne programmeerimine või kõrvits mitmevärviliste silmadega: 7 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:46
Järgige autori lisateavet:
Teave: Töötan tarkvarainsenerina ühes Bay Area (California) ettevõttes. Kui mul on aega, meeldib mulle programmeerida mikrokontrollereid, ehitada mehaanilisi mänguasju ja teha mõningaid koduparandusprojekte. Lisateave jumbleview kohta »
See projekt näitab, kuidas juhtida kahte 10 mm kolmevärvilist tavalist anood-LED-i (kõrvitsa Halloweeni sära mitmevärvilised silmad) kiibiga Attiny85. Projekti eesmärk on tutvustada lugejale samaaegse programmeerimise kunsti ja Adam Dunkelsi prototeenide kogu kasutamist. See projekt eeldab, et lugeja teab 8-bitiseid AVR-kontrollereid, oskab kirjutada mõnda C-programmi ja omab mõningaid kogemusi Atmeli stuudioga.
GitHubis avaldatud projekti kood:
Tarvikud
Enne programmeerimist tuleb veel vooluring üles ehitada. Siin on komponendid:
- Attiny85 kontroller (mis tahes elektrooniline tarnija).
- Kaks kolmevärvilist 10 mm LED -i ühise anoodiga. Adafruit LED -id
- Takistid 100 oomi, 120 oomi, 150 oomi 0,125 või 0,250 Wt (mis tahes elektrooniline tarnija).
- Kuue kontaktiga päis AVR ISP liidese jaoks. Seda saab teha sellest Adafruit päisest
- Mõni leivalaud või trükitud mallitahvel. Ma kasutasin seda
- AVR ISP MKII liides ja Atmel Studio 6.1 (ka hilisem versioon peaks töötama).
1. samm: katkestus
Disain kasutab viit kiip -tihvti:
- Anoodide juhtimiseks kasutatakse kahte tihvti: iga LED -anood on kinnitatud spetsiaalse tihvti külge.
- Kolm tihvti (takistite kaudu) LED -i katoodide külge kinnitatud (iga LED -i sama värvi katood on ühendatud sama tihvtiga)
Küsidaks: miks mitte kasutada kiibi kõiki kuut sisse/välja tihvti, nii et LED -anoodid ühendatakse otse +5 V -ga ja igal katoodil on oma tihvt? See muudab programmeerimise lihtsaks. Kahjuks on probleem: tihvt PB5 (RESET) on nõrk tihvt, mis suudab toita vaid ~ 2 mA voolu, samas kui vaja on ~ 20 mA.
Loomulikult saab selle nõrga tihvti jaoks ehitada transistorvõimendi, kuid ise eelistan võimaluse korral probleemi lahendada koodi kaudu.
2. samm: ajastusdiagramm
Ajastusdiagramm aitab meil mõista, mida peame programmeerima.
Diagrammi kaks ülemist rida näitavad pinge muutust LED -anoodidel. LED -anoodidega ühendatud tihvtide pinge võnkub sagedusega ~ 250 Hz. See vasaku LED -i pinge võnkumine on parema LED -i võnkumisele vastupidine. Kui anoodil on kõrge pinge, võib vastav LED olla hele. Kui see on madal, siis vastav LED on tume. See tähendab, et iga LED võib 2 millisekundi jooksul olla hele ja veel 2 millisekundi jooksul tume. Kuna inimsilmal on mõningane inerts, ei ole 250 Hz vilkumine vaatleja poolt märgatav. Diagrammi kolm alumist rida näitavad pinge muutust valgusdioodide katoodidega ühendatud tihvtidel. Vaatame diagrammi esimest veergu. See näitab juhtumit, kui vasakpoolne LED on punane ja parem LED roheline. Siin punased katoodid jäävad madalaks, samal ajal kui vasakpoolne anood on kõrge, roheline katood jääb madalaks, samal ajal kui parempoolne anood on kõrgeks, ja sinine katood jääb kogu aeg madalaks. Teised diagrammi veerud näitavad katoodi ja anoodi pinge kombinatsioone erinevate värvide jaoks.
Nagu näeme, on tihvtide olekust sõltuvus. Ilma teatud raamistikuta poleks seda lihtne lahendada. Ja siin tulebki appi prototeenide raamatukogu.
3. samm: programmeerimine. Makrod ja definitsioonid
Programmeerimisetappide näide kujutab endast veidi lihtsustatud versiooni. Programmi lühendatakse ja mõned sümboolsed määratlused asendatakse selgesõnaliste konstantidega.
Alustame algusest. Programm sisaldab Atmel Studioga kaasasolevaid faile ja ka prototread raamatukogu päist. Järgmisena on kaks makrot tihvtide tasemega manipuleerimiseks ja mõned määratlused, et anda pin -signaalidele loogilised nimed. Siiani pole midagi erilist.
4. samm: programmeerimine. Peamine silmus
Siis vaatame lõppu, et näha, mida põhiprotseduur sisaldab.
Funktsioon peamine jääb pärast mõningast lähtestamist igaveseks ahelaks. Selles silmus teeb ta järgmised sammud:
- Käivitab vasakpoolse LED -i prototeeni rutiini. See muudab mõne tihvti pinget.
- Viivitage kaks millisekundit. Pistiku pinge ei muutu.
- Kutsub esile prototniidi õige LED -i jaoks. See muudab mõnda pin pinget.
- Tehke 2 MS viivitus. Pistiku pinge ei muutu.
Samm: programmeerimine. Abifunktsioonid
Enne prototüüpide arutamist peame vaatama mõningaid abifunktsioone. Esiteks on teatud värvi määramise funktsioonid. Nad on otsekohesed. Selliseid funktsioone on sama palju kui toetatud värvide arv (seitse) ja veel üks funktsioon LED -i tumedaks seadmiseks (NoColor).
Ja on veel üks funktsioon, mida prototeeni rutiin otseselt esile kutsub. Selle nimi on DoAndCountdown ().
Tehniliselt ei ole sellise funktsiooni kasutamine kohustuslik, kuid leidsin, et see on mugav. Sellel on kolm argumenti:
- Osuti funktsioonide seadistamise LED -värvile (nt RedColor või GreenColor vms)
- Pöördloenduri algväärtus: arv, mitu korda tuleb seda funktsiooni teatud prototniidi etapis käivitada.
- Kursor pöördloenduri jaoks. Eeldatakse, et kui värv muutub, on pöördloendur 0, seega määrab iteratsioonikood esialgu sellele loendurile algväärtuse. Pärast iga iteratsiooni loendurit vähendatakse.
Funktsioon DoAndCountdown () tagastab pöördloenduri väärtuse.
6. samm: programmeerimine. Protothread rutiinid
Ja siin on raamistiku tuum: prototeeni rutiin. Lihtsuse huvides piirdub näide ainult kolme sammuga: värvi muutmiseks PUNANEKS, ROHELISEKS ja SINISEKS.
Funktsiooni käivitatakse kahe argumendiga:
- Osuti prototniidi struktuurile. See struktuur lähtestati peamise poolt enne põhiahela algust.
- Kursor pöördloendurile. Enne põhiahela algust seati see 0 -ks.
Funktsioon määrab pinged, et muuta vasakpoolne LED aktiivseks ja käivitab seejärel prototniidi segmendi. See segment on makro makro PT_BEGIN ja PT_END vahel. Toas on kood, mis meie puhul kordab ainult makrosid PT_WAIT_UNTIL. Need makrod toimivad järgmiselt.
- Funktsiooni DoAndCountdown kutsumine. See paneb LED -katoodide pinge eraldama teatud värvi.
- Tagastatud tulemus võrreldes 0 -ga. Kui tingimus on „vale”, tagastab prototniidi funktsioon kohe ja annab kontrolli põhisilmusesse.
- Kui prototniiti järgmisel korral käivitatakse, käivitab see uuesti koodi enne PT_BEGIN -i ja hüppab seejärel otse nende PT_WAIT_UNTIL makrosse, kust see eelmisel korral tagasi tuli.
- Selliseid toiminguid korratakse, kuni DoAndCountdown tulemus on 0. Sellisel juhul tagasipöördumist ei toimu, programm jääb prototniidile ja täidab koodi järgmise rea. Meie puhul on see järgmine PT_WAIT_UNTIL, kuid üldiselt võib see olla peaaegu iga C -kood.
- Teise PT_WAIT_UNTIL pöördloenduri esialgsel käivitamisel on 0, seega seab protseduur DoAndCountdown () selle algväärtusele. Teisi makrosid täidetakse uuesti 250 korda, kuni pöördloendur jõuab 0 -ni.
- Struktuuri pt olek lähtestatakse kohe, kui juhtimine jõuab PT_END makrosse. Kui prototniidi funktsioon käivitatakse järgmisel korral, hakkab prototniidi segment käivitama koodi rea kohe pärast PT_BEGIN.
Õige LED -i jaoks on sarnane prototreemi rutiin. Meie näites rakendab see lihtsalt erinevat värvide järjekorda, kuid kui me teeme seda täiesti erinevalt: vasakpoolse ja parema LED -rutiini vahel pole tihedat sidet.
Samm 7: Sisemised
Kogu programm sisaldab vähem kui 200 rida koodi (koos kommentaaride ja tühjade ridadega) ning võtab vähem kui 20% Attiny85 koodimälust. Vajadusel on siin võimalik kasutada veel mitut prototüübi rutiini ja määrata neile palju keerukamat loogikat.
Protothreadsi teek on lihtsaim arvuti samaaegse programmeerimise vorm. Samaaegne programmeerimine on lähenemisviis, mis võimaldab jagada programmi loogilisteks osadeks: mõnikord nimetatakse neid korutiinideks, mõnikord lõimedeks, mõnikord ülesanneteks. Põhimõte seisneb selles, et iga selline ülesanne võib jagada sama protsessori võimsust, hoides samal ajal koodi enam -vähem lineaarsena ja teistest osadest sõltumatuna. Loogilisest seisukohast võib ülesandeid täita samaaegselt.
Täiustatud süsteemide puhul kontrollib selliseid ülesandeid kas operatsioonisüsteemi tuum või keele käitusaeg, mis on manustatud kompilaatori käivitatavasse faili. Kuid prototniitide korral juhib rakenduste programmeerija seda käsitsi, kasutades ülesannete rutiinides protothreadsi makrateeki ja kutsudes sellised rutiinid (tavaliselt põhiahelast välja).
Tõenäoliselt tahate teada, kuidas prototöötlus tegelikult töötab? Kuhu peitub maagia? Prototid toetuvad C -keele erifunktsioonile: asjaolu, et C -lülituse väiketähe avaldis võib olla sisse lülitatud kas või mõnda muusse plokki (nt ajal või jaoks). Üksikasjad, mida leiate Adam Dunkelsi saidilt
Selle projekti elektroonika on väga lihtne. Ülaltoodud foto annab teile vihje. Olen kindel, et saate paremini.
Soovitan:
Halloweeni kõrvits liikuva animatroonilise silmaga - See kõrvits suudab silma veeretada!: 10 sammu (koos piltidega)
Halloweeni kõrvits liikuva animatroonilise silmaga | See kõrvits suudab silma veeretada!: Selles juhendis saate teada, kuidas valmistada Halloweeni kõrvitsat, mis hirmutab kõiki, kui silm liigub. Reguleerige ultrahelisensori päästikukaugust õigele väärtusele (samm 9) ja teie kõrvits kivitab kõik, kes julgevad küünalt võtta
ATtiny85 kantavate vibreerivate tegevuste jälgimise kell ja programmeerimine ATtiny85 koos Arduino Unoga: 4 sammu (piltidega)
ATtiny85 kantavate vibreerivate tegevuste jälgimise kell ja programmeerimine ATtiny85 koos Arduino Unoga: kuidas teha kantavat aktiivsuse jälgimise kella? See on kantav vidin, mis on loodud stagnatsiooni tuvastamisel vibreerima. Kas veedate suurema osa ajast arvutis nagu mina? Kas istute tunde, ilma et peaksite sellest aru saama? Siis on see seade
ATtiny85 programmeerimine ja alglaadimine USBasp abil: 5 sammu
ATtiny85 programmeerimine ja alglaadimine USBasp -ga: Selles juhendis saate teada, kuidas ATtiny85 mikrokiipi alglaadida ja programmeerida kõige lihtsamal viisil, mida ma välja nuputaksin. See on minu esimene juhendatav, nii et kui teil on nõuandeid või näpunäiteid paremate juhendite koostamiseks, palun võtke julgesti ühendust
Attiny85 programmeerimine (kilp) Arduino UNO kasutamine: 7 sammu
Attiny85 programmeerimine (kilp) Arduino UNO kasutamine: Arduinoga mängimine on väga lõbus. Mõnikord on suurus siiski oluline. Arduino UNO on väike, kuid kui soovite, et teie projekt asuks väikeses korpuses, võib UNO olla liiga suur. Võite proovida kasutada NANO või MINI, kuid kui soovite tõesti
Seeria LED -tuli mitmevärviliste LED -ide abil: 3 sammu (piltidega)
Seeria LED -valgus mitmevärviliste LED -ide abil: LED -jadavalgusti pole nii kallis, kuid kui olete DIY -armastaja (harrastaja) nagu mina, saate teha oma seeria -LED -e ja see on odavam kui turul saadaval olev valgus. Niisiis, täna Ma teen oma seeria LED -tule, mis töötab 5 voltiga