Efter rutan Synthesizer (3 / 8 steg)

Steg 3: PWM kod

Det första steget är att skapa tabellen våg. Tabellen sparas i Atmega328 RAM med hjälp av pgmspace biblioteket. Varje våg tabell har 256 värden från 0 till 255, så varje värde kan mappas till datatypen byte. Sinusvåg definitionen visas nedan. Varje värde är amplituden av vågen vid en viss tid. Detta representerar en period av vågen. Ju högre frekvensen som spelas, desto snabbare programstegen genom tabellen.

#include "avr/pgmspace.h"

Vågform definitioner
PROGMEM prog_uchar waveTable [] = {
sinusvåg
0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,
15,16,18,20,21,23,25,27,29,31,33,35,37,39,
42,44,46,49,51,54,56,59,62,64,67,70,73,76,
78,81,84,87,90,93,96,99,102,105,108,111,115,
118,121,124,127,130,133,136,139,143,146,149,
152,155,158,161,164,167,170,173,176,178,181,
184,187,190,192,195,198,200,203,205,208,210,
212,215,217,219,221,223,225,227,229,231,233,
234,236,238,239,240,242,243,244,245,247,248,
249,249,250,251,252,252,253,253,253,254,254,
254,254,254,254,254,253,253,253,252,252,251,
250,249,249,248,247,245,244,243,242,240,239,
238,236,234,233,231,229,227,225,223,221,219,
217,215,212,210,208,205,203,200,198,195,192,
190,187,184,181,178,176,173,170,167,164,161,
158,155,152,149,146,143,139,136,133,130,127,
124,121,118,115,111,108,105,102,99,96,93,90,
87,84,81,78,76,73,70,67,64,62,59,56,54,51,49,
46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,
16,15,14,12,11,10,9,7,6,5,5,4, 3,2,2,1,1,1,0,0,0,
};

För att få Arduino att skapa PWM signalen, har timern till vara korrekt initierad. För detta använde jag C metoden att ställa in timern så att jag bättre kan kontrollera det. Timern är skapad så att vi har en 32 kHz samplingsfrekvens för våra ljud och produktionen av signalen sätts på 11 av Arduino. Jag aktiverar också overflow avbrott, så att när timer-värde går över 255, avbrottet utlöser.

void Setup_timer2() {

Timer2 klocka Prescaler till: 1
SBI (TCCR2B, CS20);
CBI (TCCR2B, CS21);
CBI (TCCR2B, CS22);

Timer2 inställt PWM på fas rätt PWM
CBI (TCCR2A, COM2A0); Rensa jämför Match
SBI (TCCR2A, COM2A1);

SBI (TCCR2A, WGM20); Läge 1 / fas rätt PWM
CBI (TCCR2A, WGM21);
CBI (TCCR2B, WGM22);
}

Detta är overflow avbrottet. När avbrottet inträffar beräkna jag nästa värde som bör dras från tabellen våg och skriva värdet till stift 11. En variabel som kallas fas ackumulatorn håller koll på där programmet finns i tabellen.

ISR(TIMER2_OVF_vect)
{

phaccu = phaccu + tword_m; mjuk DDS, fas accu med 32 bitar
icnt = phaccu >> 24. använda övre 8 bitar för fas accu som frekvens information
läsa värdet fron ROM sine tabell och skicka till PWM DAC

OCR2A = pgm_read_byte_near (waveTable + icnt + (waveSelect << 8));

om (icnt1 ++ == 125) {/ / ökar värdet för variabeln c4ms alla 4 millisekunder
c4ms ++;
icnt1 = 0;
}
}

Att värdet beräknas med en trim word som finns genom att dividera den frekvens du vill av en referens klocka, i detta fall 32kHz hänvisningen klocka.

CONST double refclk = 31376.6; uppmätt
tword_m = pow (2,32) * dfreq/refclk; calulate DDS nya tuning word

Se Steg
Relaterade Ämnen

Ek smyckeskrin med rutan gemensamt byggande

när jag beslutat att göra ett smyckeskrin i födelsedagspresent för min dotter, mitt mål var att göra det så tydlig som möjligt. Så, eftersom jag alltid gillar att lära sig en ny teknik för träbearbetning, jag bestämde mig att lära mig hur man skapar...

Kaka tips

få större kakor eller mer cupcakes från en kaka mix och göra den mer smak som hemlagad!Börja med en boxed kaka mix. Du kommer att följa anvisningarna men du kommer att lägga fler ingredienser. Bakning temperaturen och bakning tid kommer att finnas på...

(1.0) EVSE: Konvertera en nivå 1 (12AMP) till en nivå 2 (12 AMP) (ta en titt på 2.0)

denna design är lite krångligt att använda, men min avsikt var att göra en liten, enkel, portabel nivå 2 laddare ur en nivå 1 laddare för tillfällig användning på vägen. Jag har gjort ett antal mönster som är mer förbrukaren vänlig men är inte lika e...

Skapa en ur denna världen vattenmelon kostym

material behöver du:1. rosa, grön, svart och vitt tyg2. 1 brytkniv3. 1 kartong4. 1 självhäftande Spray5. limpistol6. pannband7. 1 skum8. stick-on strass9. rosa perukTotal kostnad: $35Steg 1: Skär kartong Det första steget är att få en stor pappkarton...

Akut chokladask

En av mina vänner är en lärare/administratör på en privat religiös skola och har känsla betonade särskilt nyligen. Med semester nära och gåva utbyte vilar över mig, visste jag att jag måste hålla sig till hemlagad gåvor på grund av min egen personlig...

Starta en bakgård bikupa honung

I våras jag knackade bort en av mina mångåriga att göra - gratis sträcker sig bin! Skojar bara-slags. Vi startade två bisamhällen med honungsbin.Min pappa har hållit bin för majoriteten av mitt vuxna liv - tyvärr en sväng i hans hälsa har lämnat omkr...

25 MM pneumatisk Sniper Rifle

*** Varning *** följande är för informativt ämnar endast, jag tar inget ansvar för vad du gör med denna kunskap. Jag kan inte hållas ansvariga för egendom eller medicinska skador orsakade av detta vapen. Jag skulle råda dig att kontrollera dina lokal...

DIY Explosion Box bröllop inbjudningar/meddelanden.

Hej alla detta är min första instructable och jag är förvånad över vad alla har gjort, min mamma har gjort explosion lådor för år, och jag trodde det skulle vara ganska snyggt att använda dessa som bröllopinbjudningar, så jag är här för att visa er m...

Kartong och Duct tape solugn

detta instructable handlar om en sol ugn jag gjord av en gammal tavelram, två kartonger, några duct tape, aluminiumfolie, vitt lim och skrynkliga tidningen. Du kommer att behöva hitta en bildram. Jag använde vanligt glas men härdat glas skulle vara b...

Bygga en par av Stereo högtalare

detta instructable är en grundläggande guide för att bygga ett par stereohögtalare av hög kvalitet. Processen är inte svårt men kräver massor av tid, tålamod och ansträngning.Här är en introduktion till en högtalare några huvuddelar:HögtalarelementDe...

Gammaldags glödlampa belastning

när du arbetar med kraftelektronik, ganska ofta rätt bit av testutrustning är en gammaldags glödlampa. De gör bra ballast motstånd och dummy laddar för en mängd olika enheter. En 100W lampa börjar om 10Ω kall och arbetar sig fram till om 150Ω, så de...

4 spelare bärbar Arcade maskin

Jag växte upp spelar TV-spel och älskade särskilt Bomberman serien. Enligt min mening är det bland de bästa multiplayer spel som någonsin gjorts. Jag trodde det skulle vara kul att göra en bärbar 4 spelare Bomberman tema arcade skåp, som skulle vara...

Shark Fan (löda rök Filter)

Som en elektroteknik skapar student jag har gjort en hel del lödning och var i desperat behov av ett fan att filtrera bort den rök som smält lödtenn. Också att en student hade jag mycket pengar att spendera på en köpta rök extractor och medan jag är...

Monster Under sängen

Denna ruta gör skrämmande ljud och har glödande röda ögon som slår på när ljuset slocknar. Lägg den under en säng eller skrivbord för att upptåg dina vänner (eller kollegor)!Du kan också ändra typen av sensor för att göra en rörelse - eller närhet-ak...

Legenden om Zelda bröstet

Detta bröst kommer att vara för min fru. Zelda har alltid varit hennes favorit spel från långt tillbaka i våra NES dagar. Detta är tänkt att vara en "strumpa stuffer" typ gåva för hennes denna jul.Det finns många av dessa på webben, och här på I...

Holocron: Bygga en Star Wars tumma driva

i the Extended universum av Star Wars, Holocron är ett slags AI-hjälp, telepatiskt manövrerade, information lagringsenhet. Och, visst, du kan bygga en prop version (det finns även ett kit). Eller du kan göra en fancy version med en riktig blixt driva...

Sätta din kod i en låda, ordentligt indragen, på Instructables

När jag först skrev koden det var på hålkort och du kunde inte indrag. Nu kan du och kod som inte är indragen är inte ofta värt ansträngningen av läsning. I Python om indraget inte är rätt körs koden inte rätt. Fortfarande finns det en hel del kod pu...

Kryptering är ett, med OpenSSL!

Chanserna är du hört talas om kryptering någon gång i dina många kontakter med datorteknik, men vad exakt är det? Kryptering är när data, i detta fall en textfil, konverteras till chiffertext. Denna ciphertext är en oigenkännlig, slumpmässiga virrvar...

Repurposed inomhus fröplanta Starter växthusgaser

För detta projekt bestämde jag att jag skulle få in våren anda av saker även om det är fortfarande bara i slutet av januari jag längtar för dagar när jag kan komma tillbaka i trädgården igen. Så för detta projekt fick jag en idé från en gammal butik...