Obsah:
- Zásoby
- Krok 1: Circut
- Krok 2: Časový diagram
- Krok 3: Programování. Makra a definice
- Krok 4: Programování. Hlavní smyčka
- Krok 5: Programování. Pomocné funkce
- Krok 6: Programování. Rutiny protothread
- Krok 7: Interní
Video: Souběžné programování Attiny85 nebo dýně s vícebarevnými očima: 7 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:18
Od jumbleviewJumbleview.infoSledovat více od autora:
O: Pracuji jako softwarový inženýr v jedné ze společností Bay Area (Kalifornie). Kdykoli mám čas, rád programuji mikrořadiče, stavím mechanické hračky a provádím nějaké projekty domácích úprav. Více o jumbleview »
Tento projekt ukazuje, jak pomocí čipu Attiny85 ovládat dvě 10mm tříbarevné běžné anody LED (vícebarevné oči Pumpkin Halloween Glitter). Cílem projektu je seznámit čtenáře s uměním souběžného programování a s využitím knihovny protothreads Adama Dunkelse. Tento projekt předpokládá, že čtenář ví o 8bitových řadičích AVR, umí napsat nějaký C-program a má určité zkušenosti se studiem Atmel.
Kód projektu zveřejněný na GitHub:
Zásoby
Před programováním je ještě potřeba vybudovat obvod. Zde jsou komponenty:
- Ovladač Attiny85 (jakýkoli elektronický dodavatel).
- Dvě tříbarevné 10mm LED se společnou anodou. LED diody Adafruit
- Rezistory 100 Ohm, 120 Ohm, 150 Ohm 0,125 nebo 0,250 Wt (jakýkoli elektronický dodavatel).
- Šestipinový konektor pro rozhraní AVR ISP. Lze vyrobit z této hlavičky Adafruit
- Nějaká chlebová deska nebo deska s tištěnými šablonami. Použil jsem tento
- Rozhraní AVR ISP MKII a Atmel Studio 6.1 (měla by fungovat i novější verze).
Krok 1: Circut
Design využívá pět čipových pinů:
- Dva piny používané k ovládání anod: každá LED anoda připojená k vyhrazenému kolíku.
- Tři piny připojené (přes odpory) ke katodám LED (stejná barevná katoda každé LED připojena ke stejnému kolíku)
Někdo by se zeptal: proč nevyužít všech šest vstupních/výstupních pinů čipu, aby LED anody byly připojeny přímo k +5 V a každá katoda měla svůj vyhrazený pin? Díky tomu bude programování jednoduché. Bohužel je tu problém: kolík PB5 (RESET) je slabý kolík, který může poskytovat pouze ~ 2 mA proudu, zatímco je třeba mít ~ 20 mA.
Samozřejmě lze pro tento slabý pin postavit tranzistorový zesilovač, ale já sám, kdykoli je to možné, dávám přednost řešení problému prostřednictvím kódu.
Krok 2: Časový diagram
Časový diagram nám pomáhá pochopit, co potřebujeme naprogramovat.
Horní dva řádky diagramu ukazují změnu napětí na LED anodách. Napětí na pinech připojených k LED anodám osciluje s frekvencí ~ 250 Hz. Toto napěťové oscilace pro levou LED je opakem oscilace pravé LED. Když je napětí na anodě vysoké, odpovídající LED může svítit. Když je nízká, odpovídající LED dioda je tmavá. To znamená, že každá LED může být jasná během 2 milisekundového intervalu a tmavá během dalších 2 milisekund. Protože lidské oko má určitou setrvačnost, pozorovatel nepozoruje blikání 250 Hz. Spodní tři řádky diagramu ukazují změnu napětí na pinech připojených ke katodám LED. Podívejme se na první sloupec diagramu. Ukazuje případ, kdy je levá LED červená a pravá LED zelená. Zde ČERVENÉ katody zůstávají nízké, zatímco levá anoda je vysoká, ZELENÁ katoda zůstává nízká, zatímco pravá anoda je vysoká, a MODRÁ katoda zůstává nízko po celou dobu. Další sloupce na diagramu ukazují kombinace katodového a anodového napětí pro různé barvy.
Jak vidíme, existuje vzájemná závislost na stavu pinů. Bez nějakého rámce by nebylo snadné to vyřešit. A právě tam se knihovna protothread hodí.
Krok 3: Programování. Makra a definice
Příklad v programovacích krocích představuje mírně zjednodušenou verzi. Program je zkrácen a některá symbolická definice nahrazena explicitními konstantami.
Začněme od začátku. Program obsahuje soubory dodávané s Atmel Studio a také záhlaví knihovny protothread. Dále jsou zde dvě makra pro manipulaci s úrovněmi pinů a některé definice pro přidělování logických názvů signálům pinů. Zatím nic zvláštního.
Krok 4: Programování. Hlavní smyčka
Podívejme se tedy na konec, abychom zjistili, co hlavní postup obsahuje.
Funkce hlavní po provedení určité inicializace zůstane ve smyčce navždy. V této smyčce provede další kroky:
- Vyvolá rutinu protothread pro levou LED. Změní napětí některých pinů.
- Udělejte dvě milisekundy zpoždění. Na napětí kolíku nedochází ke změně.
- Vyvolá protothread pro správnou LED. Mění to nějaké pinové napětí.
- Zpoždění 2 MS. Na napětí kolíku nedochází ke změně.
Krok 5: Programování. Pomocné funkce
Než začneme diskutovat o protothreads, musíme se podívat na některé pomocné funkce. Nejprve jsou funkce pro nastavení konkrétní barvy. Jsou přímočaré. Těchto funkcí je tolik, kolik podporovaných barev (sedm) a ještě jedna funkce pro nastavení tmavé LED (NoColor).
A je tu ještě jedna funkce, která bude přímo vyvolána rutinou protothread. Jmenuje se DoAndCountdown ().
Technicky vzato, použití takové funkce není povinné, ale shledal jsem to pohodlným. Má tři argumenty:
- Ukazatel na funkci nastavení barvy LED (jako RedColor nebo GreenColor atd.)
- Počáteční hodnota reverzního čítače: počet, kolikrát musí být tato funkce vyvolána v konkrétní fázi protothread.
- Ukazatel na obrácené počítadlo. Předpokládá se, že když dojde ke změně barvy, je zpětný čítač 0, takže nejprve iterační kód přiřadí počáteční hodnotu tohoto čítače. Po každém iteračním čítači se sníží.
Funkce DoAndCountdown () vrací hodnotu reverzního čítače.
Krok 6: Programování. Rutiny protothread
A tady je základní jádro: rutina protothread. Pro zjednodušení je příklad omezen pouze na tři kroky: pro změnu barvy na ČERVENOU, ZELENOU a MODROU.
Funkce je vyvolána dvěma argumenty:
- Ukazatel na strukturu protothread. Tato struktura byla inicializována hlavní před spuštěním hlavní smyčky.
- Ukazatel na obrácené počítadlo. Před spuštěním hlavní smyčky byla hlavní nastavena na 0.
Funkce nastavuje napětí tak, aby byla aktivní levá LED, a poté spustí protothreadový segment. Tento segment je mezi makry PT_BEGIN a PT_END. Uvnitř je nějaký kód, který v našem případě opakuje pouze makra PT_WAIT_UNTIL. Tato makra provádí následující:
- Vyvolání funkce DoAndCountdown. To nastavuje napětí na LED katodách, aby vyzařovaly konkrétní barvu.
- Vrácený výsledek ve srovnání s 0. Pokud je podmínka „nepravá“funkce protothread, okamžitě se vrátí a poskytne kontrolu hlavní smyčce.
- Když je protothread vyvolán příště, znovu spustí kód před PT_BEGIN, pak skočí přímo do maker PT_WAIT_UNTIL, ze kterých se vrátil naposledy.
- Takové akce se opakují, dokud výsledek DoAndCountdown není 0. V takovém případě není návrat, program zůstane v protothread a provede další řádek kódu. V našem případě je to další PT_WAIT_UNTIL, ale obecně to může být téměř jakýkoli kód C.
- Při počátečním spuštění druhého reverzního čítače PT_WAIT_UNTIL je 0, takže procedura DoAndCountdown () jej nastaví na počáteční hodnotu. Druhá makra budou znovu provedena 250krát, dokud počítadlo zpětného chodu nedosáhne 0.
- Stav struct pt se resetuje, jakmile ovládání dosáhne maker PT_END. Když se funkce protothread vyvolá příště, začne segment protothread spouštět řádek kódu hned za PT_BEGIN.
Pro pravou LED je podobná rutina protothread. V našem případě pouze vynucuje různé pořadí barev, ale pokud to můžeme udělat úplně jinak: neexistuje žádná těsná vazba mezi levou a pravou LED rutinou.
Krok 7: Interní
Celý program má méně než 200 řádků kódu (s komentáři a prázdnými řádky) a zabere méně než 20% paměti kódu Attiny85. V případě potřeby je možné zde použít několik dalších protothreadových rutin a přiřadit jim mnohem komplikovanější logiku.
Knihovna Protothreads je nejjednodušší formou souběžného počítačového programování. Souběžné programování je přístup, který umožňuje rozdělit program na logické části: někdy se jim říká korutiny, někdy vlákno, někdy úkoly. Princip spočívá v tom, že každý takový úkol může sdílet stejný výkon procesoru, přičemž kód zůstává víceméně lineární a nezávislý na ostatních částech. Úkoly z logického hlediska lze provádět současně.
U pokročilých systémů je ovládání těchto úloh prováděno buď jádrem operačního systému, nebo jazykovým modulem runtime vloženým do spustitelného kompilátoru. Ale v případě aplikace protothreads ji programátor ovládá ručně pomocí knihovny maker protothreads v rutinách úkolů a vyvoláváním těchto rutin (obvykle mimo hlavní smyčku).
Pravděpodobně chcete vědět, jak protothread ve skutečnosti funguje? Kde se skrývá kouzlo? Protothreads se spoléhají na speciální funkci jazyka C: skutečnost, že příkaz C case case může být vložen do if nebo jiného bloku (jako while nebo for). Podrobnosti najdete na webu Adama Dunkelse
Interní elektronika tohoto projektu je velmi jednoduchá. Něco vám napoví výše uvedená fotografie. Jsem si jistý, že to zvládneš lépe.
Doporučuje:
Halloween dýně s pohyblivým okem Animatronic - Tato dýně může otočit oči!: 10 kroků (s obrázky)
Halloween dýně s pohyblivým okem Animatronic | Tato dýně může otáčet očima !: V tomto návodu se naučíte, jak vyrobit halloweenskou dýni, která děsí každého, když se jí pohne oko. Upravte spouštěcí vzdálenost ultrazvukového senzoru na správnou hodnotu (krok 9) a vaše dýně zkamení každého, kdo se odváží vzít si svíčku
Zajímavé pokyny pro programování programování pro návrháře-ovládání barev: 10 kroků
Zajímavé pokyny pro programování programování pro návrháře-ovládání barev: V předchozích kapitolách jsme si řekli více o tom, jak použít kód k tvarování namísto bodů znalostí o barvě. V této kapitole prozkoumáme tento aspekt znalostí hlouběji
ATtiny85 Nositelné vibrační sledování aktivity Sledování a programování ATtiny85 s Arduino Uno: 4 kroky (s obrázky)
ATtiny85 Wearable Vibration Activity Tracking Watch & Programming ATtiny85 With Arduino Uno: How to make the wearable activity tracking watch? Toto je nositelný gadget navržený tak, aby vibroval, když detekuje stagnaci. Trávíte většinu času na počítači jako já? Sedíte hodiny, aniž byste si to uvědomovali? Pak je toto zařízení f
Ruční faucet nebo faucet s pedálem nebo kohoutek šetřící vodu: 5 kroků
Faucet s ručním nebo pedálovým faucetem nebo kohoutkem na úsporu vody: Jedná se o levný a jednoduchý způsob převodu odcházejícího faucetu na hands-free (hygienický) faucet. Lékaři jej potřebují pro hygienické účely nebo v kuchyni Také podobní zaměstnanci pro Hand-free, pro mytí obou rukou současně a úspora vody Je to
Tablet MacBook nebo DIY Cintiq nebo Homebrew Mac Tablet: 7 kroků
MacBook Tablet nebo DIY Cintiq nebo Homebrew Mac Tablet: Silně inspirovaný doporučeným návodem c4l3b, který byl zase inspirován bongofish, rozhodl jsem se vyzkoušet to samé na mém MacBooku Core 2 Duo. Kroky byly dost odlišné, takže jsem si myslel, že je oprávněný samostatný instruktáž. Taky