Tartalomjegyzék:

Pislog, énekel, marioman: 5 lépés
Pislog, énekel, marioman: 5 lépés
Anonim
Villog, énekel, Marioman
Villog, énekel, Marioman

Használjon attiny13a-t, két LED-et és egy üdvözlőkártya-hangszórót, hogy létrehozzon egy villogó Marioman-t, aki a Super Mario Brothers főcímdalát játssza le. Ez egy egyszerű, alacsony költségű projekt lehet azok számára, akik szórakoztató módot keresnek az AVR programozásba! a dalok hangjait az AVR mikrokontroller egyetlen érintkezőjére kiadott négyzethullám generálja. Az egyes hangokon váltakozó LED -ek ugyanazon chip 2 tűjéhez vannak csatlakoztatva.

1. lépés: Anyagok és felépítés

Anyagok és felépítés
Anyagok és felépítés

1 attiny13a

www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dKöltség: 1,40 USD

  • 2 LED - bármelyik LED megteszi
  • 1 db lítium gombelem

www.sparkfun.com/commerce/product_info.php?products_id=338Költség: 2,00 USD

1 db érmés cellatartó

www.sparkfun.com/commerce/product_info.php?products_id=8822Költség: 1,25 USD

1 kis hangszóró egy zenei üdvözlőlapról

Az anyagok összköltsége ~ 5 USD A két LED közvetlenül az attiny13A két csapjára volt rögzítve. Minden LED -hez két tűt használnak, a második érintkezőt alacsonyra állítják földelő csatlakozásként. Az AVR -en lévő I/O tűk áramkorlátja megakadályozza, hogy a LED -ek túl sokat húzzanak, ezért nincs szükség ellenállás csatlakoztatására. sorozat. A használt hangszóró jellemző a zenei üdvözlőlapon található hangszórókra, bármelyik kis hangszóró megteszi, mivel ez négyzethullámú hangot ad ki, nem túl fontos aggódni a hangszóró vezetése vagy a hangminőség miatt.

2. lépés: Az AVR forrasztása a LED -ekhez és a hangszóróhoz

Az AVR forrasztása a LED -ekhez és a hangszóróhoz
Az AVR forrasztása a LED -ekhez és a hangszóróhoz
Az AVR forrasztása a LED -ekhez és a hangszóróhoz
Az AVR forrasztása a LED -ekhez és a hangszóróhoz

Ahhoz, hogy a LED -ek karként nyúljanak ki, az egyik tű mindkét oldalon az AVR fölé van hajlítva. Az AVR ilyen irányú elhelyezése megkönnyíti a csatlakoztatást a hangszóróhoz (második kép), mivel a csatlakozók a két alsó érintkezőn vannak. Az esztétika érdekében a chip elejét kívánja kifelé nézni, ezért győződjön meg arról, hogy a hangszóró ugyanúgy néz ki, amikor csatolva van.

3. lépés: Az Attiny13a programozása

Az Attiny13a programozása
Az Attiny13a programozása

Rengeteg lehetőség van az AVR -ek programozására. Ehhez a projekthez az USBtiny -t használták, amely készletként elérhető a ladyada webhelyéről. Http://www.ladyada.net/make/usbtinyisp/index.html Csatlakoztassa a vezetékeket a dugaszolóaljzathoz, és csatlakoztassa őket egy kenyérsütő táblához, vagy még jobb, ha beszerez egy ilyen olcsó AVR programozási adaptert.

4. lépés: Firmware létrehozása a Marioman számára

Firmware létrehozása a Marioman számára
Firmware létrehozása a Marioman számára

Az attiny13A 1K programozható vakuval és 64 bájt SRAM memóriával rendelkezik. A csatolt tar fájl tartalmazza a forrásfájlt, valamint a letöltött letöltött firmware -t. A c kód három tömbjét használták a zene előállításához

  • freq - az egyes hangok gyakorisága
  • length - az egyes hangok hossza
  • delay - szünet az egyes hangok között

A frekvencia tömb nem rendelkezik a tényleges frekvenciákkal, hanem inkább a TTCROB regiszterbe beillesztendő értékkel, hogy a négyzethullámot a PB0 érintkezőből hozza létre. Íme egy rövid összefoglaló a négyzethullám -generálás számításairól és csapkonfigurációjáról:

  • Az attiny13A belső oszcillátora 9,6 MHz -re van beállítva
  • Az IO belső órája az oszcillátor 8 vagy 1,2 MHz -el osztva
  • Egy belső időzítő van beállítva egy 8 bites regiszterben, hogy minden órajel ciklusát megszámolja 8 -as előskálával.
  • Ez azt eredményezi, hogy egy kullancs egyenlő 1 / (1,2MHz / 8) =.006667ms
  • Az attiny13A úgy van konfigurálva, hogy összehasonlítsa a 8 bites TCCR0B regiszter tartalmát az időzítővel, és kapcsoljon egy tűt, ha megfelelnek.
  • Például négyzethullám előállításához 524 Hz -en (egy oktáv a középső C fölött), amelynek időtartama 1,908 ms.

1.908ms = 286 órajel (1.908/.0067) Ossza el a 286 -ot 2 -vel a gomb t/2 -es váltásához (286/2 = 143) A jegyzet létrehozásához tegye a 143 -at a TTCR0B regiszterbe. Ez az összes szükséges kód Az időzítő beállításához végezze el az összehasonlítást, és adjon ki négyzethullámot:

TCCR0A | = (1 << WGM01); // az 1. időzítő beállítása CTC módhoz TCCR0A | = (1 << COM0A0); // az OC0A átkapcsolása az összehasonlító találaton TCCR0B | = (1 << CS01); // clk/8 előskála TTCR0B = 143; // négyzethullám generálása 524 Hz -enA hangok és a köztük lévő szünetek késleltetéséhez egyszerű késleltetési funkciót használtak

üres alvás (int ms) {int cnt; mert (cnt = 0; cnt <(ms); cnt ++) {int i = 150; míg (i--) {_asm ("NOP"); }}}Ez visszaszámol 150 -ről, ahol minden NOP ciklus körülbelül 0,006667 ms. Az utolsó dolog, amit a kód végez, az a tömbök közötti ciklus, a zene generálása és a két LED villogása. Ez folyamatos ciklusban történik a következő kóddal

const uint8_t freq PROGMEM = {… adat}; const uint8_t hossz PROGMEM = {… adat}; const uint8_t késleltetés PROGMEM = {… adat};… míg (1) {for (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); alvás (pgm_read_byte (& length [cnt]))); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // stop timer TCCR0B = 0; alvás (pgm_read_word (& delay [cnt]))); // indítási időzítő TCCR0B | = (1 << CS01); // clk/8 prescale}}A frekvenciák/hosszúságok/késleltetési tömbökben 156 elem található, ez a hurok áthalad rajtuk. A PB3 és PB4 érintkezők mindegyike át van kapcsolva, így váltakoznak az egyes hangokkal. Az első alvás az a hang, amelyet az OCR0A regiszter megfelelő értékére állítása után játszunk. A második alvás a szünet a játszott hangok között. A fenti kódban észreveheti a két funkciót: pgm_read_byte () és pgm_read_word (), valamint a PROGMEM kulcsszót. Egy olyan beágyazott chipnél, mint az attiny, az SRAM mennyisége nagyon korlátozott, ebben az esetben csak 64 bájt. Az összes frekvencia/késleltetés/hosszúság adathoz használt tömbök sokkal nagyobbak, mint 64 bájt, ezért nem tölthetők be a memóriába. A speciális PROGMEM avr-gcc direktíva használatával megakadályozható, hogy ezek a nagyméretű adattömbök betöltődjenek a memóriába, hanem flashről olvassák őket.

5. lépés: A Marioman lazítása

A fenti videó bemutatja Marioman akcióját. Az átlagos energiafogyasztás körülbelül 25 mA, így körülbelül 10 órán keresztül villoghat és hangokat adhat ki, mielőtt lemeríti a lítium -érmecellát. Az egyetlen módja annak, hogy be- és kikapcsolja a gombelem eltávolítását, az anyagokban felsorolt erős elem erre alkalmas. Egy kapcsoló hozzáadható, de van valami mondanivalója az egyszerűség érdekében.

Ajánlott: