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, Jun
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 pesama generišu se kvadratnim talasom koji se emituje na jednom pinu AVR mikrokontrolera. LED diode koje se izmjenjuju na svakoj noti povezane su na 2 pina od svakog istog čipa.

Korak 1: Materijali i izrada

Materijali i konstrukcija
Materijali i konstrukcija

1 attiny13a

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

  • 2 LED - sve LED diode će poslužiti
  • 1 litijumska 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 sa muzičke čestitke

Ukupni trošak materijala ~ 5 USD Dvije LED diode su spojene direktno 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čavanje 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 muzičkoj č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 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, jedan pin je 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. Za estetiku ž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 opcija za programiranje AVR -a. Za ovaj projekt korišten je USBtiny koji je dostupan kao komplet sa ladyadine web stranice https://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 jeftin adapter za programiranje AVR -a poput ovog https://www.sparkfun.com/commerce/product_info.php? products_id = 8508zajedno sa 3x2 muška zaglavlja za spajanje utikača.

Korak 4: Kreiranje firmvera za Marioman

Kreiranje firmvera za Marioman
Kreiranje firmvera za Marioman

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

  • freq - frekvencije svake note
  • length - dužina 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 proračuna i konfiguracije pinova za generiranje kvadratnih valova:

  • Attiny13A ima interni oscilator postavljen na 9,6MHz
  • Unutrašnji sat za IO je oscilator podijeljen sa 8 ili 1,2 MHz
  • Interni mjerač vremena postavljen je u 8 -bitni registar za brojanje svakog ciklusa takta s predmjerom od 8.
  • Ovo rezultira jednim tikom jednakim 1 / (1.2MHz / 8) =.006667ms
  • Attiny13A je konfiguriran za usporedbu onoga što se nalazi u 8 -bitnom registru TCCR0B s tajmerom i promjenu pina kada se podudaraju.
  • Na primjer, da 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 uporedite i ispišite kvadratni val:

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

void sleep (int ms) {int cnt; for (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. Posljednja stvar koju kod radi je petlja kroz nizove, generiranje muzike i treptanje dviju LED dioda. Ovo se radi u kontinuiranoj petlji for 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_read_byte (& length [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/dužina/kašnjenja ima 156 elemenata, ova petlja ih prelazi. Pin PB3 i PB4 se prebacuju tako da se izmjenjuju sa svakom notom. Prvi san je dužina note koju sviramo nakon postavljanja registra OCR0A na odgovarajuću vrijednost. Drugi san je pauza 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. Uz ugrađeni čip poput attiny, 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/dužini 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, umjesto toga se čitaju iz flash-a.

Korak 5: Puštanje Mariomana na slobodu

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

Preporučuje se: