Tartalomjegyzék:

Attiny85 párhuzamos programozás vagy tök sokszínű szemekkel: 7 lépés
Attiny85 párhuzamos programozás vagy tök sokszínű szemekkel: 7 lépés

Videó: Attiny85 párhuzamos programozás vagy tök sokszínű szemekkel: 7 lépés

Videó: Attiny85 párhuzamos programozás vagy tök sokszínű szemekkel: 7 lépés
Videó: ATtiny85 USB pogramozása - Csütörtöki HEKK s06e36 2024, November
Anonim

Kövesse a szerző további információit:

A Sikoly
A Sikoly
A Sikoly
A Sikoly
NiCd akkumulátor cseréje külső tápegységre
NiCd akkumulátor cseréje külső tápegységre
NiCd akkumulátor cseréje külső tápegységre
NiCd akkumulátor cseréje külső tápegységre
Digitális fényképezőgép fogantyú
Digitális fényképezőgép fogantyú
Digitális fényképezőgép fogantyú
Digitális fényképezőgép fogantyú

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

Circut
Circut

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

Időzítési diagram
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

Programozás. Makrók és definíciók
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

Programozás. Fő hurok
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

Programozás. Segédfunkciók
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

Programozás. Protothread rutinok
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ő

Belső
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: