Obsah:

Bliká, zpívá, Marioman: 5 kroků
Bliká, zpívá, Marioman: 5 kroků

Video: Bliká, zpívá, Marioman: 5 kroků

Video: Bliká, zpívá, Marioman: 5 kroků
Video: 10 кг МЯСА в КАЗАНЕ‼️ очень много ЭСТРАГОНА‼️ Одесса Архимус 2024, Září
Anonim
Bliká, zpívá, Mariomane
Bliká, zpívá, Mariomane

Pomocí Attiny13a, dvou diod LED a reproduktoru blahopřání vytvořte blikajícího Mariomana, který hraje ústřední melodii Super Mario Brothers. To může být snadný nízkonákladový projekt pro každého, kdo hledá zábavný způsob, jak proniknout do programování AVR! noty skladeb jsou generovány čtvercovou vlnou vystupující na jeden pin mikrokontroléru AVR. LED diody, které se střídají na každé notě, jsou připojeny ke 2 pinům na stejném čipu.

Krok 1: Materiály a konstrukce

Materiály a konstrukce
Materiály a konstrukce

1 Attiny13a

www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dCost: 1,40 $

  • 2 LED diody - všechny LED diody budou stačit
  • 1 lithiová knoflíková baterie

www.sparkfun.com/commerce/product_info.php?products_id=338Cena: 2,00 $

1 držák na mince

www.sparkfun.com/commerce/product_info.php?products_id=8822Cena: 1,25 $

1 malý reproduktor z hudebního přání

Celkové náklady na materiál ~ 5 $ Dvě LED diody byly připevněny přímo na dva piny každého z attiny13A. Pro každou LED jsou použity dva piny, druhý pin je nastaven nízko pro použití jako uzemnění. Proudový limit I/O pinů na AVR zabrání přílišnému kreslení LED, takže pro připojení není nutný odpor Použitý reproduktor je typický pro ten, který se nachází v hudebním přání, každý malý reproduktor to udělá, vzhledem k tomu, že se jedná o výstup signálu s obdélníkovou vlnou, není příliš důležité se starat o řízení reproduktoru nebo kvalitu zvuku.

Krok 2: Pájení AVR k LED diodám a reproduktoru

Pájení AVR k LED diodám a reproduktoru
Pájení AVR k LED diodám a reproduktoru
Pájení AVR k LED diodám a reproduktoru
Pájení AVR k LED diodám a reproduktoru

Aby LED diody šly jako ramena, je jeden kolík ohnutý přes AVR na každé straně. Orientace AVR tímto způsobem usnadňuje připojení k reproduktoru (druhý obrázek), protože připojení jsou na dvou spodních pinech. Pro estetiku chcete, aby přední část čipu směřovala ven, takže se ujistěte, že reproduktor směřuje stejným způsobem, když je to přiloženo.

Krok 3: Programování Attiny13a

Programování Attiny13a
Programování Attiny13a

Existuje spousta různých možností pro programování AVR. Pro tento projekt byl použit USBtiny, který je k dispozici jako sada na stránkách Ladyada https://www.ladyada.net/make/usbtinyisp/index.html Chcete -li připojit AVR k programátoru, můžete buď připojte vodiče k zásuvce a zapojte je do prkénka, nebo ještě lépe si pořiďte levný programovací adaptér AVR takto:.

Krok 4: Vytvoření firmwaru pro Mariomana

Vytvoření firmwaru pro Mariomana
Vytvoření firmwaru pro Mariomana

Attiny13A má 1 kB programovatelného blesku a 64 bajtů SRAM. Připojený soubor tar má zdrojový soubor a také kompilovaný firmware pro stažení. Ke generování hudby byla použita tři pole v kódu c

  • freq - frekvence každé noty
  • délka - délka každé noty
  • zpoždění - pauza mezi jednotlivými notami

Frekvenční pole nemá skutečné frekvence, ale spíše hodnotu, kterou je třeba vložit do registru TTCROB ke generování čtvercové vlny z pinu PB0. Zde je stručný souhrn výpočtů a konfigurace pinů pro generování čtvercových vln:

  • Attiny13A má interní oscilátor nastavený na 9,6 MHz
  • Interní hodiny pro IO jsou oscilátor dělený 8 nebo 1,2 MHz
  • Interní časovač je nastaven v 8bitovém registru, aby počítal každý hodinový cyklus s předvolbou 8.
  • Výsledkem je jedno zaškrtnutí rovné 1 / (1,2 MHz / 8) = 0,006667 ms
  • Attiny13A je nakonfigurován tak, aby porovnával, co je v 8bitovém registru TCCR0B, s časovačem a přepínal pin, když se shodují.
  • Například za účelem generování čtvercové vlny při 524 Hz (jedna oktáva nad středem C), která má periodu 1,908 ms.

1,908ms = 286 tiků hodin (1,908/0,0067) Rozdělením 286 na 2 přepnete kolík na t/2 (286/2 = 143) Vložte 143 do registru TTCR0B a vygenerujte tuto poznámku. To je veškerý kód, který je nezbytný Chcete -li nastavit časovač, proveďte porovnání a výstup čtvercové vlny:

TCCR0A | = (1 << WGM01); // konfigurace časovače 1 pro režim CTC TCCR0A | = (1 << COM0A0); // přepnout OC0A na porovnávací zápas TCCR0B | = (1 << CS01); // clk/8 prescale TTCR0B = 143; // generování čtvercové vlny při 524 HzKe zpoždění tónů a přestávek mezi nimi byla použita jednoduchá funkce zpoždění

prázdný spánek (int ms) {int cnt; pro (cnt = 0; cnt <(ms); cnt ++) {int i = 150; while (i--) {_asm ("NOP"); }}}To se odpočítává ze 150, kde každý cyklus NOP je přibližně 0,006667 ms. Poslední věcí, kterou kód udělá, je smyčka přes pole, generování hudby a blikání dvou diod LED. To se provádí v nepřetržité smyčce for s následujícím kódem

konst uint8_t freq PROGMEM = {… data}; konst uint8_t délka PROGMEM = {… data}; konst uint8_t zpoždění PROGMEM = {… data};… while (1) {for (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); sleep (pgm_read_byte (& length [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // stopky TCCR0B = 0; sleep (pgm_read_word (& delay [cnt])); // spuštění časovače TCCR0B | = (1 << CS01); // clk/8 prescale}}V polích frekvencí/délek/zpoždění je 156 prvků, tato smyčka je prochází. Pin PB3 a PB4 se přepínají, takže se budou střídat s každou notou První uspání je délka noty, kterou zahrajeme po nastavení registru OCR0A na příslušnou hodnotu. Druhým spánkem je pauza mezi notami, které hrajeme. Ve výše uvedeném kódu jste si mohli všimnout dvou funkcí pgm_read_byte () a pgm_read_word () a také klíčového slova PROGMEM. S integrovaným čipem, jako je Attiny, je množství SRAM velmi omezené, v tomto případě pouze 64 bajtů. Pole, která používáme pro všechna data o frekvenci/zpoždění/délce, jsou mnohem větší než 64 bajtů, a proto je nelze načíst do paměti. Použitím speciální směrnice PROGMEM avr-gcc je zabráněno načítání těchto velkých datových polí do paměti, místo toho jsou čtena z flash.

Krok 5: Nechte Mariomana uvolnit

Výše uvedené video ukazuje Mariomana v akci. Průměrná spotřeba energie je asi 25 mA, takže před vybitím lithiového knoflíkového článku může asi 10 hodin blikat a vydávat zvuky. Jediným způsobem, jak jej zapnout a vypnout, je vyjmutí knoflíkové baterie, robustní baterie uvedené v materiálech. na tohle se hodí. Lze přidat přepínač, ale je třeba říci, že je to jednoduché.

Doporučuje: