Innholdsfortegnelse:
- Trinn 1: Materialer og konstruksjon
- Trinn 2: Lodding AVR til lysdioder og høyttaler
- Trinn 3: Programmering av Attiny13a
- Trinn 4: Opprette fastvaren for Marioman
- Trinn 5: La Marioman løsne
Video: Blinker, synger, Marioman: 5 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:26
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
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
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
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
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:
Dobbel LED -blinker ved bruk av 555 TIMER IC: 5 trinn
DUAL LED BLINKER BRUKER 555 TIMER IC: håper denne instruktive hjelper deg med å like og abonnere på kanalen min
Politi blinker på to NE555: 9 trinn
Police Flasher on Two NE555: På bildet nedenfor kan du se et skjematisk diagram over en enkel LED -blinker med to populære NE555 IC -er
Firmware Blinker av ESP8266: 4 trinn
Fastvare Blinker av ESP8266: Alle prøver å oppdatere fastvaren til ESP8266 -modulen. Instruksjonene kan hjelpe deg med å blinke fastvaren i ESP8266
Slik blinker eller programmerer du ESP8266 AT -fastvare ved hjelp av ESP8266 Blinker og programmerer, IOT Wifi -modul: 6 trinn
Slik blinker eller programmerer du ESP8266 AT-fastvare ved bruk av ESP8266 blinker og programmerer, IOT Wifi-modul: Beskrivelse: Denne modulen er en USB-adapter /programmerer for ESP8266-moduler av typen ESP-01 eller ESP-01S. Den er praktisk utstyrt med en 2x4P 2.54mm hunnhodet for å koble ESP01. Den bryter også ut alle pinnene på ESP-01 via en 2x4P 2.54mm hannh
Kontroll -LED blinker med potensiometer og OLED -display: 6 trinn
Kontroll -LED blinker med et potensiometer og OLED -skjerm: I denne opplæringen lærer vi hvordan du kontrollerer LED -blinkingen med et potensiometer og viser pulsfrekvensverdien på OLED -skjermen. Se en demonstrasjonsvideo