اخیراً پروژه های زیادی ارسال کرده ام که از مبدل دیجیتال به آنالوگ نردبانی 8 بیتی (DAC) و آردوینو برای تولید صدا استفاده می کنند. (به جعبه جلوه های آوازی آردوینو ، نمونه درام آردوینو و آموزش خروجی صوتی من مراجعه کنید). تکنیکی که من برای ساخت این DAC ها استفاده کرده ام بسیار ساده است، فقط به تعداد انگشت شماری از مقاومت های 10k و 20k نیاز دارد که با هم در یک شبکه سیمی شوند. اما این راحتی با قیمتی همراه است، زیرا این DAC ها در نهایت کمی سر و صداتر از آن چیزی هستند که من می خواهم. بنابراین تصمیم گرفتم یک آی سی تخصصی بخرم که با تمام کدهایی که قبلاً برای DAC های نردبان مقاومتی نوشته ام سازگار باشد، اما از مقاومت های بسیار منطبق برای کاهش نویز استفاده می کند. وقتی در Digikey برای چنین DAC جستجو کردم، TLC7528 را پیدا کردم، یک خروجی دوگانه 8 بیتی DAC IC. قابلیت خروجی دوگانه تراشه من را بسیار جالب کرد. در حالی که تنظیم این تراشه با یک خروجی دائمی آسان است، همچنین به شما این امکان را می دهد که بین دو پین خروجی ایزوله جابجا شوید.
در این آموزش، نحوه استفاده از TLC7528 با آردوینو برای خروجی صدای استریو را به شما نشان خواهم داد . صدای استریو به معنای 2 کانال مستقل صدا است. صدای استریو به ویژه هنگامی که به هدفون ارسال می شود سرگرم کننده است زیرا می توانید جلوه های شنیداری جالبی به دست آورید زیرا هر گوش کانال مستقل صدا خود را می شنود، برخی از ایده ها عبارتند از:
جلوههای فضایی «صدای سه بعدی» - با تنظیم فیلتر، دامنه و فاز دو کانال صوتی، میتوانید تجربه جهتگیری صدا را شبیهسازی کنید، و به نظر برسد منبع صدا از یک مکان دقیق در فضای اطراف شما سرچشمه میگیرد .
ضربان های دو گوش - با ارسال دو موج سینوسی با فرکانس های مشابه - اما نابرابر- به هدفون (یکی به هر گوش)، صدای ضربانی را خواهید شنید که تصور می شود باعث آرامش و سایر اثرات مراقبه می شود. در اینجا یک مثال است.
پانینگ - دامنه نسبی یک منبع صدا را در هر کانال ترکیب استریو تغییر دهید. این افکت ساده است، اما می تواند صدایی واقعا جالب داشته باشد، یک مثال عالی در این است Bridge of Led Zeppelin's Whole Lotta Love (با هدفون گوش کنید!)
فهرست قطعات:
(x1) TLC7528 Digikey 296-1871-5-ND
(x1) Arduino Uno Sparkfun DEV-11021
مواد دیگر:
اسیلوسوپ سیم جامپر 22 گیج
مرحله 1: DAC های 8 بیتی و سریال در مقابل موازی
TLC7528 یک مبدل نوع دیجیتال به آنالوگ (DAC) است. داده های دیجیتال (اعداد بین 0 تا 255) را می گیرد و ولتاژی بین 0 و هر ولتاژی که تراشه را تامین می کنید، خروجی می دهد. ولتاژ خروجی DAC را می توان بر اساس رابطه زیر محاسبه کرد:
ولتاژ خروجی از 8 بیت DAC = (ولتاژ منبع تغذیه) * (داده ورودی دیجیتال) / 255
در این Instructable، من DAC را از منبع 5 ولت داخلی آردوینو تغذیه می کنم، بنابراین معادله بالا را می توان به صورت زیر ساده کرد:
ولتاژ خروجی از 8 بیت DAC = 5 ولت * (داده ورودی دیجیتال) / 255
از این معادله می بینیم که TLC7528 اگر مقدار 255 را دریافت کند 5 ولت، اگر مقدار 0 را دریافت کند 0 ولت، اگر مقدار 127 را دریافت کند 2.5 ولت و غیره خروجی می دهد. ممکن است تعجب کنید که 255 از کجا آمده است، این نتیجه این است که TLC7528 یک DAC 8 بیتی است. 8 بیت به این معنی است که اعداد باینری که می توانیم به DAC ارسال کنیم نباید بیش از 8 رقم در آنها باشد. در باینری ، اعدادی که با 8 رقم (یا کمتر) نشان داده می شوند، از 0 تا 255 متغیر هستند (بر خلاف سیستم اعداد اعشاری معمولی که در آن اعداد 8 رقمی از 0 تا 99999999 متغیر هستند). بنابراین 256 مقدار ممکن (0-255) وجود دارد که DAC 8 بیتی می تواند دریافت کند. این را می توان به سرعت از معادله زیر محاسبه کرد:
2^8 = 256 مقدار ممکن
اگر از یک DAC 10 بیتی استفاده میکردیم، میتوانست 2^10 = 1024 مقادیر مختلف را دریافت کند که از 0 تا 1023 متغیر است. این بدان معناست که یک DAC 10 بیتی وضوح بالاتری نسبت به DAC 8 بیتی دارد. با وجود این، من دریافتم که DAC های 8 بیتی معمولاً بسیار مفیدتر از DAC های 10 بیتی هستند زیرا ذخیره و خروجی داده ها از آردوینو به شکل 8 بیتی آسان تر از 10 بیتی است. به عنوان مثال، نوع داده بایت در زبان آردوینو برای ذخیره اعداد 8 بیتی است. اگر می خواهید یک عدد 10 بیتی را ذخیره کنید، باید از یک int استفاده کنید نوع داده، اما انواع داده های int می توانند تا اعداد 16 بیتی را ذخیره کنند، بنابراین شما 6 بیت حافظه را هدر خواهید داد. علاوه بر این، پینهای آردوینو در خوشههای ۸ تایی یا کمتر با هم گروهبندی میشوند. در Uno، تنها گروه کامل 8 عددی پین های دیجیتال 0-7 هستند، این گروه PORTD نامیده می شود. هنگام نوشتن کد آردوینو، میتوانید به راحتی 8 بیت داده را با تنظیم وضعیت پینهای دیجیتال 0-7 به یکباره خروجی بگیرید. در کد این کار با ارسال یک عدد 8 بیتی به PORTD انجام می شود. مثلا: