Tartalomjegyzék:
- Kellékek
- 1. lépés: Vágás
- 2. lépés: Időzítési diagram
- 3. lépés: Programozás. Makrók és definíciók
- 4. lépés: Programozás. Fő hurok
- 5. lépés: Programozás. Segédfunkciók
- 6. lépés: Programozás. Protothread rutinok
- 7. lépés: Belső
Videó: Attiny85 párhuzamos programozás vagy tök sokszínű szemekkel: 7 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:39
Kövesse a szerző további információit:
Névjegy: Szoftvermérnökként dolgozom az egyik Bay Area (Kalifornia) cégben. Amikor csak időm engedi, szeretek mikrovezérlőket programozni, mechanikus játékokat építeni és néhány lakásfelújítási projektet készíteni. További információ a jumbleview -ról »
Ez a projekt bemutatja, hogyan vezérelhető két 10 mm-es három színű közös anód LED (a Pumpkin Halloween Glitter sokszínű szeme) az Attiny85 chip segítségével. A projekt célja, hogy megismertesse az olvasót az egyidejű programozás művészetével és az Adam Dunkels prototéma könyvtár használatával. Ez a projekt feltételezi, hogy az olvasó ismeri az AVR 8 bites vezérlőit, tud írni néhány C-programot, és van némi tapasztalata az Atmel stúdióban.
A GitHubon közzétett projektkód:
Kellékek
A programozás előtt még ki kell építeni az áramkört. Itt vannak az összetevők:
- Attiny85 vezérlő (bármely elektronikus szállító).
- Két három színű 10 mm -es LED közös anóddal. Adafruit LED -ek
- Ellenállások 100 Ohm, 120 Ohm, 150 Ohm 0,125 vagy 0,250 Wt (bármely elektronikus szállító).
- Hat tűs fejléc az AVR ISP interfészhez. Ebből az Adafruit fejlécből készíthető
- Néhány kenyértábla vagy nyomtatott sablon tábla. Ezt használtam:
- AVR ISP MKII interfész és Atmel Studio 6.1 (a későbbi verziónak is működnie kell).
1. lépés: Vágás
A tervezés öt forgácscsapot használ:
- Két csap az anódok vezérlésére: mindegyik LED -anód a dedikált csaphoz van rögzítve.
- Három érintkező (ellenállásokon keresztül) a LED -ek katódjaihoz (mindegyik LED azonos színű katódja ugyanahhoz a csaphoz rögzítve)
Az ember azt kérdezné: miért nem használja a chip mind a hat ki/be érintkezőjét, hogy a LED -anódok közvetlenül a +5 V -hoz legyenek csatlakoztatva, és minden katódnak meg legyen a saját csapja? Így a programozás egyszerű lesz. Sajnos, ott van a probléma: a PB5 (RESET) érintkező gyenge csap, amely csak ~ 2 mA áramot képes szolgáltatni, míg ~ 20 mA szükséges.
Természetesen lehet építeni tranzisztoros erősítőt ehhez a gyenge csaphoz, de én magam, amikor csak lehetséges, inkább a kódon keresztül oldom meg a problémát.
2. lépés: Időzítési diagram
Az időzítési diagram segít megérteni, hogy mit kell programozni.
A diagram felső két sora a LED -anódok feszültségváltozását mutatja. A LED -anódokhoz csatlakoztatott csapok feszültsége ~ 250 Hz frekvencián oszcillál. Ez a bal oldali LED feszültségingadozása ellentétes a jobb oldali LED oszcillációjával. Ha az anód feszültsége magas, a megfelelő LED világíthat. Amikor alacsony, a megfelelő LED sötét. Ez azt jelenti, hogy minden LED 2 milliszekundum alatt világos lehet, és további 2 milliszekundum alatt sötét. Mivel az emberi szemnek van némi tehetetlensége, a 250 Hz -es villogást a megfigyelő nem észleli. A diagram alsó három sora a LED -ek katódjaihoz csatlakoztatott csapok feszültségváltozását mutatja. Nézzük a diagram első oszlopát. Azt az esetet mutatja, amikor a bal oldali LED piros színű, a jobb oldali LED zöld színű. Itt a PIROS katódok alacsonyak, míg a bal oldali anódok magasak, a ZÖLD katódok alacsonyak, míg a jobb oldali anódok magasak, a KÉK katódok pedig mindig alacsonyan maradnak. A diagram egyéb oszlopai a katód és az anódfeszültség kombinációit mutatják be a különböző színekhez.
Amint látjuk, a csapok állapotától kölcsönös függőség áll fenn. Némi keret nélkül nem lenne könnyű megoldani. És itt jön jól a prototéma könyvtár.
3. lépés: Programozás. Makrók és definíciók
A programozási lépésekben szereplő példa kissé leegyszerűsített változatot jelent. A program lerövidül, és néhány szimbolikus definíciót explicit konstansokkal helyettesítenek.
Kezdjük elölről. A program az Atmel Stúdióval érkező fájlokat, valamint a prototéma könyvtárfejlécet tartalmazza. Ezután két makró van a csapszintek manipulálására és néhány definíció, amelyek logikai neveket adnak a pin jeleknek. Eddig semmi különös.
4. lépés: Programozás. Fő hurok
Akkor nézzük a végét, hogy lássuk, mit tartalmaz a fő eljárás.
A fő funkció némi inicializálás után örök körben marad. Ebben a körben a következő lépéseket hajtja végre:
- Prototread rutin meghívása a bal oldali LED -hez. Megváltoztatja néhány csap feszültségét.
- Késleltessen két ezredmásodpercet. A csapfeszültség nem változik.
- Prototeként hívja elő a megfelelő LED -et. Megváltoztatja a tű feszültségét.
- 2 MS késleltetés. A csapfeszültség nem változik.
5. lépés: Programozás. Segédfunkciók
Mielőtt elkezdenénk a prototémák tárgyalását, meg kell vizsgálnunk néhány segítő funkciót. Először is vannak funkciók az adott szín beállításához. Egyszerűek. Annyi funkció létezik, mint a támogatott színek száma (hét) és egy további funkció a LED sötét beállításához (NoColor).
És van még egy funkció, amelyet a prototéma rutin közvetlenül meghív. A neve DoAndCountdown ().
Technikailag egy ilyen funkció használata nem kötelező, de kényelmesnek találtam. Három érve van:
- Mutató a funkcióbeállítás LED színére (például RedColor vagy GreenColor stb.)
- A fordított számláló kezdeti értéke: az a szám, hogy hányszor kell meghívni ezt a funkciót egy prototéma szakaszban.
- Mutató a fordított számlálóhoz. Feltételezzük, hogy ha megváltozik a szín, akkor a fordított számláló 0, így először az iterációs kód hozzárendeli a számláló kezdeti értékét. Minden iterációs számlálót csökkent.
A DoAndCountdown () függvény a fordított számláló értékét adja vissza.
6. lépés: Programozás. Protothread rutinok
És itt van a keretmag: prototéma rutin. Az egyszerűség kedvéért a példa csak három lépésre korlátozódik: színváltáshoz PIROS, ZÖLD és KÉK színre.
A függvény két érvvel hívható meg:
- Mutató a prototéma szerkezetére. Ezt a struktúrát a main inicializálta, mielőtt a fő hurok elkezdődött.
- Mutató a fordított számlálóhoz. A fő hurok kezdete előtt 0 -ra állította.
A funkció beállítja a feszültségeket, hogy a bal oldali LED aktív legyen, majd elindítja a prototéma szegmenst. Ez a szegmens a PT_BEGIN és PT_END makrók között található. Belül van néhány kód, amely esetünkben csak a PT_WAIT_UNTIL makrókat ismétli. Ez a makró a következő:
- A DoAndCountdown függvény meghívása. Ez beállítja a LED katódok feszültségét, hogy meghatározott színt bocsásson ki.
- Visszaadott eredmény a 0 -hoz képest. Ha a feltétel „hamis”, a prototéma függvény azonnal visszatér, és átadja az irányítást a fő ciklusnak.
- Amikor a prototémát legközelebb meghívja, a PT_BEGIN előtti kódot hajtja végre, majd közvetlenül a PT_WAIT_UNTIL makrókba ugrik, ahonnan legutóbb visszatért.
- Az ilyen műveleteket addig ismételjük, amíg a DoAndCountdown eredménye 0 nem lesz. Ebben az esetben nincs visszatérés, a program prototémában marad, és végrehajtja a kód következő sorát. Esetünkben ez a következő PT_WAIT_UNTIL, de általában véve szinte bármilyen C kód lehet.
- A második PT_WAIT_UNTIL fordított számláló kezdeti végrehajtásakor 0, ezért a DoAndCountdown () eljárás a kezdeti értékre állítja. A második makrókat ismét 250 alkalommal hajtják végre, amíg a fordított számláló el nem éri a 0 értéket.
- A szerkezet pt állapota visszaáll, amint a vezérlés eléri a PT_END makrót. Amikor a protothread függvényt legközelebb meghívja, a protothread szegmens elindítja a kód sorát közvetlenül a PT_BEGIN után.
Hasonló prototéma van a megfelelő LED -hez. Példánkban csak a színek különböző sorrendjét érvényesíti, de ha teljesen másképp csináljuk: nincs szoros kapcsolat a bal és a jobb LED rutin között.
7. lépés: Belső
Az egész program kevesebb mint 200 sornyi kódot tartalmaz (megjegyzésekkel és üres sorokkal), és kevesebb mint 20% -át foglalja el az Attiny85 kódmemóriának. Szükség esetén itt több prototéma rutin alkalmazható, és sokkal bonyolultabb logikát rendelhetünk hozzájuk.
A Protothreads könyvtár a számítógépes párhuzamos programozás legegyszerűbb formája. A párhuzamos programozás olyan megközelítés, amely lehetővé teszi a program logikai részekre bontását: néha korutineknek, néha szálaknak, néha feladatoknak nevezik őket. Az elv az, hogy minden ilyen feladat ugyanazt a processzor -teljesítményt tudja megosztani, miközben a kód többé -kevésbé lineáris marad, és független a többi résztől. Logikai szempontból a feladatok egyszerre is végrehajthatók.
Haladó rendszerek esetén az ilyen feladatokat az operációs rendszer kernelje vagy a fordító által végrehajthatóba ágyazott nyelvi futásidejű vezérlés hajtja végre. De prototémák esetén az alkalmazás programozója manuálisan vezérli, a protothreads makrók könyvtárával a feladatok rutinjaiban, és meghívja az ilyen rutinokat (általában a fő cikluson kívül).
Valószínűleg szeretné tudni, hogyan működik a prototéma? Hol rejtőzik a varázslat? A prototémák a C speciális nyelvi jellemzőire támaszkodnak: arra a tényre, hogy a C kapcsoló kis- és nagybetűs utasításai beágyazhatók az if vagy más blokkba (például közben vagy for). A részleteket megtalálhatja Adam Dunkels webhelyén
Ennek a projektnek az elektronikai belső elemei nagyon egyszerűek. A fenti fotó ad némi támpontot. Biztos vagyok benne, hogy jobbat tud csinálni.
Ajánlott:
Halloween tök mozgó animatronikus szemmel - Ez a tök meg tudja forgatni a szemét!: 10 lépés (képekkel)
Halloween tök mozgó animatronikus szemmel | Ez a sütőtök megforgathatja a szemét! Állítsa az ultrahangos érzékelő kioldótávolságát a megfelelő értékre (9. lépés), és a sütőtök megkövül mindenkit, aki gyertyát mer tenni
ATtiny85 viselhető vibrációs tevékenységkövető óra és programozás ATtiny85 Arduino Uno -val: 4 lépés (képekkel)
ATtiny85 viselhető vibrációs tevékenységkövető óra és programozás ATtiny85 Arduino Uno -val: Hogyan készítsük el a viselhető tevékenységkövető órát? Ez egy hordható eszköz, amelyet rezgésre terveztek, amikor stagnálást észlel. A legtöbb időt a számítógépen tölti, mint én? Órákig ül, anélkül, hogy észrevenné? Akkor ez a készülék f
Tensegrity vagy dupla 5R párhuzamos robot, 5 tengely (DOF) Olcsó, kemény, mozgásvezérlés: 3 lépés (képekkel)
Tensegrity vagy dupla 5R párhuzamos robot, 5 tengely (DOF) Olcsó, szívós, mozgásvezérlés: Remélem, úgy gondolja, hogy ez a nap nagy ötlete! Ez egy bejegyzés az Instructables Robotics versenyen, amely 2019. december 2 -án zárul. A projekt elérte az utolsó bírálati fordulót, és nem volt időm elvégezni a kívánt frissítéseket! Én
Egyedi ragyogó sokszínű Mickey fül: 9 lépés (képekkel)
Egyedi ragyogó sokszínű Mickey Ears: Szeretnék megosztani egy kis projektet, amelyen a feleségem és az utolsó Disneyland -i utazásom során dolgoztam! Virágokból és aranydrótból vannak ezek a gyönyörű egyedi Minnie egérfülei, ezért arra gondoltam, miért ne csinálhatnám a saját Mickey egér fülem egy kicsit varázslatosabbá
Fényeket és kísérteties zenét adhat a Jack-O-Lanternhez-nincs forrasztás vagy programozás (hacsak nem szeretné): 9 lépés (képekkel)
Fényeket és kísérteties zenét adhat Jack-O-Lantern-jéhez-nincs forrasztás vagy programozás (hacsak nem akarja): Ragyogó fények és kísérteties zene hozzáadásával legyen a legijesztőbb Jack-O-Lantern az utcán! Ez egy nagyszerű lehetőség az Arduino és a programozható elektronika kipróbálására is, mivel az egész projekt kódolás vagy forrasztás nélkül is befejezhető - alth