در این مقاله سعی دارم شما را با یکی ار مهمترین تکنیک های برنامه نویسی بردهای مبتنی بر میکروکنترلر آشنا. کنم. اگر طراح مدارات الکترونیکی دارای میکرو هستید؛ این مقاله برای شما بسیار مفید خواهد و پنجره جدیدی در پیش روی شما قرار خواهد داد.
چرا این مقاله را باید مطالعه کنم؟
در اغلب پروژه ها طراح سخت افزاری مدار و برنامه نویس آن یک نفر است. و آن یک نفر هم عموما فارغ التحصیل مهندسی الکترونیک است. و همانطور که میدانید یک متخصص الکترونیک در حین تحصیلات آموزش چندانی در خصوص مبانی برنامه نویسی نمی بیند. و طبیعتا این افراد با توجه به اینکه افراد بسیار توانمندی در حوزه الکترونیک هستند اما در خصوص برنامه نویسی، توانایی های یک برنامه نویس حرفه ای را نخواهند داشت. البته بصورت معکوس هم یک از یک برنامه نویس حرفه ای نمی توان انتظار تسلط بالا بر طراحی مدارات داشت. حال اگر شما طراح مدارات الکترونیک هستید و برای بردهای خود برنامه نویسی را نیز انجام میدهید. با خواندن این مقاله و رعایت نکات مطرح شده؛ توانایی خود را در طراحی و توسعه مدارات افزایش خواهید داد و علاوه بر آن سرعت طارحی شما به شکل فوق العاده ای افزایش خواهد یافت.
مشکل برنامه نویسی فعلی طراحان مدارات الکترونیک چیست؟
اجازه دهید با یک مثال واقعی موضوع را برای شما شرح دهم. بنده مدتی است با شرکت کارخانجات لوازم خانگی پارس همکاری میکنم. این کارخانجات لوازم خانگی پارس محصولات منتوعی همچون انواع یخچال فریزر، جاروبرقی، ماشین لباسشویی و کولر آبی را تولید میکند و یکی از برندهای قدیمی کشورمان است. با توجه به قدیمی بودن این شرکت قطعا شما محصولات شرکت را یا مستقلا استفاده کرده یا در میان اطرافیان خود مشاهده کردید. اگر بررسی کنید متوجه میشوید که متاسفانه صنعت لوازم خانگی ما نیز مثل اغلب صنایع کشور مثل خودروسازی از روند رشد و توسعه و نوآوری بسیار کندی برخوردار است. در حالیکه رقبای خارجی که بعضا مثل برندهای کره جنوبی که حتی قدمت کمتری نسبت به صنایع داخلی ما دارند. هم سرعت نوآوری و هم کیفیت بسیار بالاتر هستند. اما مشکلی که در حوزه طراحی مدارت جدید و توسعه در کجاست؟
در این محصولات جهت کنترل فرآیند کاری هر محصول مدارات میکروکنترلری وجود دارد. این مدارات معمولا توسط پیمانکاران مختلفی طراحی و پس از تایید در محصولات مورد استفاده قرار میگیرد.کافیست پس از تایید طرح مدار و تولید تعدادی محصول از شرکت پیمانکار بخواهید تغییراتی در برد ایجاد کند. مثلا نوع میکرو را عوض کرده و با میکروکنترلر جدید و کاملا متفاوت با قبلی و با قیمت کمتر طراحی را بهینه کند. حتما شما تصور میکنید که از دید اغلب طراحان با توجه به تغییر نوع میکرو مثلا از حانواده AVR به محصولات Holtek زمانی برای تغییر برد و زمان بسیار بیشتری برای برنامه نویسی مجدد آن صرف خواهد شد. بطور مثال اگر طراحی برد اولیه پروسه ای شش ماهه بوده. حال باید در همین حدود وقت صرف کرد تا برد جدید طراحی شده و برنامه نویسی گردد و پس از بارها تست و تغییر به برد جدید برسیم. این درحالی است که شما در برد جدید فقط یک آیتم و آنهم نوع میکروکنترلر را تغییر داده اید و الگوریتم و عملکرد هر دو مدار کاملا یکسان است. به عبارت دیگر از دید مشتری هیچ تغییری در محصول نهایی ایجاد نشده. اما در مقایسه برندهای خارجی در این بازه زمانی محصولات جدیدتر و با کارایی بالاتری را ارائه کرده اند.
همین موضوع باعث میشود که سرعت توسعه محصولات داخلی در بازار داخلی از نیازهای ایجاد شده توسط رقبا در بین خریداران داخلی عقب افتاده و عملا بازار را به رقبا واگذار کنیم. و این واگذاری به قیمت رکود اقتصادی و ازدست رفتن بازار کار برای بسیاری از افراد منجمله من و شمای متخصص الکترونیک میشود. این در حالی است که به ظاهر همه طراحان الکترونیک از دانش فنی خوبی برخوردار هستند و صرف زمان و هرینه و با شرکت در دوره های آموزشی محتلف و مطالعه کتاب های تخصصی و تلاش و کار در صنعت اطلاعات کافی را دارند. اما باید گفت که یک نکته مهم در این میان فراموش شده و شما نمی توانید این نکته را در آموزش های موجود پیدا کنید. اغلب آموزش ها مبتنی بر راه اندازی بخش های مختلفت سخت افزاری میکروکنترلر هستند . اگر نگاهی به آگهی های موجود کنید و یا فیلم های آموزش و سایر محتواهای آموزش مشاهده خواهید کرد که همگی یک روند واحد آموزشی را طی میکنند. آشنایی و راه اندازی بخش های مختلف یک میکروکنترلر و برنامه نویسی بسیار سطحی!!!
تفاوت برنامه نویسی سطحی با برنامه نویسی پشرفته در چه چیزی است؟
بطور خلاصه باید گفت در برنامه نویسی پیشرفته ما سطح بندی برنامه داریم. اما در برنامه نویسی ساده نه. منظور از سطح بندی چیست؟ اگر بصورت کلی به یک برد که مثلا کنترل یک یخچال فریز را برعهده دارد نگاه کنیم. برنامه داخل میکروکنترلر شامل سطوح زیر میشود :
- راه اندازی و پیکربندی CPU
در این قسمت شما تنظیمات مختص CPU را انجام میدهید.مثل تنظیم سرعت کلاک. ویژگی این تنظیمات در اینجاست که هیچ ارتباطی مستقیم با سایر واحدهای درگیر با مدار ندارد. و کاملا مستقل از آنها است.
- راه اندازی و پیکربندی اولیه تجهیزات میکروکنترلر
در این بخش بسته به قابلیت ها و نیاز های مدار بخش های مختلف از میکروکنترلر راه اندازی میشوند. مثلا تعریف پین های ورودی و خروجی، مبدل آنالوگ به دیجیتال و ...
- توابع استفاده کننده از تجهیزات داخلی میکروکنترلر
توابع با دسترسی به دستورات سطح قبلی عملکرد های مورد نیاز در الگوریتم اصلی مدار را پیاده سازی میکنند. به طور مثال در مدار یخچال شما به یک بیزر جهت اعلام ها و اخطارهای صوتی دارید. پس در این سطح توابعی همچون پخش صدا در هنگام فشردن کلیدها و اعلام پذیرش تنظیمات و هشدار باز ماندن درب یخچال و ... را پیاده سازی میکنید.
- الگوریتم اصلی برنامه
این قسمت از برنامه با استفاده از توابغ قبلی عملکرد مدار را تعریف میکند. در مورد یخچال فرآیند تبرید و مراحل آن و در مورد ماشین لباسشویی فرآیند شستشو پیاده سازی میشود.
همانطور که مشاهده میکنید. در صورتیکه این سطح بندی بصورت درست و اصولی پیاده سازی شود.تغییرات سخت افزاری به سرعت در برنامه و در دو سطح اول اعمال میشوند و نیازی به کوچکترین تغییر در سایر بخش ها نیست. اجازه بدهید با چند مثال موصوع را روشن تر کنیم.
مثال اول- فرض کنید شما نیاز دارید فقط پین ها میکرو را جابجا کنید. مثلا بیزر مثال قبلی از یک پین به یک پین دیگر باید متصل شود. در این حالت شما دربخش دوم این تغییر را اعمال میکنید. و سایر بخش ها از دستکاری مصون هستند. البته بنده توضیح خواهم داد که با روش خاصی که در پیاده سازی این قسمت میتوانید پیاده سازی کنید این تغییرات بسیار ساده خواهند شد به نحوی که حتی برای ایحاد اینگونه تغییرات نیازی به یک فرد با دانش فنی در حوزه الکترونیک نیز نخواهد بود!
مثال دوم - تغییر اساسی در نوع میکروکنترلر. در اینجا تنها نیاز به تغییر در دو سطح اول دارید. و نیازی به دوباره نوشتن و تست کردن الگوریتم به هیچ عنوان وجود ندارد. شاید این پرسش پیش آید که وقتی نوع میکروکنترلر تغییر اساسی میکند، طبیغتا نوع کمپایلر و دستورات آن نیز تغییر خواهد کرد. پس چگونه الگوریتمی که در کمپایلر قبلی نوشته شده است، بدون تغییر قایل استفاده در کمپایلر جدید خواهد بود؟ جواب این پرسش را در ادامه خواهم داد.
مثال سوم - تغییر و به روز رسانی الگوریتم. اگر سطح بندی اصولی اجرا شود شما در این قسمت نیازی نیست که حتما یک متخصص الکترونیک باشید تا برنامه تویسی الگوریتم را بتوانید انجام دهید. بلکه یک متخصص برنامه نویسی نیز میتواند کدهای بهینه را پیاده سازی کند. بدون آنکه حتی اطلاعی از نوع میکروکنترلر مورد استفاده شما و پیکربندی سخت افزار داشته باشد! و این هنر برنامه نویسی حرفه ای است. و باعث خواهد شد که تغییرات و توسعه محصولات به سرعت انجام شود.