Arduino Vocal effekter Box (6 / 36 steg)
Steg 6: Testa DAC
63Hz sinusvåg
Amanda Ghassaei 2012
/*
* Detta program är fri programvara; Du kan vidaredistribuera det och/eller ändra
* det enligt villkoren i GNU General Public License som offentliggjorts av
* den Free Software Foundation; antingen version 3 av licensen, eller
* (på ditt alternativ) någon senare version.
*
*/
skickar 63Hz sinusvåg till arduino PORTD DAC
flyta t = 0;
void setup() {
Ange pin-port läge. se http://www.arduino.cc/en/Reference/PortManipulation för mer info
DDRD = 0xFF; //port d (digital stift 0-7) alla utgångar
(CLI); //stop avbrott
Set timer2 avbrott på 40kHz
TCCR2A = 0; / / Ställ in hela TCCR2A register till 0
TCCR2B = 0; / / samma för TCCR2B
TCNT2 = 0; //initialize värde till 0
Set jämför match registrera dig för 40khz steg
OCR2A = 49. / / = (16 * 10 ^ 6) / (8 * 40000) -1
Aktivera CTC läge
TCCR2A | = (1 << WGM21);
Ange CS11 bit för 8 prescaler
TCCR2B | = (1 << CS11);
Aktivera timern jämför avbrott
TIMSK2 | = (1 << OCIE2A);
SEI (); //allow avbrott
}
ISR(TIMER2_COMPA_vect) {
Increment t
t + = 1;
om (t == 628) {//40kHz/628 = ~ 63Hz
t = 0;
}
}
void loop() {
sinus våg av frekvens ~ 63Hz
Skicka till PORTD sine värden mellan 0 och 255
PORTD=byte(127+127*sin(t/100));
}
Lite info om koden-i princip vad jag har gjort här är ställa in en timer avbryta som ökar värdet av variabeln t en frekvens på 40kHz. När t når 627 det återställs till noll (detta inträffar med en frekvens på 40 000/628 = 63 Hz). Under tiden i huvudloop skickar Arduino ett värde mellan 0 (00000000 i binär) och 255 (11111111 i binär) till digitala stift 0 till 7 (PORTD). Det beräknar detta värde med följande ekvation:
PORTD=byte(127+127*sin(2*t/100));
Så som t steg från 0 till 627 sinusfunktion rör sig genom en komplett cykel. Värdet som skickas till PORTD är en sinusvåg med 63Hz frekvens och amplitud 127, oscillerande cirka 127. DAC översätter detta till en spänning mellan 0 och 5V, där 0 skickas till PORTD är lika med 0V och en 255 skickas till PORTD lika med 5V.