INHOUDSOPGAWE:
- Stap 1: Materiaal en konstruksie
- Stap 2: soldeer die AVR aan die LED's en luidsprekers
- Stap 3: Programmering van die Attiny13a
- Stap 4: Skep die firmware vir Marioman
- Stap 5: Laat die Marioman los
Video: Knipper, sing, Marioman: 5 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:28
Gebruik 'n attiny13a, twee LED's en 'n wenskaartspreker om 'n flikkerende Marioman te maak wat die Super Mario Brothers-temalied speel. notas van die liedjies word gegenereer deur 'n vierkantige golf wat op 'n enkele pen van die AVR -mikrobeheerder geplaas word. Die LED's wat op elke noot wissel, is gekoppel aan 2 penne elk van dieselfde chip.
Stap 1: Materiaal en konstruksie
1 attiny13a
www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dKoste: $ 1,40
- 2 LED's - enige LED's sal regkom
- 1 litium muntbattery
www.sparkfun.com/commerce/product_info.php?products_id=338 Koste: $ 2,00
1 muntstukhouer
www.sparkfun.com/commerce/product_info.php?products_id=8822 Koste: $ 1,25
1 klein spreker van 'n musikale wenskaart
Totale materiaalkoste ~ $ 5 Die twee LED's is direk aan twee penne elk van die attiny13A geheg. Twee penne word vir elke LED gebruik, die tweede pen word laag gestel om as 'n grondverbinding te gebruik. Die luidspreker wat gebruik word, is tipies van die spreker wat in 'n musikale wenskaart voorkom, wat enige klein luidspreker sal doen, aangesien dit 'n vierkantige toon toon, is dit nie te belangrik om bekommerd te wees oor die bestuur van die luidspreker of klankgehalte nie.
Stap 2: soldeer die AVR aan die LED's en luidsprekers
Om die LED's soos arms uit te steek, word een pen aan elke kant oor die AVR gebuig. Deur die AVR op hierdie manier te oriënteer, is dit maklik om aan te sluit op die luidspreker (tweede beeld), aangesien die verbindings op die twee onderste penne is. dit is aangeheg.
Stap 3: Programmering van die Attiny13a
Daar is baie verskillende opsies vir die programmering van AVR's. Vir hierdie projek is die USBtiny gebruik, wat as 'n kit beskikbaar is op ladyada se webwerf https://www.ladyada.net/make/usbtinyisp/index.html Om die AVR aan te sluit op die programmeerder kan u Sluit die drade aan op die vroulike aansluiting en steek dit in 'n broodbord, of nog beter, kry 'n goedkoop AVR -programmeringsadapter soos hierdie
Stap 4: Skep die firmware vir Marioman
Die attiny13A het 1K programmeerbare flits, en 64bytes SRAM. Die aangehegte teerlêer bevat die bronlêer en saamgestelde firmware om af te laai. Drie skikkings in die c -kode is gebruik om die musiek te genereer
- freq - frekwensies van elke noot
- lengte - lengte van elke noot
- vertraging - pouse tussen elke noot
Die frekwensie -skikking het nie die werklike frekwensies nie, maar eerder die waarde wat in die TTCROB -register geplaas moet word om die vierkantgolf van die PB0 -pen af te genereer.
- Die attiny13A het 'n interne ossillator op 9.6MHz
- Die interne klok vir IO is die ossillator gedeel deur 8 of 1.2MHz
- 'N Interne timer word opgestel in 'n 8bit -register om elke kloksiklus met 'n voorskaal van 8 te tel.
- Dit lei tot een regmerkie gelyk aan 1 / (1.2MHz / 8) =.006667ms
- Die attiny13A is gekonfigureer om dit wat in die 8bit TCCR0B -register is, te vergelyk met die timer en 'n speld te skakel wanneer dit ooreenstem.
- Byvoorbeeld, om 'n vierkantgolf by 524Hz (een oktaaf bo middel C) te genereer met 'n periode van 1,908 ms.
1.908ms = 286 horlosies (1.908/.0067) Deel 286 met 2 om die pen te skakel by t/2 (286/2 = 143) Plaas 143 in die TTCR0B -register om hierdie nota te genereer. Dit is al die kode wat nodig is Om die timer op te stel, vergelyk en voer 'n vierkantgolf uit:
TCCR0A | = (1 << WGM01); // stel timer 1 in vir CTC -modus TCCR0A | = (1 << COM0A0); // skakel OC0A oor vergelykende pas TCCR0B | = (1 << CS01); // clk/8 voorskaal TTCR0B = 143; // genereer 'n vierkantgolf by 524Hz'N Eenvoudige vertragingsfunksie is gebruik om die toon en die pouses tussen hulle te vertraag
leegte slaap (int ms) {int cnt; vir (cnt = 0; cnt <(ms); cnt ++) {int i = 150; terwyl (i--) {_asm ("NOP"); }}}Dit tel af vanaf 150, waar elke NOP -siklus ongeveer 0,006667 ms is. Die laaste ding wat die kode doen, is om deur die skikkings te loop, die musiek te genereer en die twee LED's te knip.
const uint8_t freq PROGMEM = {… data}; const uint8_t length PROGMEM = {… data}; const uint8_t vertraging PROGMEM = {… data};… terwyl (1) {vir (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); slaap (pgm_read_byte (& lengte [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // stop timer TCCR0B = 0; slaap (pgm_read_word (& vertraging [cnt])); // begin timer TCCR0B | = (1 << CS01); // clk/8 voorskaal}}Daar is 156 elemente in die frekwensies/lengtes/vertragingsskikkings, hierdie lus loop dit deur. Speld PB3 en PB4 word elk aangeskakel, sodat hulle met elke noot afwissel. Die eerste slaap is die lengte van die noot wat ons speel nadat die OCR0A -register op die toepaslike waarde gestel is. Die tweede slaap is die pouse tussen die note wat ons speel. In die kode hierbo het u moontlik kennis geneem van die twee funksies pgm_read_byte () en pgm_read_word () sowel as die sleutelwoord PROGMEM. Met 'n ingebedde chip soos die attiny is die hoeveelheid SRAM baie beperk, in hierdie geval slegs 64 bytes. Die skikkings wat ons vir alle frekwensie-/vertragings-/lengte -data gebruik, is baie groter as 64 bytes en kan dus nie in die geheue gelaai word nie. Deur die spesiale PROGMEM avr-gcc-richtlijn te gebruik, word hierdie groot data-skikkings verhoed om in die geheue te laai, in plaas daarvan word dit van flits gelees.
Stap 5: Laat die Marioman los
Bogenoemde video wys Marioman in aksie. Die gemiddelde kragverbruik is ongeveer 25mA, sodat hy ongeveer 10 uur lank kan knip en geluide kan maak voordat hy die litiummuntsel kan afvoer. Die enigste manier om hom aan en af te skakel, is deur die muntbattery te verwyder, die stewige een wat in die materiaal verskyn, is goed geskik hiervoor. 'N Skakelaar kan bygevoeg word, maar daar is iets om te sê om dit eenvoudig te hou.
Aanbeveel:
StickC M5Stack LED Knipper: 7 stappe
StickC M5Stack LED Blink: In hierdie projek leer ons hoe om 'n LED -flits aan te sluit en te maak met 'n M5StickC ESP32 -module
Beheer -LED knipper met 'n potensiometer en OLED -skerm: 6 stappe
Beheer -LED knipper met 'n potensiometer en OLED -skerm: In hierdie tutoriaal leer ons hoe u die LED -knipper met 'n potensiometer kan beheer en die pulsfrekwensiewaarde op die OLED -skerm kan sien
Sing Arduino Neutkraker: 8 stappe
Sing Arduino Notekraker: Hierdie neutkraker maak sy mond oop op grond van die invoerklank. Dit kan maklik binne minder as 3 uur gedoen word, sodat 'n bedelaar van 'n stapel dele na 'n singende neutkraker kan gaan. Vir hierdie projek benodig u 'n Neutkraker met 'n beweegbare mond, 'n prototipe
Arduino Theremin Sing Muppet: 6 stappe (met foto's)
Arduino Theremin Sing Muppet: Vir 'n skoolprojek oor Arduino het ek 'n muppet gemaak met 'n ingeboude theremin om dit 'n sangmuppet te maak. In sy mond is 'n fotosel wat met 'n Piezo -zoemer verbind kan word, sodat as u die mond oopmaak en toemaak, die toonhoogte sal verander (die helder
Waterdigte luidspreker vir beter stort sing: 12 stappe (met foto's)
Waterdigte luidspreker vir beter stort sing: as jy soos ek is-en ek weet jy is-hou jy daarvan om in die stort te sing en jy suig daaraan! Daar is niks wat ek kan doen om 'n vreeslike sangstem te hê nie, maar die ding wat my regtig pla, en waarskynlik almal binne my stem