Spisu treści:

Mruganie, śpiewanie, Marioman: 5 kroków
Mruganie, śpiewanie, Marioman: 5 kroków

Wideo: Mruganie, śpiewanie, Marioman: 5 kroków

Wideo: Mruganie, śpiewanie, Marioman: 5 kroków
Wideo: Mrugaj, Mrugaj Gwiazdko Ma - Piosenki Dla Dzieci | HeyKids 2024, Wrzesień
Anonim
Mruganie, śpiewanie, Marioman
Mruganie, śpiewanie, Marioman

Użyj attiny13a, dwóch diod LED i głośnika z życzeniami, aby stworzyć migającego Mariomana, który odtwarza piosenkę przewodnią Super Mario Brothers. Może to być łatwy, tani projekt dla każdego, kto szuka fajnego sposobu na włamanie się do programowania AVR! nuty piosenek są generowane przez falę prostokątną wyprowadzoną na pojedynczy pin mikrokontrolera AVR. Diody LED, które zmieniają się na każdej nucie, są podłączone do 2 styków tego samego układu.

Krok 1: Materiały i konstrukcja

Materiały i konstrukcja
Materiały i konstrukcja

1 attiny13a

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

  • 2 diody LED - wystarczą dowolne diody LED
  • 1 litowa bateria pastylkowa

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

1 uchwyt na monety

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

1 mały głośnik z muzycznej kartki z życzeniami

Całkowity koszt materiałów ~ 5 USDDwie diody LED zostały podłączone bezpośrednio do dwóch pinów każdego attiny13A. Dla każdej diody LED używane są dwa piny, drugi pin jest ustawiony nisko, aby wykorzystać go jako połączenie uziemiające. Ograniczenie prądowe pinów I/O na odbiorniku AVR zapobiegnie nadmiernemu przyciąganiu diod LED, więc podłączenie rezystora nie jest konieczne Seria. Użyty głośnik jest typowy dla głośnika znajdującego się w muzycznej kartce z życzeniami, każdy mały głośnik nadaje się do tego, biorąc pod uwagę, że emituje ton fali prostokątnej, nie jest zbyt ważne, aby martwić się o prowadzenie głośnika lub jakość dźwięku.

Krok 2: Przylutowanie AVR do diod LED i głośnika

Przylutowanie AVR do diod LED i głośnika
Przylutowanie AVR do diod LED i głośnika
Przylutowanie AVR do diod LED i głośnika
Przylutowanie AVR do diod LED i głośnika

Aby diody LED wyszły jak ramiona, jeden pin jest zagięty nad AVR z każdej strony. Ustawienie odbiornika AVR w ten sposób ułatwia podłączenie do głośnika (drugi obraz), ponieważ połączenia znajdują się na dwóch dolnych stykach. Dla estetyki chcesz, aby przód chipa był skierowany na zewnątrz, więc upewnij się, że głośnik jest skierowany w tę samą stronę, gdy jest dołączone.

Krok 3: Programowanie Attiny13a

Programowanie Attiny13a
Programowanie Attiny13a

Istnieje wiele różnych opcji programowania AVR. Do tego projektu wykorzystano USBtiny, który jest dostępny jako zestaw na stronie ladyada https://www.ladyada.net/make/usbtinyisp/index.htmlAby podłączyć AVR do programatora można albo podłącz przewody do gniazda żeńskiego i podłącz je do płytki stykowej, albo jeszcze lepiej uzyskaj tani adapter do programowania AVR, taki jak ten https://www.sparkfun.com/commerce/product_info.php?products_id=8508wraz z męskimi nagłówkami 3x2 do podłączenia wtyczki.

Krok 4: Tworzenie oprogramowania dla Marioman

Tworzenie oprogramowania dla Marioman
Tworzenie oprogramowania dla Marioman

Attiny13A ma 1K programowalnej pamięci flash i 64 bajty SRAM. Załączony plik tar zawiera plik źródłowy oraz skompilowany firmware do pobrania. Do wygenerowania muzyki użyto trzech tablic w kodzie c

  • freq - częstotliwości każdej nuty
  • length - długość każdej nuty
  • delay - pauza między każdą nutą

Tablica częstotliwości nie zawiera rzeczywistych częstotliwości, ale raczej wartość, którą należy umieścić w rejestrze TTCROB w celu wygenerowania fali prostokątnej z pinu PB0. Oto krótkie podsumowanie obliczeń i konfiguracji pinów dla generowania fali prostokątnej:

  • Attiny13A ma wewnętrzny oscylator ustawiony na 9,6 MHz
  • Wewnętrzny zegar dla IO to oscylator podzielony przez 8 lub 1,2 MHz
  • Wewnętrzny zegar jest ustawiony w 8-bitowym rejestrze, aby zliczać każdy cykl zegara z preskalowaniem 8.
  • Skutkuje to jednym tikiem równym 1 / (1,2 MHz / 8) = 0,006667 ms
  • Attiny13A jest skonfigurowany do porównywania tego, co jest w 8-bitowym rejestrze TCCR0B z zegarem i przełączania pinów, gdy pasują.
  • Na przykład w celu wygenerowania fali prostokątnej o częstotliwości 524 Hz (jedna oktawa powyżej środkowego C), która ma okres 1,908 ms.

1,908ms = 286 taktów zegara (1,908/0,067)Podziel 286 przez 2, aby przełączyć pin w t/2 (286/2 = 143)Wstaw 143 do rejestru TTCR0B, aby wygenerować tę notatkę. To cały kod, który jest potrzebny aby ustawić timer, wykonaj porównanie i wyślij falę prostokątną:

TCCR0A |= (1<<WGM01); // konfiguracja timera 1 dla trybu CTC TCCR0A |= (1<<COM0A0); // przełącz OC0A na porównanie dopasowania TCCR0B |= (1<<CS01); // clk/8 preskalowanie TTCR0B = 143; // generuj falę prostokątną przy 524HzAby opóźnić dźwięki i przerwy między nimi, zastosowano prostą funkcję opóźnienia

nieważny sen (int ms) { int cnt; for (cnt=0; cnt<(ms); cnt++) { int i = 150; while(i--) { _asm("NIE"); } }}Odlicza się to od 150, gdzie każdy cykl NOP wynosi około 0,006667 ms. Ostatnią rzeczą, jaką robi kod, jest pętla przez tablice, generowanie muzyki i miganie dwóch diod LED. Odbywa się to w ciągłej pętli for z następującym kodem

const uint8_t freq PROGMEM = { … dane };const uint8_t length PROGMEM = { … dane };const uint8_t delay PROGMEM = { … dane };…while (1) { for (cnt=0; cnt< 156; cnt++) { OCR0A=pgm_read_byte(&freq[cnt]); output_toggle(PORTB, PB3); output_toggle(PORTB, PB4); sen(pgm_read_byte(&długość[cnt])); output_toggle(PORTB, PB3); output_toggle(PORTB, PB4); // zatrzymaj zegar TCCR0B = 0; sen (pgm_read_word(&delay[cnt])); // uruchom zegar TCCR0B |= (1<<CS01); // clk/8 preskalowanie }}W tablicach częstotliwości/długości/opóźnień jest 156 elementów, ta pętla je przemierza. Piny PB3 i PB4 są przełączane, więc będą się zmieniać z każdą nutą. Pierwszy sen to długość nuty, którą gramy po ustawieniu rejestru OCR0A na odpowiednią wartość. Drugi sen to przerwa między granymi przez nas nutami. W powyższym kodzie możesz zauważyć dwie funkcje pgm_read_byte() i pgm_read_word(), a także słowo kluczowe PROGMEM. Z wbudowanym układem, takim jak attiny, ilość SRAM jest bardzo ograniczona, w tym przypadku tylko 64 bajty. Tablice, których używamy dla wszystkich danych dotyczących częstotliwości/opóźnień/długości, są znacznie większe niż 64 bajty i dlatego nie można ich załadować do pamięci. Dzięki zastosowaniu specjalnej dyrektywy PROGMEM avr-gcc te duże macierze danych nie są ładowane do pamięci, zamiast tego są odczytywane z pamięci flash.

Krok 5: Uwolnienie Mariomana

Powyższy film przedstawia Mariomana w akcji. Średnie zużycie energii wynosi około 25mA, więc może mrugać i wydawać dźwięki przez około 10 godzin przed opróżnieniem litowej baterii pastylkowej. Jedynym sposobem na jego włączenie i wyłączenie jest wyjęcie baterii pastylkowej, wytrzymałej wymienionej w materiałach dobrze się do tego nadaje. Można dodać przełącznik, ale jest coś do powiedzenia, aby było to proste.

Zalecana: