Arduino ljud utgång (10 / 10 steg)

Steg 10: Extra Tips




Denna DAC använder en hel del den Arduino tillgängliga digitala pins, inklusive några som normalt används för seriell kommunikation och PWM, så här är några tips som hjälper dig hantera pin konflikter.

Om du vill göra seriell kommunikation: Mjukvaran följetong är en Arduino bibliotek som låter dig att sätta någon av den Arduino pins till seriell stift. Vanligtvis när du gör en Arduino projekt som kräver seriell kommunikation, undvika du att använda digitala stift 0 och 1 eftersom de måste vara fri att skicka seriella data. Jag gillar att använda dem för 8 bitars DAC eftersom stift 0-7 är alla en del av PORTD på den Arduino Atmel328 chip, detta gör att jag kan ta itu med dem alla i en enda rad kod. PORTB har endast 6 pins (digital stift 8-13) och PORTC har endast 6 stift (analog stift 0-5), så du inte kan konstruera en 8 bitars DAC med portarna ensam.

Om du behöver använda PWM stift eller annars använda olika pins som DAC: Om du måste använda PWM stift kan du använda lite manipulation att frigöra stift 3, 5 och 6 och ersätta dem med stift 8, 12 och 13. Att du vill skicka antalet 36 till PORTD. Du kan använda följande rader:

definiera variabler:
boolean bit3state;
booleska bit5state;
booleska bit6state;

i din huvudsakliga loop():

bit3state = (36 & B00001000) >> 3; //get den tredje biten av 36
bit5state = (36 & B00100000) >> 5; //get den femte stycke 36
bit6state = (36 & B01000000) >> 6; //get den sjätte stycke 36

Skicka data till portd utan störa stift 3, 5 och 6
PORTD | = (36 & B10010111); //set kickben högt med antalet 36 med nollor ersätter bitar 3, 5 och 6
PORTD & = (36| B01101000); //set låg pins låg med antalet 36 med sådana ersätter bitar 3, 5 och 6

Skicka data till portb utan störa stift 9, 10 och 11
PORTB | = 0 | (bit3state) | (bit5state << 4) | (bit6state << 5), //set kickben
PORTB & = 255 & ~(1-bit3state) & ~((1-bit5state) << 4) & ~((1-bit6state) << 5), //set låg pins

se till att hålla dessa PORTD och PORTB rader bredvid varandra i koden, du stiften på port d och port b att växla på så nära som möjligt.

Här är koden från föregående steg, redigerad så att den inte använder några PWM stift. Som du ser i fig 1, har ofiltrerade utgången från DAC många avbrott orsakade av lag-gruppen mellan skickar data till port d och port b, samt dela upp kommandona för att ange stift högt och lågt. Du kan bli av med de flesta av dessa avbrott med lågpassfilter (fig 2). Om du vill använda den här tekniken kan du öka din lågpassfilter cutoff frekvens. Om du ville göra detta riktigt bra, du kan skicka din 5 mest signifikanta bitarna till port d och din 3 minst signifikanta bitarna till port b. Detta skulle minska amplituden av några av diskontinuiteter, att minska omfattningen av buller. Jag ska låta dig räkna att en ut på egen hand.

Sine ut, 40kHz samplingsfrekvens, utan med PWM stift
av Amanda Ghassaei

Sept 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.
*
*/

byte sine [] = {127, 134, 142, 150, 158, 166, 173, 181, 188, 195, 201, 207, 213, 219, 224, 229, 234, 238, 241, 245, 247, 250, 251, 252, 253, 254, 253, 252, 251, 250, 247, 245, 241, 238, 234, 229, 224, 219, 213, 207, 201, 195, 188, 181, 173, 166, 158, 150, 142, 134, 127, 119, 111, 103, 95, 87, 80, 72, 65 58, 52, 46, 40, 34, 29, 24, 19, 15, 12, 8, 6, 3, 2, 1, 0, 0, 0, 1, 2, 3, 6, 8, 12, 15, 19, 24, 29, 34, 40, 46, 52, 58, 65, 72, 80, 87, 95, 103, 111, 119,};
int t = 0; //time

booleska bit3state;
booleska bit5state;
booleska bit6state;

void setup() {
ställa in digital stift 0-13 som utgångar
för (int jag = 0; jag < 14; i ++) {
pinMode(i,OUTPUT);
}

(CLI); //disable avbrott
Set timer0 avbrott på 40kHz
TCCR0A = 0; / / Ställ in hela TCCR0A register till 0
TCCR0B = 0; / / samma för TCCR0B
TCNT0 = 0; //initialize värde till 0
Set jämför match registrera dig för 40khz steg
OCR0A = 49. / / = (16 * 10 ^ 6) / (40000 * 8) - 1 (måste vara < 256)
Aktivera CTC läge
TCCR0A | = (1 << WGM01);
Ange CS11 bit för 8 prescaler
TCCR0B | = (1 << CS11);
Aktivera timern jämför avbrott
TIMSK0 | = (1 << OCIE0A);
SEI (); //enable avbrott

}

ISR(TIMER0_COMPA_vect) {//40kHz avbrott rutin
bit3state = (sinus [t] & B00001000) >> 3; //get den tredje biten
bit5state = (sinus [t] & B00100000) >> 5; //get den femte stycke
bit6state = (sinus [t] & B01000000) >> 6; //get den sjätte stycke
PORTD | = (sinus [t] & B10010111); //set kickben hög
PORTD & = (sinus [t] | B01101000); //set låg pins låg
PORTB | = 0 | (bit3state) | (bit5state << 4) | (bit6state << 5), //set kickben
PORTB & = 255 & ~(1-bit3state) & ~((1-bit5state) << 4) & ~((1-bit6state) << 5), //set låg pins
PORTD = sine [t]; //send sinusvåg till DAC, centrerad kring (127/255) * 5 = 2.5V
t ++; //increment t
om (t > 99) {//reset t till noll
t = 0;
}
}

void loop() {
göra andra saker här
}

Om du kör ut från digitalt stift och behöver mer: Kom ihåg att du kan alltid använda din analoga pins som digitala I/O. prova ut följande funktioner, de fungerar precis som du har att göra med en vanlig digital pin.

digitalWrite (A0, hög), //set pin A0 hög
digitalWrite (A0, låg); //set pin A0 låg
digitalRead (A0); //read digital data från stift A0

Annars prova med hjälp av en multiplexer. Om du behöver mer digitala utgångar, kan 74HC595 du göra tre av Arduino's digital pins till 8 utgångar. Du kan även seriekoppla flera 595 s tillsammans för att skapa många fler utgångar stift. Du kan ställa in din hela DAC på en av dessa marker om du ville (även om det skulle ta några rader kod för att ta itu med det och kan sakta ner för mycket för högre samplingshastigheter dig). Arduino webbplats är ett bra ställe att börja lära sig om hur du använder 595.

Om du behöver mer digitala ingångar, kan 74HC165 eller CD4021B du göra tre av Arduino's digital pins till 8 ingångar. Igen, Arduino webbplats är ett bra ställe att börja lära sig använda dessa marker.

Om du vill använda info i detta Instructable med Mega eller andra styrelser: I detta Instructable talade jag enbart om Arduino Uno med Atmel328. Samma kod kommer att fungera bra på någon ombord med en Atmel328 eller Atmel168 chip på den. Du kan också använda samma idéer med en Mega. Du bör försöka att bifoga din DAC till hamnar som har 8 tillgängliga stift, så du kan hantera din DAC med en rad kod ("PORTD =") på Uno, den enda port som har 8 tillgängliga stift är port d.



bild visar att Mega har flera portar med 8 stift: portar a, b, c, och l är de självklara val. Om du inte bryr dig om slösa analoga stift du kunde också använda portar f eller k.
Se Steg
Relaterade Ämnen

Arduino ljud sköld

I den här videon visar vi de enkla steg för montering av din Arduino ljud sköld fall. För att köpa en av dessa fall, bara tillbaka min kicken project på: Arduino ljud sköldSteg 1: Hur göra montera din Arduino Audio DSP sköld fallDet första steget är...

Min bullriga jacka (Arduino ljud maskin jacka)

Som ett projekt för en av mina college klasser, blev vi ombedda att skapa något med Arduino. Efter några olika idéer fast jag på att sätta en Arduino ljud maskin i en kavaj. Den använder delar av jackan för att få att fungera, så att det framgår att...

Arduino ljud Sensor Control

Arduino ljud sensor controlYouTube-VideoDokument...

Arduino ljud Demos

det här är att visa upp min arduino ljud demos :)Det använder en RTTTL för att spela ljud...

Hur man gör en Arduino ljud synthesizer med MIDI-gränssnittet

Med denna synt kan du göra Arduino reproducera helt anpassade vågformer. På grund av MIDI-gränssnittet, kan det anslutas till alla instrument som sådan har och spela det med det ljud som du vill.Steg 1: materialArduino (i detta fall Arduino UNO)Instr...

ARDUINO ljud aktiverat flash eller kamera avtryckare

Detta instructable visar dig hur man bygger en enkel krets för anslutning till en ARDUINO micro controller som kommer att upptäcka ljud och utlösa kameran eller flash för hög hastighet fotografering. Detta är lätt att montera och kostar bara några $$...

WT588D fristående / Arduino ljud spelare

Denna tutorial är för WTD588D-du kan användas i fristående lägeI detta instructable jag visar dig de nödvändiga verktygen och steg för att ladda några ljudfiler och har dem spela på tryckning.Perfekt för att testa modulen innan den läggs till din Ard...

Lätt Arduino ljud Annoyatron

denna enkla anordning enkla spelar en liten melodi slumpmässiga intervall, mellan 5 och 30 sekunder när lamporna i ett rum går bort. Det kan vara skickligt dold inuti en vävnad box, eller inuti eller enligt valfritt antal hushållsföremål. Detta är et...

Arduino ljud utlöst strömbrytaren

Ever wanted din hemunderhållning eller ljudsystem till förmåga upp sig när du sätter i din iPod eller annan bärbar MP3-spelare?Titta på denna video att se hur det fungerar. Vänd sedan igenom stegen för att ta reda på hur man gör en med Arduino-styren...

Göra din Arduino ljud och flytta som en fågel

I detta Instructable ska jag visa hur man skapar ett djur beter sig objekt, med hjälp av mycket enkla delar och en Arduino ombord. Instructable är avsett för personer som har viss erfarenhet med Arduino.Du kanske vill kontrollera detta refererar på d...

Arduino ljud reaktiva LED Pyramid

Belysa din favorit hot spot med våra ljud reaktiva LED Pyramid. Gör din favorit plats att sparka tillbaka hot spot för alla dina vänner och familj. Med ett brett utbud av färger dessa lampor kommer att lägga till en ny smak på något. I år har färger...

Högt objekt buller leksak (AKA The Arduino ljud maskin)

okej, okej, jag vet att ni alla undrade vad jag hittills.Jag älskar syntar och så, jag byggde detta. Det finns tre saker som kan fånga min uppmärksamhet: syntar, förstärkare och gratis. Häromdagen (egentligen var det bara torsdag) var jag cruising ru...

Kodgenerator för anpassade Android/Arduino menyer att slå Arduino utgångar på och av. Android/Arduino för nybörjare. Absolut ingen programmering krävs

Uppdatering: användare frågade för undermeny support. pfodApp alltid stött sub-menyerna men jag har lagt undermenyer till pfodDesigner. Den instructable Design A Custom menysystemet visar hur du använder pfodDesigner för att bygga en meny med underme...

Mellanliggande Arduino: Ingångar och utgångar

Fortsätter från min Intro till Arduino inlägg, går detta Instructable över vissa något mer avancerade ämnen med Arduino, särskilt om att styra och hantera många ingångar och utgångar. Nästa klass omfattar hur du ansluter den Arduino ingångar och utgå...

Cwik klocka v1.0 - An Arduino binär klocka

ÖversiktDetta är en guide till att bygga en Arduino-driv klocka som använder lysdioder för att Visa 24-timmarsformat (timmar och minuter) som binära siffror, en analog mätare att Visa sekunderna, en switch för att växla mellan tidsvisning och tidsins...

Swarmbots: Autonoma Arduino bilar som spelar musikaliska stolar

Vår avsikt med detta projekt var att slå samman två banbrytande fält av teknik: autonoma fordon och swarmbots. I ett samarbete med Fremont akademin för teknik och Design's Femineer studenter monteras tio medlemmar i klassen Pomona College elektronik...

Arduino UNO gitarr Pedal - öppen hårdvara.

pedalSHIELD UNO är en öppen källkod programmerbara gitarr pedal i Arduino/Genuino UNO. En plattform att utveckla ditt intresse för gitarr pedaler, effekter, elektronik eller digitalt ljud.Syftet är att bygga en gitarr pedal med Arduino UNO och lätt a...

Hur man ger du Arduino en röst

RaspiVoice kicken project är ett incitament att ge Arduino användare möjlighet att utnyttja superb ljuduppspelning hos Raspberry Pi i alla Arduino projekt. Det uppnår detta genom att låta Arduino användare att använda en låg kostnad Raspberry Pi seri...

En guide för att styra saker med varierande input (via arduino)

hjärtat i detta projekt är en) koppla upp en sensor till arduino analog ingång och b) programmering med if... else-sats.Detta projekt visar en dator kylsystemet för att behålla viss temperatur inom ett dator torn.Jag använde följande produkter och sj...