ایجاد و کامپایل یک پروژه LED چشمک زن 1Hz ساده در کد ویژن

در این مقاله، روش ایجاد یک پروژه ساده در نرم افزار کد ویژن بیان می شود. کد ویژن یک IDE و کامپایلر زبان C برای میکروکنترلرهای AVR می باشد. نسخه کد ویژن مورد استفاده در این مقاله 3.12 Advanced می باشد. برای مشاهده نسخه نرم افزار کد ویژنی که استفاده می کنید، از منوی بالا بر روی Help سپس About CodeVisionAVR کلیک کنید.

گام اول: ایجاد پروژه

برای ایجاد یک پروژه از منوی بالای نرم افزار مسیر File > New > Project را دنبال کنید. با انجام این کار، با پیامی مواجه می شوید که از شما می پرسد آیا می خواهید این کار را به کمک CodeWizardAVR انجام دهید؟ CodeWizardAVR ابزاری است که به شما اجازه می دهید یک دسته تنظیمات را به جای ثبت دستی، به نحوه گرافیکی و از طریق ویزارد به صورت مرحله به مرحله انجام دهید. از آنجایی که این یک پروژه ساده است و نیازی به اعمال تنظیمات خاص ندارد بر روی No کلیک کنید.

 

با کلیک بر روی دکمه No، پنجره ای برای مشخص کردن محل ذخیره کردن پروژه باز می شود. ترجیحا پوشه ای با نام پروژه بسازید تا همه فایل های مربوطه را در آن قرار دهید. نام پروژه را مثلا Blinker-1-hz در نظر می گیریم. بنابر این پوشه ای با نام Blinker-1-hz ایجادکرده و پروژه را در این پوشه ذخیره می نماییم..

 

با زدن دکمه Save، کادر محاوره ایی باز می شود تا بر اساس نوع device مورد نظر، فایل با پسوند .c را بسازد. با فرض این که تراشه مورد استفاده ATmega16A است آن را انتخاب کرده و نامی برای فایل c مشخص نمایید.

با توجه به نوع تراشه ای که انتخاب می کنید، فایل سرآیند (هدر فایل) مربوطه اضافه می شود. بر روی دکمه OK کلیک کنید.

 

 پس از آن پنجره مربوط به پیکربندی پروژه باز می شود. این پنجره شامل سربرگ های Files, C Compiler, BeforeBuild, After Build می باشد.

در سربرگ Files می توانید فایل های مربوط به پروژه را مشاهده کرده، فایل جدید ایجاد کرده یا فایلی که از قبل وجود دارد را به پروژه اضافه کنید.

 

در سر برگ C Compiler تنظیمات مربوط به کانفیگ در زمان کامپایل را مشاهده می کنید. این سربرگ خود شامل سربرگ های Code Generation, Advanced, Libraries, Messages, Globally #define, Path می باشد.

 

 در سر برگ اول، در قسمت Chip می توانید تراشه ای که انتخاب کرده بودید را عوض کنید. یکی از بخش هایی که در این قسمت با آن سر و کار دارید تنظیم میزان Clock می باشد. این مقدار به صورت پیش فرض 8MHz است. آن را به 1MHz تغییر داده و بر روی دکمه OK کلیک کنید. با این کار فایل c درمحیط کد نویسی برای شما باز می شود.

 

 

همانطور که مشاهده می کنید در این مرحله تعدادی خطوط برنامه به صورت خودکار تولید شده اند. در چند خط اول که بین /**/  (بخوانید سلش ستاره - ستاره سلش) قرار دارد، توضیحاتی در مورد نام فایل، زمان ساخت و ایجاد کننده فایل ثبت شده است. در زبان برنامه نویسی C، خطوطی که بین /**/ یا بعد از // قرار می گیرند به عنوان کامنت شناخته می شوند و تنها جنبه توضیحی دارند. این خطوط در زمان کامپایل توسط کامپایلر نادیده گرفته می شوند.

در سطر بعدی دستوری که با #include شروع شده قرار دارد، این نوع دستورات به عنوان فایل سرآیند یا هدر فایل شناخته می شوند و کتابخانه مورد نیاز را به برنامه اضافه می کنند.

بعد از آن تابع main() قرار گرفته است. با شروع برنامه دستورات داخل تابع main خط به خط اجرا می شوند. ابتدا ویژگی های پورت ها و پین ها، شامل ورودی یا خروجی بودن، مقادیر روی پین و ... را مشخص می کنیم.

به عنوان مثال در خط کد زیر پین 0 از پورت B به عنوان خروجی تعریف می شود. سپس مقدار روی آن 0 داده می شود با این کار چنانچه یک LED به این پین متصل شود. می توان با صفر و یک قرار دادن مقدار روی پین در فواصل زمانی، آن را خاموش و روشن کرد. 

DDRB.0 = 1; PORTB.0 = 0;

 

گام دوم: نوشتن کد برنامه

به عنوان یک پروژه ساده، تصمیم داریم کد مربوط به نوشتن یک LED چشمک زن یک هرتز (Blinker 1Hz) را بنویسیم. منظور از چشمک زن 1hz مداری است که یک سیکل روشن و خاموش شدن آن به اندازه یک ثانیه طول بکشد. طبق تعریف، فرکانس عبارت است از تعداد رویداد در واحد زمان، بنابر این اگر فاصله روشن شدن LED و خاموش شدن آن تا روشن شدن بعدی در یک ثانیه انجام شود، یعنی مجموع مدت زمانِ یک بار روشن و خاموش شدن، یک ثانیه باشد، فرکانس یک خواهدبود.

از آنجایی که نسبت زمان به فرکانس معکوس است. پس چنانچه یک سیکل به اندازه یک ثانیه طول بکشد، فرکانس آن یک هرتز است ولی اگر یک ثانیه روشن باشد یک ثانیه خاموش، یک سیکل دو ثانیه طول خواهد کشید پس فرکانس آن یک دوم یعنی 0.5 هرتز خواهد بود.

همانطور که بیان شد، تصمیم داریم در فواصل زمانی معین یک LED متصل به پین B0 را خاموش و روشن کنیم. برای این منظور به ایجاد تاخیر نیاز داریم. تابعی که این کار را انجام می دهد تابع delay_ms(t); می باشد. این تابع به همین صورت ناشناخته است، برای این که این تابع شناسایی شود باید فایلی که تعریف مربوط به آن را در بر دارد قبل از تابع main به وسیله #include به برنامه اضافه کنید. دستور #include <delay.h> هدر فایل مورد نیاز را به برنامه اضافه می کند.

پارامتر t مقداری بر حسب میلی ثانیه و بیانگر مقدار تاخیر مورد نیاز است. در این برنامه ما مقدار t را 500 میلی ثانیه معادل نیم ثانیه در نظر می گیریم.

 

در ابتدای تابع main پس از مقدار دهی اولیه رجیستر DDRB و PORTB0، یک حلقه بی پایان وجود دارد. عملیات تکرار شونده که در این برنامه همان روشن و خاموش شدن متوالی LED است را داخل این حلقه می نویسیم. 

دستور ;PORTB.0 = !PORTB.0; مقدار روی پایه B0 را NOT می کند یعنی اگر high بوده low و اگر low بوده آن را high می کند. به این روش هر نیم ثانیه LED خاموش و روشن خواهد شد.

 

گام سوم: ایجاد کد ماشین برای پروگرم کردن میکرو کنترلر

برای کامپایل برنامه از منوی برنامه، گزینه Project و سپس Build را انتخاب کنید.

در زیر منوی Project گزینه های دیگری وجود دارند که به اجمال معرفی می شوند: 

Check Syntax: این گزینه هیچ کامپایلی انجام نمی دهد بلکه سینتکس برنامه را کنترل می کند و اگر موردی در کد نویسی شما باشد در پنجره Messages در پایین صفحه در یکی سربرگ های Error یا Warning در مورد آن به شما اطلاع می دهد.

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

can't open #include io.h

undefined symbol 'DDRB'

undefined symbol'PORTB

 

برای این که بدانید فایل ماشین ساخته شده در کجا قرار دارد، از منوی برنامه، Project و سپس Configure را انتخاب کنید. با این کار همان پنجره Configure Project که قبلا در مورد آن توضیح داده شد، باز می شود، از سربرگ Files بر روی سربرگ Output Directories کلیک کنید. در فیلد Executable Files آدرس فایل اجرایی برنامه قرار دارد. با فرض اینکه این آدرس Debug\Exe باشد، به این معناست که در همان مسیری که پروژه قرار دارد، در پوشه Debug سپس پوشه Exe قرار دارد.

در آدرس مذکور دو فایل یکی با پسوند hex و دیگری با پسوند rom ایجاد شده است که پروگرامر با هر یک از آنها می تواند میکرو کنترلر را پروگرام کند.

محتوای فایل hex تولید شده:

 

محتوای فایل rom تولید شده:

 

گام چهارم: اجرای برنامه در محیط شبیه ساز Proteus

پِروتِئوس محیطی برای شبیه سازی مدارات الکترونیکی در اختیار شما قرار می دهد. حتی در این محیط می توان مدارات چاپی PCB را انجام داد. نرم افزار Proteus را نصب کنید. مطمئین شوید که فایل کرک به درستی نصب شده است. اگر در عنوان نرم افزار کلمه Beta را می بینید به این معناست که فایل کرک به درستی نصب نشده و شما نمی توانید از تمام امکانات نرم افزار استفاده کنید.

 

در دو تصویر بالا و پایین می توانید تفاوت بین نسخه کامل و بتا را مشاهده کنید.

 

برای کار با پروتئوس، ابتدا از منوی File سپس New Project یک پروژه جدید ایجاد کنید. بهتر است مسیر فایل ایجاد شده توسط Proteus در همان مسیری که پروژه مربوط به CodeVision قرار داشت، باشد. بر روی دکمهNext کلیک کنید. 

 

در گام بعد، از شما پرسیده می شود که آیا تصمیم دارید فایل شماتیک هم ساخته شود. گزینه دوم برای ایجاد فایل شماتیک و اندازه Lanscape A4 را انتخاب کرده بر روی دکمه Next کلیک نمایید.

 

از آنجایی در این مقاله نیاز به فایل PCB و Firmware نداریم،  در گام های بعدی گزینه اول را انتخاب کرده و روی دکمه Next کلیک کنید.

 

 

در این مرحله خلاصه ای از پروژه ای که قرار است ایجاد شود به شما نمایش داده می شود. در پایان دکمه Finish را کلیک کنید.

 

اکنون محیط شبیه ساز را مشاهده می کنید. حال لازم است قطعات مورد نیاز برای برنامه ای که نوشیم را در proteus اضافه کنیم. برای این منظور بر روی حرف P در مکان نشان داده شده در تصویر زیر کلیک کنید. P اشاره به عبارت Pick devices به معنی انتخاب قطعات می باشد. در کنار آن L قرار دارد که برای اضافه کردن کتابخانه (Library) استفاده می شود.

 

با این کار پنجره Pick Devices باز می شود. قطعاتی که برای برنامه نیاز داریم عبارتند از یک میکروکنترلر ATMega 16A و یک LED. برای راحت پیدا کردن المانها، می توانید از فیلدهای Category یا Keywords استفاده کنید. برای انتخاب میکروکنترلر، از قاب Category به دنبال Microprocessor ICs بگردید. سپس از جدول سمت راست ATmega 16 را انتخاب نمایید.

 

 

سپس از دسته Optoelectronics یک LED انتخاب کنید. این امکان وجود دارد که یک LED با رنگ خاص را انتخاب کنید. به عنوان مثال LED-GREEN را انتخاب کنید. با دابل کلیک بر روی هر قطعه، آن قطعه به قاب Devices اضافه می شود.

 بر روی دکمه OK کلیک کنید تا پنجره Pick Devices بسته شود.

 

گام پنجم: پروگرام کردن میکروکنترلر

پس از اینکه برنامه را در شبیه ساز اجرا کردید، اکنون می توانید با اطمینان ان را بر روی میکروکنترلر بارگذاری کنید تا نتیجه را مشاهده کنید. پروگرامر های موجود معمولا قابلیت اتصال از طریق پورت USB را دارند. ابتدا پروگرامر را به کامپیوتر متصل کنید. چنانچه از پورت USB استفاده می کنید مطمئن شوید درایور مربوط به USB از قبل بر روی سیستم شما نصب باشد. از محیط برنامه CodeVision گزینه Settings سپس Programmer را انتخاب کنید تا پنجره زیر باز شود:

l

 

در لیست کشویی مقابل Communication Port باید بتوانید نام یک Port  را انتخاب کنید. اگر هیچ نامی نمی بینید یا به این جهت است که کابل USB به پورت کامپیوتر شما متصل نیست یا اینکه درایور را نصب نکرده اید. اگر همچنان مشکل وجود دارد کابل را به یک پورت USB دیگر متصل کنید.

در صورتی که مشکلی وجود نداشته باشد، باید بتوانید نام یکی از پورت ها مثلا COM1، COM2 و ... مشاهده کنید.

 

 

حال از منوی Tools زیر منوی Chip Programmer را انتخاب نمایید تا پنجره زیر باز شود:

 

در این پنجره چندین سربرگ وجود دارد. سربرگ Program بیشتر مورد بحث ماست و عملیات مربوط به پروگرامکردن میکرو کنترلر در این بخش قابل دسترسی است. برای آشنایی با همه سربرگ های این پنجره می توانید مقاله تتت را بخوانید. برای اختصار، از منوی Program زیرمنوی Flash را کلیک کنید. مراقب باشید بر وی گرینه All کلیک نکنید. در صورتی که با خطایی مواجه نشده باشید، میکرو کنترلر شما با برنامه ای که نوشته بودید پروگرام شده و آماده قرار دادن در مدار است.

 

گام ششم: قرار دادن میکروکنترلر در مدار

چون این مقاله جنبه آموزشی دارد، برای سادگی، میکروکنترلر را بر روی یک بِرِد بورد، قرار می دهیم. توصیه می شود میکروکنترلر را مستقیما بر روی برد بورد قرار ندهید بلکه از یک زیف سوکت استفاده کنید. دلیل این موضوع این است که ممکن است بخواهید میکرو کنترلر را بارها و بارها برای پروگرام کردن بر روی برد بورد نصب کنید و سپس از روی برد خارج کنید. ار آنجایی که برای اتصال میکروکنترلر باید آن را بار فشار دادن به داخل سوراخ های برد بورد فرو کنید، ممکن است پایه های میکروکنترلر شما آسیب ببیند.  

برای راه اندازی میکرو کنترلر باید تغذیه مورد نیاز 5 ولت را فراهم کرده و + را به پایه VCC  و منفی را به GND متصل کنید. این دو بر روی پایه های 10 و 11 قرار دارند. VCC سرنام عبارت Voltage at the Common Collector برای ولتاژ تامین دیجیتال می باشد. به نظر می رسد نام این پایه می توانست DVCC باشد که D اشاره به Digital بودن آن داشت. یک پایه AVCC برای منبع تامین آنالوگ هم وجود دارد که برای مبدل آنالوگ به دیجیتال - همچون تبدیل دمای دریافتی از سنسور دما به مقداری دیجیتال - به کار می رود. این دو بر روی پایه های 30 و 31 قرار دارند. این دو مورد در جدول زیر آمده اند.

پایه 10 VCC
پایه 11 GND
پایه 30 AVCC
پایه 31 GND

 

حتی اگر از مبدل آنلوگ به دیجیتال استفاده نکنید، باز هم باید پایه ی AVCC را به منبع متصل کنید. این مورد در صفحه 5 دیتاشیت میکروکنترلر ATmega16 آمده است:

AVCC is the supply voltage pin for Port A and the A/D Converter. It should be externally connected to VCC, even if the ADC is not used. If the ADC is used, it should be connected to VCC through a low-pass filter.

ATmega16 Data sheet page 5

 

در صورتی که این کار را نکنید میکروکنترلر کار می کند ولی ممکن است بعدها با اختلالاتی مواجه شوید حتی ممکن است به میکرو کنترلر آسیب وارد شود. 

 

 

دانلود فایل پروژه


ذوبینه: این نام ابداع بیمار گونه شخصی است که تصور می کند بر ایجاد سر نام تخصص دارد اگر چه از دوران حرفه ای اش فاصله گرفته است.