Innholdsfortegnelse:

Blinker, synger, Marioman: 5 trinn
Blinker, synger, Marioman: 5 trinn

Video: Blinker, synger, Marioman: 5 trinn

Video: Blinker, synger, Marioman: 5 trinn
Video: Полный курс React Query за час | TanStack Query v4 для начинающих 2024, September
Anonim
Blinker, synger, Marioman
Blinker, synger, Marioman

Bruk en attiny13a, to lysdioder og en gratulasjonskorthøyttaler til å lage en blinkende Marioman som spiller temasangen Super Mario Brothers. Dette kan være et enkelt rimelig prosjekt for alle som leter etter en morsom måte å bryte seg inn i AVR-programmering! notater av sangene genereres av en firkantbølge som sendes ut på en enkelt pinne på AVR -mikrokontrolleren. Lysdiodene som veksler på hver note er koblet til 2 pinner hver på samme brikke.

Trinn 1: Materialer og konstruksjon

Materialer og konstruksjon
Materialer og konstruksjon

1 attiny13a

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

  • 2 lysdioder - alle lysdioder klarer seg
  • 1 litium myntcellebatteri

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

1 myntcelleholder

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

1 liten høyttaler fra et musikalsk gratulasjonskort

Total materialkostnad ~ $ 5 De to lysdiodene ble festet direkte til to pinner hver på attiny13A. To pinner brukes for hver LED, den andre pinnen er satt til å brukes som en jordforbindelse. Den nåværende grensen for I/O -pinnene på AVR vil forhindre at lysdiodene trekker for mye, så det er ikke nødvendig med en motstand for å koble til Høyttaleren som brukes er typisk for en som finnes i et musikalsk gratulasjonskort, en hvilken som helst liten høyttaler vil gjøre, ettersom dette gir en firkantet bølgetone, er det ikke så viktig å bekymre seg for å kjøre høyttaleren eller lydkvaliteten.

Trinn 2: Lodding AVR til lysdioder og høyttaler

Lodding av AVR til lysdioder og høyttaler
Lodding av AVR til lysdioder og høyttaler
Lodding av AVR til lysdioder og høyttaler
Lodding av AVR til lysdioder og høyttaler

For at lysdiodene skal gå, strekker du ut som armer, en pin er bøyd over AVR på hver side. Å orientere AVR på denne måten gjør det enkelt å koble til høyttaleren (andre bilde) siden tilkoblingene er på de to nederste pinnene. For estetikk vil du at forsiden av brikken vender ut, så vær sikker på at høyttaleren vender på samme måte når det er vedlagt.

Trinn 3: Programmering av Attiny13a

Programmering av Attiny13a
Programmering av Attiny13a

Det er mange forskjellige alternativer for programmering av AVR. For dette prosjektet ble USBtiny brukt som er tilgjengelig som et sett fra ladyadas nettsted https://www.ladyada.net/make/usbtinyisp/index.htmlFor å koble AVR til programmereren kan du enten koble ledninger til hunkontakten og koble dem til et brødbrett, eller enda bedre få en billig AVR -programmeringsadapter som denne..

Trinn 4: Opprette fastvaren for Marioman

Opprette fastvare for Marioman
Opprette fastvare for Marioman

Attiny13A har 1K programmerbar blits og 64byte SRAM. Den vedlagte tarfilen har kildefilen samt kompilert fastvare for nedlasting. Tre matriser i c -koden ble brukt til å generere musikken

  • freq - frekvenser for hver note
  • length - lengden på hver note
  • forsinkelse - pause mellom hvert notat

Frekvensoppsettet har ikke de faktiske frekvensene, men snarere verdien som skal legges inn i TTCROB -registeret for å generere firkantbølgen fra PB0 -pinnen.

  • Attiny13A har en intern oscillator satt til 9,6 MHz
  • Den interne klokken for IO er oscillatoren delt på 8 eller 1,2 MHz
  • En intern timer er satt opp i et 8 -biters register for å telle opp hver klokkesyklus med forhåndsskala på 8.
  • Dette resulterer i ett kryss som er lik 1 / (1.2MHz / 8) =.006667ms
  • Attiny13A er konfigurert til å sammenligne det som er i 8 -biters TCCR0B -registeret med timeren og bytte en pin når de matcher.
  • For eksempel for å generere en firkantbølge ved 524Hz (en oktav over midten C) som har en periode på 1,908ms.

1.908ms = 286 klokkeflått (1.908/.0067) Del 286 med 2 for å veksle tappen ved t/2 (286/2 = 143) Sett 143 i TTCR0B -registeret for å generere denne noten. Dette er all koden som er nødvendig For å sette opp timeren, sammenlign og send ut en firkantbølge:

TCCR0A | = (1 << WGM01); // konfigurer timer 1 for CTC -modus TCCR0A | = (1 << COM0A0); // veksle OC0A på sammenligningskamp TCCR0B | = (1 << CS01); // clk/8 forhåndsskala TTCR0B = 143; // generere en firkantbølge på 524HzEn enkel forsinkelsesfunksjon ble brukt for å forsinke tonene og pausene mellom dem

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

const uint8_t freq PROGMEM = {… data}; const uint8_t length PROGMEM = {… data}; const uint8_t delay PROGMEM = {… data};… while (1) {for (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); sove (pgm_read_byte (& lengde [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // stopp timer TCCR0B = 0; sleep (pgm_read_word (& delay [cnt])); // start timer TCCR0B | = (1 << CS01); // clk/8 forhåndsskala}}Det er 156 elementer i frekvensene/lengdene/forsinkelsesarrayene, denne sløyfen krysser dem. Pin PB3 og PB4 veksles hver for seg, så de vil veksle med hver tone Den første søvnen er lengden på noten vi spiller etter at OCR0A -registeret er satt til riktig verdi. Den andre søvnen er pausen mellom tonene vi spiller. I koden ovenfor har du kanskje lagt merke til de to funksjonene pgm_read_byte () og pgm_read_word () samt søkeordet PROGMEM. Med en innebygd chip som attiny er mengden SRAM svært begrenset, i dette tilfellet bare 64bytes. Arrangene vi bruker for alle dataene om frekvens/forsinkelse/lengde er mye større enn 64 byte og kan derfor ikke lastes inn i minnet. Ved å bruke det spesielle PROGMEM avr-gcc-direktivet forhindres disse store dataarayene i å lastes inn i minnet, i stedet leses de fra blits.

Trinn 5: La Marioman løsne

Videoen ovenfor viser Marioman i aksjon. Det gjennomsnittlige strømforbruket er omtrent 25mA, slik at han kan blinke og lage lyder i omtrent 10 timer før han tømmer litiummyntcellen. godt egnet til dette. En bryter kan legges til, men det er noe å si for å holde det enkelt.

Anbefalt: