Përmbajtje:
- Furnizimet
- Hapi 1: Rrethi
- Hapi 2: Diagrami i kohës
- Hapi 3: Programimi. Makro dhe përkufizime
- Hapi 4: Programimi. Rrethi kryesor
- Hapi 5: Programimi. Funksionet ndihmëse
- Hapi 6: Programimi. Rutinat Protothread
- Hapi 7: Brendshme
Video: Programim i njëkohshëm Attiny85 ose kungull me sy shumëngjyrësh: 7 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:10
Nga jumbleviewJumbleview.info Ndiqni më shumë nga autori:
Rreth: Unë punoj si inxhinier softuerësh në një nga kompanitë Bay Area (California). Sa herë që kam kohë më pëlqen të programoj mikro kontrollues, të ndërtoj lodra mekanike dhe të bëj disa projekte për përmirësimin e shtëpisë. Më shumë rreth jumbleview »
Ky projekt tregon se si të kontrolloni dy LED me anode të zakonshme me tre ngjyra 10 mm (sy shumëngjyrësh të Pumpkin Halloween Glitter) me çipin Attiny85. Qëllimi i projektit është futja e lexuesit në artin e programimit të njëkohshëm dhe në përdorimin e bibliotekës së prototreads Adam Dunkels. Ky projekt supozon se lexuesi di për kontrolluesit AVR 8-bit, mund të shkruajë ndonjë program C dhe ka një përvojë me studion Atmel.
Kodi i projektit i publikuar në GitHub:
Furnizimet
Para se të programoni, ende duhet të ndërtoni qarkun. Këtu janë përbërësit:
- Kontrolluesi Attiny85 (çdo furnizues elektronik).
- Dy LED me tre ngjyra 10 mm me anodë të zakonshme. LEDs Adafruit
- Rezistentët 100 Ohm, 120 Ohm, 150 Ohm 0.125 ose 0.250 Wt (çdo furnizues elektronik).
- Koka me gjashtë kunja për ndërfaqen AVR ISP. Mund të bëhet nga kjo titull Adafruit
- Disa tabelë buke ose tabelë shablloni të shtypur. Kam përdorur këtë
- Ndërfaqja AVR ISP MKII dhe Atmel Studio 6.1 (Versioni i mëvonshëm gjithashtu duhet të funksionojë).
Hapi 1: Rrethi
Dizajni përdor pesë kunja çipi:
- Dy kunja të përdorura për të kontrolluar anodat: secila anodë LED e bashkangjitur në kunjin e dedikuar.
- Tre kunja të ngjitura (përmes rezistencave) në katodat LED (e njëjta katodë me ngjyrë të secilës led të bashkangjitur në të njëjtën kunj)
Dikush do të pyeste: pse të mos përdorni të gjashtë kunjat e hyrjes/daljes së çipit kështu që anodat LED do të lidhen drejtpërdrejt me +5 v dhe secila katodë do të ketë pinin e saj të dedikuar? Kjo do ta bëjë programimin të drejtpërdrejtë. Mjerisht, ekziston problemi: kunja PB5 (RESET) është një kunj i dobët i aftë të sigurojë vetëm ~ 2 mA të rrymës, ndërsa ka nevojë të ketë ~ 20 mA.
Sigurisht që mund të ndërtohet një përforcues transistor për këtë kunj të dobët, por unë vetë kur është e mundur preferoj ta zgjidh problemin përmes kodit.
Hapi 2: Diagrami i kohës
Diagrami i kohës na ndihmon të kuptojmë se çfarë kemi nevojë për të programuar.
Dy rreshtat e parë në diagram tregojnë ndryshimin e tensionit në anodat LED. Tensioni në kunjat e lidhur me anodat LED luhatet me frekuencë ~ 250 Hz. Ky lëkundje e tensionit për LED -in e majtë është e kundërta e lëkundjes së LED -it të djathtë. Kur tensioni në anodë është i lartë LED përkatës mund të jetë i ndritshëm. Kur është i ulët LED përkatës është i errët. Kjo do të thotë që çdo LED mund të jetë e ndritshme gjatë intervalit 2 milisekonda dhe është e errët gjatë 2 milisekondave të tjera. Për shkak se syri i njeriut ka një inerci, pulsimi 250 Hz nuk vërehet nga vëzhguesi. Tre rreshtat e poshtëm në diagram tregojnë ndryshimin e tensionit në kunjat e lidhur me katodat LED. Le të shikojmë kolonën e parë të diagramit. Ajo tregon rastin kur LED i majtë është me ngjyrë të kuqe dhe LED i djathtë me ngjyrë jeshile. Këtu katodat RED qëndrojnë të ulëta ndërsa anoda e majtë është e lartë, katoda GREEN qëndron e ulët ndërsa anoda e djathtë është e lartë, dhe katoda BLUE qëndron e ulët gjatë gjithë kohës. Kolonat e tjera në diagram tregojnë kombinime të tensionit të katodës dhe anodës për ngjyra të ndryshme.
Siç mund ta shohim, ekziston një ndërvarësi nga gjendja e kunjave. Pa ndonjë kuadër nuk do të ishte e lehtë të zgjidhej. Dhe kjo është ajo ku biblioteka protothread vjen në ndihmë.
Hapi 3: Programimi. Makro dhe përkufizime
Shembulli në hapat e programimit paraqet një version pak të thjeshtuar. Programi është shkurtuar dhe një përkufizim simbolik zëvendësohet me konstante eksplicite.
Le të fillojmë nga e para. Programi përfshin skedarë që vijnë me Atmel Studio si dhe titull të bibliotekës protothread. Tjetra ka dy makro për të manipuluar nivelet e kunjave dhe disa përkufizime për t'i dhënë emra logjikë sinjaleve pin. Deri tani asgjë e veçantë.
Hapi 4: Programimi. Rrethi kryesor
Pastaj le të shikojmë në fund për të parë se çfarë përmban procedura kryesore.
Funksioni kryesor pas kryerjes së një fillimi qëndron në lak përgjithmonë. Në atë lak bën hapat e mëposhtëm:
- Thërret rutinën protothread për LED të majtë. Ndryshon tensionin e disa kunjave.
- Bëni dy milisekonda vonesë. Nuk ka ndryshim në tensionin e kunjit.
- Thërret protothread për LED të duhur. Ndryshon disa tensione pin.
- Bëni 2 MS vonesë. Nuk ka ndryshim në tensionin e kunjit.
Hapi 5: Programimi. Funksionet ndihmëse
Para se të fillojmë të diskutojmë prototreads ne duhet të shikojmë në disa funksione ndihmëse. Së pari ka funksione për të vendosur një ngjyrë të veçantë. Ato janë të drejtpërdrejta. Ka po aq funksione sa numri i ngjyrave të mbështetura (shtatë) dhe një funksion më shumë për të vendosur LED të errët (NoColor).
Dhe ka një funksion më shumë i cili do të thirret drejtpërdrejt nga rutina protothread. Emri i tij është DoAndCountdown ().
Përdorimi teknikisht i një funksioni të tillë nuk është i detyrueshëm, por e pashë të përshtatshëm. Ai ka tre argumente:
- Treguesi për funksionimin e cilësimit të ngjyrës LED (si RedColor ose GreenColor ose etj.)
- Vlera fillestare e numëruesit të kundërt: numri i sa herë ky funksion duhet të thirret në një fazë të veçantë prototread.
- Treguesi për numëruesin e kundërt. Supozohet se kur ka ndryshim në ngjyrën, numëruesi i kundërt është 0, kështu që në fillim kodi i përsëritjes do t'i caktojë atij numëruesi vlerën fillestare. Pas çdo numëruesi të përsëritjes zvogëlohet.
Funksioni DoAndCountdown () kthen vlerën e numëruesit të kundërt.
Hapi 6: Programimi. Rutinat Protothread
Dhe këtu është thelbi i kornizës: rutina e prototreadit. Për hir të thjeshtësisë, shembulli kufizohet vetëm në tre hapa: për ndryshimin e ngjyrës në KUQ, në GREEN dhe në BLUE.
Funksioni thirret me dy argumente:
- Treguesi për strukturën protothread. Ajo strukturë u inicializua nga main para se të fillonte laku kryesor.
- Treguesi për numëruesin e kundërt. Ajo ishte vendosur në 0 nga kryesore para se të fillonte laku kryesor.
Funksioni vendos tensione për ta bërë LED -in e majtë aktiv dhe më pas fillon segmentin e prototreadit. Ky segment është midis makrove PT_BEGIN dhe PT_END. Brenda ka një kod i cili në rastin tonë përsërit vetëm makro PT_WAIT_UNTIL. Këto makro funksionojnë më poshtë:
- Thirrja e funksionit DoAndCountdown. Kjo vendos tensionin në katodat LED për të lëshuar ngjyrë të veçantë.
- Rezultati i kthyer në krahasim me 0. Nëse gjendja është 'false' funksioni i prototreadit menjëherë kthehet dhe jep kontroll në lakin kryesor.
- Kur protothread thirret herën tjetër ai përsëri ekzekuton kodin para PT_BEGIN, pastaj hidhet direkt brenda makrove PT_WAIT_UNTIL nga të cilat u kthye herën e fundit.
- Veprime të tilla përsëriten derisa rezultati i DoAndCountdown të jetë 0. Në atë rast nuk ka kthim, programi qëndron në protothread dhe ekzekuton rreshtin tjetër të kodit. Në rastin tonë është PT_WAIT_UNTIL tjetër, por në përgjithësi mund të jetë pothuajse çdo kod C.
- Në ekzekutimin fillestar të numëruesit të dytë të kundërt PT_WAIT_UNTIL është 0, kështu që procedura DoAndCountdown () e vendos atë në vlerën fillestare. Makrot e dyta përsëri do të ekzekutohen 250 herë derisa numëruesi i kundërt arrin 0.
- Gjendja e strukturës pt rivendoset sapo kontrolli të arrijë në makro PT_END. Kur thirret funksioni protothread herën tjetër segmenti protothread fillon të ekzekutojë vijën e kodit menjëherë pas PT_BEGIN.
Ekziston një rutinë e ngjashme prototread për LED -in e duhur. Në shembullin tonë ai thjesht zbaton renditje të ndryshme të ngjyrave, por nëse mund ta bëjmë atë krejtësisht ndryshe: nuk ka bashkim të ngushtë midis rutinës LED të majtë dhe të djathtë.
Hapi 7: Brendshme
I gjithë programi është më pak se 200 rreshta kod (me komente dhe rreshta bosh) dhe merr më pak se 20% të kujtesës së kodit Attiny85. Nëse është e nevojshme, është e mundur të përdoren këtu edhe disa rutina të tjera të prototreadit dhe t'u caktohet atyre logjikë shumë më e ndërlikuar.
Biblioteka Protothreads është forma më e thjeshtë e programimit të njëkohshëm kompjuterik. Programimi i njëkohshëm është një qasje që lejon ndarjen e programit në pjesë logjike: ndonjëherë ato quhen koroutina, herë fije, ndonjëherë detyra. Parimi është që secila detyrë e tillë mund të ndajë të njëjtën fuqi procesori duke e mbajtur kodin pak a shumë linear dhe të pavarur nga pjesët e tjera. Detyrat nga pikëpamja logjike mund të ekzekutohen njëkohësisht.
Për sistemet e avancuara kontrollet e detyrave të tilla kryhen ose nga kerneli i sistemit operativ ose nga koha e ekzekutimit të gjuhës e përfshirë në ekzekutues nga përpiluesi. Por në rast të protothreads, programuesi i aplikacionit e kontrollon atë me dorë duke përdorur bibliotekën e makro protothreads në rutinat e detyrave dhe duke thirrur rutina të tilla (zakonisht jashtë lakut kryesor).
Ju ndoshta dëshironi të dini se si funksionon protothread në të vërtetë? Ku fshihet magjia? Protothreads mbështeten në veçori të veçanta të gjuhës C: fakti që deklarata e rastit C switch mund të ngulitet në if ose ndonjë bllok tjetër (si while ose for). Detajet që mund të gjeni në faqen e Adam Dunkels
Pjesët e brendshme elektronike të këtij projekti janë shumë të thjeshta. Fotografia e mësipërme ju jep një ide. Jam i sigurt që mund të bësh më mirë.
Recommended:
Një kungull IoT Halloween - Kontrolloni LED me një aplikacion Arduino MKR1000 dhe Blynk ???: 4 hapa (me fotografi)
Një kungull IoT Halloween | Kontrolloni LED me një aplikacion Arduino MKR1000 dhe Blynk ???: Përshëndetje të gjithëve, Disa javë më parë ishte Halloween dhe duke ndjekur traditën unë gdhenda një kungull të bukur për ballkonin tim. Por duke pasur kungullin tim në natyrë, kuptova se ishte mjaft e bezdisshme të duhej të dilja çdo mbrëmje për të ndezur qirinjën. Edhe une
Kungulli i Halloween me një sy animatronik në lëvizje - Kjo kungull mund të rrotullojë syrin!: 10 hapa (me fotografi)
Kungulli i Halloween me një sy animatronik në lëvizje | Kjo kungull mund të rrotullojë syrin!: Në këtë Instructable, ju do të mësoni se si të bëni një kungull Halloween që tmerron të gjithë kur lëviz syri i saj. Rregulloni distancën e shkaktimit të sensorit tejzanor në vlerën e duhur (hapi 9), dhe kungulli juaj do të ngurtësojë këdo që guxon të marrë ëmbëlsira
Krimba shumëngjyrësh për Susin: 4 hapa
Krimba shumëngjyrësh për Susin: Lasst farbige Würmer sausen! Ein farbiger Punkt läuft immer im Kreis herum, wobei er einen immer dunkler werdenden Lichtschweif hinter sich herzieht. Im Laufe der Zeit ändert dieses Würmchen langsam seine Farbe, sodass er den ganze Regenbogen durchm
Një makinë për frikësimin e Halloween -it duke përdorur një PIR, një kungull të printuar në 3D dhe një Pranker audio të pajtueshme me Troll Arduino/Bordi praktik i Shakasë.: 5 Hapa
Një makinë për frikësimin e Halloween -it duke përdorur një PIR, një kungull të printuar në 3D dhe Tran Arduino Compatible Audio Pranker/Joke Board praktike .: Bordi Troll i krijuar nga Patrick Thomas Mitchell i EngineeringShock Electronics, dhe u financua plotësisht në Kickstarter jo shumë kohë më parë. Unë mora shpërblimin disa javë më parë për të ndihmuar në shkrimin e disa shembujve të përdorimit dhe ndërtimin e një biblioteke Arduino në një përpjekje
Shtoni drita dhe muzikë drithëruese në Jack-O-Lantern tuaj-Pa bashkim ose programim (nëse nuk dëshironi): 9 hapa (me fotografi)
Shtoni drita dhe muzikë drithëruese në Jack-O-Lantern-in tuaj-Asnjë bashkim ose programim (përveç nëse dëshironi): Bëni Jack-O-Lantern më të frikshëm në rrugën tuaj duke shtuar drita të ndezura dhe muzikë drithëruese! Kjo është gjithashtu një mënyrë e shkëlqyeshme për të provuar Arduino dhe elektronikë të programueshëm sepse i gjithë projekti mund të përfundojë pa shkruar kod ose saldim - të gjitha