مقالات آموزشی

جلسه یازدهم آموزش AVR
به نام خدا
(آموزش CodeVision جلسه اول)



مقدمه:

در جلسات قبل به آموزش AVR به زبان بیسیک و اسمبلی پرداختیم و تا حد زیادی با عملکرد امکانات داخلی میکرو و نحوه راه اندازی بخش های مختلف آن آشنا شدیم. مشاهده کردیم که در زبان بیسیک جزئیات داخلی از چشم کاربر دور بوده و بیشتر روی اصول برنامه نویسی و نرم افزار تاکید می شود و در اسمبلی قضیه کمی متفاوت است و علاوه بر رعایت اصول برنامه نویسی صحیح بایستی از نحوه عملکرد و جزئیات داخلی میکرو نیز اطلاع داشته باشیم. زبان C با هر دو زبان قبلی متفاوت بوده و فقط ساختارهایی را برای برنامه نویسی راحت تر با اسمبلی ارائه می دهد. در واقع در C با همان اصول اسمبلی برنامه نویسی می کنیم؛ با این حال برخی از کارها مانند ساختن حلقه ها و ایجاد شرط ها راحت تر بوده و برنامه نویسی را لذت بخش تر می کند.


کد ویژن Code Vision

کدویژن یک کامپایلر تجاری و قوی برای برنامه نویسی AVR به زبان C می باشد. این کامپایلر با ارائه کتابخانه های فراوان برای کار با ادوات خارجی از قبیل نمایشگرهای کریستال مایع معمولی و گرافیکی، سنسورهای دما، دستگاه های جانبی با پروتکل های ارتباطی مختلف و ... نیاز به استفاده از اسمبلی را کمتر کرده و با استفاده از توابع مختلف، برنامه نویسی را فوق العاده راحت می کند. این برنامه هم اکنون به عنوان یک زبان استاندارد برای تدریس درس میکرو در دانشگاه های ایران استفاده می شود که بهتر است به دلیل تجاری بودن از WinAVR استفاده شود.





در این مقاله به طور مختصر و مفید به نحوه کار با این کامپایلر می پردازیم و با فرض اینکه کاربر جلسات قبلی را مطالعه نموده و به زبان C کاملاً مسلط می باشد از بیان جزئیات سخت افزاری و نرم افزاری خودداری می کنیم و تمرکز خود را روی نحوه کار با منوهای این برنامه قرار می دهیم.

قبل از هر چیز بایستی نسخه آزمایشی این کامپایلر را از وب سایت تولید کننده به آدرس www.hpinfoteach.com دریافت و نصب نمایید. این نسخه فاقد برخی از کتابخانه های مهم همانند سنسورهای دما و نمایشگرهای گرافیکی و رنگی می باشد و با محدود کردن تولید کد هگز خروجی (4KB) امکان ساخت دستگاه های تجاری را نیز منع می کند و فقط برای موارد آموزشی مجاز می باشد. قیمت این برنامه نیز در حدود ٢٠٠ هزار تومان می باشد. ضمناً در زمان تدوین این مقاله (2011) اکثر وب سایت های این کامپایلر به دلیل تحریم ایران غیر قابل دسترسی بوده و برای دانلود این کامپایلر بایستی از … استفاده نمایید.

پس از دانلود و نصب کدویژن، از منوی Start روی All Programs کلیک کرده و پس از یافتن CodeVision بر روی آن کلیک نمایید، در صورتی که همه چیز به خوبی پیش رفته باشد تصویر زیر به مدت چند ثانیه بر روی مانیتور نمایش داده می شود و پس از آن پنجره اصلی Code Vision باز می گردد. برای ایجاد یک پروژه جدید از منوی File روی New کلیک کرده و در پنجره کوچک باز شده گزینه Project را انتخاب کرده و OK نمایید، سوال بعدی را نیز با Yes پاسخ داده و در پنجره بعدی گزینه اول را انتخاب نمایید و OK کنید تا پنجرهCode Wizard باز شود.

Code Wizard یکی از بخش های مفید و قابل توجه کدویژن است. این برنامه امکان تولید خودکار کدهای برنامه را با تنظیمات گرافیکی فراهم می نماید. به طور مثال برای ایجاد یک پروژه ساده که با ATmega16 طراحی شده و باید بر روی نمایشگر کریستال مایع عبارتی را بنویسد، می توانیم مرحله به مرحله با انتخاب نوع میکرو، فرکانس کاری، نوع نمایشگر و انتخاب پایه های متصل شده به LCD بدنه اصلی کد را به صورت آماده تحویل بگیریم. کدهای تولید شده همراه با توضیحات مفصل بوده و سرعت برنامه نویسی را تا حد زیادی بالا می برد و ما را از انجام کارهای تکراری برای نوشتن بدنه اصلی برنامه بی نیاز می نماید.







در این پنجره با انتخاب هر کدام از سربرگ ها و انجام تنظیمات و در نهایت کلیک بر روی دکمه شبیه به چرخ دنده (زیر Help) سه پنجره ذخیره سازی فایل به تناوب ظاهر می شود، برای هر سه فایل ایجاد شده نام یکسان انتخاب کرده و هر سه را در یک مکان ذخیره نمایید، پس از ذخیره کردن آخرین فایل پنجره اصلی Code Vision همرا با کد ایجاد شده نمایش داده می شود که می توان آن را edit کرد و بقیه برنامه نویسی را آغاز نمود. ما در اولین مثال مطابق شکل بالا و تصویر صفحه بعد میکروی Atmega16 را با فرکانس کاری ١ مگاهرتز و نوع نمایشگر کریستال مایع ١٦ کاراکتری (٢ در ١٦) انتخاب کرده و پایه های LCD را به پورت B میکرو متصل نموده ایم. شایان ذکر است با کلیک بر روی دکمه ذره بین (زیر Help) می توانیم برنامه تولید شده را در هر مرحله مشاهده نماییم.





پس از اتمام تنظیمات پروژه بر روی کلید شبیه به چرخ دنده کلیک کرده و پس از دادن نام یکسان به سه فایل ایجاد شده و ذخیره هر سه در یک مکان پنجره اصلی کدویژن باز شده و CodeWizard بسته می شود. برای تکمیل کد به آخر برنامه مراجعه کرده و دو خط زیر را به برنامه اضافه می کنیم: (بعد از خط lcd_init(16) در آخر برنامه).


lcd_gotoxy(0,0);
lcd_putsf("AVR64.com");

خط بالا مکان نما را به سطر و ستون اول نمایشگر منتقل می کند و خط بعدی عبارت داخل کوتیشن را بر روی نمایشگر در محل مکان نما می نویسد. خطوط بالا هر کدام یک تابع خاص بوده که در کتابخانه آماده کدویژن به نام alcd.h برای کار با LCD تدارک دیده شده است. همانطوریکه می بینید در C بر خلاف BASIC قبل از استفاده از توابع بایستی هدر فایل مربوطه را Include نماییم. (داخل هدر فایل کدهای C و اسمبلی مربوط به ارتباط با سطح صفر سخت افزار که در اینجا چیپ LCD می باشد نوشته شده است)

لازمه برنامه نویسی با کدویژن آشنایی با زبان C و تسلط بر آن می باشد. برای کار با زبان C می توان از برنامه نویسی بر روی ویندوز آغاز کرد و برای این منظور کامپایلرهای رایگانی مثل Dev C++ وجود دارد که با هر دو مد C و C++ به کار بر اجازه برنامه نویسی می دهد. البته زبان اصلی کدویژن C بوده و همانطوریکه می دانید از ویژگی کلاس ها و سایر ویژگیهای C++ برخوردار نمی باشد، با این حال زبان C یک زبان استاندارد بوده و تمام خواسته های برنامه نویس را به خوبی برآورده می نماید.

اگر از توابع خاص کدویژن مثل توابع کار با LCD و غیره صرفنظر کنیم تنها ویژگی آن به عنوان یک زبان برنامه نویسی وجود ساختارها می باشد، ساختارهایی مثل حلقه، دستورهای شرطی و انتخاب، دستورهای انشعاب، محاسبات، اعلان متغیرها و غیره. در واقع هنوز هم یک برنامه حرفه ای بایستی به زبان اسمبلی نوشته شود ولی وجود ساختارها به کاهش دستورات اسمبلی کمک موثری می نمایند. به طور مثال برای ایجاد تاخیر در یک برنامه اسمبلی بایستی در حدود ١٠ خط کد نویسی کنیم و چند رجیستر را به صورت فعال نگه داشته و آنها را پر و خالی کنیم تا مقداری تاخیر ایجاد شود ولی در C می توانیم با یک دستور حلقه قابل کنترل مثل for این کار را با یک خط انجام دهیم و یا حتی پا را فراتر گذاشته و از از تابع delay_ms استفاده کنیم تا زمان دقیق را بر حسب میلی ثانیه ایجاد نماییم.

قدرت زبان های برنامه نویسی با توابع آنها سنجیده می شود، در غیر این صورت فقط مجموعه ای بیشتر از چند ساختار ساده نخواهند بود، نوشتن کامپایلری که تعدادی ساختار مانند دستورات حلقه و شرط و پرش را ارائه دهد کار سختی نیست و به راحتی می توان یک زبان برنامه نویسی جدید نیز ابداع کرد؛ برنامه نوشته شده با کلمات خاص – حتی زبان فارسی – طی دو مرحله پردازش شده و در نهایت کد اسمبلی تولید می شود که توسط اسکریپت دیگری می توان اسمبلر asm32.exe را فراخوانی کرده و کد هگز را تحویل گرفت.

در این مقاله تصمیم ما بر این خواهد بود که طرز کار با کدویژن را آموزش دهیم، نه یک زبان برنامه نویسی. به همین روی به مثال LCD باز می گردیم و نحوه کامپایل و انتقال آن به میکرو را شرح می دهیم.

بعد از نوشتن برنامه نوبت به کامپایل و ساختن فایل هگز می رسد. برای کامپایل برنامه بایستی کلید F9 را فشار دهیم؛ در این حالت پنجره ای ظاهر می شود و گزارشی از مقدار حافظه مصرف شده و خطاها و هشدارهای برنامه را نشان می دهد. در صورتی که هیچ خطایی وجود نداشته باشد با فشار کلید های ترکیبی Ctrl+F9 فایل هگز ایجاد می شود. برای انتقال برنامه به میکرو ابتدا بایستی نوع پروگرمر را برای کامپایلر تعریف نماییم. برای این منظور از منوی Settings بر روی Programmer کلیک کرده و نوع پروگرمر را از پنجره باز شده انتخاب می کنیم. ما پروگرمر Kanda Systems STK200+/300 را برمیگزینیم چرا که مجوز ساخت و فروش آن توسط AVR64 از Kanda اخذ شده و به عنوان یک پروگرمر استاندارد با نام تجاری Poverty Prog در بازارهای داخلی به فروش می رسد. این پروگرمر توسط کابل LPT (پورت موازی پرینتر) به کامپیوتر متصل شده و تغذیه آن نیز از پورت USB حاصل می گردد.







پس از انجام تنظیمات، پروگرمر را به کامپیوتر متصل کرده، میکروی ATmega16 را داخل سوکت مربوطه قرار می دهیم و تغذیه (پورت USB) را به کامپیوتر وصل می نماییم. برای انتقال برنامه از کامپیوتر به میکرو از کلیدهای ترکیبی Shift+F4 بهره می گیریم. در این حالت پنجره پروگرمر مطابق شکل زیر باز می شود، با زدن کلید Program All میکرو به طور کامل برنامه ریزی می گردد. با انتخاب گزینه سوم از فریم FLASH Lock Bits می توان برنامه میکرو را قفل کرد و با تنظیم چک باکس های سمت راست نیز می توان فیوزبیت ها را برنامه ریزی نمود. فیوز بیت ها در مقالات قبلی (BASCOM) به طور مفصل توضیح داده شده است و بهتر است برای تنظیم آنها از Bascom استفاده شود تا تنظیم آنها راحت تر و گویا تر باشد. در اینجا حتماً تیک Program Fuse Bit(s) را بردارید تا فیوزبیت ها پروگرم نشوند.





در تصویر زیر نحوه برنامه ریزی میکرو نشان داده شده است. همانطوریکه مشاهده می فرمایید LED زرد رنگ پروگرمر که مربوط به Power می باشد همیشه روشن است و LED قرمز نیز در موقع برنامه ریزی میکرو که شامل عملیات پاک کردن حافظه فلش، نوشتن فلش و چک کردن آن و نیز EEPROM و فیوز بیت ها و Lock Bit ها می باشد، روشن می شود. در صورتی که مشکل ارتباطی بین پروگرمر و کامپیوتر وجود نداشته باشد و آی سی میکرو نیز سالم باشد هیچ خطایی نمایش داده نخواهد شد و عملیات به طور موفقیت آمیز پیش خواهد رفت.





پس از پروگرم کردن میکرو نوبت به تست پروژه به صورت سخت افزاری می رسد، با توجه به اینکه در ١٠ جلسه قبل بارها مدارات مختلف را بر روی برد بورد پیاده سازی کرده ایم در اینجا به شرح جزئیات و نقشه و سیم بندی مدار نمی پردازیم. فقط توجه داشته باشید که پایه های LCD طبق تنظیمات Code Wizard به پورت B متصل شده اند و در کدویژن از پایه شماره ٥ نمایشگر نیز استفاده می شود. پایه ٣ نمایشگر هم با یک پتانسیومتر ١٠ کیلو اهم به زمین متصل شده و پایه ١ و ٢ نمایشگر به ترتیب به تغذیه زمین و مثبت ٥ ولت متصل می شوند. پایه های ١٥ و ١٦نیز به ترتیب به مثبت ٥ و زمین متصل می شوند تا بک لایت نمایشگر روشن شود. پایه های تغذیه میکرو نیز طبق معمول ١٠ و ١١ می باشد که به ترتیب به مثبت ٥ و زمین متصل می شوند. اگر همه چیز به خوبی پیش رفته باشد پس از مونتاژ مدار و اتصال تغذیه، خروجی زیر را خواهیم داشت:





با حذف خطوط اضافه، برنامه اصلی به صورت زیر خواهد بود:


#include <mega16.h>
#include <alcd.h>
void main(void)
     {

     lcd_init(16);
     lcd_gotoxy(0,0);
     lcd_putsf("AVR64.com");

     while (1)
           {
           }
     }

راه اندازی سایر بخش های میکرو از قبیل تایمرها، PWM، پورت سریال و ... در کدویژن با استفاده از CodeWizard فوق العاده ساده بوده و هر کدام توابع مخصوص به خود را دارد. بهترین روش برای یادگیری نحوه کد نویسی کدویژن مطالعه مثال های این برنامه و نیز بررسی پروژه های موجود در اینترنت و مطالعه کتب مربوطه می باشد. در این مقاله هدف اصلی فقط Start با کدویژن بود، ضمناً با توجه به اینکه نسخه آزمایشی این کامپایلر اجازه ساخت تجهیزات تجارتی را نداده و فاقد کتابخانه های مهم از قبیل نمایشگر رنگی و سنسورهای دما می باشد از توضیح بیشتر صرفنظر می کنیم و از تمام علاقه مندان به زبان C دعوت می کنیم که برای برنامه نویسی با این زبان استاندارد و کامپایلر رایگان WinAVR جلسات بعدی آموزش وین ای وی آر را دنبال کنند.



دانلود PDF این مقاله
جلسه دهم آموزش AVR << مقاله قبلی                ليست مقالات                مقاله بعدی >> جلسه دوازدهم آموزش AVR



© 2009-2016 AVR64.com