Blinkar, sång, Marioman (4 / 5 steg)

Steg 4: Skapa firmware för Marioman



Attiny13A har 1K av programmerbar flash och 64bytes av SRAM.
Bifogade tar-filen har den källfil som kompilerade firmware för nedladdning.

Tre matriser i c kod användes för att generera musik

  • [] freq - frekvenser för varje not
  • [längd] - längd för varje not
  • dröjsmål [] - paus mellan varje ton

Arrayen frekvens har inte de faktiska frekvenserna men ganska värdet som placeras i TTCROB register att generera fyrkantsvåg off PB0 PIN-koden.

Här är en kort sammanfattning av de beräkningar och pin-konfiguration för fyrkantsvåg generation:

  • Attiny13A har en intern oscillator inställd 9.6MHz
  • Den interna klockan för IO är oscillatorn dividerat med 8 eller 1.2 MHz
  • En inre timer är setup i ett 8-bitars register att räkna upp varje klockcykel med prescale av 8.
  • Detta resulterar i en fästing motsvarar 1 / (1.2 MHz / 8) =.006667ms
  • Attiny13A är konfigurerad för att jämföra vad som finns i 8-bitars TCCR0B register med timer och växla en PIN-kod när de matchar.
  • Till exempel, för att generera en fyrkantsvåg på 524 Hz (en oktav över mitten C) som har en period av 1.908ms.

1.908ms = 286 klocka fästingar (1.908/.0067)
Dela upp 286 av 2 för att växla den PIN-kod på t/2 (286/2 = 143)
Sätta 143 i TTCR0B register att generera denna anmärkning.

Detta är all kod som behövs för att ställa in timern, jämför och utgång en fyrkantsvåg:

TCCR0A | = (1 << WGM01); Konfigurera timer 1 för CTC läge TCCR0A | = (1 << COM0A0); Växla OC0A på Jämför matcha TCCR0B | = (1 << CS01); CLK/8 prescale TTCR0B = 143; Generera en fyrkantsvåg på 524Hz

För att fördröja tonen och pauser mellan dem användes en enkel dröjsmål funktion:

Annullera sömn (int ms) {int cnt; för (cnt = 0; cnt < (ms), cnt ++) {int jag = 150, while(i--) {__asm("NOP");}}}

Detta räknar ner från 150 där varje NOP cykel är cirka.006667ms.

Det sista koden gör är loopa igenom arrayer, skapa musik och blinka två lysdioder.

Detta görs fortlöpande för slinga med följande kod:

CONST uint8_t freq [] PROGMEM = {... data}; const uint8_t längd [PROGMEM] = {... data}; const uint8_t fördröja [PROGMEM] = {... data};.. medan (1) {för (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq[cnt]); output_toggle(PORTB,PB3); output_toggle(PORTB,PB4); sömn (pgm_read_byte(&length[cnt])); output_toggle(PORTB,PB3); output_toggle(PORTB,PB4); / / stopp tidtagare TCCR0B = 0; sömn (pgm_read_word(&delay[cnt])); / / start timer TCCR0B | = (1 << CS01); / / clk/8 prescale}}

Det finns 156 element i frekvenser/längder/fördröjning matriser, denna loop korsar dem. PIN PB3 och PB4 är varje växlas så de kommer att varvas med varje not första sömnen är längden på anteckningen vi spelar efter att OCR0A registret till lämpligt värde. Andra sömnen är paus mellan de anteckningar vi spelar.

I koden ovan kanske du måste märka två funktionerna pgm_read_byte() och pgm_read_word() samt nyckelordet PROGMEM.

Med en inbäddad chip som attiny är mängden SRAM mycket begränsad, i detta fall endast 64bytes. De matriser som vi använder för alla frekvens/fördröjning/längd data är mycket större än 64bytes och därför kan inte läsas in i minnet. Genom att använda särskilda PROGMEM avr-gcc direktivet dessa stora datamatriser hindras från att laddas in i minnet, i stället läses de från flash.

Se Steg
Relaterade Ämnen

Blumcaw Cupcake (blinkar, LED, ultraljud, Motorized, kacklande, Arduino, häxa) med 3d tryckta delar

Denna gamla häxa har en blinkande vårta på näsan. Om du kliver kommer alltför nära (som bestäms av en Ping ultraljud givare), hon kackel ut en hälsning, hennes hatt kommer att snurra och hennes ögon blinkar sju färger.Blumcaw kan göras som en "vanlig...

Början Microcontrollers del 7: Omarbetning av det första programmet att göra LED blinkar

Du har skrivit det första programmet, som visade på en LED. Ja, det var spektakulärt! Tja, inte riktigt, men låt oss införa lite galenskap till LED. Vi ska ge det en "bipolära" personlighet genom att blinka. Då vi kliver upp ett snäpp och gör de...

Adrian monk Disneytopian blinkar hammare rättfärdighetens (Banhammer)

när det finns inget hopp, du når för något djup. När stirrade ner disconsonant slödder publiken i den djupaste grottan på den nya digitala gränsen, det enda sättet för att få ordning på den sista utvägen är när alla anledning misslyckas att använda A...

Blinkar en lysdiod med raspberry pi

Idag ska jag bokföra hur blinka en led med raspberry pi. Blinkar en LED är en nybörjare uppgift och enkel uppgift.komponenter som krävs:Raspberry pi.2 hane till honkontakter. En 330 omh motstånd.EN LED.En skärbräda.Steg 1: förfarandeHär är pin diagra...

Facebook LED blinkar på nya anmälningar och meddelanden

i detta instructable jag kommer att visa dig hur man gör en LED blinkar när du har en ny anmälan eller meddelande på Facebook via parallellporten. Kolla in följande video för en demonstration:Det är ett snabbt och enkelt projekt att göra, förutsatt a...

En svävar sfär roterar lyser och blinkar med Arduino

En svävar lite Dödsstjärnan i Instructables bjöd in mig till det nya projektet med Arduino. Tre principer var beslutat och höll för att skilja den från föregångaren.Gör det själv med någon (eller mindre) färdiga.Hålla roterande.Göra glöd och blinka u...

Juni 2014 Bulid natt: LittleBits reglaget blinkar

Detta Instructable kommer att bli enklare än de andra littleBits bygganden från H3 Labs för denna bygga natt. Jag bestämde mig att markera Arduino programmering aspekten snarare än fysiska projektet.Det kräver endast några delar:Dator (att ladda skis...

Blinkar en LED med en 555 Timer krets

Här är en detaljerad video jag skapade för att förklara hur man använder en 555 Timer IC, i kombination med några motstånd och kondensatorer, för att göra en lysdiod blinkar.Saker du behöver:1) bakbord2) bakbord hoppare ledningar3) 555 timer IC4) en...

Enkla alternativ LED blinkar med 555 timer

här är kopplingsschemat.!Steg 1: Komponenter som krävs 1) 2 ledde av olika färger2) 100uf kondensator3) 555 timer ic4) ledningar5) 9v batteri6) batteri kontakt7) 1 k ohm motstånd 18) 10 k ohm motstånd 19) 220 ohm resistor 210) bröd boaedSteg 2: anslu...

LED blinkar med Arduino

Maskinvara som krävs:1) Arduino Uno2) LED3) 4.7 k motstånd4) förbindande kablar5) bröd styrelseAnsluter du den ledde till arduino som visas ovan.Arduino 3. pin är ansluta till + ve pin av LED och -ve slutet av LED är att ansluta till marken genom 4.7...

Litium regn strålande ledstjärna rättfärdighetens (blinkar i-hoodie)

det enda du inte kan köpa från shiney ny Apple Store är en jag-hoodie, en Instructablized version av hoodie med ljus upp logotyper av instructables handen och Apple Macintosh * logotypen. Detta är den instruera-intosh version hoodie, väl, det kan var...

LED-lampan blinkar julgran (ingen programmering!)

I detta projekt ska jag visa hur jag gjorde min Juldekoration i år, en 120x80cm julgran med blinkande ornament och guirlande, och den bästa delen - absolut ingen programmering!Projektet är lite tidskrävande, som vad som helst med nästan 1500 lysdiode...

LED blinkar krets

jag kommer att visa dig hur man gör en LED krets som gör LED flash med olika intervall beroende på storleken på kondensatorn.Steg 1: material Vad du behöver:-Lödkolv-Löda-Wire-2 1 kilo-ohm motstånd-1 110 ohms motstånd-1 10 till 1000 uf kondensator-Pe...

Blinkar på musik LED

3 LED-lampor som blinkar i takt med musiken....

LED blinkar ljus med Arduino

måste du först installera Arduino på datorn och har startpaket.Steg 1: material Arduino UNOUSB-sladdWireResistor 300 ohmLED ljusSkärbrädaSteg 2: montering Plug USB till din datorFå skärbrädaSätta ljus under den röda linjenLägga en tråd under första p...

LED blinkar av fjärr-PC med WIZwiki-W7500 mbed plattform

Jag presentera en LED blinkar kontrollerande från fjärranslutna dator via nätverk (TCP protocol).Ett TCP client program körs i datorn och en TCP-server körs i en WIZwiki-W7500 mbed plattformen styrelse. W7500 överför data till PC och tar emot data fr...

LED blinkar med Raspberry Pi

en av den klassiska elektronisk analogin till "Hello World" är att göra en LED blinkar. Raspberry Pi har 8 allmänna ändamål Input/Output stift (4,17,18,21,22,23,24,25) som kan konfigureras som indata/utdata och avstängd / via programvara. I dett...

GoPiGo LED blinkar

En av de enklaste sättet att interagera med GoPiGo (en fin liten robotics plattform för Raspberry Pi) är att använda två lysdioder framför den.Med ett mycket enkelt kommando, kan du göra GoPiGo ge signaler eller bara göra en enkel blinkning.Steg 1: V...

LED BLINKAR TUTORIAL ARDUINO; DET ENKLASTE!

Låter komma igång!I VIDEON HAR PROJEKTET GJORTS MED HJÄLP AV HOPPARE LEDNINGARDU KAN GÖRA PROJEKTET I BÅDA RIKTNINGARNA (MED ELLER UTAN BYGEL TRÅD) :DKolla videon för säkerFör mer intressant projekt besök: www.miymakers.comFacebook: www.facebook.com/...