Innehållsförteckning:
- Steg 1: Material och konstruktion
- Steg 2: Lödning av AVR till lysdioder och högtalare
- Steg 3: Programmering av Attiny13a
- Steg 4: Skapa firmware för Marioman
- Steg 5: Låt Marioman lossna
Video: Blinkar, sjunger, Marioman: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:47
Använd en attiny13a, två lysdioder och en gratulationskorthögtalare för att skapa en blinkande Marioman som spelar temasången Super Mario Brothers. Detta kan vara ett enkelt billigt projekt för alla som letar efter ett roligt sätt att bryta sig in i AVR-programmering! noter av låtarna genereras av en fyrkantvåg som matas ut på en enda pin på AVR -mikrokontrollern. Lysdioderna som växlar på varje ton är anslutna till 2 stift var och en av samma chip.
Steg 1: Material och konstruktion
1 attiny13a
www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dKostnad: $ 1,40
- 2 lysdioder - alla lysdioder klarar
- 1 litiummyntbatteri
www.sparkfun.com/commerce/product_info.php?products_id=338 Kostnad: $ 2,00
1 myntcellshållare
www.sparkfun.com/commerce/product_info.php?products_id=8822 Kostnad: $ 1,25
1 liten högtalare från ett musikaliskt gratulationskort
Total materialkostnad ~ $ 5 De två lysdioderna fästes direkt på två stift var och en av attiny13A. Två stift används för varje lysdiod, den andra stiftet är lågt för att användas som en jordanslutning. Den nuvarande gränsen för I/O -stiften på AVR kommer att förhindra att lysdioderna dras för mycket så ett motstånd är inte nödvändigt att ansluta Den högtalare som används är typisk för en som finns i ett musikaliskt gratulationskort, vilken liten högtalare som helst kommer att göra, med tanke på att detta ger en fyrkantig ton, är det inte så viktigt att oroa sig för att driva högtalaren eller ljudkvaliteten.
Steg 2: Lödning av AVR till lysdioder och högtalare
För att lysdioderna ska räcka ut som armar är en nål böjd över AVR på varje sida. Genom att orientera AVR på detta sätt är det enkelt att ansluta till högtalaren (andra bilden) eftersom anslutningarna är på de två nedre stiften. För estetik vill du att chipets framsida är vänd ut så se till att högtalaren är vänd på samma sätt när det är bifogat.
Steg 3: Programmering av Attiny13a
Det finns många olika alternativ för att programmera AVR. För detta projekt användes USBtiny som finns som ett kit från ladyadas webbplats https://www.ladyada.net/make/usbtinyisp/index.html För att ansluta AVR till programmeraren kan du antingen koppla kablar till honkontakten och anslut dem till ett brödbräda eller ännu bättre få en billig AVR -programmeringsadapter så här https://www.sparkfun.com/commerce/product_info.php? products_id = 8508 tillsammans med 3x2 hanrubriker för att ansluta kontakten.
Steg 4: Skapa firmware för Marioman
Attiny13A har 1K programmerbar blixt och 64bytes SRAM. Den bifogade tarfilen har källfilen samt kompilerad firmware för nedladdning. Tre matriser i c -koden användes för att generera musiken
- freq - frekvenser för varje ton
- längd - längden på varje ton
- fördröjning - paus mellan varje ton
Frekvensmatrisen har inte de faktiska frekvenserna utan snarare det värde som ska läggas in i TTCROB -registret för att generera kvadratvågan från PB0 -stiftet. Här är en kort sammanfattning av beräkningarna och stiftkonfigurationen för kvadratvåggenerering:
- Attiny13A har en intern oscillator inställd på 9,6 MHz
- Den interna klockan för IO är oscillatorn dividerad med 8 eller 1,2 MHz
- En intern timer installeras i ett 8 -bitarsregister för att räkna upp varje klockcykel med förskala på 8.
- Detta resulterar i en bock som är lika med 1 / (1.2MHz / 8) =.006667ms
- Attiny13A är konfigurerad för att jämföra vad som finns i 8 -bitars TCCR0B -registret med timern och växla en stift när de matchar.
- Till exempel, för att generera en fyrkantvåg vid 524Hz (en oktav över mitt C) som har en period på 1,908ms.
1.908ms = 286 klockfickor (1.908/.0067) Dela 286 med 2 för att växla stiftet vid t/2 (286/2 = 143) Sätt 143 i TTCR0B -registret för att generera den här noten. Detta är all kod som behövs för att ställa in timern, gör jämförelsen och mata ut en fyrkantvåg:
TCCR0A | = (1 << WGM01); // konfigurera timer 1 för CTC -läge TCCR0A | = (1 << COM0A0); // växla OC0A på jämför matchning TCCR0B | = (1 << CS01); // clk/8 förskala TTCR0B = 143; // generera en fyrkantvåg vid 524HzFör att fördröja tonerna och pauserna mellan dem användes en enkel fördröjningsfunktion
ogiltig sömn (int ms) {int cnt; för (cnt = 0; cnt <(ms); cnt ++) {int i = 150; medan (i--) {_asm ("NOP"); }}}Detta räknar ner från 150 där varje NOP -cykel är cirka 0,006667 ms. Det sista koden gör är att gå igenom matriserna, generera musiken och blinka de två lysdioderna. Detta görs i en kontinuerlig loop med följande kod
const uint8_t freq PROGMEM = {… data}; const uint8_t length PROGMEM = {… data}; const uint8_t delay PROGMEM = {… data};… while (1) {för (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); sleep (pgm_read_byte (& längd [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // stopptimer TCCR0B = 0; sleep (pgm_read_word (& delay [cnt])); // start timer TCCR0B | = (1 << CS01); // clk/8 förskalning}}Det finns 156 element i frekvenserna/längderna/fördröjningsarrayerna, den här slingan går igenom dem. Stift PB3 och PB4 växlas var och en så att de växlar med varje ton Den första sömnen är längden på noten vi spelar efter att OCR0A -registret har ställts in på rätt värde. Den andra sömnen är pausen mellan noterna vi spelar. I koden ovan kanske du har lagt märke till de två funktionerna pgm_read_byte () och pgm_read_word () samt sökordet PROGMEM. Med ett inbäddat chip som attiny är SRAM -mängden mycket begränsad, i detta fall bara 64bytes. De matriser vi använder för alla frekvens/fördröjning/längddata är mycket större än 64 byte och kan därför inte laddas in i minnet. Genom att använda det speciella PROGMEM avr-gcc-direktivet förhindras dessa stora datamängder att laddas in i minnet, istället läses de från blixt.
Steg 5: Låt Marioman lossna
Videon ovan visar Marioman i aktion. Den genomsnittliga strömförbrukningen är cirka 25 mA så att han kan blinka och göra ljud i cirka 10 timmar innan han tömmer litiummyntcellen. Det enda sättet att slå på och stänga av det är att ta bort myntcellsbatteriet, den robusta som anges i materialen är väl lämpad för detta. En switch kan läggas till men det finns något att säga för att hålla det enkelt.
Rekommenderad:
StickC M5Stack LED blinkar: 7 steg
StickC M5Stack LED Blink: I det här projektet kommer vi att lära oss att ansluta och göra en LED -blinkning med en M5StickC ESP32 -modul. Titta på videon
Motorcykel bakljus med integrerade blinkar med programmerbara lysdioder: 4 steg
Motorcykel baklampa med integrerade blinkar med programmerbara lysdioder: Hej! Detta är lite enkelt DIY om hur man gör en anpassad programmerbar RGB -baklampa (med integrerade blinkar/indikatorer) för din motorcykel eller eventuellt något som använder WS2812B (individuellt adresserbara lysdioder) och Arduinos . Det finns fyra ljuslägen
Kontroll -LED blinkar med en potentiometer och OLED -display: 6 steg
Kontrollampa blinkar med en potentiometer och OLED -skärm: I denna handledning lär vi oss hur du styr LED -lampan blinkar med en potentiometer och visar pulsfrekvensvärdet på OLED -displayen. Se en demonstrationsvideo
LED blinkar {knappstyrd}: 5 steg
LED blinkar {knappstyrd}: Jag är student i Kang Chiao. Detta är mitt projekt, jag använder Arduino och gjorde ett LED-blinkande ljus med en knapp som kan få det att blinka. Du kan lägga den på din trasa och när vissa människor är för nära dig kan du trycka på knappen och glödlampan med
SkateHub -blinkar för skateboard: 3 steg
SkateHub Blinkers for Skateboard: " Denna instruerbara skapades för att uppfylla projektkravet för Makecourse vid University of South Florida (www.makecourse.com) " Skate Hub är en funktionell blinkare för att indikera för mötande fotgängare åt vilket håll du är