Obsah:

Žmurkanie, spievanie, Marioman: 5 krokov
Žmurkanie, spievanie, Marioman: 5 krokov

Video: Žmurkanie, spievanie, Marioman: 5 krokov

Video: Žmurkanie, spievanie, Marioman: 5 krokov
Video: Cvičenia mozgu: Žmurkanie 2024, November
Anonim
Žmurkanie, spievanie, Marioman
Žmurkanie, spievanie, Marioman

Pomocou Attiny13a, dvoch diód LED a reproduktora na prianie vytvorte blikajúceho Mariomana, ktorý hrá ústrednú pieseň Super Mario Brothers. To môže byť ľahký nízkonákladový projekt pre každého, kto hľadá zábavný spôsob, ako sa dostať do programovania AVR! noty skladieb sú generované štvorcovou vlnou vystupujúcou na jeden pin mikrokontroléra AVR. LED diódy, ktoré sa striedajú na každej note, sú pripojené k 2 pinom, z toho istého čipu.

Krok 1: Materiály a konštrukcia

Materiály a konštrukcia
Materiály a konštrukcia

1 attiny13a

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

  • 2 LED - akékoľvek LED diódy budú stačiť
  • 1 lítiová gombíková batéria

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

1 držiak na mince

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

1 malý reproduktor z hudobného priania

Celkové náklady na materiál ~ 5 dolárov Dve LED diódy boli pripevnené priamo na dva kolíky, každý z attiny13A. Pre každú LED sú použité dva piny, druhý pin je nastavený na nízku hodnotu ako uzemnenie. Súčasný limit I/O pinov na AVR zabráni prílišnému kresleniu LED, takže na pripojenie nie je potrebný rezistor Použitý reproduktor je typický pre ten, ktorý sa nachádza v hudobnej blahoželanie. Každý malý reproduktor to urobí, pretože vzhľadom na to, že ide o zvuk s obdĺžnikovými vlnami, nie je príliš dôležité starať sa o kvalitu reproduktora alebo zvuku.

Krok 2: Spájkovanie AVR s diódami LED a reproduktorom

Spájkovanie AVR s diódami LED a reproduktorom
Spájkovanie AVR s diódami LED a reproduktorom
Spájkovanie AVR s diódami LED a reproduktorom
Spájkovanie AVR s diódami LED a reproduktorom

Aby diódy LED siahali ako ramená, jeden kolík je ohnutý nad AVR na každej strane. Orientácia AVR týmto spôsobom uľahčuje pripojenie k reproduktoru (druhý obrázok), pretože pripojenia sú na dvoch spodných kolíkoch. Z dôvodu estetiky chcete, aby predná strana čipu smerovala von, takže sa uistite, že reproduktor stojí rovnakým spôsobom aj pri je to prilozene.

Krok 3: Programovanie Attiny13a

Programovanie Attiny13a
Programovanie Attiny13a

Existuje veľa rôznych možností na programovanie AVR. Na tento projekt bol použitý USBtiny, ktorý je k dispozícii ako súprava z webu Ladyada https://www.ladyada.net/make/usbtinyisp/index.htmlAk chcete pripojiť AVR k programátoru, môžete buď zapojte káble do zásuvky a zapojte ich do prepojovacej lišty, alebo ešte lepšie získajte lacný programovací adaptér AVR takto:.

Krok 4: Vytvorenie firmvéru pre Marioman

Vytvorenie firmvéru pre Mariomana
Vytvorenie firmvéru pre Mariomana

Attiny13A má 1 kB programovateľného blesku a 64 bajtov pamäte SRAM. Pripojený súbor tar má zdrojový súbor a tiež kompilovaný firmvér na stiahnutie. Na generovanie hudby boli použité tri polia v kóde c.

  • freq - frekvencie každej noty
  • dĺžka - dĺžka každej poznámky
  • oneskorenie - prestávka medzi každou notou

Frekvenčné pole nemá skutočné frekvencie, ale hodnotu, ktorú je potrebné vložiť do registra TTCROB na generovanie štvorcovej vlny z kolíka PB0. Tu je stručný súhrn výpočtov a konfigurácie pinov na generovanie štvorcových vĺn:

  • Attiny13A má interný oscilátor nastavený na 9,6 MHz
  • Interný takt pre IO je oscilátor delený 8 alebo 1,2 MHz
  • Interný časovač je nastavený v 8 -bitovom registri, aby počítal každý hodinový cyklus s predvoľbou 8.
  • Výsledkom je jedno zatrhnutie rovnajúce sa 1 / (1,2 MHz / 8) = 0,006667 ms
  • Attiny13A je nakonfigurovaný tak, aby porovnával to, čo je v 8 -bitovom registri TCCR0B, s časovačom a prepínal pin, keď sa zhodujú.
  • Napríklad na generovanie štvorcovej vlny pri 524 Hz (jedna oktáva nad stredným C), ktorá má periódu 1,908 ms.

1,908ms = 286 taktov (1,908/0,0067) Rozdelením 286 na 2 prepnete kolík na t/2 (286/2 = 143) Na generovanie tejto poznámky vložte 143 do registra TTCR0B. Toto je všetok potrebný kód Ak chcete nastaviť časovač, porovnajte ho a vytvorte štvorcovú vlnu:

TCCR0A | = (1 << WGM01); // konfigurácia časovača 1 pre režim CTC TCCR0A | = (1 << COM0A0); // prepnite OC0A na porovnanie zápasu TCCR0B | = (1 << CS01); // clk/8 prescale TTCR0B = 143; // generovanie štvorcovej vlny pri 524 HzNa oddialenie tónov a prestávok medzi nimi bola použitá jednoduchá funkcia oneskorenia

prázdny spánok (int ms) {int cnt; pre (cnt = 0; cnt <(ms); cnt ++) {int i = 150; while (i--) {_asm ("NOP"); }}}Toto sa odpočíta od 150, kde každý cyklus NOP je približne 0,006667 ms. Posledná vec, ktorú kód urobí, je slučka cez polia, vygenerovanie hudby a bliknutie dvoch diód LED. To sa robí nepretržite pre slučku s nasledujúcim kódom

konštanta uint8_t freq PROGMEM = {… data}; konšt uint8_t dĺžka PROGMEM = {… data}; konšt uint8_t oneskorenie PROGMEM = {… data};… while (1) {for (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); spánok (pgm_read_byte (& dĺžka [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // časovač zastavenia TCCR0B = 0; spánok (pgm_read_word (& delay [cnt])); // spustenie časovača TCCR0B | = (1 << CS01); // clk/8 prescale}}V poliach frekvencií/dĺžok/oneskorení je 156 prvkov, táto slučka ich prechádza. Pin PB3 a PB4 sú prepínateľné, takže sa budú striedať s každou notou. Prvý spánok je dĺžka noty, ktorú prehráme po nastavení registra OCR0A na príslušnú hodnotu. Druhý spánok je prestávka medzi tónmi, ktoré hráme. Vo vyššie uvedenom kóde ste si mohli všimnúť dve funkcie pgm_read_byte () a pgm_read_word () a tiež kľúčové slovo PROGMEM. S integrovaným čipom, akým je Attiny, je množstvo pamäte SRAM veľmi obmedzené, v tomto prípade iba 64 bajtov. Polia, ktoré používame pre všetky údaje o frekvencii/oneskorení/dĺžke, sú oveľa väčšie ako 64 bajtov, a preto ich nemožno načítať do pamäte. Použitím špeciálnej smernice PROGMEM avr-gcc je zabránené načítaniu týchto veľkých dátových polí do pamäte, namiesto toho sú načítané z flash.

Krok 5: Nechajte Mariomana uvoľniť

Vyššie uvedené video ukazuje Mariomana v akcii. Priemerná spotreba energie je asi 25 mA, takže pred vybitím lítiového gombíkového článku môže žmurkať a vydávať zvuky asi 10 hodín. Jediným spôsobom, ako ho zapnúť a vypnúť, je vybratie gombíkovej batérie, odolnej, uvedenej v materiáloch, na toto sa hodí. Prepínač je možné pridať, ale je potrebné povedať, že je to jednoduché.

Odporúča: