چند محصول من
در این مطلب می خواستم بعضی از محصولات خودم را معرفی کنم.
-رابط پخش فایل صوتی wave
این برد کوچک می تواند با گرفتن فرمان به صورت سریال UART ، فایلهای صوتی با مشخصات مندرج در دیتاشیت را از کارتهای حافظه MMC/SD پخش کند.
برای دریافت دیتاشیت اینجا کلیک کنید.
-رابط صفحه کلید کامپیوتر
این برد کوچک می تواند به عنوان رابط بین کیبورد و مدارات میکروکنترلری قرار گیرد .
این برد کدهای دریافتی از صفحه کلید را به یک کد تک بایتی ترجمه کرده ، به سه روش
Parallel , SPI , UART تحویل می دهد.
برای دریافت دیتاشیت اینجا کلیک کنید.
- آلارم و سخنگوی باز بودن درب خودرو
این دستگاه کوچک از مدار لامپ سقفی تغذیه می شود و موقع باز بودن درب خودرو با پیغام "درب خودرو باز است " به راننده هشدار می دهد و تا زمانی که درب بسته نشود هر ثانیه یک بارصدای ملایم آلارم و هر 20 ثانیه یک بار صدای گوینده را پخش می کند .

- دستگاه تنظیم کننده خودکار روشنایی و کاهنده مصرف برق مربوط به روشنایی
این دستگاه در سر راه تغذیه لامپ روشنایی قرار می گیرد و نور آن را متناسب با نور محیط تنظیم می کند . به گونه ای که در اوقات و مناطق تاریک نور بیشتر و در اوقات و مناطق روشن نور کمتری تولید شود . به این شکل در مصرف برق روشنایی صرفه جویی قابل توجهی حاصل می گردد. این سیستم برای لامپهای التهابی و فلوئورسنت تست و اجرا شده است . عمده مشکل در مورد لامپهای کم مصرف می باشد که قابلیت کنترل ندارند.

برای دریافت فیلم تست دستگاه اینجا کلیک کنید.
با تشکر از دوستان در سایت pic-iran به خاطر آپلود لینکها .
طراحی وساخت فیلتر دیجیتال
بخش دوم - پیاده سازی فیلتر دیجیتال :
همانگونه که می دانیم ،در دنیای واقعی ،سیگنالها به صورت آنالوگ (پیوسته ) می باشند .پس قبل از هر گونه پردازش روی داده ها ، لازم است سیگنال آنالوگ ورودی به مقدار معادل دیجیتال تبدیل شود.
سپس پس از پردازش مقادیر دیجیتال ، لازم است مقدار جواب حاصل ، دوباره به مقدار آنالوگ معادل تبدیل شود .در زیر بلوک دیاگرام کلی یک سیستم DSP رسم شده است. واحد DSP می تواند به طور خاص برای طراحی یک فیلتر دیجیتال به کار رود . بهترین گزینه برای پیاده سازی فیلتر دیجیتال ،تراشه های FPGA می باشند. اما میکروکنترلرهای پر سرعت و مخصوص کاربردهای DSP نیز گزینه مناسبی برای طراحی فیلتر دیجیتال می باشند.قبل از پیاده سازی نرم افزار فیلتر ،باید پارامترهای زیر تعیین شود.
- دقت تبدیل A/D و D/A بر حسب بیت .
- نرخ نمونه برداری بر حسب نمونه در ثانیه (bps)
- باند گذر فیلتر (پایین گذر ، بالا گذر ، میان گذر یا میان حذف ) و فرکانس های قطع
- نوع فیلتر (FIR یا IIR) ومرتبه آن
دقت تبدیل A/D بستگی به دقت مورد نیاز پروژه دارد . نرخ نمونه برداری باید حداقل دو برابر باند فرکانسی سیگنال ورودی باشد .پس از تعیین پارامترهای فوق ، مقدار خروجی درهر لحظه طبق فرمولهای گفته شده در قبل قابل مقایسه است .در عمل به دست آوردن رابطه خروجی کمی مشکل است . اما نرم افزارهایی وجود دارند که می توانند با گرفتن مقادیر پارامترهای ذکر شده ،رابطه خروجی را محاسبه کنند . میکروکنترلرهای خانواده dsPIC محصول شرکت Microchip گزینه مناسبی برای کاربردهای DSP و به ویژه پیاده سازی فیلترهای دیجیتال می باشند . همچنین نرم افزارهای MikroPascal_dsPIC,MikroC_dsPIC و MikroBasic_dsPIC محصول شرکت MikroElectronika ، برای برنامه نویسی این میکروکنترلرها به زبانهای C ، پاسکال و بیسیک ارائه شده اند . در محیط نرم افزار ، با انتخاب منوی Tools ، گزینه Filter Designer ،صفحه طراحی فیلتر باز می شود که با تنظیم پارامترهای مربوط ،تابع تبدیل فیلتر ودر همان حال کد برنامه به سه زبان C ،پاسکال وبیسیک ساخته می شود.
طراحی وساخت فیلتر دیجیتال
بخش اول - اصول فیلتر دیجیتال
فیلترهای دیجیتال از مباحث پردازش سیگنالهای دیجیتال dsp می باشند .در واقع یک فیلتر دیجیتال یک تابع تبدیل دیجیتا ل است که می تواند خروجی را بر حسب مقدار کنونی ورودی و مقادیر لحظات قبل ورودی و خروجی محاسبه کند. فیلترهای دیجیتال بر حسب نوع تابع تبدیل به دو دسته تقسیم می شوند :
- فیلترهای FIR
- فیلترهای IIR
1- فیلترهای FIR:
FIR مخفف Finite Impulse Response به معنی پاسخ ضربه محدود می باشد. بدین معنی که اگر به ورودی این فیلترها تابع ایمپالس اعمال شود خروجی پس از n=N نمونه صفرمی شود . یعنی خروجی در اثر ورودی ایمپالس فقط برای مدت زمانی محدود مقادیر غیر صفر دارد.

از آنجایی که تـــــابع تبدیل یک سیستم در واقع خروجی سیستم در اثر ورودی ایمپالس می باشد می توان نتیجه گرفت که تابع تبدیل یک فیلتر FIR فقط دارای N نمونه مقدار غیر صفر است. اما چگونه می توان یک فیلتر FIR را پیاده سازی کرد؟
همانگونه که از بلوک دیاگرام بالا برمی آید در یک فیلترFIR مقادیر خروجی در زمانهای مختلف از ضرب کانولوشن زیر به دست می آید.
![]()
چناچه ضرایب تابع تبدیل (h) را داشته باشیم مقدار خروجی در لحظه n ام به صورت یکتا بر حسب مقادیر کنونی و لحظات قبـــل ورودی قابل محــاسبه است . مرتبه فیــلتر برابر N (تعداد عناصر تابع تبدیل h منهای 1 ) می باشد .مثلا اگر یک فیلتر مرتبه دوم داشته باشیم ، یعنی N برابر 2 باشد ، تابع تبدیل شامل سه عنصر خواهد بود و y از فرمول زیر محاسبه می شود .
y[n] = h[0]x[n] + h[1]x[n-1] + h[2]x[n-2]
طبق رابطه بالا ،مقدار خروجی در هر لحظه برابر مجموع حاصلضرب ضرایب تابع تبدیل در مقادیر ورودی در همان لحظه ، یک لحظه ودو لحظه قبل می باشد .
2- فیلتر های IIR:
IIR مخفف Infinite Impulse Response به معنی پاسخ ضربه نامحدود می باشد . بدین معنی که اگر به ورودی این نوع فیلتر تابع ایمپالس اعمال شود ،خروجی هیچگاه مستهلک نمی شود .
یعنی پس از طی مدت زمانی محدود ،خروجی به صفر میل نمی کند .پس می توان نتیجه گرفت تابع تبدیل این فیلترها (که همان خروجی در اثر ورودی ایمپالس می باشد)،تعداد نامحدودی عنصر دارد. این نوع فیلترها را نمی توان از کانولوشن ورودی در تابع تبدیل ساخت چرا که در هر لحظه برابر مجموع تعداد نا محدودی جمله است و این امر عملا در یک سیستم واقعی دیجیتال غیر قابل پیاده سازی است .راه حل ساخت فیلترهای IIR دیجیتال ،استفاده از روابط بازگشتی است. بدین معنی که خروجی در هر لحظه علاوه بر اینکه به مقادیر ورودی در همان لحظه و لحظات قبل وابسته است ، به مقادیر خروجی در لحظات قبل که قبلا محاسبه وذخیره شده است بستگی پیدا می کند.
الگوریتم کار به گونه ایست که ابتدا تبدیل z تابع تبدیل فیلتر محاسبه می شود و از روی آن می توان فرمول y را محا سبه کرد . مثلا:
همانطور که از فرمول بر می آید ، فقط دارای سه جمله است پس قابل ساخت است.
قابل توجه علاقه مندان میکروکنترلر در شیراز
با سلام خدمت دوستان.
به استحضار دوستان و علاقه مندان ساکن شیراز می رساند آموزش خصوصی و گروهی میکروکنترلرهای ARM , AVR , PIC , dsPIC , 8051 توسط اینجانب انجام می گردد . در صورت تمایل از علا قه مندان تقاضا می شود از طریق ایمیل درخواست نمایند.
amin.mosallaee@yahoo.com
پوزش و دعوت از دوستان
با سلام وآرزوی سلامتی و سربلندی برای دوستان عزیز.
در این صفحه خواستم ضمن عرض پوزش از خوانندگان به دلیل توقف در درج مطالب جدید ، از شما دوستان اهل علم خواهش کنم در صورتی که مطلب جدید و قابل توجهی در حیطه موضوع این وبلاگ دارید ، ارسال کنید تا با نام خودتان درج شود.
متشکرم.
مدیر وبلاگ : محمد امین مصلایی
آی سی ساعت زمان واقعی( RTC)
مقاله این صفحه،همانگونه که درعنوان آن ذکرشده،به معرفی یک آی سی کوچک و کم مصرف اما بسیار پرکاربرد می پردازد.
قبلا با دوستان زیادی اعم ازدانشجویان و مهندسان برخورد داشته ام که درپروژه خود به منبع ساعت و تقویم نیازداشته اند.درنگاه اول برای کسی که به سیستمهای میکروکنترلری تسلط دارد، ساخت ساعت دیجیتالی کار دشواری نیست.اماآنجایی که پردازنده سیستم بخواهدبه این مساله به عنوان یک قابلیت جانبی نگاه کندنه به عنوان هدف نهایی سیستم،این امرآزاردهنده می شودوپروسس زیادی از پردازنده می گیرد. همچنین این سیستم نیازمندآن است که پردازنده تمام وقت کارکندوهیچگاه تغذیه آن قطع نشود.
برای حل این مشکل برخی شرکتهای تولیدکننده قطعات الکترونیکی اقدام به ساخت چیپهایی نمودند که دربسته بندیهای کوچک امکانات کامل یک تقویم وساعت واقعی رادارند.
ازجمله این شرکتها، شرکت Dallas Semiconductors می باشد که آی سی DS1307 راکه یک چیپ کوچک 8 پین می باشد،تولیدنموده است.DS1307 که از خانواده چیپهای Real Time Clock یاهمان RTC می باشد، امکان تنظیم و خواندن ثانیه،دقیقه،ساعت،روز،ماه،سال وروزهفته رابه کاربر می دهد.ارتباط این چیپ باپردازنده باپروتکل سریال I2C و فقط ازطریق دوسیم انجام می شود.همچنین امکان استفاده ازباتری پشتیبان(Backup Battery) نیز برای آن درنظرگرفته شده است تادرزمان قطع تغذیه،آی سی به کارخودادامه دهد. جزئیات بیشتردرمورد این آی سی با لینکی که درپایان مقاله گذاشته شده است،قابل دانلود می باشد.
برای کسانی که بامیکروکنترلرAVR و نرم افزار CodeVisionAVR کار می کنند،ارتباط با این چیپ بسیارساده شده است.چراکه کتابخانه کاملی رادراین زمینه دراختیاربرنامه نویس قرارمی دهد.
با مولد PWM مبدل D/A بسازید
در کلکسیون امکانات میکروکنترلرهای جدید مثل AVRوPIC،مبدل A/D آنها بیش از همه خودنمایی می کند.چرا که امکان ارتباط دنیای دیجیتال پردازنده را با دنیای آنالوگ بیرون فراهم آورده است.اما هنوز یک کاستی وجوددارد و آن این است که این ارتباط یکطرفه است.همانطور که می دانید مبدل A/Dوسیله تبدیل سیگنال آنالوگ به دیجیتال است.چنانچه بخواهید عکس این عمل را انجام دهید،یعنی اعداد دیجیتال میکروکنترلر خودرابه مقادیرآنالوگ تبدیل کنید،احتیاج به مبدل D/A دارید که متاسفانه در این دو خانواده (AVRوPIC) موجودنیست.برای حل این مشکل در صدد برآمدم تا این مقاله را برای ارائه راه حلی جهت حل این مشکل بنویسم.همانطور که ازعنوان مقاله پیداست،این عمل با استفاده از مولد PWM داخلی میکروکنترلر امکانپذیراست.به این صورت،بسته به انتظار شما از مبدل D/A،از اتصال یک D/A خارجی بی نیاز می شوید.
همانطور که می دانید،موج PWM،موج مدوله شده ایست که پهنای پالس Carrier آن متناسب با دامنه ورودی تغییر می کند،بدون آنکه فرکانس آن تغییر کند.به دیاگرام زیر توجه نمایید.
با توجه به شکل،انرژی موج متناسب با سیگنال اطلاعات تغییرمی کند.بنابراین چنانچه بتوان این موج مدوله شده را دمدوله کرد،می توان سیگنال اطلاعات را بازیافت نمود.در میکروکنترلرهای دارای PWM تمامی تولید این موج درون چیپ میکروکنترلر انجام می شود که موضوع بحث ما نیست.هدف این مقاله دمدوله کردن این موج ودرنتیجه بازیافت سیگنال اطلاعات از موج PWM است.آیا این عمل همان تبدیل داده دیجیتال به مقدار آنالوگ نیست؟!چگونه؟!
مثلا شما می توانید یک عدد 10 بیتی را به مقدار معادل PWM تبدیل کنید(این کاربه راحتی در میکروکنترلر انجام می شود.).حال برای بازیافت این مقداربه مداراتی نیازدارید که این کاررا انجام دهند.این کار به وسیله فیلترهای پایین گذر مراتب بالا امکانپذیراست.فرض کنید بخواهید یک موج PWM با فرکانس Carrier برابر 16KHzراکه حامل اطلاعات با حداکثر فرکانس 500Hz است،دمدوله کنید.یک فیلتر مرتبه 2 یا 3 (که به راحتی با op-amp ساخته می شود) با فرکانس قطع پایین مثلا 1KHzاین کار را انجام می دهد. هر چه مرتبه فیلتر بالاتر باشد،موج بازیافت شده به واقعیت نزدیکترخواهد بود.
البته دراین روش نکات و محدودیتهایی وجوددارد.آیا می دانید؟!
شما می توانید برای درک بهترموضوع وطراحی دقیقترفیلتر،ازنرم افزار OrCAD یا SPICE یا Protel استفاده نمایید . چگونه موج PWM را شبیه سازی می کنید؟!
درباره کارت صوتی (Sound Card)
امروزه کارت صدا یکی از اجزای جدایی ناپذیر کامپیوترهای شخصی است.وظیفه کارت صدا به زبان ساده،تبدیل سیگنال آنالوگ صوتی به دیجیتال و بلعکس است.اکثر این کارتها می توانند با دقت 8و16بیتی،مونوواستریو،تا فرکانس نمونه گیری 44.1ksps (Kilo Sample Per Second) صدا را ضبط و پخش کنند .
فرکانسهای نمونه گیری متداول برای کارتهای صدا 11025،22050و44100 نمونه در ثانیه است . ازاین ابزار می توان به عنوان مبدل آنالوگ به دیجیتال ودیجیتال به آنالوگ با دقت بالا استفاده نمود . اما یک محدودیت بزرگ وجود دارد و آن این است که سیگنال ورودی و خروجی کارت صدا باید در محدوده فرکانسهای صوتی باشد . بنابراین سیگنال DC را نمی توان خواند یا تولید کرد.
شما می توانید از خروجی Speaker وورودی Microphone کارت صوتی به عنوان خروجی وورودی آنالوگ استفاده کنید.اما یک نکته باقی می ماند . چطور تحت ویندوز ازقابلیتهای کارت صدا استفاده کنیم؟
استفاده از توابع API ویندوز راه حل تمام خواسته های برنامه نویسان حرفه ای است.اما این کار وقت برنامه نویس را هر چندحرفه ای باشد،می گیرد.راه حل دیگر استفاده از اجزای COM مانند DLL ها و اکتیوایکس(ActiveX) ها که توسط افراد و شرکتهای نرم افزاری ارائه می شود،می باشد.اما مساله ای که باز محدودیت ایجاد می کند این است که شرکتهای مذکور محصولاتشان را مجانی در اختیار شما قرار نمی دهند و این مساله به خصوص برای ما ایرانیها که قدرت خرید محصولات نرم افزاری خارجی را نداریم ، معضل بزرگی است.به همین دلیل به این فکر افتادم که DLLای برای این منظور بسازم و در اختیار هموطنان عزیز علاقه مند قرار دهم . این DLL با نابترین زبان برنامه نویسی ،C++،نوشته شده است و در زبانهای دیگر تحت ویندوز نیز قابل استفاده است.از کاربران این DLL خواهشمندم آن را در هر زبانی که استفاده می کنند ، چک کنند و اشکالات احتمالی آن را به من اطلاع دهند.فایل WaveIO.dll را به همراه هدر فایل WaveIO.h که حاوی الگوی توابع درون آن است و همچنین راهنمای آن را در زیر دانلود کنید ولذت ببرید.
Download : WaveIO.zip
ساختن موسيقی با ميکروکنترلر
قبل از شروع این بحث بهتر است آشنایي مختصري با تئوري موسیقي پیدا کنید.اجزاي یک ملودي نتها هستند.هر نت در واقع يک فرکانس یا يک باند فرکانسي است.مثلا طبق استاندارد جهاني نت لا ازپايينترین اکتاو (Octave)، با فرکانس 440HZ نواخته می شود.در شکل زير کلیدهاي یک پیانو رسم شده است.

همانطور که مشاهده می شود،نتها در اکتاوها متوالیا تکرار می شوند.اما فرق یک نت در یک اکتاوتا اکتاودیگر چیست؟تفاوت دربمی وزیری صداست.درواقــــع صدای نتهـــــای واقع در اکتــاوهای بالاتر، زیرترمی شود.
فرکانس نتهای موسیقی را می توان طبق رابطه زیر به دست آورد.
fx=fbase * 2 ^(n/12)
در رابطه بالا fbase فرکانس یک نت معلوم است.مثلا نت لا که قبلا گفته شد وn فاصله کلید مجهول از کلید معلوم رو به بالاست.مثلا فرکانس نت سی از همان اکتاو،طبق زیر به دست می آید.
fsi=440*2^(2/12)=494HZ
حال شما می توانید با تولید فرکانسهای متناظر نتها به وسیله یک میکروکنترلر،موسیقی دلخواه خود را اجرا کنید.در واقع میکروکنترلر شما باید برای هر نت یک موج مربعی با فرکانس آن نت و مدت زمان کشش آن نت روی یک پین خود تولید کند.ساختن موج مربعی با میکروکنترلر کار ساده ایست.همچنین می توانید فرکانس یا پرید نتها یا عددی متناسب با آنها را به عنوان اعدادی ثابت در یک آرایه ذخیره کنید تا متناسب با هر نت آنها را از جدول استخراج کنید.
برای شروع کار می توانيد مثال زير را دانلود کنيد.
Download : AVR-Music.zip
با تشکر از مهندس امير احمدی به خاطر آپلود کردن اين فايل.
آشنایی با استانداردهای RS485 , RS422 ,RS232
شاید بیشترخوانندگان این مطلب با RS232 آشناباشند.در این استانداردداده سریال UART ازسطوح منطقی صفرو یک به ترتیب به سطوح ولتاژ +3~ +12 ولت و-3~ -12 ولت تبدیل می شوند.درشکل زیر شمای کلی ارتباط و نیز یک فریم RS232 رسم شده است.
همانگونه که درشکل مشاهده می شود،پس از بیت آغاز(Start bit)،هشت بیت داده به همراه بیتهای اختیاری [8] وبیت توازن[P] ارسال می شوند وبه این صورت یک فریم داده کامل می شود.
عمل تبدیل صفرویک(مثلا 0V و5V) به ولتاژهای +12V و-12V تا حدودزیادی اثرنویزهای محیطی را کاهش می دهد.اما برای مسافتهای طولانی، Baud Rate بالا و محیطهای با اثر القاء نویزبالا،زیاد قابل اطمینان نیست.چراکه:
1-در مسافتهای طولانی اثرنویزهای محیطی بیشتر می شود.
2-در فرکانسهای بالا،تشعشع خط فرستنده،روی گیرنده اثر می گذارد.
برای حل مشکلات فوق،استاندارد RS422 پیشنهاد می شود.به این شکل که برای خروجی TXD دستگاه،یک فرستنده تفاضلی و برای ورودی RXD دستگاه، یک گیرنده تفاضلی قرار داده می شود.
طبق شکل،برای ارتباط ازنوع RS422 به 5 خط نیازاست.فرستنده تفاضلی روی خط A ، سیگنال TXD وروی خط B ، معکوس سیگنال فوق را تولید می کند.گیرنده نیز تفاضل این دو سیگنال رابه RXD دستگاه تحویل می دهد.به این صورت نویزهای محیط که به صورت مشترک روی دو سیم A و B قرار می گیرند،درورودی گیرنده تفاضلی حذف می شوند.اما سیگنال اصلی که با دامنه معکوس روی دو سیم ارسال می شود،با صحت کامل در گیرنده دریافت می شود.همچنین به این شکل اثر تشعشع خط فرستنده روی گیرنده از بین می رود.
ارتباط RS422(مانند RS232) ازنوع کاملا دو طرفه(Full duplex) است.به این معنی که خط ارسال و دریافت برای دستگاه جدا ازهم بوده،بنابراین درآن واحد دستگاه می تواند هم فرستنده باشد وهم گیرنده. اما در RS485 این ارتباط نیمه دوطرفه(Half duplex) می باشد. به این معنی که دستگاه درآن واحد یا فرستنده است یا گیرنده. چرا که خط ارسال ودریافت یکی است.بنابراین در این سیستم،ارتباط بایدبه صورت Master و Slave انجام شود.
ارتباط به گونه ایست که Slave ها نمی توانند سرخودداده ای را ارسال کنند.بلکه Master درزمانبندیهای خاصی آدرس Slave هاراپشت سرهم می فرستدوبا آنهاارتباط برقرارمی کند.البته نرم افزار این سیستمها بسته به نیاز پروژه و سلیقه طراح قابل طراحی است.
نکته قابل تامل دراستاندارد RS485 این است که درحالت عادی خروجی Slave ها باید tri-state باشدتاروی خط ودرنتیجه روی عملکرد Master اثر نگذارندوفقط وقتی که قرار است داده ای ارسال کنند،به خط متصل شوند.
به همین شکل ورودی Master فقط بایدوقتی فعال شودکه قراراست داده ای ازSlave مربوط بگیرد.چرا که در غیراین صورت،داده های ارسالی خود Master ، توسط Master دریافت می شوند.البته درباره آنچه گفته شد،شاید راهکارهای دیگری بسته به نیاز پروژه وجود داشته باشد.



