Arduino Vocal effekter Box (27 / 36 steg)
Steg 27:
Ljud ut med 38,5 kHz samplingsfrekvens
av Amanda Ghassaei
Juli 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.
*
*/
void setup() {
DDRD = 0xFF; //set port d (digital pin s0-7) som utgångar
DDRC = 0x00; //set alla analoga pins som insatsvaror
Ställ in kontinuerlig provtagning av analoga pin 0
Rensa ADCSRA och ADCSRB register
ADCSRA = 0;
ADCSRB = 0;
ADMUX | = (1 << REFS0); ange referens spänning
ADMUX | = (1 << ADLAR); Vänsterjustera ADC värde - så vi kan läsa högst 8 bitar från ADCH register endast
ADCSRA | = (1 << ADPS2) | (1 << ADPS0); ställa in ADC klockan med 32 prescaler - 16mHz/32 = 500 kHz
ADCSRA | = (1 << ADATE); enabble automatisk utlösare
ADCSRA | = (1 << ADEN); Aktivera ADC
ADCSRA | = (1 << ADSC); Starta ADC mätningar
}
void loop() {
PORTD = ADCH; //send 8 bitars värde från analoga stift 0 till DAC
}
I koden nedan utlöst jag utdata till DAC via ADC avbrottet. Detta avbrott är liknar andra Arduino timer avbryter, men det bara körs när ett nytt ADC värde har nåtts (i detta fall uppgå till ~38.5kHz, eller varje 26us). Produktionen av koden nedan är exakt densamma som koden ovan, men det blir mer praktiskt att använda avbrottskod går framåt.
Ljud ut med 38,5 samplingsfrekvensen och avbryter
av Amanda Ghassaei
Juli 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.
*
*/
void setup() {
DDRD = 0xFF; //set port d (digital pin s0-7) som utgångar
DDRC = 0x00; //set alla analoga pins som insatsvaror
(CLI); //diable avbrott
Ställ in kontinuerlig provtagning av analoga pin 0
Rensa ADCSRA och ADCSRB register
ADCSRA = 0;
ADCSRB = 0;
ADMUX | = (1 << REFS0); ange referens spänning
ADMUX | = (1 << ADLAR); Vänsterjustera ADC värde - så vi kan läsa högst 8 bitar från ADCH register endast
ADCSRA | = (1 << ADPS2) | (1 << ADPS0); ställa in ADC klockan med 32 prescaler - 16mHz/32 = 500 kHz
ADCSRA | = (1 << ADATE); enabble automatisk utlösare
ADCSRA | = (1 << Ebba Grön); Aktivera avbrott när mätningen är klar
ADCSRA | = (1 << ADEN); Aktivera ADC
ADCSRA | = (1 << ADSC); Starta ADC mätningar
SEI (); //enable avbrott
}
ISR(ADC_vect) {//when nya ADC värdet redo
PORTD = ADCH; //send 8 bitars värde från analoga stift 0 till DAC
}
void loop() {
}