Indholdsfortegnelse:
- Trin 1: Materialer og konstruktion
- Trin 2: Lodning af AVR til lysdioder og højttalere
- Trin 3: Programmering af Attiny13a
- Trin 4: Oprettelse af firmware til Marioman
- Trin 5: Lad Marioman løsne
Video: Blinker, synger, Marioman: 5 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:31
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
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
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
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
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:
Kontrol -LED Blinker pulser med et potentiometer: 6 trin
Kontrol af LED -blinkende impulser med et potentiometer: I denne vejledning lærer vi, hvordan du kontrollerer LED -blinkende pulser med et potentiometer. Se en demonstrationsvideo
DUAL LED BLINKER BRUGER 555 TIMER IC: 5 trin
DUAL LED BLINKER BRUGER 555 TIMER IC: håber denne instruktive hjælper dig med at like og abonnere på min kanal
Reparation Creative Tactic3D Rage Wireless Headset (blåt blinker, ingen parring, udskiftning af batteri): 11 trin
Reparation af Creative Tactic3D Rage trådløst headset (blåt blinker, ingen parring, udskiftning af batteri): Denne vejledning på billederne er for dem, der ejer et Creative Headset, at tabt parring med USB-senderen og genparring ikke fungerer, da headsettet langsomt blinker blåt og reagerer ikke mere på knapperne. I denne tilstand kan du ikke
Politi blinker på to NE555: 9 trin
Police Flasher on Two NE555: På billedet herunder kan du se et skematisk diagram over en enkel LED -blink med to populære NE555 IC'er
Firmware Blinker af ESP8266: 4 trin
Firmware Blinker af ESP8266: Alle forsøger at opdatere firmware til ESP8266 -modulet. Instruktionerne kan hjælpe dig med at blinke firmwaren i ESP8266