Sadržaj:

Trepće, pjeva, Marioman: 5 koraka
Trepće, pjeva, Marioman: 5 koraka

Video: Trepće, pjeva, Marioman: 5 koraka

Video: Trepće, pjeva, Marioman: 5 koraka
Video: НЕГАТИВНАЯ РЕАКЦИЯ / РАЗОБЛАЧЕНИЕ ПЕВЦА / ДИМАШ и ПОНАСЕНКОВ 2024, Studeni
Anonim
Trepće, pjeva, Marioman
Trepće, pjeva, Marioman

Upotrijebite attiny13a, dvije LED diode i zvučnik za čestitku da biste stvorili trepćući Marioman koji svira pjesmu teme Super Mario Brothers. Ovo može biti jednostavan jeftin projekt za svakoga tko traži zabavan način za upad u AVR programiranje! note pjesama stvaraju se kvadratnim valom koji se emitira na jednom pinu AVR mikrokontrolera. LED diode koje se izmjenjuju na svakoj noti spojene su na 2 pina od svakog istog čipa.

Korak 1: Materijali i izrada

Materijali i izrada
Materijali i izrada

1 attiny13a

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

  • 2 LED - sve LED diode će biti dovoljne
  • 1 litijeva dugmasta baterija

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

1 držač za novčiće

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

1 mali zvučnik s glazbene čestitke

Ukupni trošak materijala ~ 5 USD Dvije LED diode bile su spojene izravno na dva pina, svaki od attiny13A. Za svaku LED diodu koriste se dva pina, drugi pin je postavljen nisko da bi se koristio kao veza za uzemljenje. Ograničenje struje I/O pinova na AVR -u spriječit će LED diode da previše crtaju pa otpornik nije potreban za priključivanje Upotrijebljeni zvučnik tipičan je za onaj koji se nalazi u glazbenoj čestitki, to će učiniti svaki mali zvučnik, s obzirom na to da se iz njega emitira kvadratni val, nije previše važno brinuti se o upravljanju zvučnikom ili kvaliteti zvuka.

Korak 2: Lemljenje AVR -a na LED diode i zvučnik

Lemljenje AVR -a na LED diode i zvučnik
Lemljenje AVR -a na LED diode i zvučnik
Lemljenje AVR -a na LED diode i zvučnik
Lemljenje AVR -a na LED diode i zvučnik

Da bi LED diode išle ispruži ruku poput ruke, jedan je pin savijen preko AVR -a sa svake strane. Orijentacija AVR -a na ovaj način olakšava povezivanje sa zvučnikom (druga slika) budući da su veze na dva donja pina. Radi estetike želite da prednja strana čipa bude okrenuta prema van, pa budite sigurni da je zvučnik okrenut na isti način kada u prilogu je.

Korak 3: Programiranje Attiny13a

Programiranje Attiny13a
Programiranje Attiny13a

Postoji mnogo različitih mogućnosti za programiranje AVR -a. Za ovaj projekt korišten je USBtiny koji je dostupan kao komplet s ladyadine web stranicehttps://www.ladyada.net/make/usbtinyisp/index.htmlZa povezivanje AVR -a s programatorom možete ili spojite žice na žensku utičnicu i uključite ih u matičnu ploču ili još bolje nabavite jeftini AVR programski adapter poput ovogahttps://www.sparkfun.com/commerce/product_info.php? products_id = 8508zajedno s 3x2 muška zaglavlja za spajanje utikača.

Korak 4: Stvaranje firmvera za Marioman

Stvaranje firmvera za Marioman
Stvaranje firmvera za Marioman

Attiny13A ima 1K programabilnog bljeskalice i 64 bajta SRAM -a. Priložena tar datoteka ima izvornu datoteku, kao i kompajlirani firmver za preuzimanje. Za generiranje glazbe korištena su tri niza u c kodu

  • freq - frekvencije svake note
  • length - duljina svake note
  • delay - pauza između svake note

Frekvencijski niz nema stvarne frekvencije, već vrijednost koju treba unijeti u TTCROB registar za generiranje kvadratnog vala s pina PB0. Evo kratkog sažetka izračuna i konfiguracije pinova za generiranje kvadratnih valova:

  • Attiny13A ima unutarnji oscilator postavljen na 9,6MHz
  • Unutarnji sat za IO je oscilator podijeljen s 8 ili 1,2 MHz
  • Interni mjerač vremena postavljen je u 8 -bitni registar za brojanje svakog ciklusa takta s predmjerom od 8.
  • Rezultat je jedna oznaka jednaka 1 / (1.2MHz / 8) =.006667ms
  • Attiny13A je konfiguriran za usporedbu onoga što je u 8 -bitnom registru TCCR0B s timerom i promjenu pina kada se podudaraju.
  • Na primjer, kako bi se generirao kvadratni val na 524Hz (jedna oktava iznad sredine C) koji ima period od 1.908ms.

1.908ms = 286 otkucaja sata (1.908/.0067) Podijelite 286 sa 2 za prebacivanje pina na t/2 (286/2 = 143) Stavite 143 u registar TTCR0B da biste generirali ovu bilješku. Ovo je sav kod koji je neophodan za postavljanje mjerača vremena usporedite i ispišite kvadratni val:

TCCR0A | = (1 << WGM01); // konfigurirati mjerač vremena 1 za CTC način rada TCCR0A | = (1 << COM0A0); // prebacivanje OC0A na usporedbu podudaranja TCCR0B | = (1 << CS01); // clk/8 predmjera TTCR0B = 143; // generiramo kvadratni val na 524HzZa odgodu tonova i stanke između njih korištena je jednostavna funkcija odgode

void sleep (int ms) {int cnt; za (cnt = 0; cnt <(ms); cnt ++) {int i = 150; while (i--) {_asm ("NOP"); }}}Ovo odbrojava od 150 gdje je svaki NOP ciklus otprilike 0,006667 ms. Zadnja stvar koju kôd radi je petlja kroz nizove, generiranje glazbe i treptanje dviju LED dioda. To se radi u kontinuiranoj for petlji sa sljedećim kodom

const uint8_t freq PROGMEM = {… data}; const uint8_t length PROGMEM = {… data}; const uint8_t kašnjenje PROGMEM = {… data};… while (1) {for (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_čitaj_bajt (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); sleep (pgm_čitaj_bajt (& duljina [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // mjerač vremena zaustavljanja TCCR0B = 0; sleep (pgm_read_word (& delay [cnt])); // start timer TCCR0B | = (1 << CS01); // clk/8 predmjera}}U nizovima frekvencija/duljina/kašnjenja nalazi se 156 elemenata, ova petlja ih prolazi. Pin PB3 i PB4 se mijenjaju tako da će se izmjenjivati sa svakom notom. Prvi san je duljina note koju sviramo nakon postavljanja registra OCR0A na odgovarajuću vrijednost. Drugi san je stanka između nota koje sviramo. U gore navedenom kodu možda ste primijetili dvije funkcije pgm_read_byte () i pgm_read_word () kao i ključnu riječ PROGMEM. S ugrađenim čipom poput attinyja količina SRAM -a je vrlo ograničena, u ovom slučaju samo 64 bajta. Nizovi koje koristimo za sve podatke o frekvenciji/kašnjenju/duljini mnogo su veći od 64 bajta i stoga se ne mogu učitati u memoriju. Korištenjem posebne PROGMEM avr-gcc direktive spriječeno je učitavanje ovih velikih polja podataka u memoriju, nego se čitaju iz bljeskalice.

Korak 5: Puštanje Mariomana na slobodu

Gornji video prikazuje Marioman na djelu. Prosječna potrošnja energije iznosi oko 25 mA, tako da može treptati i stvarati zvukove oko 10 sati prije nego što isprazni litij -ćelijsku ćeliju. Jedini način da ga uključite i isključite je ukloniti bateriju u obliku dugmaste ploče, čvrstu koja je navedena u materijalima dobro prilagođen za ovo. Prekidač se može dodati, ali postoji nešto za reći kako bi bilo jednostavno.

Preporučeni: