به نام خدا

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

میکروکنترلر چیست ؟

میکرو کنترلر یک قطعه الکترونیکی میباشد که قابل برنامه ریزی است و وظایف از قبل تعیین شده توسط برنامه نویس(یعنی من و شما ^_^) را انجام میدهد.
این atmega16   ای که ما  همش باهاش کار میکنیم هم یه نوع میکروکنترلر هستش.

آموزش جامع میکروکنترلر AVR جلسه1

انواع  میکروکنترلها

۱) میکرو کنترلرهای سری ۸۰۵۱ ساخت شرکت    Atmel
۲) میکرو کنترلرهای سری PIC ساخت شرکت   Microchip
۳) میکروکنترلرهای سری AVR ساخت شرکت   Atmel

انواع میکروکنترلر AVR 

۱)  خانواده  ATTiny AVR

۲) خانواده AT90S

۳) خانواده ATmega AVR

۴) خانواده Xmega AVR

کار اکثر میکروکنترلرها معمولا با خانواده ATmega AVR است و نوع انتخابی معمولا atmega16 است!


ساختمان داخلی میکروکنترلر

بطور کلی کلیه میکروکنترلرها دارای ساختمان داخلی با اعضای زیر میباشند : 

۱) واحد پردازش مرکزی (CPU)

۲) حافظه موقت خواندنی و نوشتنی (RAM)

۳) حافظه فقط خواندنی (ROM)

۴) پورت های ورودی و خروجی (I/O Ports)

۵) تایمرها و شمارنده ها (Timers and Counter)

۶) کنترلهای وقفه (Interrupt Controls)

۷) مبدل آنالوگ به دیجیتال (ADC)

۸) مبدل دیجیتال به آنالوگ (DAC)

۹) رابط کاربری سریال (Serial Interface Ports)

۱۰) و …

 ۱)   CPU

بطور خلاصه وظیفه CPU ها Fetch کردن (خواندن یا گرفتن) و Execute میباشد.

تمامی اطلاعاتی که در میکروکنترلر ذخیره میشود به فرماندهی Clock توسط CPU خوانده شده و آنها را اجرا میکند.

۲ و ۳) انواع حافظه در میکروکنترلر ها

الف) Flash

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

توجه : برای تعریف یه چیز (آرایه-رشته-کاراکتر و…) در این حافظه باید اول آن کلمه flash قرار بدیم.
مثال :

ب) EEPROM

این حافظه به عنوان حافظه پایدار(ماندگار) تلقی میشود و نوشتن در آن بصورت ارادی و اختیاری و پاک کردن آن توسط اشعه ماوراء بنفش امکان پذیر است.

اطلاعاتی که در جریان برنامه تولید میشوند ، در صورت نیاز به حفظ آنها میتوان آنها را بر روی حافظه   EEPROM ذخیره کرد و با قطع منبع تغذیه اطلاعات حفظ خواهند شد.
(مثلا یه ساعت درست کردی که و میخوای وقتی ساعت رو خاموش روشن کردی دوباره همون ساعت رو نشون بده و شروع به کار کنه ، نه این که ساعت reset بشه و دوباره مجبور باشی زمان ساعتت رو تنظیم کنی.)

توجه : برای تعریف یه چیز (آرایه-رشته-کاراکتر و…) در این حافظه باید اول آن کلمه eeprom قرار بدیم.
مثال :

 

ج) SRAM

این حافظه یه نوع حافظه موقت هستش.

با قطع منبع تغذیه ، محتوای این حافظه پاک میشه.

اگر در تعریف متغیری از eeprom و  یا flash  استفاده نشود ، اون متغیر در این حافظه ذخیره میشه.

۴)   (Input/Output  (I/O

میکرو توسط این قسمت با دنیای بیرونی خود ارتباط برقرار میکند.(همون پایه های میکرو)

۵) تایمر و شمارنده(کانتر !)

با یه مثال لپ کلوم رو میگیم ! :
تایمر در ساعت برای شمارش و محاسبه زمان به کار میره>>>یعنی در هر ثانیه یه واحد زیاد میشه.
کانتر برای مثال برای شمارش تعداد ماشین های عبوری از خیابان استفاده میشود>>> لذا به اذای عبور هر ماشین یه واحد زیاد میشه.

۶) کنترلر های وقفه

گاهی اوقات لازمه که برنامه جاری رو متوقف و قطع کنیم تا به وسیله تابع وقفه چیزی رو برسی کنیم یا کاری رو انجام بدیم.

۷ و ۸) ADC   &    DAC

این هم دیگه معلومه ، نیاز به توضیح خاصی نداره ؛ تبدیل سیگنال های آنالوگ و دیجیتال به همدیگه.




معرفی پایه های میکروکنترلر (مهم)

میکروکنترلر AVR

پایه های GND به زمین متصل میشوند.

پایه VCC  و  AVCC   به +۵ ولت متصل میشوند .

 

پایه های PA0-PA7 مربوط به پورت A

پایه های PB0-PB7 مربوط به پورت B

پایه های PC0-PC7 مربوط به پورت C

پایه های PD0-PD7 مربوط به پورت D

 

پایه های XTAL1   و   XTAL2  هم جهت اتصال به کریستال میباشند.

پایه AREF هم جهت استفاده در مقایسه کننده آنالوگ کاربرد دارد.




ریجستر ها (مهم)

۱) رجیستر DDRx 

این رجیستر دارای ۸ بیت است که مقدار هر بیت تعیین کننده ورودی یا خروجی بودن همان بیت در پورت مورد نظر است.

اگر مقدار بیت مورد نظر ۰ باشد>>>>>>پین ورودی تعریف میشود.(یعنی اطلاعات میگیره از خارج!!!)
اگر مقدار بیت مورد نظر ۱ باشد>>>>>>پین خروجی تعریف میشود.(یعنی اطلاعات میده!!!)

برای DDRD داریم :

رجیستر DDRx

همونطور که ملاحظه میکنید ۸ تا بیت داریم که از شماره های ۰-۷ شماره گذاری شده اند.ترتیب هم از راست به چپه !

برای مثال میخوایم پین سوم از پورت D رو بعنوان ورودی و پین ششم از همین پورت رو بعنوان خروجی تعریف کنیم.باید چه مقادیری رو به پین ها بدیم ؟!

پین سوم یعنی شماره ۲

پین ششم هم یعنی شماره ۵

پس مقدار رجیستر DDRD=00010000 میباشد.

 

۲) رجیستر PORTx

مقدار هریک از بیت های این رجیستر تعیین کننده High یا Low بودن پین متناظر است.

از این رجیستر تنها هنگام نوشتن در پورت استفاده میشود.

توضیح :

فرض کنید که در نظر داریم یه LED رو به یکی از پین های میکرو وصل کنیم و فرمان بدیم که اون LED روشن بشه !

میایم چیکار میکنیم ؟! خوب دقت کنید !

ما با DDRx میگیم که فلان پین (یا پایه یا بیت !!! ) رو یک کن (یعنی خروجی کن—یعنی این پایه باید اطلاعات بفرسته یعنی ….)
حالا باید بگیم که ولتاژ هم اعمال کن که این کار به کمک این ریجستر انجام میشه.
حالا اگه بیت متناظر همون پین رو در رجیستر PORTx برابر مقدار ۱ قرار بدیم،وضعیت اون بیت(پین) به حالت High میرود و ولتاژ به پین مورد نظر وارد میشود.

توجه : این رجیستر دارای ۸ بیت است که مقدار هر بیت تعیین کننده High یا Low بودن همان بیت در پورت مورد نظر است.

اگر مقدار بیت ۰  باشد>>>>>>وضعیت LOW
اگر مقدار بیت  ۱ باشد>>>>>>وضعیت HIGH

برای PORTD داریم :
رجیستر PORTx

۳) رجیستر PINx 

این رجیستر تعیین کننده وضعیت فیزیکی بیت(پین) مورد نظر برای CPU است.
از این رجیستر تنها هنگام خواندن از پورت استفاده میشود.
اگر پین مورد نظر بعنوان ورودی در نظر گرفته شده باشد،بیت متناظر با آن در رجیسترPINx ،حاوی اطلاعات دریافتی از همان پین مورد نظر در میکرو است.
توضیح : همونطور که گفتم فقط هنگامی که میخوایم از پایه اطلاعات رو بخونیم یا به عبارتی پایه(پین) موردنظرمون رو ورودی تعریف کرده باشیم از این رجیستر استفاده میکنیم.

فرض کنید یه سنسور رو به یکی از پایه های میکرو وصل کرده ایم و این سنسور در شرایط مختلف مقدار ۰ یا ۱ را برمیگرداند.
حتما میدونید که چون سنسور داره اطلاعات رو به سمت میکرو میفرسته و میکرو هم باید اون اطلاعات رو دریافت کنه،در نتیجه پین مورد نظر باید در حالت ورودی تنظیم شده باشه !
اون موقع اگه خواستیم متوجه بشیم که الان سنسور مقدارش ۱ هست یا ۰ میایم و مقدار بیت متناظر در رجیستر PINx رو قرائت میکنیم.

پس :

آموزش avr

 

این رجیستر دارای ۸ بیت است که مقدار هر بیت تعیین کننده High یا Low بودن همان بیت در پورت مورد نظر است.

اگر مقدار بیت ۰ باشد>>>>>>>>وضعیت   LOW
اگر مقدار بیت ۱ باشد>>>>>>>>وضعیت   HIGH

 

اما در حالت ورودی منظور از HIGH  یا LOW  بودن چیست ؟! 

اگر بیت مورد نظر در حالت ورودی تنظیم شده باشد و بیت مورد نظر آن در رجیستر PORTx بصورت High تعریف شده باشد،مقاومت پول آپ داخلی فعال میشود.

در صورتیکه بیت مورد نظر در رجیستر PORTx بصورت LOW تعریف شود،پین مورد نظر به صورت Tri-State یا Hi-z در آمده که معنای آن این است که پین موردنظر وضعیت مشخصی ندارد.همانند هنگامی که برای پین هیج مقداری در رجیسترهای DDRx و PORTx و RINx تعریف نکرده باشیم(حالت پیشفرض).

نکته :در صورتی که پین را در حالت پول آپ تنظیم کردید،لازم است که بیت PUD از رجیستر SFIOR را یک کنید.

آموزش جامع avr




برای برنامه نویسی و شبیه سازی و در کل برای استفاده از قالبلیت های AVR باید از برنامه های کامپیوتری مربوط به ویندوز استفاده کنید!

ما برای برنامه نویسی و شبیه سازی نیاز به دو نرم افزار داریم! یکی برای برنامه نویسی که بتواند زبان برنامه نویسی ما رو برای ماشین ترجمه کنه یکی هم برای شبیه سازی که من به شما پیشنهاد میدم که برای کدنویسی از برنامه کدویژن و برای شبیه سازی از برنامه پرتئوس استفاده کنید!

منبع مطالب فوق: dmf313.ir


در ادامه قصد دارم تا روش برنامه نویسی رو هم بگم که باید منتظر جلسه بعدی باشید!