Obsah:
- Zásoby
- Krok 1: Obkročmo
- Krok 2: Časový diagram
- Krok 3: Programovanie. Makrá a definície
- Krok 4: Programovanie. Hlavná slučka
- Krok 5: Programovanie. Pomocné funkcie
- Krok 6: Programovanie. Rutiny protothread
- Krok 7: Interné
Video: Súbežné programovanie Attiny85 alebo tekvica s viacfarebnými očami: 7 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:55
Od jumbleviewJumbleview.infoSledovať viac od autora:
O: Pracujem ako softvérový inžinier v jednej zo spoločností v Bay Area (Kalifornia). Kedykoľvek mám čas, rád naprogramujem mikrokontroléry, vyrobím mechanické hračky a urobím niekoľko domácich projektov. Viac o jumbleview »
Tento projekt ukazuje, ako pomocou čipu Attiny85 ovládať dve 10 mm trojfarebné LED so spoločnou anódou (viacfarebné oči Pumpkin Halloween Glitter). Cieľom projektu je zoznámiť čitateľa s umením súbežného programovania a s využitím knižnice protivlákn Adam Dunkels. Tento projekt predpokladá, že čitateľ vie o 8-bitových radičoch AVR, dokáže napísať nejaký C-program a má určité skúsenosti so štúdiom Atmel.
Kód projektu zverejnený na GitHub:
Zásoby
Pred programovaním je potrebné ešte zostaviť obvod. Tu sú komponenty:
- Ovládač Attiny85 (akýkoľvek elektronický dodávateľ).
- Dve trojfarebné 10mm diódy LED so spoločnou anódou. LED diódy Adafruit
- Rezistory 100 Ohm, 120 Ohm, 150 Ohm 0,125 alebo 0,250 Wt (akýkoľvek elektronický dodávateľ).
- Šesťpinová hlavička pre rozhranie AVR ISP. Môžu byť vyrobené z tejto hlavičky Adafruit
- Nejaká chlebová doska alebo doska s vytlačenými šablónami. Použil som tento
- Rozhranie AVR ISP MKII a Atmel Studio 6.1 (Mala by fungovať aj novšia verzia).
Krok 1: Obkročmo
Dizajn používa päť čipových kolíkov:
- Dva piny používané na ovládanie anód: každá LED anóda je pripevnená k vyhradenému kolíku.
- Tri kolíky pripevnené (cez odpory) ku katódam LED (rovnaká farebná katóda pre každú LED pripojenú k rovnakému kolíku)
Jeden by sa opýtal: prečo nevyužiť všetkých šesť vstupných/výstupných pinov čipu, aby boli LED anódy pripojené priamo k +5 v a každá katóda mala svoj vyhradený kolík? Vďaka tomu bude programovanie jednoduché. Bohužiaľ, je tu problém: kolík PB5 (RESET) je slabý kolík, ktorý môže poskytovať iba ~ 2 mA prúdu, zatiaľ čo je potrebné mať ~ 20 mA.
Samozrejme, pre tento slabý kolík je možné postaviť tranzistorový zosilňovač, ale sám, kedykoľvek je to možné, uprednostňuje riešenie problému prostredníctvom kódu.
Krok 2: Časový diagram
Časový diagram nám pomáha pochopiť, čo potrebujeme naprogramovať.
Dva horné riadky na diagrame ukazujú zmenu napätia na LED anódach. Napätie na kolíkoch pripojených k LED anódam osciluje s frekvenciou ~ 250 Hz. Toto napätie kmitania pre ľavú LED diódu je opačné k oscilácii pravej LED. Keď je napätie na anóde vysoké, zodpovedajúca LED dióda môže svietiť. Keď je nízka, zodpovedajúca LED dióda je tmavá. To znamená, že každá LED dióda môže byť jasná počas intervalu 2 milisekundy a tmavá počas ďalších 2 milisekúnd. Pretože ľudské oko má určitú zotrvačnosť, 250 Hz blikanie nie je pozorovateľom viditeľné. Spodné tri rady na diagrame ukazujú zmenu napätia na kolíkoch pripojených ku katódam LED. Pozrime sa na prvý stĺpec diagramu. Zobrazuje prípad, keď je ľavá LED dióda červená a pravá LED zelená. Tu ČERVENÉ katódy zostávajú nízke, zatiaľ čo ľavá anóda je vysoká, ZELENÁ katóda zostáva nízka, zatiaľ čo pravá anóda je vysoká, a MODRÁ katóda zostáva stále nízka. Ďalšie stĺpce na diagrame ukazujú kombinácie katódového a anódového napätia pre rôzne farby.
Ako vidíme, existuje závislosť na stave kolíkov. Bez nejakého rámca by nebolo ľahké to vyriešiť. A práve tu prichádza na rad protothreadová knižnica.
Krok 3: Programovanie. Makrá a definície
Príklad v krokoch programovania predstavuje mierne zjednodušenú verziu. Program je skrátený a niektoré symbolické definície sú nahradené explicitnými konštantami.
Začnime od začiatku. Program obsahuje súbory dodávané s Atmel Studio a tiež hlavičku protreadovej knižnice. Ďalej sú tu dve makrá na manipuláciu s úrovňami pinov a niektoré definície na logické pomenovanie signálov pinov. Zatiaľ nič zvláštne.
Krok 4: Programovanie. Hlavná slučka
Potom sa pozrime na koniec, aby sme zistili, čo obsahuje hlavný postup.
Hlavná funkcia po vykonaní nejakej inicializácie zostane v navždy cyklu. V tejto slučke robí ďalšie kroky:
- Vyvoláva rutinu v protothreaku pre ľavú diódu LED. Mení napätie niektorých kolíkov.
- Urobte dve milisekundy oneskorenie. Na kolíkovom napätí nedochádza k žiadnej zmene.
- Vyvoláva protothread pre správnu LED diódu. Mení určité napätie na kolíku.
- Urobte 2 MS meškanie. Na kolíkovom napätí nedochádza k žiadnej zmene.
Krok 5: Programovanie. Pomocné funkcie
Predtým, ako začneme diskutovať o protothreads, musíme sa pozrieť na niektoré pomocné funkcie. Najprv sú tu funkcie na nastavenie konkrétnej farby. Sú priamočiare. Existuje toľko funkcií, ako je počet podporovaných farieb (sedem) a ešte jedna funkcia na nastavenie tmavej LED diódy (NoColor).
A je tu ešte jedna funkcia, ktorú bude priamo vyvolávať rutina v protothread. Jeho názov je DoAndCountdown ().
Technicky povedané, používanie takejto funkcie nie je povinné, ale považoval som to za pohodlné. Má tri argumenty:
- Ukazovateľ na nastavenie funkcie LED diódy (napríklad RedColor alebo GreenColor a pod.)
- Počiatočná hodnota reverzného počítadla: počet, koľkokrát sa musí táto funkcia vyvolať v konkrétnej fáze protothread.
- Ukazovateľ obrátiť počítadlo. Predpokladá sa, že keď dôjde k zmene farby, reverzný čítač je 0, takže najskôr iteračný kód priradí počiatočnú hodnotu tohto čítača. Po každom iteračnom počítadle sa zníži.
Funkcia DoAndCountdown () vracia hodnotu reverzného počítadla.
Krok 6: Programovanie. Rutiny protothread
A tu je jadro rámca: rutina protothread. Kvôli jednoduchosti sú príklady obmedzené iba na tri kroky: na zmenu farby na ČERVENÚ, ZELENÚ a MODRÚ.
Funkcia sa vyvoláva pomocou dvoch argumentov:
- Ukazovateľ na štruktúru vlákna. Táto štruktúra bola inicializovaná main pred spustením hlavnej slučky.
- Ukazovateľ obrátiť počítadlo. Pred spustením hlavnej slučky to bolo hlavným nastavením na 0.
Funkcia nastaví napätie tak, aby bola aktívna ľavá dióda LED, a potom spustí protivláknový segment. Tento segment je medzi makrami PT_BEGIN a PT_END. Vnútri je nejaký kód, ktorý v našom prípade opakuje iba makrá PT_WAIT_UNTIL. Toto makro vykoná nasledujúce:
- Vyvolanie funkcie DoAndCountdown. To nastavuje napätie na LED katódach tak, aby vyžarovali konkrétnu farbu.
- Vrátený výsledok v porovnaní s 0. Ak je podmienka „falošná“funkcia protothread, funkcia sa okamžite vráti a poskytne kontrolu hlavnej slučke.
- Pri nasledujúcom vyvolaní protothread opäť spustí kód pred PT_BEGIN, potom skočí priamo do makier PT_WAIT_UNTIL, z ktorých sa naposledy vrátil.
- Také akcie sa opakujú, kým výsledok DoAndCountdown nie je 0. V takom prípade neexistuje návrat, program zostane v protothread a vykoná ďalší riadok kódu. V našom prípade je to ďalší PT_WAIT_UNTIL, ale vo všeobecnosti to môže byť takmer akýkoľvek kód C.
- Pri počiatočnom spustení druhého reverzného počítadla PT_WAIT_UNTIL je 0, takže procedúra DoAndCountdown () ho nastavila na počiatočnú hodnotu. Druhé makrá sa znova vykonajú 250 -krát, kým počítadlo obrátok nedosiahne 0.
- Stav struct pt sa resetuje, akonáhle ovládací prvok dosiahne makrá PT_END. Keď sa funkcia protothread vyvolá nabudúce, segment protothread začne vykonávať riadok kódu hneď za PT_BEGIN.
Pre správnu LED diódu existuje podobná rutina pre protlačenie vlákna. V našom prípade iba presadzuje rôzne poradie farieb, ale ak to môžeme urobiť úplne inak: neexistuje žiadna tesná väzba medzi ľavou a pravou rutinou LED.
Krok 7: Interné
Celý program má menej ako 200 riadkov kódu (s komentármi a prázdnymi riadkami) a zaberá menej ako 20% pamäte kódu Attiny85. V prípade potreby je tu možné použiť niekoľko ďalších protothreadových rutín a priradiť im oveľa komplikovanejšiu logiku.
Knižnica Protothreads je najjednoduchšia forma súbežného počítačového programovania. Súbežné programovanie je prístup, ktorý umožňuje rozdeliť program na logické časti: niekedy sa nazývajú korutíny, niekedy vlákno, niekedy úlohy. Platí zásada, že každá taká úloha môže zdieľať rovnaký výkon procesora, pričom kód zostane viac -menej lineárny a nezávislý na ostatných častiach. Úlohy z logického hľadiska je možné vykonávať súčasne.
V prípade pokročilých systémov je ovládanie týchto úloh vykonávané buď jadrom operačného systému, alebo jazykovým runtime vloženým do spustiteľného kompilátorom. Ale v prípade protothreads programátor to ovláda ručne pomocou knižnice makier protothreads v rutinách úloh a vyvolávaním takýchto rutín (zvyčajne mimo hlavnej slučky).
Pravdepodobne chcete vedieť, ako protothread skutočne funguje? Kde je skrytá mágia? Protothreads sa spoliehajú na špeciálnu funkciu jazyka C: skutočnosť, že príkaz prípadu prepínača C môže byť vložený do bloku if alebo iného bloku (napríklad while alebo for). Podrobnosti nájdete na stránke Adam Dunkels
Interné prvky elektroniky tohto projektu sú veľmi jednoduché. Fotografia vyššie vám dáva určité vodítko. Som si istý, že to môžeš urobiť lepšie.
Odporúča:
Tekvica na Halloween s pohyblivým okom Animatronic - Táto tekvica môže prevrátiť očami!: 10 krokov (s obrázkami)
Tekvica na Halloween s pohyblivým okom Animatronic | Táto tekvica môže prevrátiť očami !: V tomto návode sa naučíte, ako vyrobiť halloweensku tekvicu, ktorá desí každého, keď sa jej oko pohne. Upravte spúšťaciu vzdialenosť ultrazvukového senzora na správnu hodnotu (krok 9) a vaša tekvica skamenie každého, kto si trúfa vziať si sviečku
ATtiny85 Nositeľné zariadenie na sledovanie vibrácií, sledovanie a programovanie ATtiny85 s Arduino Uno: 4 kroky (s obrázkami)
ATtiny85 Nositeľné hodinky na sledovanie vibrácií a programovanie ATtiny85 s Arduino Uno: Ako vyrobiť hodinky na sledovanie nositeľnej aktivity? Toto je nositeľný gadget navrhnutý tak, aby vibroval, keď zistí stagnáciu. Trávite väčšinu času pri počítači ako ja? Sedíte hodiny bez toho, aby ste si to uvedomovali? Potom je toto zariadenie
Jacques Pierre - internetom riadená hackerská tekvica: 6 krokov
Jacques Pierre - hackerská tekvica ovládaná internetom: Oslávme Halloween pomocou hackerskej tekvice riadenej internetom s názvom Jacques Pierre! Nasleduje prehľad obsahu: Projektové video Svetlá na vyrezávanie tekvíc + fúzy Servá s nožmi LetsRobot Soľné cesto Nechajte hackovanie začať
Alexa-kontrolovaná tekvica Adam Savage: 5 krokov (s obrázkami)
Alexa-kontrolovaný Adam Savage Tekvica: Všetky svetlá v mojom dome sú chytré, takže som si na ne celkom zvykol kričať, aby sa zapli a vypli, ale pri pohľade na svetlo, ktoré nie je, vypadám hlúpo. . A vyzerám obzvlášť hlúpo, keď kričím na sviečky. Normálne to nie je príliš mu
Pumpktris - Tetrisova tekvica: 10 krokov (s obrázkami)
Pumpktris - Tetrisová tekvica: Kto chce šklebíce sa tváre a sviečky, keď si na Halloween môžete dať interaktívnu tekvicu? Zahrajte si svoju obľúbenú hru na stohovanie blokov na mriežke 8x16 vytesanej do tváre tekvice, osvetlenej diódami LED a používajúcej stonku ako ovládač. Toto je moderná