Stereoljud med Arduino (1 / 7 steg)
Steg 1: 8 bit DACs och seriell vs parallell
TLC7528 är en typ digital till analog omvandlare (DAC). Det tar digitala data (nummer mellan 0 och 255) och utgångar en spänning mellan 0 och vilken spänning du leverera chip med. Den tillverkade spänningen av DAC kan beräknas enligt följande ekvation:
Utspänning från 8-bitars DAC = (spänningen) * (digital in-data) / 255
I detta Instructable, kommer jag att driva DAC från Arduinos inbyggd 5V utbudet, så ekvationen ovan kan förenklas till:
Utspänning från 8-bitars DAC = 5V * (digital in-data) / 255
Från denna ekvation, kan vi se att TLC7528 skulle utgång 5V om får ett värde 255, 0V om den får ett värde på 0, 2.5V om den får ett värde på 127, och så vidare. Du kanske undrar var 255 kom ifrån, det är ett resultat av TLC7528 är en 8 bitars DAC. 8 bitar innebär att den binära tal kan vi skicka till DAC måste ha mer än 8 siffror i dem. I binärasiffror som är representerade med 8 siffror (eller mindre) varierar i värde från 0 till 255 (i motsats till vanliga decimala talsystemet där och 8 siffror varierar från 0 till 99999999). Så finns det 256 möjliga värden (0-255) som 8-bitars DAC kan ta emot. Detta kan snabbt beräknas enligt ekvationen nedan:
2 ^ 8 = 256 möjliga värden
Om vi använder en 10 bitars DAC, då det kunde ta emot 2 ^ 10 = 1024 olika värden, alltifrån 0-1023. Detta innebär en 10 bitars DAC har en högre upplösning än en 8 bitars DAC. Trots detta har jag funnit att 8 bitars DAC är generellt mycket mer användbar än 10 bit DACs eftersom data är lättare att lagra och utgång från Arduino i 8 bitar form än i 10 bitars form. Exempelvis är den data byten Arduino språk för lagring av tal med 8 bitar. Om du ville spara ett 10 bit, du skulle behöva använda datatypen int , men int datatyper kan lagra upp till 16-bitars nummer, så du skulle vara slöseri med 6 bitar av minnet. Dessutom är stiften på Arduino grupperade tillsammans i kluster av 8 eller mindre. På Uno, endast gruppen 8 digitala stift 0-7, denna grupp heter PORTD. När du skriver Arduino kod kan du enkelt mata 8 bitar data genom att ange påstår av digital stift 0-7 på en gång. Detta görs genom att skicka ett 8-bitars nummer till PORTD i koden. Till exempel:
PORTD = 255;
ställer in digital stift 0-7 hög, är det likvärdigt med följande:
digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
men med kommandot PORTD anger alla stiften samtidigt och är mycket snabbare. Följande kommando skulle ställa digital stift 0-7 låg:
PORTD = 0;
Du kan också använda kommandot PORTD för att ställa några av stiften hög och andra låg. Till exempel:
PORTD = 137;
137 i binär är 10001001, så skicka 137 till PORTD kommer att ställa pin 7 hög (eftersom den första siffran i det binära talet "1"), stift 6-4 låg (eftersom de nästa 3 siffrorna är "0"), pin 3 hög, stift 2 och 1 låg och pin 0 hög. Du kan läsa mer om hur detta fungerar på Arduino webbplats. Du kan även skicka binära tal till PORTD, till exempel:
PORTD = B10001001;
motsvarar PORTD = 137;
Slutligen, jag ska tala om hur vi får dessa data in i TLC7528. TLC7528 kallas en parallell DAC. Detta innebär att alla data skickar vi till DAC skickas parallellt. 8 bit parallell DACs har åtta dataanslutningar mellan Arduino och DAC som skickar alla 8 bitar data samtidigt. Motsatsen till parallell är seriell, i seriella inställningar du använder färre dataanslutningar (oftast tre), men skickar bara en bit över på en gång. Så, för att överföra en 8-bitars nummer via en seriell anslutning måste du skicka åtta 1 bit paket, en efter en, medan i parallella uppställningar kan du skicka alla 8 bitar på samma gång. Detta innebär att seriella anslutningar kräver snabbare dataöverföring än parallellkoppling. Om du är orolig med 8 digitala stift av Arduino, är en parallell 8 bitars DAC ett bra alternativ eftersom det kräver mindre klockfrekvens och är enklare att koden.