به نام خدا
مقدمه
در این سری جلسات تصمیم گرفتیم به آموزش برنامه نویسی و کار با میکروکنترلرهای ارزان قیمت هولتک (HOLTEK) بپردازیم.
برای شروع کار با هولتک ابتدا باید یک پروگرمر (پروگرامر) هولتک 8 بیتی تهیه کنید. ما در این جلسات با میکروهای ارازن قیمت 8 بیتی هولتک کار میکنیم پس نیاز به تهیه پروگرمر e-Link داریم. (دقت کنید که به اشتباه پروگرمر 32 بیتی تهیه نکنید).

همچنین یک میکروکنترلر ارزان قیمت مثل HT66F002 و یک برد تبدیل برای شروع کار مناسب است.
مرحله بعد دانلود کامپایلر و برنامه پروگرمر است:
کامپایلر هولتک برای میکروهای 8 بیتی HT-IDE3000 نام دارد که میتوانید با جستجو از سایت holtek.com دانلود کنید.
نرم افزار مناسب پروگرمر e-Link برای میکروهای 8 بیتی هولتک HOPE3000 For e-Link نام دارد که از سایت از سایت holtek.com قابل بارگیری است.
زبان کامپایلر C و اسمبلی است. بعضی از میکروهای خیلی ارزان مثل HT68F001 فقط با اسمبلی برنامهنویسی میشوند و برخی دیگر مثل HT66F002 با زبان C. ما در این جلسات فقط با C کار میکنیم.
میکروهایی که عرض فلش آنها 12 بیت است با اسمبلی و میکروهای 14 بیت با نسخه سبکتر C یعنی نسخه 2 و 15 بیتها با نسخه 3 زبان C قابل برنامه نویسی هستند.
روش دیگر باز کردن کامپایلر، ایجاد پروژه جدید، انتخاب میکرو و مشاهده زبانهای قابل پشتیبانی است.
کامپایلر HT-IDE3000
پس از دانلود و نصب کامپایلر رایگان هولتک یعنی HT-IDE3000 روی Project و سپس New کلیک کنید. با انتخاب نام میکرو زبان های قابل پشتیبانی نمایش داده میشود. مثلا با انتخاب HT66F004 نسخه 3 زبان C هم نمایش داده میشود که امکانات بیشری دارد و با انتخاب میکروی HT68F001 هرچند نسخههای 1 و 2 زبان C نمایش داده میشود ولی با رفتن به مرحله بعد امکان ایجاد فایل C وجود ندارد و فقط فایل ASM ایجاد میشود.

ما برای نمونه میکروی HT66F002 را انتخاب کرده و بالاترین نسخه زبان C نمایش داده شده را انتخاب و کلید Next را کلیک میکنیم. مشاهده میشود که قدرت انتخاب بین زبان اسمبلی و C را داریم که ما زبان C را انتخاب و Next را کلیک میکنیم:
پنجره زیر نمایش داده میشود که در این پنجره هم کلید Next را کلیک میکنیم:
در پنجره باز شده روی SysVolt کلیک کرده و اگر قرار است میکروی ما با 5 ولت کار کند عدد 5 را به همین شکل به صورت پیشفرض رها میکنیم. این پنجره برای تنظیم فرکانس صحیح میکرو در ولتاژ مورد انتظار است:
سپس روی Vdd کلیک کرده و ولتاژ کاری مورد نظر میکرو را که در اینجا همان 5 ولت است انتخاب میکنیم:
کلید OK را کلیک میکنیم و پنجره زیر باز میشود:
در این پنجره به چیزی دست نمیزنیم و کلید OK را کلیک میکنیم تا پنجره اصلی کامپایلر با کد شروع نمایش داده شود:
در اینجا فایل blink.c را میبینیم که توسط Code Wizard ایجاد شده و آماده تکمیل است. میتوانیم کدهای خود را در قسمت //Add your code here بنویسیم اما قبل از آن اجازه دهید به طور خلاصه با پایه های میکروکنترلر HT66F002 از خانواده هولتک (HOLTEK) آشنا شویم.
پایههای میکروکنترلر HT66F002
در تصویر زیر پایههای یکی از ارزانترین میکروکنترلرهای هولتک HOLTEK به شماره HT66F002 که قابلیت کدنویسی به زبان C را دارد مشاهده میفرمایید. این میکرو با ولتاژ 2.2 تا 5.5 ولت کار میکند و پایه مثبت (+) آن پایه شماره 1 که با رنگ قرمز مشخص کردهایم و پایه زمین یا همان منفی (-) پایه شماره 8 آی سی است.
پایههای 4 و 7 که ICPCK و ICPDA نام دارند برای پروگرم کردن میکرو با پروتکل ICP استفاده میشوند. برای پروگرم کردن میکروهای هولتک حتما باید هر چهار پایه + و – و ICPCK و ICPDA به پروگرمر متصل شوند و شما نمیتوانید تغذیه را از منبع دیگر بدهید و فقط زمین مشترک را به پروگرمر وصل کنید. زیرا بر خلاف AVR ها در این حالت میکروی هولتک شناسایی نمیشود! احتمالا پروگرمر با قطع و وصل ولتاژ یا تغییر سیگنال نسبت به + و – کار شناسایی میکرو را انجام میدهد.
پایه زرد هم پایهای دلخواه از میکرو است (PA2) که قرار است به آن یک LED وصل کنیم و یک چشمکزن بسازیم.

نحوه اتصال میکروکنترلر هولتک به پروگرامر
برای اتصال پروگرمر هولتک e-Link به میکروکنترلر هولتک HT66F002 در ابتدا حتما راهنمای کاربری پروگرمر خود را مطالعه کنید چون در هر نسخه از سخت افزار ممکن است ترتیب پایهها متفاوت باشد. برای پروگرمر e-Link ساده 8 بیتی این الگو مطابق تصویر زیر است:

برنامه چشمکزن با هولتک
بعد از بستن سختافزار نوبت به برنامه نویسی میرسد. برای شروع کار یک برنامه چشمکزن ساده با میکروکنترلر هولتک HOLTEK به شماره HT66F002 مینویسیم تا با نحوه کارکرد پورتها آشنا شویم. قطعه کد زیر را در کامپایلر HT-IDE3000 بنویسید و از منوی Build روی Build (یا دکمهای که با کادر قرمز مشخص شده) کلیک کنید:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include "HT66F002.h" #include "unbonded_init.h" typedef unsigned short u16; void main() { Init_Unbonded_Pins(); //Add your code here _wdtc=0b10101000; // disable watchdog _pac2 = 0; // LED OUT while(1){ _pa2 = 1; _delay(250000); _pa2 =0; _delay(250000); } } |
اگر برنامه بدون خطا باشد خروجی مطابق شکل بالا خواهد بود. پیغام Warning مربوط به عدم اتصال دیباگر است که مهم نیست.
توضیح برنامه
بخشی از این برنامه توسط Code Wizard نوشته شده و بخشی دیگر را به کد اضافه کردهایم. خط اول یعنی هدرفایل نام میکرو و هدرفایل unbonded_init.h و نیز حلقه اصلی main و فراخوانی تابع Init_Unbonded_Pins(); توسط Code Wizard نوشته شده که در اکثر میکروها ثابت است. تابع Init_Unbonded_Pins(); برای میکروهایی است که مثلا یک پورت کامل 8 بیتی دارند ولی بخاطر پکیج کوچکتر تمام پایهها بیرون نیامده ولی سخت افزار آنها داخل آی سی وجود دارد و برای کاهش مصرف میکرو این پایهها احتمالا توسط این تابع بصورت ورودی Pullup پیکره بندی میشوند، چرا که اگر این پایهها که دیده نمیشوند توسط برنامه نویس رها شوند بصورت پیشفرض بصورت ورودی آزاد خواهند بود و پایه آزاد مدام نویز محیط را بصورت 0 و 1 دریافت میکند و میکرو جریان زیادی را مصرف خواهد کرد.
تمام رجیسترها بعد از ریست شدن میکرو مقدار پیشفرضی را میگیرند (POR). به طور مثال رجیستر کلاک روی 8 مگاهرتز داخلی تنظیم میشود که نیاز به تغییر نیست.
دستور wdtc=0b10101000; سبب خاموش شدن Watchdog میکرو خواهد شد. طبق دیتاشیت میکرو اگر این عدد در رجیستر wdtc نوشته شود تایمر نگهبان غیر فعال میشود. عمده اشتباه دوستانی که تازه کار با هولتک را شروع میکنند خاموش نکردن تایمر نگهبان است که سبب میشود میکرو مدام ریست شود.
در خظ بعدی با دستور _pac2 = 0; رجیستر تعیین ورودی/ خروجی پورت A2 را 0 میکنیم. یعنی این پایه بعنوان خروجی برای اتصال به LED تعریف میشود. هر پورت یک رجیستر به نام _pxcy دارد که x نام پورت مثلا a, b, c و y شماره بیت پورت است یعنی 0 تا 7.
در خط بعدی با دستور _pa2 = 1; در رجیستر پورت A2 عدد 1 را نوشتهایم یعنی این پایه 1 منطقی و روشن میشود. دقت کنید رجیستر جهت داده حرف c دارد ولی رجیستر خود پورت حرف c ندارد.
در خط بعد با دستور _delay(250000); به میزان 250 میلیثانیه تاخیر ایجاد کردهایم و با دستور بعدی پایه را خاموش کرده و مجددا تاخیر ایجاد کردهایم. تا یک چشمکزن داشته باشیم. این چهار دستور داخل یک حلقه while با شرط 1 یعنی همیشه درست به طور دائم اجرا میگردند.
در خصوص تابع تاخیر _delay(250000); دقت کنید در برخی از نسخههای زبان C هولتک ممکن است این تابع وجود نداشته باشید و مجبور باشید از چیزی شبیه GCC_DELAY(2000); استفاده کنید که 1 میلی ثانیه تاخیر ایجاد میکند و باید در حلقه قرار داده شود. پیشنهاد میشود راهنمای زبان C هر نسخه از هولتک را از منوی Help نرم افزار که بصورت PDF میباشد بررسی کنید تا از وجود توابع داخلی خاص آن نسخه مطلع گردید.
هولتک آپدیت هفتگی میدهد و تیم پرکاری دارد و تغییرات زیادی در syntax و توابع دارد پس باید بروز باشید.
پروگرم کردن میکروکنترلر هولتک
بعد از نوشتن و کامپایل کد نوبت به انتقال برنامه به میکروکنترلر میرسد که به آن پروگرم کردن میکرو میگویند. برنامه HOPE3000 For e-Link را از سایت رسمی HOLTEK.com دانلود و نصب کنید (اگر پروگرمر شما برنامه جدیدتری دارد همان را نصب کنید). بعد از کلیک روی آیکن برنامه پنجره اصلی پروگرمر مطابق شکل زیر باز خواهد شد. اگر پروگرمر خام باشد نیاز است از منوی Tools روی Update Firmware کلیک کنید تا e-Link شما به پروگرمر تبدیل شود. توجه داشته باشید اگر در نرم افزار کامپایلر از منوی Help گزینه Update Firmware را بزنید e-Link شما تبدیل به دیباگر خواهد شد. سعی کنید e-Link را زیاد تغییر وضعیت ندهید و فقط به عنوان پروگرمر برنامهریزی کنید. اگر پروگرمر و میکرو به سیستم متصل باشند و پروگرمر در همین نرم افزار Update شده باشد پیغام انتخاب ولتاژ میدهد که در صورت استفاده از میکروی 5 ولت مثل HT66F002 مقدار 5 ولت را انتخاب کنید. از منوی File روی Open کلیک کرده و در پوشه برنامه نوشته شده فایل blink.MTP را انتخاب کنید. فایل MTP یک فایل باینری است که داخل میکروکنترلر دانلود میشود. سپس از منوی Download روی Program کلیک کنید تا برنامه دانلود شود (ممکن است در ابتدا تصور کنید که باید برنامه را روی میکرو آپلود کنیم، اما دیدگاه برنامهنویس پروگرمر هولتک در اینجا از سمت میکرو بوده است نه از سمت PC، یعنی وقتی برنامه Programmer را باز میکنید تصویر کنید داخل میکرو هستید و باید برنامه را از PC دانلود کنید!)
پس از پروگرم کردن میکرو برای روشن شدن میکرو باید از منوی Tools روی Power On و سپس Power On(5v) کلیک کنید تا LED شروع به چشمکزدن نماید.

سخت افزار تست
بعد از پروگرم کردن نتیجه کار به شکل زیر خواهد بود:

نتیجهگیری
در این جلسه با میکروکنترلرهای هولتک و نحوه دانلود و نصب نرم افزارهای مربوطه آشنا شدیم و یک پروژه ساده چشمکزن نوشتیم. در جلسات بعدی در صورت استقبال خوانندگان به معرفی سایر بخشهای این میکروکنترلر کوچک و ارزان قیمت میپردازیم. لطفا با نظرات خود برای ادامه مسیر به ما دلگرمی دهید.
بازدیدها: 3









قیمت پروگرامر خیلی بالاست راهی داره ارزونتر خودمون بسازیم یا بوت لودر بریزیم بشه مستقیم به rx tx وصل کنیم؟
باید پروگرمر تهیه کنید، پروگرمر خیلی پیچیده هست و نمیشه ساخت. میکروهای با حافظه کم بوت لودر ندارند. قیمت پایین میکروها ارزش تهیه پروگرمر رو داره و خیلی به صرفه تر از خرید میکروهای گرون هست.