e
هدف از راه اندازی این وب سایت آموزشی، کمک کردن به علاقه مندان به یادگیری علم الکترونیک و میکروکنترلر بوده بخصوص دانش آموزان و دانشجویان که برای پیدا کردن مطلب مورد نظر خود سایتهای گوناگونی را جستجو میکنند که در نهایت به هدف خود نمی رسند، در این وب سایت سعی براین است که آموزش از پایه شروع شود. در ادامه با مثالهای نحوه استفاده از قطعات الکترونیک و عیب یابی آنها آموزش داده خواهد شد. همچنین پروژه های برای آموزش قرار داده شده است.
اسماعیل بخش زاد محمودی
09118315058
09336485452
09373054607
09390617786
telegram.me/Electronic_iran کانال
Esmail_bakhshzad@yahoo.com esmail2bakhshzad@gmail.com
محافظ تمام دیجیتال هوشمند وسایل برقی ( یخچال و فریزر- صوتی تصویری-کامپیوتر )
منبع تغذیه 0-32 ولت 0-5 آمپر قابل افزایش تا 0-20 آمپر (Power supply 0-5A 0-20A)
مدار کنترل کننده هوشمند تپ چنجر ترانس قدرت 63 کیلو ولت سه فاز
هشدار دهنده نشت گاز شهری و دود همراه با قطع خودکار گاز و برق
محافظت از سطح ولتاژ شارژ- جریان شارژ و دمای باطری های UPS تا 200 آمپر
محافظت و کنترل حد جریان سه فاز 0-200 آمپر در سه رنج کاری
کنترل و راه اندازی سروموتورهای الکتریکی و موتور DC و موتور ﭘله ای
قفل الکترونیکی هوشمند توسط تاچ لمسی (Touch Screen)
تابلوی روان با ماتریس 32*8 ارسال پیام متنی از طریق کامپیوتر
طراحی و ساخت فانکشن ژنراتور با کنترل لمسی توسط (Touch Screen)
محافظت و کنترل ولتاژ و جریان خروجی از مدار AC / DC
کنترل دور موتورهای الکتریکی و اعمال موج PWM و از طرق رابط تاچ ﭘد و LCDگرافیکی (Touch Screen)
پروژه مدار آشکارساز نشت گازمتان و گاز بوتان و LPG سنسور MQ
پروژه کنترل و محافظت دیجیتال ولتاژ
پروژه منبع تغذیهDigital 0-42V 5A
ولتمتر و آمپرمتر دیجیتال با AVR
برنامه نویسی میکروکنترلر 52 & 8051
مدار مبدل آنالوگ به دیجیتال ADC
کاربرد تراشه TTL 74HC573 در تابلو روان LED
مبدل آنالوگ به دیجیتال ADC میکرو کنترل AVR
کاربرد تراشه TTL74541 در ولتمتر دیجیتال با AVR
کاربرد تراشه رگلاتور ولتاژ LM723
تقویت کننده تفاضلی Single Operational Amplifier
استفاده از ترانزیستور برای سویچ کردن Switching Transistor
برنامه راه اندازی موتور پله ای Stop Motor
گذرگاه ارتباط دو سیمه میکرو کنترلر AVR – SPI
www.powerengineering.blogfa.com
الکترونیک مقدماتی
الکترونیک صنعتی
میکرو الکترونیک AVR
برنامه نویسی Assembl
1.پروژه آزمایشگر میکروکنترلر 8051-52
2.پروژه آزمایشگر میکروکنترلر PIC
3.پروژه ساعت RTC با میکرو 8051
4.محافظ تمام دیجیتال هوشمند AVR
5.پروژه LED-Stopper 7x20میکرو AVR
6.پروژه Digital Clock LED 32x8 AVR
7.پروژه Digital Voltmeter-Ammeter
8.پروژه منبع تغذیه Digital Power Supply 0-42V 5A
9.پروژه کنترل و محافظت دیجیتال ولتاژ خروجی AC/DC
10.پروژه ساعت دیجیتال RTC با AVR
11.پروژه مدار آشکارساز نشت گازمتان و گاز بوتان و LPG سنسور MQ
13.محافظت و کنترل ولتاژ و جریان خروجی از مدار AC / DC
14.طراحی و ساخت فانکشن ژنراتور با کنترل لمسی توسط (Touch Screen)
15.تابلوی روان با ماتریس 32*8 ارسال پیام متنی از طریق کامپیوتر
16.قفل الکترونیکی هوشمند توسط تاچ لمسی (Touch Screen)
17.کنترل و راه اندازی سروموتورهای الکتریکی و موتور DC و موتور ﭘله ای
18.محافظت و کنترل حد جریان سه فاز 0-200 آمپر در سه رنج کاری
19.محافظت از سطح ولتاژ شارژ- جریان شارژ و دمای باطری های UPS تا 200 آمپر
20. پروژه کنترل دور و زاویه چرخش موتور های گیربکس دار
21. محافظ ولتاژ برق شهر تایمر دار 30 آمپری
22.هشدار دهنده نشت گاز شهری و دود همراه با قطع خودکار گاز و برق
23. مدار کنترل کننده هوشمند تپ چنجر ترانس قدرت 63 کیلو ولت سه فاز
24. منبع تغذیه 0-32 ولت 0-5 آمپر قابل افزایش تا 0-20 آمپر (Power supply 0-5A 0-20A)
25. محافظ تمام دیجیتال هوشمند وسایل برقی ( یخچال و فریزر- صوتی تصویری-کامپیوتر )
1. مقالات در رابطه با سیستم های دیجتال و اطلاعاتی مفید در رابطه با Multimedia Card (MMC – SD)
2. مقالات در رابطه با آموزش میکروکنترلر AVR و PIC و8051-52 و...
دانلود نرم افزارهای کاربردی
1.نرم افزارهای برای میکروکنترلر 8051
2.نرم افزارهای برای میکروکنترلر PIC
3.نرم افزارهای برای میکروکنترلر AVR
ساعت
AVR Assembl
مقدمه:
هدف از نوشتن این راهنمای آموزشی، آموزش بخش کوچکی از برنامه نویسی میکروکنترلر خانواده AVR می باشد. دقت داشته باشید که معماری این تراشه ها بسیار گسترده و بیشرفته می باشد و نمی شود همه بخش های آن را در این آموزش آورد، تنها بخش های مهم و کاربردی از آن در این راهنما آورده شده. در ادامه برای هرچه بهتر شدن درک شما از برنامه نویسی این تراشه ها مثالهای همراه با سورس و فایل شبیه سازی شده با برنامه Proteus7 آورده شده، ورژن 7 به بعد این نرم افزار برای هماهنگی با دیگر بخش های سایت استفاده شده پس ابتدا برنامه Proteus خود را بروز کنید تا با مشکل اجرا نشدن فایل ها مواجع نشوید برای این کار می توانید از بخش دانلودها و همچنین راهنمای نصب و کار با این نرم افزار که در همین سایت گذاشته شده استفاده نمایید. این راهنما براساس سرفصل های مختلف نوشته شده و از بخش های مختلفی تشکیل شده پس باید تک تک این بخش ها را مطالعه نمایید و به هم مرتبط کنید تا بتوانید نیاز خود را برای برنامه نویسی برطرف نمایید. در پایان اگر با مشکل مواجع شدید می توانید از بخش سفارش پروژه وب سایت www.Project-esisis.com برنامه مورد نظر خود را از من درخواست نمایید تا شما را در اجرای پروژه مورد نظر یاری رسانم.
معماری AVR :
معنی کلمه AVR دقیقاً برای کسی مشخص نیست، بجز دو مهندس شرکت ATMEL به نام های Alf egil bogen و Vegard Wollan که برای اولین بار میکروکنترلر Avr را طراحی نموده اند. البته برخی بر این باور هستند که کلمه AVR مخفف عبارت Alf,Vegard , RISC یا اینکه Advanced, Virtual , RISC است اما هیچکس جز این دو نفر معنی دقیق AVR را نمی داند.
خانواده میکروکنترلر AVR دارای سه خانواده کلی زیر هستند:
برنامه نویسی به زبان اسمبلی:
چرا از زبان اسمبلی استفاده کنیم؟ اسمبلی یا زبان های دیگر؟ سؤال این است که چرا باید زبان دیگری را یاد بگیرید، که قبلاً زبان های برنامه نویسی دیگر را فرا گرفته اید، بهترین دلیل این است که هنگامی که شما در فرانسه زندگی می کنید قادر به گذران زندگی از طریق صحبت کردن به زبان انگلیسی هستند، اما در آنجا هرگز حس بودن در وطن را نمی کنید برا ی کار های ضروری نیز باید زبان آن کشور را به کار ببرید. این مثال جالبی برای درک زبان ماشین یا اسمبلی است، زیرا اگر از زبان های دیگری برای برنامه نویسی پروژه های پیشرفته استفاده نمائید هم فضای بیشتری از حافظه برنامه تراشه مورد نظر را اشغال می کنید هم یکسری تغییرات دلخواه را نمی توانید توسط زبان های دیگر اجرا نمایید چون در آن زبان ها کتابخانه های از بیش تعریف شده استفاده می شود که ابزار مختلف تراشه را به دلخواه خود بکار می برند.
فراگیری اسمبلی آسان است.
یادگیری زبان اسمبلی خیلی پیچیده نیست فراگیری این زبان مربوط به هر نوع سخت افزاری، شما را با مفاهیم پایه ای دیگر نسخه های زبان اسمبلی آشنا می کند. افزودن قواعد بعدی نیز آسان است. برنامه های کامل احتیاج به چند هزار خط کد آزمایشی دارند و بهینه سازی آنها نیز کار زیادی می طلبد، با توجه به اینکه برخی قابلیت ها وابسته به سخت افزار هستند نوشتن کد بهینه شده نیاز به آشنایی با مفاهیم سخت افزاری و قواعد دستوری دارد. مراحل اولیه یادگیری هر زبان مشکل است. برخی از دستورات اسمبلی نیاز به چند ماه تجربه دارند.
چهار برنامه اصلی برای برنامه نویسی به زبان اسمبلی یا هر زبان دیگر ضروری هستند. این ابزار ها عبارتند از :
ثبات چیست؟
ثبات ها حافظه های ویژه ای با ظرفیت 8 بیت بوده و به شکل زیر می باشند:
یک ثبات می تواند اعداد 0 تا 255 ( اعدات مثبت) یا اعدادی از 128- تا 127+ این اعداد کامل هستند با یک بیت علامت در بیت 7 ، یا اینکه یک مقدار نشان دهنده یک کاراکتر ASCII مثلاً “A”و یا تنها هشت بیت را که هیچ ارتباطی به هم ندارند مثلاً پرچم های هشدار دهنده که به صورت 0 و 1 بله / خیر استفاده شده اند، در خود ذخیره نمایند. البته فراموش نکنید که ثبات ها حافظه های موقت هستند یعنی با قطع تغذیه از تراشه این اطلاعات ازبین خواهد رفت.
ویژگی های ثبات ها:
32 ثبات در یک میکرو AVR وجود دارند. آنها در اصل R0 تا R31 نام گذاری شده اند، اما می توانید با استفاده از راهنمای اسمبلر نام های با معناتری و دلخواه برای آنها انتخاب کنید. مثلاً:
راهنمای اسمبلر همواره با یک نقطه در ستون اول خط آغاز می شوند، اما دستورات هرگز از ستون اول شروع نمی شوند، و همواره قبل از آنها یک کاراکتر جای خالی یا tab باید آورده شود. توجه داشته باشید راهنمای اسمبلر تنها برای اسمبلر دارای معنی هستند و هیچ کد قابل اجرایی برای تراشه AVR تولید نمی کنند. توجه داشته باشید که در بالا ثبات R6 از این پس با نام Flag_DecimR هم قابل دسترسی است بنابراین در هر بار استفاده از این ثبات باید تعداد کاراکترهای بیشتری بنویسیم یا راحت تر اینکه آنرا از قسمتی از برنامه کپی نموده در محل مورد نظر جاگذاری کنیم، اما در عوض نام این ثبات برای ما نشان دهنده نوع محتویات آن خواهد بود.
خواندن و نوشتن در ثبات ها:
برای انتقال داده و یا خواندن داده ها از ثبات ها از دستورات زیر استفاده می نماییم
MOV Rd,Rr
Rr رجیستر مبداء و Rd رجیستر مقصد می باشد.
Rr و Rd یکی از رجیستر های R0 تا R31 می باشند.مثال: با فرض اگر R1=03 Hex و R2=0F Hex با اجرای دستور زیر محتوای R2 برابر با 03hex می شود: MOV R2,R1
MOVW Rd+1:Rd,Rr+1:Rr
با استفاده از این دستور می توان دو رجیستر پشت هم را در دو رجیستر پشت هم دیگر قرار داد. مثال:
MOVW R1:R0,R3:R2
LDI Rd,k
K یک مقدار ثابت و دلخواه می باشد بصورت هگز یا ....
مثال: LDI R22,$44
دستورLD : این دستور یک بایت را به صورت غیر مستقیم از فضای داده به درون یک فایل رجیستر کپی می نماید فضای داده می تواند شامل فایل رجیستر ها R0 تا R31 رجیستر I/O و SRAM داخلی باشد. الگوی این دستور به صورت زیر می باشد:
LD Rd,p
LD Rd,p+
LD Rd,-p
مثال: با فرض اینکه محتوای خانه 250H از حافظه داده SRAM برابر با 45H باشد با اجرای دستورات زیر رجیستر R16 برابر 45h خواهد شد.
LDI R30,$02-----250----02---50
LDI R31,$50
LD R16,x
LDS Rd,K
مثال: با فرض اینکه خانه 100hex از حافظه داده دارای مقدار 2F Hex باشد، با اجرای دستور زیر رجیستر R0 برابر 2F Hex خواهد شد.
LDD Rd,z+q
LDD Rd,y+q
مثال: اگر محتوای خانه 300 تا 303 در حافظه SRAM به ترتیب برابر 10H,20H,30H,40H باشد با اجرای برنامه زیر رجیسترهای R0 تا R3 به ترتیب برابر با 4 رقم بالا می شود.
LDI R31,$03
LDI R30,$00
LDD R0,z+0
LDD R1,z+1
LDD R2,z+2
LDD R3,z+3
STS K,Rr
مثال: با فرض R16=15H با اجرای دستور زیر خانه 150 از SRAM یا حافظه داده برابر 15 خواهد شد.
LDI R16,$15
STS 0x0150,R16
ST P,Rr
ST P+,Rr
ST -P,Rr
مثال: اگر محتوای رجیستر R5= 3FHباشد، با اجرای دستور زیر محتوا ی خانه 135H از حافظه داده برابر با 3F hex خواهد شد.
LDI R28,$35
LDI R29,$01
ST Y,R5
دقت داشته باشید که منظور از x,y,z رجیستر های اشاره گر می باشد یا همان رجیستر های
STD y+q,Rr
STD z+q,Rr
q یک مقدار ثابت بین 0 تا 63 می باشد.
است R31 تا R30 رجیستر فایل بینRr
مثال: اگر رجیستر های R16 تا R18 به ترتیب حاوی 5FH,2FH,15H باشند با اجرای برنامه زیر محتوای خانه های 250H تا 252H از حافظه داده به ترتیب برابر 2F,5F,15 خواهد شد:
LDI R30,$50
LDI R31,$02
LDI R16,$15
LDI R17,$2F
LDI R18,$5F
STD z+2,R16
STD z+0,R17
STD z+1,R18
ثبات های عمومی در AVR :
شکل زیر تصویری از ثبات های عمومی همراه با آدرس آنها در تراشه AVR را نشان می دهد.
تفاوت ثبات ها:
در تراشه AVR تنها ثبات های R16 تا R31 با دستور LDI یک مقدار ثابت را لود می کنند، R0 تا R15 قادر به انجام این کار نیستند. این محدودیت چندان خوب نیست، اما هنگام ساخت مجموعه دستورات AVR اجتناب ناپذیر بوده است. در این قاعده یک استثنا وجود دارد: برای صفر کردن مقدار یک ثبات دستور زیر برای تمام ثبات ها صحیح است. Rrیکی از ثبات های R0تا R31 می تواند باشد.
CLR Rr
ثبات های اشاره گر:
همانطور که در صفحات قبل ذکر شد عملکرد ویژه ای برای زوج ثبات های R26 تا R31 تعریف شده است. این عملکرد به قدری مهم است که در اسمبلر AVR اسامی اظافی برای این زوج ثبات ها در نظر گرفته شده است: Z,Y.X این زوج ثبات ها 16 بیتی هستند که قادر به اشاره به محل های حافظه با آدرس حداکثر 16 بیتی در داخل SRAM یا در داخل حافظه برنامه Z هستند.
بایت پایین آدرس 16 بیتی در ثبات با شماره پایین تر و بایت بالا در ثبات با شماره بالاتر قرار می گیرد. هر دو بخش نام های مخصوص به خودشان را دارند. به طور مثال بایت بالای Z را ZH یا R31 و بایت پایین آن را ZL یا R30 می نامند این نام ها در سرفایل استاندارد مربوط به تراشه ها تعریف شده است. برای خواندن از حافظه برنامه تنها یک دستور وجود دارد. این دستور فقط برای اشاره گر Z تعریف شده و بنام LPM یا (Load From Program Memory) نامگذاری شده است. این دستور بایت موجود در آدرس Z حافظه برنامه را در ثبات R0 کپی می کند. انتخاب بایت بالا یا پایین توسط بیت با کمترین ارزش انجام می شودبایت پاین=0 و بایت بالا = 1 به همین دلیل باید آدرس اصلی در 2 ضرب شود و بنابراین حوزه دسترسی محدود به 15 بیت یا 32 کیلوبایت حافظه برنامه است. به این صورت:
LDI ZH,High(2*Address)
LDI ZL,Low(2*Address)
LPM
پس از این دستور، آدرس باید برای اشاره به بایت بعدی در حافظه برنامه افزایش یابد. از آنجا که این کار اکثر اوقات لازم می شود دستور ویژه ای برای افزایش مقدار اشاره گر تعریف شده است:
ADIW ZL,1
LPM
ADIW به معنی افزودن بی واسطه یک کلمه Add Immediate Word بوده و حداکثر مقداری که می تواند به این روش اضافه کرد 63 می باشد. مکمل این دستور، تفریق یک مقدار ثابت بین 0 تا 63 از یک ثبات اشاره گر 16 بیتی بنام SBIW تفریق بی واسطة یک کلمه نامگذاری شده است.
چگونه جدولی از مقادیر ثابت را در حافظه برنامه جای دهیم؟ این کار با استفاده از راهنماهای اسمبلر یعنی DB. وDW. انجام می شود، با استفاده از آنها می توانید لیست های مقادیر را به صورت بایت به بایت یا کلمه به کلمه در حافظة برنامه قرار دهید. لیست ها بصورت بایت به بایت به این شکل هستند:
تعداد بایت های قرار گرفته در یک خط باید همیشه زوج باشد مثلاً 8 کاراکتر در غیر اینصورت اسمبلر یک بایت صفر که ممکن است هیچ استفاده ای نداشته باشد، به انتهای خط اظافه می کند.
به طور مشابه ، لیستی از مقادیر کلمه ای به شکل زیر است:
.DW 12345,6789 ;a list of byte characters
توصیه های برای استفاده از ثبات ها:
حافظه داده SRAM :
تقریباً واحد کنترل اصلی (MCU) تمام مدل های خانواده AVR دارای Static RAM داخلی هستند. SRAM چیست؟ یک فضای داده برای ذخیره سازی اطلاعات موقت در اختیار کاربر قرار داده و محتوای این حافظه با قطع برق از بین می رود. برای دسترسی به این حافظه معمولاً از یک رجیستر واسط که یکی از رجیستر های R0 تا R31 است استفاده می شود.
نکته: استفاده از حافظه SRAM جهت انجام عملیات زمان بیشتری نسبت به حالتی که عملیات فقط روی رجیستر های عمومی R0 تا R31 انجام می شود. نیاز دارد.
برای چه مقاصدی می توان از SRAM استفاده کرد؟ علاوه بر ذخیره مقادیر امکانات اضافی دیگری برای استفاده از آن وجود دارد. دسترسی نه تنها با آدرس های ثبات بلکه از طریق اشاره گر ها نیز امکان پذیر بوده و می توان دستیابی شناور و نسبی به محل های متوالی حافظه را برنامه نویسی کرد. به این وسیله می توان بافرهای حلقوی برای ذخیره موقتی مقادیر یا جدول محاسباتی ایجاد کنید. بهترین و مهمترین کاربرد SRAM اصطلاحاً پشته نامیده می شود. شما می توانید مقادیر مختلفی را در پشته قرار دهید. این مقادیر می تواند محتوای یک ثبات آدرس برگشت قبل از فراخوانی یک زیر روال و یا آدرس برگشت قبل از فعال شدن یک وقفه سخت افزاری باشد.
تعریف SRAM به عنوان پشته:
برای استفاده به عنوان پشته ابتدا باید اشاره گر پشته تنظیم شود. اشاره گر پشته یک اشاره گر 16 بیتی بوده و مشابه یک پورت دسترسی به آن انجام می شود. نام این ثبات دو قسمتی SPH:SPL است. SPH بایت با ارزش بیشتر و SPLبایت با ارزش کمتر آدرس را در خود نگه می دارد. در تراشه AVR می توان حداکثر 64K بایت از حافظه داده را جهت فضای پشته درنظر گرفت و شماره آدرس این فضا توسط اشاره گر پشته SP مشخص می شود.
توجه: در ابتدا وقتی سیستم روشن می شود، CPU از محل استقرار حافظه پشته آگاهی ندارد، بنابراین این محل را باید به اطلاع آن رساند. پیش فرض SP=0 است.برای این کار معمولاً با وارد کردن یک آدرس از حافظه SRAM معمولاً آدرس بزرگتر از 60h یا 100h به داخل رجیستر اشاره گر پشته انجام می گیرد. بکمک دستور PUSH می توان به طور مستقیم به فضای پشته دسترسی داشت. به کمک دستور POP می توان اطلاعات ذخیره شده در حافظه پشته را باز یابی نمود.
PUSH R16 ;Throw that value
POP R20 ;Read back the value
پورت هاPorts I/O : پورت چیست؟
پورت ها امکان دسترسی میکروکنترلر با دنیای خارج را میسر می سازند. در تراشه AVR پورت ها گذرگاه هایی از واحد پردازش مرکزی به اجزای سخت افزاری و نرم افزاری داخلی و خارجی هستند. CPU با این اجزا مثلاً تایمر ها یا پورت های موازی ارتباط برقرار کرده و داده ها را از آنها خوانده یا به آنها می دهد. پر کاربرد ترین پورت ثبات پرچم Flag Register است که نتایج عملیات های پیشین در آن نوشته شده و شرط های انشعاب ،پرش از آن خوانده می شود. مجموعاً 64 پورت مختلف وجود دارند که به طور فیزیکی در تمام مدل های AVR موجود نیستند. لیست پورت های قابل دسترسی برای هر نوع پردازنده در برگه اطلاعات Data Sheet مربوط به آن آورده شده است. هر کدام بصورت 8 بیتی عمل می کنند.
توجه: پورت ها علاوه بر کاربرد عمومی به عنوان I/O معمولاً دارای وظایف خاصی نیز هستند،که با توجه به تراشه مورد نظر متفاوت است. که این اطلاعات را نیز می توانید در برگه Data Sheet تراشه موردنظر پیدا نمائید.مثلاً در تراشه ATmega32 پورت A علاوه بر I/O معمولی ورودی های آنالوگ برای ADC و مقایسه کننده آنالوگ نیز است. PA0 تا PA7 هریک از پین های I/O دارای دو دیود محافظ برای محافظت از ولتاژ ورودی منفی یا بزرگتر از VCC است و همچنین دارای یک مقاومت بالاکش Pull-up داخلی می باشد. مقاومت های داخلی را می توان به دلخواه فعال یا غیر فعال نمود. بافر خروجی در هر پین قابلیت جریان کشی& جریان دهی تا 20mA را فراهم می کند. بنابراین می توان بطور مستقیم یک LED را راه اندازی نمود.
هر پین دارای دو نگهدار به نام های DDRx و PORTx می باشد نگهدار اولی وظیفه تعیین جهت پین بصورت ورودی یا خروجی را برعهده دارد. و دومی نگهدار داده می باشد و داده ای که قرار است روی پین قرار گیرد را در خود نگه می دارد. بنابراین هر پورت 3 رجیستر برای کنترل پایه ها دارد.
مدار داخلی یک پین ار پورت میکروکنترلر
تعیین جهت پایه ها بصورت ورودی و خروجی :
برای این منظور از رجیستر DDRx استفاده می شود، بطوریکه اگر در بیت مورد نظر از این رجیستر 0 منطقی نوشته شود آن پایه بصورت ورودی و در صورت 1 شدن به صورت خروجی تعریف می شود.
مثلاً: پایه های 0و1و5و7 از پورت A بصورت خروجی و پایه های دیگر بصورت ورودی تعریف می شود.
مقاومت بالاکش Pull-Up : هنگامیکه پایه بصورت ورودی تعریف شود اگر در بیت PORTx مقدار یک منطقی و بیت PUD در رجیستر SFIOR نیز صفر منطقی نوشته شود ، مقاومت بالاکش داخلی فعال خواهد شد.
هنگامیکه بیت PUD برابر یک می گردد، مقاومت بالاکش درون پورت های I/O غیر فعال می شود حتی اگر PORTx و DDRx هم یک شده باشند.
توجه: هنگامیکه پایه بصورت خروجی تعریف شده باشد مقاومت بالاکش غیر فعال خواهد شد.
نکته: هنگامیکه پایه بصورت ورودی تعریف می شود، در صورتیکه مقاومت بالاکش داخلی یا خارجی فعال نباشد، پایه I/O به حالت Hi-z رفته و مقدار خوانده شده از ورودی پایه قابل اطمینان نمی باشد، بنا بر این توصیه می شود هنگام ورودی کردن پایه، مقاومت بالاکش داخلی یا خارجی برای آن درنظر گرفته شود.
نوشتن در پورت ها:
برای این منظور ابتدا باید جهت پایه مورد نظر را بصورت خروجی تعریف نموده DDRx=1 سپس با نوشتن در بیت نگهدار PORTx=xxx مقدار دلخواه را برروی پایه مورد نظر بنویسید.خواندن از پورت:
به دو صورت می توان داده را از پورت خواند:
دستور IN :
این دستور جهت خواندن از رجیستر های I/O به کار می رود و الگوی آن به صورت زیر است:
IN Rd,A
Rd یکی از رجیستر های R0 تا R31 است.
A آدرس رجیستر مورد نظر در فضای I/O می باشد
دستور OUT :
این دستور جهت نوشتن مقدار موجود در رجیستر های R0 تا R31 روی فضای رجیستر های I/O به کار می رود و الگوی آن به صورت زیر است:
OUT A,Rr
A آدرس رجیستر مورد نظر در فضای I/O می باشد.
برای بهتر فهمیدن توضیحات بالا مثال زیر در نرم افزار Proteus 7 و نرم افزار AVR Studio 4 طراحی شده پس از دانلود فایل ها را اجرا کنید:
آن را از لینک زیر دانلود نمائید:
http://s3.picofile.com/file/7406128709/Circuit_In_Out_AVR.zip.htmlتوضیح برنامه:
در این مثال ابتدا اطلاعات از پورت C خوانده شده و هم زمان بر روی پورت A نمایش داده خواهد شد:
مدار مثال بالا
استفاده از پشته PUSH/POP :
استفاده از پشته ساده است. محتویات ثبات ها به صورت زیر بر روی پشته قرار می گیرد:PUSH Rd
دستور PUSH ابتدا محتوای فایل رجیستر Rd را در محلی که اشاره گر پشته Stack Pointer اشاره می کند ذخیره نموده و سپس اشاره گر پشته را یک واحد کاهش می دهد، البته در مکان حافظه SRAM ذخیره می شود. اگر دوباره به مقدار ذخیره شده نیاز داشته باشیم تنها کافی است از دستور زیر استفاده نماییم:
POP Rd
با دستور POP فقط آخرین مقداری را که بر روی پشته قرار داده شده بدست می آوریم. این دو دستور زمانی مفید و با معنی است که:
دستور LPM :
ازاین دستور جهت دستیابی به 64KB از فضای حافظه برنامه FLASHاستفاده می شود. و توسط آن می توان به Look Up Table دسترسی پیدا نمود. الگوی این دستور به صورت زیر است:
LPM
LPM Rd,Z
LPM Rd,Z+
z به عنوان آدرس خانه ای از فضای حافظه برنامه می باشد و Rd نیز می تواند یکی از رجیستر های R0 تا R31 باشد.
مثال: اگر محتوای خانه Hex 300 از حافظه برنامه (FLASH) برابر 45H باشد، با اجرای دستور زیر رجیستر R5 نیز دارای مقدار 45H خواهد شد.
LDI ZL,$00
LDI ZH,$03
LPM R5,Z
دستور SPM :
این دستور یکی از جالب ترین دستورات AVR می باشد. از این دستور جهت پاک کردن یک صفحه در حافظه برنامه، و نوشتن یک صفحه در حافظه برنامه و تنظیم بیتهای قفل در بخش Boot مورد استفاده قرار می گیرد و الگوی آن بصورت زیر است:
SPM
دستورات مهم و حیاتی که در هر برنامه حتی کوچک استفاده می شود:
.ORG 0000H
.EQU VAR=SREG
.Include "m16def.inc"
در دستور بالا میکروکنترلر ATmega16را به برنامه معرفی نمودیم. در صورتی که از دستور بالا در ابتدای برنامه استفاده نکنیم اگر در طول برنامه نام رجیستری را به جای آدرس آن بکار ببرید. اسمبلر یک خطا را اعلام می کند.
.DEF Temp= R16
دستور بازگشت از زیر برنامه RET: با اجرای این دستور بایتهای موجود در پشته به درون PC منتقل می شوند، پس از آن برنامه از مقدار جدید شروع به اجرای ادامه برنامه می کند.
منابع تولید پالس ساعت درAVR :
همانطور که میدانید منابع مختلفی برای تأمین پالس ساعت میکروکنترلر وجود دارد. کاربر به کمک فیوز بیت ها می تواند هر کدام از این منابع را انتخاب نماید. منابع مختلف تولید پالس ساعت با فیوز بیت های CKSEL3..0 قابل انتخاب است. جدول زیر این انتخاب ها را نشان می دهد در این جدول صفر0 به معنای برنامه ریزی شدن فیوزبیت و یک 1 به معنی برنامه ریزی نشدن فیوزبیت است.
منابع کلاک در AVR به طور کلی به دو بخش داخلی و خارجی طبقه بندی می شود. منبع داخلی همان اسیلاتور RC است که کالیبره شده و ثبات تقریباً خوبی نیز دارد. در اکثر میکروکنترلر های خانواده AVR این اسیلاتور در فرکانس های 1Mhz, 2Mhz, 4Mhz, 8Mhz وجود داشته و توسط فیوزبیتهای مربوطه در زمان برنامه ریزی قابل انتخاب است. این اسیلاتور داخلی کاربر را از اسیلاتور خارجی بی نیاز می کند. قابل ذکر است که معمولاً به طور پیش فرض اسیلاتور داخلی با فرکانس 1Mhzاز سوی کارخانه سازنده در زمان تولید انتخاب میشود .
منابع خارجی متنوع بوده و شامل اسیلاتور کریستالی/سرامیکی فرکانس بالا، اسیلاتور کریستالی فرکانس پائین، اسیلاتور RC خارجی و کلاک دهی خارجی به پین XTAL2 میباشد .
به طور معمول و مخصوصاً زمانی که به فرکانس کاری بالا نیاز باشد یک کریستال فرکانس بالا به پین های XTAL1 و XTAL2 متصل می گردد. در این وضعیت جهت پایداری اسیلاتور بین هرکدام از این پینها با زمین مدار باید یک خازن با ظرفیت 12 الی 22 PF متصل گردد. نحوه انتخاب انواع اسیلاتور در جدول زیر آمده است .
نحوه اتصال کریستال به پایه های تراشه
اتصال منابع تغذیه به AVR :
برای تغذیه تراشه می توانید از مدار زیر استفاده کنید البته باید یک مدار رگولاتور 5 ولت قبل از این بخش قرار دهید. خازن های بکار رفته حتماً باید در نزدیکی تراشه میکرو مونتاژ شوند تا بتوانند نویز حاصل از تغذیه را حذف کنند.
نسخه ی pdf قابل دانلود این صفحه:
لینک دانلود:
http://s3.picofile.com/file/7406135806/AVR_Prog_Assembly_Primary_.zip.html
رمز فایل: www.Project-esisis.com
راھنمای دانلودگزارش خرابی لینک
تمام حقوق این وب سایت و مطالب آن متعلق به بزرگترین وب سایت آموزش الکترونیک می باشد و هرگونه کپی برداری از مطالب آن فقط با ذکر منبع مجاز است
Copyright © 2012 , project-esisis.com