Indholdsfortegnelse:

Blinker, synger, Marioman: 5 trin
Blinker, synger, Marioman: 5 trin

Video: Blinker, synger, Marioman: 5 trin

Video: Blinker, synger, Marioman: 5 trin
Video: Скандальная Альбина_Рассказ_Слушать 2024, November
Anonim
Blinker, synger, Marioman
Blinker, synger, Marioman

Brug en attiny13a, to lysdioder og et lykønskningskorthøjttaler til at oprette en blinkende Marioman, der spiller Super Mario Brothers-temasangen. Dette kan være et let billigt projekt for alle, der leder efter en sjov måde at bryde ind i AVR-programmering! noter af sangene genereres af en firkantbølge, der udsendes på en enkelt pin på AVR -mikrokontrolleren. Lysdioderne, der skifter på hver note, er forbundet til 2 ben hver af den samme chip.

Trin 1: Materialer og konstruktion

Materialer og konstruktion
Materialer og konstruktion

1 attiny13a

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

  • 2 lysdioder - alle lysdioder vil klare
  • 1 litium møntcellebatteri

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

1 møntcelleholder

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

1 lille højttaler fra et musikalsk lykønskningskort

Samlede materialepriser ~ $ 5 De to lysdioder blev fastgjort direkte til to ben hver af attiny13A. To pins bruges til hver LED, den anden pin er sat lav til brug som jordforbindelse. Den nuværende grænse for I/O -benene på AVR forhindrer LED'erne i at trække for meget, så en modstand er ikke nødvendig at tilslutte Den anvendte højttaler er typisk for en, der findes i et musikalsk lykønskningskort, enhver lille højttaler vil gøre, da denne udsender en firkantet bølgetone, er det ikke for vigtigt at bekymre sig om at køre højttaleren eller lydkvaliteten.

Trin 2: Lodning af AVR til lysdioder og højttalere

Lodning af AVR til lysdioder og højttalere
Lodning af AVR til lysdioder og højttalere
Lodning af AVR til lysdioder og højttalere
Lodning af AVR til lysdioder og højttalere

For at lysdioderne skal kunne komme ud som arme, er en nål bøjet over AVR'en i hver side. Ved at orientere AVR'en på denne måde er det let at tilslutte til højttaleren (andet billede), da forbindelserne er på de to nederste ben. For æstetik ønsker du, at forsiden af chippen vender ud, så sørg for, at højttaleren vender på samme måde, når den er vedhæftet.

Trin 3: Programmering af Attiny13a

Programmering af Attiny13a
Programmering af Attiny13a

Der er masser af forskellige muligheder for programmering af AVR'er. Til dette projekt blev USBtiny brugt, som fås som et sæt fra ladyadas websted https://www.ladyada.net/make/usbtinyisp/index.htmlFor at slutte AVR'en til programmereren kan du enten tilslut ledninger til hunstikket og sæt dem i et brødbræt eller endnu bedre få en billig AVR -programmeringsadapter som denne https://www.sparkfun.com/commerce/product_info.php? products_id = 8508 sammen med 3x2 hanhoveder til at forbinde stikket.

Trin 4: Oprettelse af firmware til Marioman

Oprettelse af firmware til Marioman
Oprettelse af firmware til Marioman

Attiny13A har 1K programmerbar flash og 64bytes SRAM. Den vedhæftede tar -fil har kildefilen samt kompileret firmware til download. Tre arrays i c -koden blev brugt til at generere musikken

  • freq - frekvenser for hver note
  • længde - længden af hver note
  • forsinkelse - pause mellem hver note

Frekvensarrayet har ikke de faktiske frekvenser, men derimod værdien, der skal lægges i TTCROB -registret for at generere firkantbølgen fra PB0 -stiften.

  • Attiny13A har en intern oscillator indstillet til 9,6MHz
  • Det interne ur til IO er oscillatoren divideret med 8 eller 1,2 MHz
  • En intern timer er opsat i et 8 -bit register for at tælle hver urcyklus op med forskala på 8.
  • Dette resulterer i et kryds, der er lig med 1 / (1.2MHz / 8) =.006667ms
  • Attiny13A er konfigureret til at sammenligne, hvad der er i 8bit TCCR0B -registret med timeren og skifte en pin, når de matcher.
  • For eksempel for at generere en firkantbølge ved 524Hz (en oktav over midten C), som har en periode på 1,908ms.

1.908ms = 286 urskår (1.908/.0067) Divider 286 med 2 for at skifte tappen ved t/2 (286/2 = 143) Sæt 143 i TTCR0B -registret for at generere denne note. Dette er al den kode, der er nødvendig For at konfigurere timeren skal du sammenligne og sende en firkantbølge:

TCCR0A | = (1 << WGM01); // konfigurer timer 1 til CTC -tilstand TCCR0A | = (1 << COM0A0); // skifte OC0A på sammenligningsmatch TCCR0B | = (1 << CS01); // clk/8 forudskala TTCR0B = 143; // generere en firkantbølge ved 524HzFor at forsinke tonerne og pauserne mellem dem blev der brugt en simpel forsinkelsesfunktion

ugyldig søvn (int ms) {int cnt; for (cnt = 0; cnt <(ms); cnt ++) {int i = 150; mens (i--) {_asm ("NOP"); }}}Dette tæller ned fra 150, hvor hver NOP -cyklus er ca.

const uint8_t freq PROGMEM = {… data}; const uint8_t length PROGMEM = {… data}; const uint8_t forsinkelse PROGMEM = {… data};… while (1) {for (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); søvn (pgm_read_byte (& længde [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // stop timer TCCR0B = 0; sleep (pgm_read_word (& forsinkelse [cnt])); // start timer TCCR0B | = (1 << CS01); // clk/8 forudskala}}Der er 156 elementer i frekvenser/længder/forsinkelsesarrays, denne loop krydser dem. Pin PB3 og PB4 skiftes hver, så de skifter med hver note. Den første søvn er længden på den note, vi spiller, efter at OCR0A -registret er indstillet til den relevante værdi. Den anden søvn er pausen mellem de toner, vi spiller. I koden ovenfor har du muligvis lagt mærke til de to funktioner pgm_read_byte () og pgm_read_word () samt søgeordet PROGMEM. Med en indlejret chip som attiny er mængden af SRAM meget begrænset, i dette tilfælde kun 64bytes. De arrays, vi bruger til alle data om frekvens/forsinkelse/længde, er meget større end 64bytes og kan derfor ikke indlæses i hukommelsen. Ved at bruge det særlige PROGMEM avr-gcc-direktiv forhindres disse store dataarays i at indlæses i hukommelsen, i stedet læses de fra flash.

Trin 5: Lad Marioman løsne

Ovenstående video viser Marioman i aktion. Det gennemsnitlige strømforbrug er omkring 25mA, så han kan blinke og lave støj i cirka 10 timer, før han tømmer lithium -møntcellen. Den eneste måde at tænde og slukke ham på er at fjerne møntcellebatteriet, den robuste der er angivet i materialerne velegnet til dette. En switch kan tilføjes, men der er noget at sige for at holde det enkelt.

Anbefalede: