Na vak Synthesizer (3 / 8 stap)

Stap 3: PWM Code

De eerste stap is om de Golf-tabel te maken. De tabel wordt opgeslagen in het RAM Atmega328 met behulp van de pgmspace-bibliotheek. Elke tabel Golf heeft 256 waarden van 0 tot 255, zodat elke waarde kan worden toegewezen aan een gegevenstype byte. De definitie van de sinus is hieronder weergegeven. Elke waarde is de amplitude van de Golf op een bepaald tijdstip. Dit vertegenwoordigt een periode van de Golf. Hoe hoger de frequentie die wordt gespeeld, hoe sneller de programmastappen via de tabel.

#include "avr/pgmspace.h"

Golfvorm definities
PROGMEM prog_uchar waveTable [] {} =
sinusgolf
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,
};

Als u op de Arduino maken het PWM-signaal, moet de timer correct worden geïnitialiseerd. Voor dit gebruikte ik de C methode instellen van de timer zodat ik het beter kan controleren. De timer wordt gemaakt, zodat er een 32 kHz sampling rate voor onze audio en de output van het signaal op 11 van de Arduino geplaatst. Mij ook in staat stellen een overflow interrupt, zodat wanneer de timer-waarde meer dan 255 gaat, de interrupt wordt gegenereerd.

VOID Setup_timer2() {}

Timer2 klok Prescaler aan: 1
SBI (TCCR2B, CS20);
CBI (TCCR2B, CS21);
CBI (TCCR2B, CS22);

Timer2 PWM modus ingesteld op de juiste PWM fase
CBI (TCCR2A, COM2A0);  duidelijk vergelijk Match
SBI (TCCR2A, COM2A1);

SBI (TCCR2A, WGM20);  Modus 1 / fase Correct PWM
CBI (TCCR2A, WGM21);
CBI (TCCR2B, WGM22);
}

Dit is de overflow interrupt. Wanneer de interrupt optreedt bereken ik de volgende waarde die moet worden getrokken uit de tabel Golf en schrijf die waarde naar pin 11. Een variabele met de naam van de accumulator fase houdt spoor van waar het programma is in de tabel.

ISR(TIMER2_OVF_vect)
{

phaccu = phaccu + tword_m; zachte DDS, fase accu met 32 bits
icnt = phaccu >> 24;     gebruik van de hogere 8 bits voor fase accu als frequentie informatie
waarde fron ROM sinus tabel lezen en verzenden van PWM DAC

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

Als (icnt1 ++ == 125) {/ / verhogen variabele c4ms alle 4 milliseconden
c4ms ++;
icnt1 = 0;
}
}

Dat waarde wordt berekend met behulp van een tuning woord dat wordt gevonden door de frequentie die u wilt verdelen door de klok van een verwijzing, in dit geval de 32kHz verwijzing klok.

Const dubbele refclk = 31376.6;      gemeten
tword_m = pow (2,32) * dfreq/refclk;  calulate DDS nieuwe tuning woord

Gerelateerde Artikelen

Arduino frequentie detectie

Arduino frequentie detectie

Als een vervolg op de Arduino Audio Input tutorial die ik vorige week gepost, schreef ik een schets die analyseert een signaal binnenkomt de analoge ingang van de Arduino en bepaalt de frequentie. De code maakt gebruik van een sampling rate van 38.5k
PiMiDi: Een Raspberry Pi Midi vak of How I Learned to Stop Worrying and Love MIDI

PiMiDi: Een Raspberry Pi Midi vak of How I Learned to Stop Worrying and Love MIDI

Dit is mijn tweede instructable over het gebruik van de Raspberry Pi voor digitale audio, check out mijn eerste instructable voor het instellen en beheren van aangepaste audio-effecten op een Raspberry Pi.Als je knoeien met de audio-effecten of het m
Arduino Synth vak

Arduino Synth vak

Dit is een synthesizer gebaseerd uit de OctoSynth leerprogramma.Benodigde materialen:Arduino UnoUSB-kabel aan de computer verbinden met de ArduinoSoldeer pistoolSoldeerGrote dunne koperen plaatKleine luidspreker2 kleine vierzijdig mandenSchuim te sni
Mijn eerste synthesizer

Mijn eerste synthesizer

de jong geitje synth kwam over als ik gebogen over een verwarde puinhoop van synthesizer draden zat. Mijn vriend kwam Oliver, de situatie beoordeeld, en zei: "Je weet dat je geslaagd in het maken van's werelds meest gecompliceerde Kinder speelgoed.&q
Bouwen van een Retro Synthesizer met de Pocket Mini Computer

Bouwen van een Retro Synthesizer met de Pocket Mini Computer

kreeg een MIDI-keyboard met een MIDI-uitgang?  Dit Instructable zal u tonen hoe maak je een "retro klinkende"-synthesizer met behulp van uw Pocket Mini Computer.Ik ben een grote fan van de Commodore 64.  Een van zijn meest memorabele kenmerken i
De Octo-phonic Synthesizer

De Octo-phonic Synthesizer

de Octo-phonic Synthesizer is een polyfone synthesizer welk vermag acht tonen produceren waarmee uiteindelijk een toonladder. Inspiratie voor deze creatie kwam uit dit project. Ik denk aan het als een elektronisch orgel. Ik gebruikte het fundament va
7-Key Slider/wiel Tutorial met Synthesizer

7-Key Slider/wiel Tutorial met Synthesizer

Dit is een tutorial voor het gebruik van de 7-Key Slider/wiel Breakout van Rachel's Electronics.Ik zal u tonen hoe om te solderen op de pennen van de koptekst voor maximale bruikbaarheid. Rachel's heeft het QT1106 gegevensblad op hun site, en een gro
Homebrew C64 "Peddelen" vak

Homebrew C64 "Peddelen" vak

Howdy folks, ik ben net een cynthcart die de commodore 64 computer in een ontzagwekkende synthesizer verandert! Als u wilt bepalen van de synth filter in echte tijd moet u een spel peddel... die ik niet heb, maar een knop vak kan worden gemaakt ter v
Vak rubberband scharnierend

Vak rubberband scharnierend

Als u niet zoals anekdotes, gelieve te vrij voelen om het overslaan van de eerste alinea, is er niets van belang met betrekking tot de eigenlijke bouw van het vak.Het verhaal:Dus dit idee kwamen rond omdat ik heb gewenst kleine vakjes bij verschillen
Lasergesneden draaien vak

Lasergesneden draaien vak

Ik had een kleine opslagcontainer nodig voor dingen als router en boor bits, lijm en andere kleine items die ik gebruik in mijn atelier. Ik vond het ontwerp van een draaiende doos, maar degenen die kunnen worden gekocht waren manier te groot, dus heb
Pikachu Cam mechanisme automaten met Lattice scharnier vak

Pikachu Cam mechanisme automaten met Lattice scharnier vak

We moesten een automaten met fijn timmerwerk en lattice scharnier voor een project maken en dit was wat ik gebruikt om te verplaatsen van Pikachu hoofd alsof hij een gevecht in de Franse Revolutie verloren. Gelieve te zien verder in stap 9: verwijst
Lasergesneden dinosaurus vak

Lasergesneden dinosaurus vak

Een eenvoudig patroon van de laser-gesneden voor een doos te houden tools, art supplies, koken implementeert, of iets anders lang en mager. Met een dinosaurus gravure omdat zijn dinosaurussen geweldig!Stap 1: Knippen Design Dit was mijn eerste ervari
Keltische knoop deken vak

Keltische knoop deken vak

Ik vond deze massieve houten pallets en dacht dat ik zou een planter doos... in ieder geval op het eerste. Naarmate ik vorderden langs het maken van het vak, met het ontwerp en ik had gedaan op het snijwerk, heb ik besloten om iets te maken voor binn
Dressoir lade Planter vak

Dressoir lade Planter vak

De lente is een van mijn favoriete momenten van het jaar. Voor mij vertegenwoordigt het nieuwheid van het leven en de groei. Een van mijn favoriete dingen om te doen is om buiten en aan de slag op mijn tuin. Binnen, mijn kinderen genieten van groeien