فهرست مطالب:
- مرحله 1: الزامات
- مرحله 2: مشخصات
- مرحله 3: شروع به کار
- مرحله 4: مدار کوچک
- مرحله 5: از آهن لحیم کاری خارج شوید
- مرحله 6: آزمایش DAC
- مرحله 7: خواندن سرصفحه Wav
- مرحله 8: وقفه ، وقفه…
- مرحله 9: وقفه ها و بافر دوگانه
تصویری: پخش فایلهای صوتی صوتی (Wav) با آردوینو و DAC: 9 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:57
فایل wav Audio را از کارت SD Audino خود پخش کنید. این دستورالعمل به شما نشان می دهد که چگونه می توان یک فایل wav روی SdCard خود را از طریق یک مدار ساده به بلندگو پخش کرد.
فایل wav باید تک بیتی 8 بیتی باشد. من هیچ مشکلی در پخش فایل های 44 کیلوهرتز نداشتم.
در حالی که صداقت ندارد ، کیفیت صدا بسیار رضایت بخش است.
از مانیتور سریال برای انتخاب فایل استفاده می شود. فایلها باید در پوشه ای به نام adlog باشند.
این دستورالعمل متعلق به یک پروژه قبلی است که در آن ضبط های wav را در SdCard ذخیره کردم:
این مدار از یک مبدل ارزان 8 بیتی دیجیتال به آنالوگ (DAC) و یک تقویت کننده صوتی تک تراشه استفاده می کند.
بخشهای کلیدی برای ایجاد وقفه از مقاله عالی آماندا غسایی گرفته شده است:
مرحله 1: الزامات
آردوینو- من از مگا استفاده می کنم ، اما دلیلی وجود ندارد که Uno کار نکند.
SdCard reader- برنامه برای موارد زیر تنظیم شده است: MicroSD Breakout Board Regulated with Logic Conversion V2
برای اطلاع از جزئیات راه اندازی SdCard این دستورالعمل را ببینید:
DAC0832 LCN- مبدل 8 بیتی دیجیتال به آنالوگ عالی- چند پوند.
LM386 N-1 Op- ارزان به عنوان تراشه
سوکت تراشه 20 راهه
سوکت تراشه 8 راهه
منبع تغذیه 9 ولت- یک باتری کار می کند.
مرجع ولتاژ LM336 2.5 ولت
10uF خازن * 3 (هر ولتاژ بیش از 9V)
مقاومت 10 اهم
خازن 50nF- (یا جایی نزدیک-47nF ، 56nf ، 68nf- انجام خواهد داد)
خازن 220uF
بلندگوی 64 اهم
پتانسیومتر خطی 10K
کابل برای اتصال 8 خط داده بین آردوینو و مدار-
در Uno 8 اتصال در خط ، در Mega آنها به صورت جفت است.
در مگا از کابل روبان 10 راه با سربرگ IDC 10 جهت استفاده کردم. (2 سیم زاپاس است)
اتصالات سوکت 0V ، 9V و DAC خارج
تخته نوار مس ، لحیم کاری ، سیم ، برش و غیره
مرحله 2: مشخصات
مجموعه سریال 115200 باود
پشتیبانی از Hobbytronics MicroSD Breakout Board با استفاده از Mega در حال انجام است. انتخاب تراشه و سایر پورت ها بین Mega و Uno تغییر می کنند.
فایلهای Wav باید در یک دایرکتوری به نام adlog وجود داشته باشند. با خیال راحت نام آن را به صورت دیگری بگذارید و کد نویسی لازم را دوباره ترتیب دهید.
فایل wav باید تک بیتی 8 بیتی باشد. تا 44 کیلوهرتز تست کرده ام.
مانیتور سریال فایل های wav را در پوشه adlog نمایش می دهد. نام فایلها از خط خروجی مانیتور ارسال می شود.
اندازه فایل فقط با اندازه SdCard محدود می شود.
مرحله 3: شروع به کار
کارت خوان SD را وصل کنید. اینها اتصالات مگا هستند.
0 ، 5 ولت
روی پین 52 کلیک کنید
D0 تا پین 50
D1 تا پین 51
CS به پین 53
(برای اتصال پورت Uno به وب سایت تامین کنندگان مراجعه کنید)
شما می خواهید آزمایش کنید که کارت شما در این مرحله کار می کند- از اسکریپت های ارائه شده توسط فروشنده استفاده کنید.
ما باید یک مدار کوچک ایجاد کنیم
ما قصد داریم یک جریان بایت صوتی را از آردوینو ارسال کنیم.
این اعداد بین 0 تا 255 هستند. آنها نشان دهنده ولتاژ هستند.
سکوت 127-128 است.
255 مخروط بلندگو یک طرفه سخت است.
0 از طرف دیگر مخروط بلندگو سخت است.
بنابراین صدا به عنوان اعداد ذخیره شده ضبط می شود که ولتاژهای متفاوتی ایجاد می کند و مخروط های بلندگوی متحرک را ایجاد می کند.
ما می توانیم اعداد از 8 خط را در آردوینو ، همزمان ، با استفاده از "پورت" ارسال کنیم.
اگر 8 خط را به مبدل دیجیتال به آنالوگ وارد کنیم ، آنچه را که روی قلع می گوید انجام می دهد و ولتاژ آنالوگ متناسب با عدد دیجیتال تولید می کند.
تنها کاری که باید انجام دهیم این است که ولتاژ را به یک تقویت کننده عملیاتی کوچک و سپس به یک بلندگو وصل کنیم.
مرحله 4: مدار کوچک
DAC0832 LCN
این مبدل فوق العاده ارزان 8 بیتی دیجیتال به آنالوگ است. (DAC)
می توان آن را با مجموعه ای از داده ها ، خطوط نمونه داده ، به طور کامل کنترل کرد.
یا می توان تنظیم کرد که همه این کارها به صورت خودکار در "جریان عملیات" انجام شود.
برای نقل قول دفترچه راهنما:
اتصال ساده CS ، WR1 ، WR2 و XFER و بستن ILE بالا به هر دو ثبت داخلی اجازه می دهد تا ورودی های دیجیتالی کاربردی (جریان) را دنبال کرده و مستقیماً بر خروجی آنالوگ DAC تأثیر بگذارند.
خوب ، چهار اتصال به مجموعه تراشه کم و یک مجموعه 9V - آسان است.
ما نمی خواهیم هیچ ولتاژ منفی خارج شود بنابراین در دفترچه راهنما آمده است که ما باید از "حالت تغییر ولتاژ" استفاده کنیم و آنها نمودار را ارائه می دهند.
تنها کاری که ما باید انجام دهیم این است که یک آمپر کوچک صوتی را به جای آمپلی که آنها پیشنهاد می کنند جایگزین کنیم.
تقویت کننده صوتی LM386-N
دفترچه راهنمای آمپر حداقل قطعات را ارائه می دهد- سود 20 را ارائه می دهد (برای ما بسیار زیاد است- اما دارای کنترل صدا).
تنها کاری که باید انجام دهیم این است که یک خازن بین DAC و آمپر اضافه کنیم تا فقط سیگنال های AC را تقویت کنیم.
ما همچنین باید چند خازن را به پین منبع تغذیه هر یک از تراشه های خود اضافه کنیم ، در غیر این صورت از منبع تغذیه 9 ولت خود صدای خش خش می گیریم.
مرحله 5: از آهن لحیم کاری خارج شوید
از آنجا که مدار ساده است ، من قصد ندارم ضربه ضرب به ضربه را وارد کنم.
در اینجا چند نکته وجود دارد:
- یک تکه تخته نوار مس را حداقل 28 در 28 سوراخ آماده کنید. (بله ، من می دانم که جراحان مغز می توانند آن را کوچکتر کنند)
- اگر قصد دارید آن را با پیچ نصب کنید ، در ابتدا اجازه دهید که آنها را نصب کنید!
- تراشه ها را روی پریزها نصب کنید. تراشه ها را فقط زمانی وارد کنید که همه چیز بررسی شده باشد.
- سیمهای ورودی را از خروجی دور نگه دارید.
- قطبیت صحیح خازن ها را رعایت کنید.
- برای مشاهده نمای اصلی مرجع ولتاژ LM336 به نمودار مراجعه کنید. پای تنظیم شده استفاده نمی شود و قابل برش است.
- به اتصال مستقیم به پایه 8 DAC توجه کنید- برای آزمایش بسیار مفید است.
- من با کابل روبان و یک اتصال دهنده IDC 10 راهه به Audino متصل شدم.
- در Uno اتصالات به صورت مستقیم هستند - ممکن است متوجه شوید که تنظیم 8 اتصال ورودی در یک خط مستقیم به شما امکان می دهد با یک اتصال دهنده خریداری شده 8 راهه آماده به Arduino پیوند دهید ،
پس از اتمام کار ، لحیم کاری را بررسی کرده و شکاف بین خطوط مسی را بررسی کنید.
به نظر من یک تیغ اره هک 36 tpi برای تمیز کردن آوار بسیار مفید است. پین های محل قرارگیری تیغه را برداشته و نوک تیغه را به داخل خط می کشم- بدیهی است که تیغه در یک قاب نیست.
مرحله 6: آزمایش DAC
اتصال بین Circuit و Arduino را خاموش بگذارید.
کنترل صدا را روی مدار خود روی وسط تنظیم کنید.
9V DC Power را به مدار جدید خود وصل کنید.
بررسی کنید که مدار خوب است- من هیچ مسئولیتی در قبال مدار شما نمی پذیرم!
خاموش
مدار خود را به آردوینو وصل کنید.
در Mega از پین های 22-29 استفاده کنید. (PORTA) دو پین 5 ولت بالا را اشتباه نگیرید!
در Uno از پین های 0-7 استفاده کنید. این PORTD است
0 ولت منبع تغذیه خود را به آردوینو به 0 ولت وصل کنید.
برق بزن
این برنامه آزمایشی DAC_TEST را باز کنید
برای UNO ، همه مراجع به PORTA را به PORTD جایگزین کنید
DDRA را با DDRD جایگزین کنید- این دستورالعمل همه 8 خط را به صورت یکجا تنظیم می کند. این رجیستر جهت داده است.
مانیتور سریال خود را روی 115200 تنظیم کنید.
ولت متر را بین DAC و OV وصل کنید
برنامه خروجی را روی 255 - تمام خطوط - حداکثر ولتاژ تنظیم می کند.
خروجی 128- نصف حداکثر ولتاژ.
خروجی 0- ولتاژ صفر (یا احتمالاً نزدیک به صفر).
سپس گام به گام حرکت می کند: 1 ، 2 ، 4 ، 8 ، 16 ، 32 ، 64 ، 128
ولتاژ باید به طور پیوسته افزایش یابد.
اگر ولتاژ کاهش یابد در حالی که این عدد افزایش می یابد ، احتمالاً دو سیم متصل را معکوس کرده اید.
شما همچنین باید صدای بلندگو را با تغییر ولتاژ بشنوید
مرحله 7: خواندن سرصفحه Wav
فایل های Wav با فرکانس و اندازه داده های مشخص ذخیره می شوند.
این اطلاعات در سربرگ 44 بایت در ابتدای فایل wav موجود است.
اگرچه برخی نرم افزارها سرصفحه را گسترش می دهند (پس از بایت 35) ، اما مکان یابی اندازه داده ها دشوارتر می شود.
برای خواندن سرصفحه ، یک بافر ایجاد می کنیم و شروع فایل را کپی می کنیم.
فرکانس در 4 بایت با شروع 24 بایت در فایل ذخیره می شود.
// فرکانس خواندن مشخص شده در هدر فایل wav
byte headbuf [60]
tempfile.seek (0)؛
tempfile.read (headbuf ، 60) ؛
retval = headbuf [27]؛
retval = (retval << 8) | headbuf [26]؛
retval = (retval << 8) | headbuf [25]؛
retval = (retval << 8) | headbuf [24]؛
Serial.print (F ("فرکانس فایل")) ؛
Serial.print (retval) ؛
بهترین راه برای یافتن اطلاعات اندازه داده ، جستجوی کلمه "data" در هدر است.
سپس 4 بایت زیر را که مقدار طولانی را تشکیل می دهند استخراج کنید
retval طولانی بدون امضا ؛
int mypos = 40 ؛
برای (int i = 36؛ i <60؛ i ++) {
if (headbuf == 'd') {
if (headbuf [i+1] == 'a') {
if (headbuf [i+2] == 't') {
if (headbuf [i+3] == 'a') {
// در نهایت ما آن را داریم
mypos = i+4 ؛
i = 60 ؛
}
}
}
}
}
tempfile.seek (mypos) ؛
retval = headbuf [mypos+3]؛
retval = (retval << 8) | headbuf [mypos+2]؛
retval = (retval << 8) | headbuf [mypos+1]؛
retval = (retval << 8) | headbuf [mypos]؛
خوب طول و فرکانس داده ها را داریم!
داده های صوتی به دنبال 4 بایت مقدار طول داده را تشکیل می دهند.
مرحله 8: وقفه ، وقفه…
ما از اطلاعات فرکانس برای ایجاد وقفه نرم افزاری در فرکانس مورد نیاز یا نزدیک آن استفاده می کنیم.
همیشه نمی توان وقفه را به طور دقیق تنظیم کرد ، اما کافی است. فرکانس خوانده شده از فایل به زیر روال setintrupt منتقل می شود.
void setintrupt (freq freq) {float bitval = 8؛ // 8 برای تایمرهای 8 بیتی 0 و 2 ، 1024 برای تایمر 1 بایت
setocroa = (16000000/(Freq*bitval)) - 0.5 ؛
// مقدار setocroa به تفریق -1 نیاز دارد. با این حال 0.5 دور به نزدیکترین 0.5 اضافه کنید
// وضوح تایمر محدود است
// در نهایت با مقدار bitval تعیین می شود
cli ()؛ // وقفه ها را غیرفعال کنید // وقفه تایمر 2 را تنظیم کنید
TCCR2A = 0 ؛ // کل ثبت TCCR2A را روی 0 تنظیم کنید
TCCR2B = 0 ؛ // همان برای TCCR2B
TCNT2 = 0 ؛ // مقدار اولیه شمارنده را تا 0 تنظیم کنید
// تنظیم مقایسه مسابقه برای افزایش فرکانس (هرتز)
OCR2A = setocroa ؛ // = (16*10^6) / (فرکانس*8) - 1 (باید <256 باشد)
// حالت CTC را روشن کنید
TCCR2A | = (1 << WGM21] ؛ // بیت CS21 را برای 8 پیش تنظیم کننده تنظیم کنید
TCCR2B | = (1 << CS21) ؛ // وقفه مقایسه تایمر را فعال کنید
// TIMSK2 | = (1 << OCIE2A) ؛ // این کار می کند ، مانند خط زیر
sbi (TIMSK2 ، OCIE2A) ؛ // فعال کردن وقفه در تایمر 2
sei ()؛ // وقفه ها را فعال کنید
خوانندگان فهیم sbi (TIMSK2، OCIE2A) خواهند داشت
برای تنظیم و پاکسازی بیت های ثبات ، چند تابع (به دست آوردن اینترنت) تنظیم کردم:
// برای پاکسازی بیت های ثبات#ifndef cbi تعریف می کند
#تعریف cbi (sfr ، bit) (_SFR_BYTE (sfr) & = ~ _BV (bit))
#اندیف
// برای تنظیم بیت های ثبات تعریف می کند
#ifndef sbi
#debine sbi (sfr، bit) (_SFR_BYTE (sfr) | = _BV (bit))
#اندیف
این توابع یک تماس آسان برای تنظیم یا پاک کردن وقفه ارائه می دهند.
بنابراین وقفه در حال اجرا است ، چه کاری می توانیم انجام دهیم؟
مرحله 9: وقفه ها و بافر دوگانه
در 22 کیلوهرتز هر بایت داده صوتی هر 0.045 میلی ثانیه خروجی می شود
512 بایت (اندازه بافر) در 2.08 میلی ثانیه خوانده می شود.
بنابراین بافر را نمی توان در یک چرخه نوشتن از SDCard خواند.
با این حال 512 بایت در 23.22 میلی ثانیه به پورت نوشته می شود.
بنابراین تنها کاری که باید انجام دهیم این است که هر بار که بافر خالی می شود یک فایل جدید را تنظیم کنیم و زمان کافی برای دریافت داده ها قبل از نیاز به یک بلوک جدید داده داریم … با فرض اینکه از دو بافر استفاده می کنیم ، یکی را هنگام پر کردن دیگری خالی می کنیم.
این بافر دوگانه است.
با وقفه مکرر ، خواندن فایل کند می شود ، اما انجام می شود.
من دو بافر 512 بایت به نام bufa و bufb راه اندازی کرده ام.
اگر alaady flag درست است ما از porta می خوانیم در غیر این صورت از portb می خوانیم
هنگامی که موقعیت بافر (bufcount) به اندازه بافر (BUF_SIZE 512) می رسد ، ما یک پرچم به نام readit را روی true قرار می دهیم.
روال حلقه خالی به دنبال این پرچم است و شروع به خواندن بلوک می کند:
if (readit) {if (! aready) {
// شروع به خواندن بلوک SDCard به bufa
tempfile.read (bufa، BUF_SIZE)؛
} دیگری {
// شروع به خواندن بلوک SDCard در bufb
tempfile.read (bufb، BUF_SIZE)؛
}
readit = false؛
}
پس از اتمام پرچم های معمول readit = false.
در روال وقفه باید بررسی کنیم که حلقه void با بررسی اینکه readit == false باشد به پایان رسیده است.
در این صورت ما سیگنال می دهیم که یک خواندن دیگر لازم است و پرچم aready را برای تغییر بافر تغییر می دهیم.
اگر کارت SD هنوز در حال خواندن است ، باید یک خوانش را پشت سر بگذاریم (counter--؛ bufcount--؛) و از وقفه خارج شویم تا بعداً دوباره امتحان کنیم. (کلیک بر روی سیگنال خروجی صدا نشان می دهد که این اتفاق افتاده است.)
هنگامی که تمام داده ها خوانده می شوند ، وقفه لغو می شود ، پورت دوباره روی مقدار ولتاژ متوسط 128 تنظیم می شود و فایل صوتی بسته می شود.
قبل از اجرای اسکریپت dac2.ino برای اولین بار ، میزان صدای خود را روی 50٪ تنظیم کنید. این بسیار بلند خواهد بود ، اما بهتر از 100 است!
اگر کنترل صدا شما به صورت معکوس عمل می کند ، سیمهای منتهی در انتهای مخالف پتانسیومتر 10K را تغییر دهید.
به من بگو چگونه صدا می دهد.
توصیه شده:
پخش کننده صوتی با استفاده از آردوینو با کارت میکرو SD: 7 مرحله (همراه با تصاویر)
پخش کننده صوتی با استفاده از آردوینو با کارت میکرو SD: لطفاً برای پروژه های بیشتر کانال من را مشترک کنید ……………………. بسیاری از مردم می خواهند با کارت SD ارتباط برقرار کنند با arduino یا خروجی صوتی از طریق arduino بخواهید. بنابراین در اینجا ساده ترین و ارزان ترین راه برای اتصال کارت SD با arduino است. تو می توانی ما را
صحبت کردن با آردوینو - پخش MP3 با آردوینو بدون هیچ ماژولی - پخش فایل Mp3 از Arduino با استفاده از PCM: 6 مرحله
صحبت کردن با آردوینو | پخش MP3 با آردوینو بدون هیچ ماژولی | پخش فایل MP3 از آردوینو با استفاده از PCM: در این دستورالعمل نحوه پخش یک فایل mp3 با arduino بدون استفاده از هیچ ماژول صوتی را یاد می گیریم ، در اینجا ما از کتابخانه PCM برای Arduino استفاده می کنیم که PCM 16 بیتی با فرکانس 8kHZ پخش می کند ، بنابراین اجازه دهید این کار را انجام دهیم
نحوه تبدیل جریانهای صوتی واقعی به فایلهای MP3: 7 مرحله
چگونه می توان جریانهای صوتی واقعی را به فایل های MP3 تبدیل کرد: سلام! احتمالاً برخی از شما به محتویات صوتی یا برنامه های پخش شده از رادیوهای وب توسط Real Audio Player یا Real Audio Plug-in مرورگر وب گوش می دهید. PROBLEM این فایلها اغلب به صورت جریان پخش می شوند ، اما معمولاً امکان بارگیری آنها برای
چگونه فایلهای ISO پشتیبان Psp خود را در فایلهای CSO فشرده کنیم تا فضا ذخیره شود: 4 مرحله
چگونه فایلهای ISO پشتیبان Psp خود را در فایلهای CSO فشرده کنید تا در فضا صرفه جویی کنید: در این دستورالعمل به شما نشان خواهم داد که چگونه از پشتیبان های psps خود از ISO به CSO فشرده کنید تا فضا را در حافظه خود ذخیره کنید ، تنها با استفاده از یک نرم افزار که با Wine In Ubuntu قابل استفاده است. همچنین برای ساختن CPW (Cusstom Firm-Ware) psp نیاز دارید
چگونه فایلهای داده پشتیبانی نشده را برطرف کرده و فایلهای ویدیویی مورد علاقه خود را برای PSP Portable خود بارگیری کنید: 7 مرحله
چگونه فایلهای داده پشتیبانی نشده را برطرف کرده و فایلهای ویدیویی مورد علاقه خود را برای PSP Portable خود بارگیری کنید: من از Media Go استفاده کردم و برخی از & nbsp؛ ترفندها را برای دریافت فایلهای ویدئویی پشتیبانی نشده برای کار بر روی PSP خود انجام دادم. این تمام مراحل من است ، هنگامی که برای اولین بار فایلهای ویدئویی پشتیبانی نشده خود را برای کار بر روی PSP خود دریافت کردم. 100٪ با تمام فایل های ویدئویی من روی PSP Po من کار می کند