آموزش مقدماتی نرم افزار  Codevision AVR

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

تو این جلسه قرار که با هم  آموزش مقدماتی نرم افزار  Codevision AVR رو بررسی کنیم! این کار به شما کمک میکنه که از این به بعد کد های استاندارد تری بنویسید.

 

کدویژن چیه ‍♀️؟ 

اگه به تازگی کار با میکروکنترلرهای AVR رو شروع کرده اید، پیشنهاد من به شما نرم افزار کدویژن ( CodeWizardAVR ) است. چون این نرم افزار نه تنها یک IDE است برای میکروکنترلرهای AVR است بلکه یک Code Generator ( تولید کننده ی کد ) نیز هست. 

کتابخانه های این نرم افزار از مهم ترین نقاط قوت اون به حساب میان، زیرا شما می توانید با زدن چند تیک در کدویزارد، این کتابخانه ها را فراخوانی کنید. و از آنها برای راه اندازی انواع LCD های کاراکتری و گرافیکی، پروتکل ارتباطی I2C، آی سی DS1307 و … استفاده نمایید.

لگو کدویژن در آموزش مقدماتی نرم افزار Codevision AVR

این نرم افزار علاوه بر تمام ویژگی های بالا یک کامپایلر، برای انواع میکروکنترلر های ATMEL که یکی از بزرگترین شرکت های تولید کننده میکروکنترلر است، نیز هست. 

مراحل پروگرم کردن برنامه با CodeWizardAVR :

  •  ابتدا برنامه را به زبان C  می نویسید.
  • سپس آن را کامپایل می کنیم.

[icon name=”star-half-alt” style=”solid” class=”” unprefixed_class=””]خروجی آن فایلی با پسوند HEX  است.

  • بعد این فایل HEX  را از طریق Programmer  بر روی میکروکنترلر می ریزید.

 

احتمالا الان براتون سوال شده که خود کامپایل چیه ؟

کامپایلر در واقع  یک برنامه یا مجموعه‌ای از برنامه‌های کامپیوتری است که دستورات زبان برنامه‌نویسی سطح بالا  را به دستورات یک زبان سطح پایین، مانند: اسمبلی یا زبان سطح ماشین، تبدیل می‌کند. این در حالی است که، هیچ تغییری در رفتار کد ها حاصل نمی شود. دلیل این تبدیل، ساخت یک برنامه اجرایی قابل فهم برای ماشین است. 

 

خب حالا که با مفهوم کامپایلر و نرم افزار کدویژن، آشنا شدیم. میریم سراغ آشنایی با کدویزارد، اما قبل از این اول باید نحوه ایجاد پروژه در کدویژن رو یاد بگیریم.برای این کار کافیه مسیری که در عکس ها نشون داده شده، پیش برید.

 

[icon name=”life-ring” class=”” unprefixed_class=””] ساخت پروژه

[icon name=”check-circle” class=”” unprefixed_class=””] در اینجا نوع میکروکنترلری که قرار است با آن کار کنیم را انتخاب میکنیم( AT90,ATtiny,ATmega) یا XMEGA  بعد ok را میزنیم .

[icon name=”check-circle” class=”” unprefixed_class=””] حالا از ما میپرسد که آیا میخواهیم یک پروژه بسازیم یا نه؟ ماهم با زدن yes پاسخ مثبت خودمون رو به نرم افزار اعلام می کنیم.

[icon name=”star-half-o” class=”” unprefixed_class=””] با این کار نرم افزار  CodeWizardAVR  باز شده که با آن می توانیم به جای نوشتن  تنظیمات دستی برنامه، میتونیم این تنظیمات رو در این قسمت انجام بدیم.

حال در این بخش یک سری سربرگ داریم که به توضیح آنها می پردازیم:

 

Chip [icon name=”circle” class=”” unprefixed_class=””]

 

Chip [icon name=”check-circle” class=”” unprefixed_class=””]

در این سربرگ می توانیم نوع میکروکنترلر خود را انتخاب کنیم. به عنوان مثال ATMEGA32 :

[icon name=”star-half-o” class=”” unprefixed_class=””]  میکروکنترلر هایی زیادی وجود دارد باید نسبت به کارایی پروژه شما بهترین را انتخاب کنید که این انتخاب از روی Datasheet  آی سی ها انجام می گیرد.

Clock [icon name=”check-circle” class=”” unprefixed_class=””]

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

[icon name=”star-half-o” class=”” unprefixed_class=””] Clock داده شده به IC میتواند هر مقداری باشد.

[icon name=”star-half-o” class=”” unprefixed_class=””]کلاک های کمتر مشکل اساسی ایجاد نمیکنند فقط ریتم برنامه را کند میکنند.

[icon name=”star-half-o” class=”” unprefixed_class=””] ماکزیمم Clock داده شده به IC کاملا به آستانه تحمل   cpu  مربوط است.

 

port [icon name=”circle” class=”” unprefixed_class=””]

در این بخش دو قسمت وابسته به یکدیگر داریم:1-data direction  2-pull up / output value

data direction [icon name=”check-circle” class=”” unprefixed_class=””] 

 قسمت * دو انتخاب داریم: 1- In 2-  Out

اگر In را انتخاب کنیم، پورت را ورودی کردیم، در نتیجه برای برای بایاس صحیح ورودی گیت‌های دیجیتال و جلوگیری از  دریافت مقادیر تصادفی، انتخاب می کنیم که پایه باید pull up شود یا pull down ؟

 

[icon name=”check-circle” class=”” unprefixed_class=””] pull up: پایه رو با یک مقاومت مثلا 10 کیلو اهم به Vcc وصل میکنیم.

[icon name=”check-circle” class=”” unprefixed_class=””] pull down: پایه رو با یک مقاومت مثلا 10 کیلو اهم به Gnd وصل میکنیم.

 

External interrupts [icon name=”circle” class=”” unprefixed_class=””]

این واحد برای راه اندازی وقفه ها خارجی  استفاده میشود. فراموش نکنید! که تعداد وقفه ها در Ic  های مختلف، متفاوت است. مثلا در ATMEGA32 سه وقفه  0,1,2 داریم ولی در ATMEGA8 فقط دو وقفه داریم 0,1.

[icon name=”star-half-o” class=”” unprefixed_class=””] وقفه: پیامی است که از طرف یک وسیله جانبی تولید می شود تا به CPU اعلام کند که برای انجام عملیاتی متفاوت، برای چند لحظه عملیات فعلیش رو متوقف کند.

[icon name=”star-half-o” class=”” unprefixed_class=””] وقفه‌های  خارجی وقفه هایی هستند که منبع آنها خارج از میکرو قرار دارد و با ارسال سیگنالی به پایه های مخصوصی در میکروکنترلر، وقفه ایجاد می کنند.

در میکرو پایه هایی به نام (…,INT x  (x=0,1,2 وجود دارد که زمانی تحریک شوند ، میکرو به زیر برنامه وقفه پرش می کند و کار تعیین شده را انجام می دهد.

[icon name=”check-circle” class=”” unprefixed_class=””] ما در این بخش این پایه ها را فعال می کنیم  . با تیک زدن هر کدام ما آن وقفه را فعال کردیم.

[icon name=”check-circle” class=”” unprefixed_class=””] ما بجای تنظیم در اینجا میتوانیم در خود برنامه نیز با نوشتن کد مربوطه همین عمل را انجام دهیم.

[icon name=”star-half-o” class=”” unprefixed_class=””] هنگامی که یک پایه به عنوان وقفه استفاده شود دیگر نمی توانیم از آن پایه به عنوان ورودی یا خروجی استفاده کنیم.

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

[icon name=”check-circle” class=”” unprefixed_class=””] وقفه در لبه ی بالا رونده پالس ورودی رخ دهد .

[icon name=”check-circle” class=”” unprefixed_class=””] وقفه در لبه ی پایین رونده پالس ورودی رخ دهد .

[icon name=”check-circle” class=”” unprefixed_class=””] وقفه در سطح منطقی 0 رخ دهد .

[icon name=”check-circle” class=”” unprefixed_class=””] وقفه در هر تغییر 0 به 1 یا بالعکس رخ دهد .

 

 

Timer/Counters [icon name=”circle” class=”” unprefixed_class=””]

تایمر : میتواند حسی از زمان را  به وجود  آورد. مثلا هر n میکرو  ثانیه یکبار عملی انجام شود.

کاننر : می تواند تعداد دفعات رخداد یک اتفاق را بشمارد.

 

[icon name=”star-half-o” class=”” unprefixed_class=””] تفاوت اصلی در مفهوم کانتر و تایمر:

[icon name=”check-circle” class=”” unprefixed_class=””] در کانتر نظم  و ترتیب وجود دارد . یعنی بعد از چند بار میشود حدس زد آن عمل مورد نظر چند بار انجام شده..

[icon name=”check-circle” class=”” unprefixed_class=””] کانتر نیز مانند تایمر یک شمارنده است ولی کاربرد اصلی آن براي شمارش تعداد دفعات رخدادهاي بیرونی است.

در اینجا چند نوع کانتر داریم که با انتخاب هر کدام  بخش هایی برای ما به نمایش گذاشته میشود، که در ادامه توضیح میدیم.

 

[icon name=”star-half-o” class=”” unprefixed_class=””] کانتر نوع 0,2 کاربرد بیشتری دارند , ما هم در این مبحث به توضیح بیشتر این دو نوع می پردازیم.

[icon name=”bolt” class=”” unprefixed_class=””] بخش های مختلف این دو کانتر شبیه یکدیگرند . این بخش ها عبارت اند از :

Clock source [icon name=”check-circle” class=”” unprefixed_class=””] 

Clock value [icon name=”check-circle” class=”” unprefixed_class=””] 

mode[icon name=”check-circle” class=”” unprefixed_class=””] 

output [icon name=”check-circle” class=”” unprefixed_class=””] 

 

:حالا میریم سراغ توضیح هر بخش به طور مفصل

Clock source[icon name=”check-circle” class=”” unprefixed_class=””]

در این قسمت ما به تعیین نوع تامین وقفه می پردازیم.

 

بسته به کاری که مد نظرمان است می توانیم یکی از این سه نوع تامین وقفه را تعیین کنیم.

Clock value [icon name=”check-circle” class=”” unprefixed_class=””]

در این بخش ما فرکانسی که استفاده کردیم  را انتخاب میکنیم.

mode [icon name=”check-circle” class=”” unprefixed_class=””]

در این قسمت ما مد کانتر انتخاب میکنی که همانطور که در شکل زیر میبینید به 4 دسته تقسیم میشوند.

 

[icon name=”star-half-o” class=”” unprefixed_class=””] دسته1،3 و 2،4 در output مشابه اند.

  1. تایمر/ کانتر در حالت ساده
  2. تایمر/کانتر در حالت pwm تصحیح فاز
  3. تایمر/کانتر در حالت مقایسه ای
  4. تایمر/کانتر در حالت pwm سریع

 

output [icon name=”check-circle” class=”” unprefixed_class=””]

این بخش وابسته به بخش قبل است. و بسته به اینکه در بخش قبل کدام مورد را انتخاب کرده ایم . دو حالت داریم:

[icon name=”star-half-o” class=”” unprefixed_class=””] اگر مورد 1و3 را انتخاب کرده باشیم:

واحد تولید شکل موج که وظیفه چگونگی اتصال یا عدم اتصال خروجی واحد مقایسه به پایه  ocx میکرو را دارد.

دراین حالت برای آن 4 حالت عملکرد بالا قابل تنظیم می باشد:

  1. پایه oc غیرفعال است.
  2. پایه oc  در هر بار تطبیق not حالت قبل شود (اگر0بود 1 شود و بالعکس)
  3. پایه oc در هر بار تطبیق 0 شود.
  4. پایه oc در هر بار تطبیق 1 شود.

 

[icon name=”star-half-o” class=”” unprefixed_class=””] اگر مورد 2و4 را انتخاب کرده باشیم:

واحد تولید شکل موج که وظیفه چگونگی اتصال یا عدم اتصال خروجی واحد مقایسه به پایه  ocx میکرو را دارد.

در این حالت برای آن 3 حالت عملکرد بالا قابل تنظیم می باشد:

  • پایه oc غیر فعال است
  • پایه oc  در حالت pwm   رابطه عکس با رجیستر ocr  دارد
  • پایه oc  در حالت pwm   رابطه مستقیم با رجیستر ocr  دارد

در این آموزش مجالی برای توضیح مفصل این واحد نیست! اما از اونجایی که واحد  تایمر/کانتر خیلی مهم، من یه آموزش 5 جلسه ای جامع و کامل براتون آماده کردم که به مرور روی سایت قرار میدم تا با جزئی ترین بخش های این واحد هم آشنا شید. امیدوارم که ازشون لذت ببرید و کلی به دردتون بخورن .

Usart [icon name=”circle” class=”” unprefixed_class=””]

  رابط سریال USART یکی از پرکاربردترین سیستم های ارتباطی AVR با دنیای بیرون می باشد و کاربرد زیادی دارد. این کاربردها عبارتند از:

  1. ارتباط با رایانه
  2. ارتباط با سایر میکرو ها و
  3. همچنین ارتباط و راه اندازی سایر ماژولها

[icon name=”star-half-o” class=”” unprefixed_class=””] قبل از فعال سازی پورت سریال باید آن را تنظیم کرده سپس فعال کنیم .تنظیمات در تصویر توضیح داده شده اند:

[icon name=”star-half-o” class=”” unprefixed_class=””] ارتباط سریال از دو روش همزمان و غیر همزمان برای انتقال داده استفاده می کند.

[icon name=”check-circle” class=”” unprefixed_class=””] روش همزمان:

در این روش در هر لحظه یک بلوک داده منتقل می شود .

[icon name=”check-circle” class=”” unprefixed_class=””] روش غیر همزمان:

در این روش  در هر لحظه یک بایت تبادل می شود.

حال باید بدانیم که AVR یک USART داخلی دارد . در اینجا ما در مورد آن توضیح خواهیم داد.

انواع حالت ارتباط سریال ( بستگی دارد به اینکه چند تا از موارد:  1. Transmitter 2. receiver را انتخاب کنیم ) 3 حالت دارد:

[icon name=”check-circle” class=”” unprefixed_class=””]یکطرفه => فقط یکی از موارد 1.2 را انتخاب میکنیم

[icon name=”check-circle” class=”” unprefixed_class=””] نیمه 2طرفه =>  هر دوی موارد 1.2 را انتخاب میکنیم

[icon name=”check-circle” class=”” unprefixed_class=””] دوطرفه =>  هر دوی موارد 1.2 را انتخاب میکنیم

 

analog  comparator [icon name=”circle” class=”” unprefixed_class=””]

كاربردهاي مقایسه کننده آنالوگ :

شارژ باتري   

 اندازه گیری خازن

ADC (Analog Digital Conversion [icon name=”circle” class=”” unprefixed_class=””]

در این قسمت از آموزش قصد داریم تا به بررسی مبدل آنالوگ به دیجیتال یا ADC بپردازیم.این مبدل که بر روی اکثر AVR ها موجود است وظیفه تبدیل سیگنال های آنالوگ به دیجیتال را دارد.

:با فعال کردن ADC دوتا گزینه برامون ظاهر میشه

use 8 bit [icon name=”check-circle” class=”” unprefixed_class=””] 

 interrupt [icon name=”check-circle” class=”” unprefixed_class=””] 

که اگر گزینه دو را انتخاب کنیم میتوانیم noise canceler رو هم انتخاب کنیم در این صورت نویزی وارد سیستم ما نمیشه.

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

  • volt ref
  •  clock

 

که این دو مورد را بنا به نیازمان تنظیم میکنیم.

 

alphanumeric lcd [icon name=”circle” class=”” unprefixed_class=””]

از این واحد برای راه اندازی  LCD استفاده می شود .که در این بخش به معرفی بخش های مختلف آن می پردازیم :

[icon name=”star-half-o” class=”” unprefixed_class=””] در تصویر بالا :

بخشی که با ستاره مشخص شد نوع  LCDما را مشخص میکند:

1.HD44780 :

نمایشگر ها شون تک رگه و نهایتا میتونه تا 80 کاراکتر رو نمایش بده.

معمولا در  پرینترها و دستگاه های فکس و… استفاده می شود.

2.KS0073(نوع k )

تفاوت اصلی این دو در شرکت سازنده آنها است.

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

بعد از انتخاب کردن موارد فوق بنا به پروژه تان. میرویم سراغ ساخت پروژه:

اول باید موارد انتخابی را ذخیره کنیم , مانند تصویر فوق. سه فایل اصلی پروژه را با یک نام و پسوند های متفاوت در یک پوشه با همان نام می سازیم.

 

تصویر save.c کردن در Codevision AVR

بعد از آن:

 

 

تصویر save.cwp کردن در Codevision AVR

حالا فایل پروژه ما با یک سری دستورات اولیه ساخته شده است. در نتیجه ما می توhنیم با کمی تغییرات برنامه خودمون رو بسازیم !

 

 

  خب اینم از آموزش امروز امیدوارم که لذت برده باشید و آموزش های بعدی رو هم دنبال کنید .

 

اگر می‌خواهید از آخرین و محبوب‌ترین مقالات ما در ایمیل خود مطلع شوید، همین الان ایمیل و شماره موبایل خود را در کادر زیر وارد کنید:
تعداد علاقه مندانی که تاکنون عضو خبرنامه ما شده اند: 0 نفر
دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *