Innehållsförteckning:

Blinkar, sjunger, Marioman: 5 steg
Blinkar, sjunger, Marioman: 5 steg

Video: Blinkar, sjunger, Marioman: 5 steg

Video: Blinkar, sjunger, Marioman: 5 steg
Video: And Peter | J. Wilbur Chapman | Christian Audiobook 2024, September
Anonim
Blinkar, sjunger, Marioman
Blinkar, sjunger, Marioman

Använd en attiny13a, två lysdioder och en gratulationskorthögtalare för att skapa en blinkande Marioman som spelar temasången Super Mario Brothers. Detta kan vara ett enkelt billigt projekt för alla som letar efter ett roligt sätt att bryta sig in i AVR-programmering! noter av låtarna genereras av en fyrkantvåg som matas ut på en enda pin på AVR -mikrokontrollern. Lysdioderna som växlar på varje ton är anslutna till 2 stift var och en av samma chip.

Steg 1: Material och konstruktion

Material och konstruktion
Material och konstruktion

1 attiny13a

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

  • 2 lysdioder - alla lysdioder klarar
  • 1 litiummyntbatteri

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

1 myntcellshållare

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

1 liten högtalare från ett musikaliskt gratulationskort

Total materialkostnad ~ $ 5 De två lysdioderna fästes direkt på två stift var och en av attiny13A. Två stift används för varje lysdiod, den andra stiftet är lågt för att användas som en jordanslutning. Den nuvarande gränsen för I/O -stiften på AVR kommer att förhindra att lysdioderna dras för mycket så ett motstånd är inte nödvändigt att ansluta Den högtalare som används är typisk för en som finns i ett musikaliskt gratulationskort, vilken liten högtalare som helst kommer att göra, med tanke på att detta ger en fyrkantig ton, är det inte så viktigt att oroa sig för att driva högtalaren eller ljudkvaliteten.

Steg 2: Lödning av AVR till lysdioder och högtalare

Lödning av AVR till lysdioder och högtalare
Lödning av AVR till lysdioder och högtalare
Lödning av AVR till lysdioder och högtalare
Lödning av AVR till lysdioder och högtalare

För att lysdioderna ska räcka ut som armar är en nål böjd över AVR på varje sida. Genom att orientera AVR på detta sätt är det enkelt att ansluta till högtalaren (andra bilden) eftersom anslutningarna är på de två nedre stiften. För estetik vill du att chipets framsida är vänd ut så se till att högtalaren är vänd på samma sätt när det är bifogat.

Steg 3: Programmering av Attiny13a

Programmering av Attiny13a
Programmering av Attiny13a

Det finns många olika alternativ för att programmera AVR. För detta projekt användes USBtiny som finns som ett kit från ladyadas webbplats https://www.ladyada.net/make/usbtinyisp/index.html För att ansluta AVR till programmeraren kan du antingen koppla kablar till honkontakten och anslut dem till ett brödbräda eller ännu bättre få en billig AVR -programmeringsadapter så här https://www.sparkfun.com/commerce/product_info.php? products_id = 8508 tillsammans med 3x2 hanrubriker för att ansluta kontakten.

Steg 4: Skapa firmware för Marioman

Skapa firmware för Marioman
Skapa firmware för Marioman

Attiny13A har 1K programmerbar blixt och 64bytes SRAM. Den bifogade tarfilen har källfilen samt kompilerad firmware för nedladdning. Tre matriser i c -koden användes för att generera musiken

  • freq - frekvenser för varje ton
  • längd - längden på varje ton
  • fördröjning - paus mellan varje ton

Frekvensmatrisen har inte de faktiska frekvenserna utan snarare det värde som ska läggas in i TTCROB -registret för att generera kvadratvågan från PB0 -stiftet. Här är en kort sammanfattning av beräkningarna och stiftkonfigurationen för kvadratvåggenerering:

  • Attiny13A har en intern oscillator inställd på 9,6 MHz
  • Den interna klockan för IO är oscillatorn dividerad med 8 eller 1,2 MHz
  • En intern timer installeras i ett 8 -bitarsregister för att räkna upp varje klockcykel med förskala på 8.
  • Detta resulterar i en bock som är lika med 1 / (1.2MHz / 8) =.006667ms
  • Attiny13A är konfigurerad för att jämföra vad som finns i 8 -bitars TCCR0B -registret med timern och växla en stift när de matchar.
  • Till exempel, för att generera en fyrkantvåg vid 524Hz (en oktav över mitt C) som har en period på 1,908ms.

1.908ms = 286 klockfickor (1.908/.0067) Dela 286 med 2 för att växla stiftet vid t/2 (286/2 = 143) Sätt 143 i TTCR0B -registret för att generera den här noten. Detta är all kod som behövs för att ställa in timern, gör jämförelsen och mata ut en fyrkantvåg:

TCCR0A | = (1 << WGM01); // konfigurera timer 1 för CTC -läge TCCR0A | = (1 << COM0A0); // växla OC0A på jämför matchning TCCR0B | = (1 << CS01); // clk/8 förskala TTCR0B = 143; // generera en fyrkantvåg vid 524HzFör att fördröja tonerna och pauserna mellan dem användes en enkel fördröjningsfunktion

ogiltig sömn (int ms) {int cnt; för (cnt = 0; cnt <(ms); cnt ++) {int i = 150; medan (i--) {_asm ("NOP"); }}}Detta räknar ner från 150 där varje NOP -cykel är cirka 0,006667 ms. Det sista koden gör är att gå igenom matriserna, generera musiken och blinka de två lysdioderna. Detta görs i en kontinuerlig loop med följande kod

const uint8_t freq PROGMEM = {… data}; const uint8_t length PROGMEM = {… data}; const uint8_t delay PROGMEM = {… data};… while (1) {för (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); sleep (pgm_read_byte (& längd [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // stopptimer TCCR0B = 0; sleep (pgm_read_word (& delay [cnt])); // start timer TCCR0B | = (1 << CS01); // clk/8 förskalning}}Det finns 156 element i frekvenserna/längderna/fördröjningsarrayerna, den här slingan går igenom dem. Stift PB3 och PB4 växlas var och en så att de växlar med varje ton Den första sömnen är längden på noten vi spelar efter att OCR0A -registret har ställts in på rätt värde. Den andra sömnen är pausen mellan noterna vi spelar. I koden ovan kanske du har lagt märke till de två funktionerna pgm_read_byte () och pgm_read_word () samt sökordet PROGMEM. Med ett inbäddat chip som attiny är SRAM -mängden mycket begränsad, i detta fall bara 64bytes. De matriser vi använder för alla frekvens/fördröjning/längddata är mycket större än 64 byte och kan därför inte laddas in i minnet. Genom att använda det speciella PROGMEM avr-gcc-direktivet förhindras dessa stora datamängder att laddas in i minnet, istället läses de från blixt.

Steg 5: Låt Marioman lossna

Videon ovan visar Marioman i aktion. Den genomsnittliga strömförbrukningen är cirka 25 mA så att han kan blinka och göra ljud i cirka 10 timmar innan han tömmer litiummyntcellen. Det enda sättet att slå på och stänga av det är att ta bort myntcellsbatteriet, den robusta som anges i materialen är väl lämpad för detta. En switch kan läggas till men det finns något att säga för att hålla det enkelt.

Rekommenderad: