Download presentation
Presentation is loading. Please wait.
1
میکروپرسسور References:
1-میکروکنترلرهای AVR و کاربردهای آن: نویسنده:امیر ره افروز 2-ساختار میکروکنترلرهای AVR نویسنده:علی سلیمیان 3- میکروپروسسور و چیپ های جانبی نویسنده: فیض الله خاکپور
2
ارزشیابی: میان ترم نمره پایان ترم نمره حل تمرین و فعالیتهای عملی نمره
3
سرفصل ها: 1-مقدمه شامل بررسی انواع میکروکنترلرها و میکروپرسسورها و مقایسه آنها 2- بررسی اجزائ اصلی یک میکروکنترلر نمونه شامل CPU, RAM, ROM, INPUT,OUTPUT,REGISTER,COUNTER/TIMER,… 3-مرور برنامه نویسی با زبان c و دستورات و توابع محیط برنامه نویسی codevision 4-بررسی ساختار داخلی میکروکنترلر AVR(ATMEGA16) ،فیوز بیت ها و منابع کلاک و Reset 5-timer/counter ها وتنظیمات آنها 6-منابع وقفه خارجی 7-اتصال اجزاء خارجی نظیر LCD,KEYPAD,A/D,Sensor,comprator,stepper motor…
4
فصل اول:مقدمه به یک چیپ که دارای تعداد زیادی ترانزیستور(بطور مجتمع) است و قادر به انجام عملیات حسابی، منطقی، انتقال اطلاعات و تصمیم گیری باشد ریزپردازنده یا میکروپرسسور گویند. در واقع میکروپرسسور یک کنترل کننده قابل برنامه ریزی است. در سال 1971 اولین میکروکنترلر 4 بیتی (با 4 خط داده) که برای ماشین حساب طراحی شده بود با نام Intel 4004 توسط شرکت Intel ساخته شده و به بازار آمد. در سال 1973 ریزپردازنده Intel 8008 با 8 خط داده به بازارعرضه شد. معروفترین شرکتهای سازنده میکروکنترلرها عبارتند از: Intel ، Motorola ، Zilog ، Zarlink و ... جهت کنترل وسایل جانبی یا دستگاههای صنعتی و یا نظارت بر آنها با استفاده از میکرو کنترلرها باید: 1- ساختار داخلی آن میکروکنترلر را بشناسیم (آشنائی با سخت افزار) 2-قادر به برنامه ریزی آن میکروکنترلر جهت انجام عملیات دلخواه باشیم (نوشتن نرم افزار).
5
تفاوت میکروکنترلر با میکروپروسسور:
میکروکنترلر: برای کاربردهای خاص مثل زیر نظر گرفتن و کنترل کردن چند وسیله خارجی که به آن متصل میشوند (مثل وسایل خانگی، ماشین حسابها و اسباب بازیها) استفاده میشود. میکرو کنترلر حجم حافظه و میزان پردازش کمی دارد و سرعت پردازش آن پائین است. تعداد عناصر اکتیو (ترانزیستور) بکار رفته در آن خیلی کمتر از میکرو پروسسورهاست. RAM ، ROM ، I/O و Timer در درون تراشه قرار دارند. مثل 8051، 8032، ... میکروپروسسور: همه منظوره است. سرعت پردازش ، حجم پردازش و حجم حافظه بالائی دارد. گرانتر است و تعداد عناصر اکتیو بسیار بیشتری دارد. نمونه مورد استفاده آن در کامپیوترهای خانگی است. مثل 8086، 80 Z و نمونه پیشرفته آن Pentum. میکروپروسسورها فاقد RAM، ROM و پورتهای I/O هستند. باید این ماجولها را به آنها اضافه نمود
6
چند اصطلاح فنی : 1-یک رقم دودویی: BIT 0 2-چهار رقم دودویی: nibble 0000
3- word 4-دستورالعمل(Instruction): کدی یک بایتی که نشان دهنده یکی از اعمال محاسباتی،منطقی و... است.این کد ها برای هر نوع میکرو مشخص و تعین شده است مثال: برای 8051: ADD A,DATA 24H:
7
ساختار داخلی سیستم های میکروپروسسری:
CPU اطلاعات و کدهای موجود در حافظه را اجرا می کند حافظه جهت نگهداری اطلاعات موقت و دائم است وسائل جانبی (Peripherals) برای بر قراری ارتباط با cpu می باشد. Add bus CPU(Micro) MEMORY (RAM,ROM,…) Peripherals (monitor, keyboard,…) data bus
8
ساختار داخلی یک میکروکنترلر نمونه:
9
تشریح اجزای یک میکروکنترلر:
1)-گذرگاها(BUSS): سه نوع گذرگاه در میکرو وجود دارد. گذرگاه داده(Data Buss): جهت نقل و انتقال داده ها بین ماجولهای میکرو. میتواند 8 خط(میکرو 8 بیتی)، 16 خط (میکرو 16 بیتی) و ... باشد. هر چه تعداد خطوط Data بیشتر باشد سرعت انتقال داده ها بیشتر خواهد بود و توان پردازش میکرو بهتر است. گذرگاه آدرس(Address Buss): برای شناسایی هر وسیله (حافظه یا I/O ) توسط CPU ، باید آدرس منحصر به فردی به آنها تخصیص داد. هر چه تعداد خطوط آدرس بیشتر باشد میکرو میتواند تعداد مکانهای بیشتری را آدرس دهی کند، در نتیجه میتواند حافظه بزرگتری داشته باشد. .تعداد مکانهایی که CPU می تواند آدرس دهی کند 2 به توان تعداد خطوط ادرس است. مثال تعداد خطوط آدرس=16 فضای آدرس دهیK : 64 = 216
10
2)حافظه: جهت ذخیره کردن برنامه ها و داده ها. دو نوع حافظه داریم:
گذرگاه کنترل(Control Buss): شامل خطوط کنترلی مثل Read ، Write و غیره است. هر چه تعداد خطوط کنترلی بیشتر باشد، میکرو امکانات کنترلی بیشتری در اختیار برنامه نویس قرار میدهد. 2)حافظه: جهت ذخیره کردن برنامه ها و داده ها. دو نوع حافظه داریم: RAM: حاوی اطلاعات غیر دائمی و متغیر است. این حافظه قابل خواندن و نوشتن است. با خاموش شدن میکرو اطلاعات داخل آن پاک میشوند. متغیرهای برنامه در حال اجرا در این بخش ذخیره میشوند. ROM: اطلاعات ثابت و دائمی در اینجا ذخیره میشوند و حاوی برنامه اصلی میکرو است.
11
SRAM RAM EPROM DRAM EEPROM ROM FLASH
12
مثال از فضای حافظه: آدرس از 00H تا FFH از آدرس 000H تا 3FFH
13
FF(11111111) مثال: 00 B0 12 ROM 216*8 5C . FFFEH FFFFH آدرس 0000H
=64K*8=64KB FFFEH FFFFH
14
3). CPU (Central Processing Unit) : مهمترین بخش و مغز میکرو است
-ثباتها (Register): جهت ذخیره موقت اطلاعات مورد استفاده قرار میگیرند. اطلاعات میتواند Data یا آدرس بخشی از حافظه باشد. -ALU( واحد محاسبه و منطق): اعمال حسابی مثل جمع، تفریق، ضرب ،... و اعمال منطقی چون AND، OR وغیره در اینجا انجام میشوند. -PC (شمارنده برنامه): حاوی آدرس دستورالعمل بعدی است که باید اجرا شود. با اجرای هر دستور به مقدار آن اضافه میشود تا به آدرس دستور بعدی که باید اجرا شود اشاره کند. -Decoder (رمزگشا): مثل فرهنگ لغت عمل میکند. جهت تفسیر دستورالعمل فراخوانی شده از حافظه. -IR (ثبات دستورالعمل): دستورالعمل پس از فراخوانی شدن از حافظه در این ثبات قرار میگیرد. -Flag (پرچم): اطلاعاتی در رابطه با نتیجه آخرین عمل منطقی یا محاسباتی در اینجا قرار میگیرد. مثل بیت نقلی، صفر بودن نتیجه عمل و غیره
16
Ports(Digital & analog I/Omodule-4 (ورودی/خروجی):
گذرگاههائی هستند جهت برقراری ارتباط با وسایل جانبی که میخواهیم آنها را کنترل کنیم. 5-يک خط Clock که سرعت پردازنده را تنظيم خواهد کرد.
17
عملیات درونی میکرو: واکشی واکشی دستورالعمل دستورالعمل
گذرگاه کنترل(Control Buss): شامل خطوط کنترلی مثل Read ، Write و غیره است. هر چه تعداد خطوط کنترلی بیشتر باشد، میکرو امکانات کنترلی بیشتری در اختیار برنامه نویس قرار میدهد. عملیات درونی میکرو: نکته: پس از واکشی دستورالعمل ممکن است برای اجرای دستورالعمل به واکشی Data نیز نیاز باشد. بنابر این برای هر دستورالعمل حد اقل سه مرحله واکشی، تجزیه و تحلیل و اجرای دستور وجود دارد که ممکن است واکشی Data نیز به آن اضافه شود. واکشی دستورالعمل واکشی دستورالعمل تجزیه و تحلیل اجرا دستورالعمل
18
عدد دیگری (42H)را از حافظه خوانده و با مقدار Aجمع نماید. فرض کنید:
مثال: فرض کنید میکرو کنترولر دارای باس داده 8 بیتی و باس آدرس 16 بیتی است و می خواهیم دستورات زیر را انجام دهیم: عددی(21H) را از محلی از حافظه خوانده و در یکی از ریجیستر های خود ،بعنوان مثال ریجیستر A قرار دهد. عدد دیگری (42H)را از حافظه خوانده و با مقدار Aجمع نماید. فرض کنید: کد دستور جابجایی یک عدد به ریجیستر A برابر: B0H کد دستور جمع یک عدد با مقدار A : 04H با س 16 خطی فضای حافظه 0000H تاFFFFH اگر فرض کنیم برنامه در محلی از حافظه قرار دارد که از آدرس 0100H شرو ع می شود محتوای حافظه بقرار زیر می شود:
19
کد جابجای یک مقدا ربه ریجیستر B0 :A
آدرس حافظه محتوای آدرس حافظه 0100 کد جابجای یک مقدا ربه ریجیستر B :A 0101 مقدا مورد جابجایی: 0102 کد جمع یک مقدار با A : 0103 مقدار مورد جمع : نحوه اجرای برنامه: 1-آدرس شرو ع برنامه در شمارنده برنامه(PC) قرار می گیرد و CPU آماده اجرا می شود.
20
2- CPU ،آدرس را روی باس آدرس قرار می دهد و سیگنال کنترلی READ را فعال میکند و به این ترتیب بایت مکان 0100 حافظه را درخواست می کند. این موجب می شود محتوای 0100یعنی B0 روی باس داده قرار بگیرد و به CPU منتقل شود. 3-CPU توسط مدار دیکد دستور B0 را دیکد می کند و متوجه می شود که باید بایت بعدی را به ریجیستر A بیاورد. و مشابه مرحله قبل عدد 21 را از حافظه می خواند و در ریجیستر A قرار می دهد. و سپس شمارنده برنامه به ادرس دستورالعمل بعدی 0102 اشاره میکند. پس این آدرس روی باس آدرس قرار میگیرد.
21
4-CPU از مکان 0102 کد 04 را بر می دارد و بعد از دیکد کردن متوجه می شود که باید عددی که در آدرس بعدی(0103) قرار دارد را با A جمع کند. 5-بنابر این CPU مقدار 42 را به درون خود می آورد و همراه مقدار A ، تحویل ALU برای انجام جمع میدهد و نتیجه را گرفته در A قرار می دهد.
22
مزایایavr نسبت به میکرو کنترلر 8051 :
1-تنوع محصولات با قابلیت های و امکانات متفاوت مناسب برای کاربرد های مختلف 2-اجرای یک دستورالعمل در یک سیکل cpu 3-توان مصرفی پایین تر 4-قابلیت عملکرد با ولتا ژ های تغذیه 1.8 تا5.5 In system programming, debugging-5 6-عدم نیاز به programmer مجزا. 7-وجود کامپایلر های مناسب بیسیک و c
24
فصل دوم : بررسی ساختار داخلی میکروکنترلر AVR (ATMEGA16)
Don't fight darkness. Bring the light, and darkness will disappear فصل دوم : بررسی ساختار داخلی میکروکنترلر AVR (ATMEGA16)
26
امکانات ATMEGA 16: حافظه: تایمر /کانتر:
16K حافظه FLASH قابل برنامه ریزی بایت حافظه EEPROM 1K بایت حافظه SRAM داخلی تایمر /کانتر: دو عدد کانتر تایمر 8 بیتی با تقسیم کننده فرکانسی مجزا یک عدد کانتر تایمر 16 بیتی با تقسیم کننده فرکانسی مجزا چهار کانال PWM 4 پورت I/O (8 بیتی) 8 کانال ADC 10 بیتی
27
ارتباط سریال دو سیمه (I2C)
USART مقایسه کننده آنالوگ ارتباط سریال SPI فرکانسهای کاری 0 -16MHz
28
توضیح پایه های ATMEGA16: :vccپایه ولتاژ تغذیه میکرو برای میکروکنترلرATMEGA16L ، 2.7 تا 5.5 ولت و برای ATMEGA16 از 4.5 تا 5.5 ولت است. GND: پایه زمین میکرو PORTA(PA0-PA7): این پورت میتواند به عنوان ورودی آنالوگ برای A/D استفاده شود. میتوان از آن بعنوان 8 پایه I/O دو طرفه استفاده کرد توانایی پذیرش و دادن جریانهای بالا را دارد پایه های این پورت در زمان Reset در امپدانس بالا قرار میگیرد.
29
Port B(PB0-PB7),Port C(PC0-PC7),Port D(PD0-PD7):
این پورتها I/O دو طرفه 8 بیتی هستند و دارای مقاومتهای PULL UP داخلی (قابل انتخاب) هستند. توانایی پذیرش و دادن جریانهای بالا را دارند. در زمان Reset در حالت امپدانس بالا قرار می گیرند. هر کدام از این پورتها وظایف دیگری دارند که بعداً بررسی خواهند شد. RESET: یک پایه ورودی است و اگر حداقل 1.5us صفر شود ،میکرو RESET می شود XTAL1: این پایه ورودی است و به تقویت کننده اسیلاتور متصل می شود و برای اتصال کریستال و یا اسیلاتور به میکرو کاربرد دارد XTAL2: پایه خروجی تقویت کننده اسیلاتور است و برای اتصال کریستال و یا اسیلاتور به میکرو کاربرد دارد
30
AVCC : منبع تغذیه پورت A و مبدل انالوگ به دیجیتال می باشد و باید به VCC متصل شود.
AREF: ولتاژ مرجع آنالوگ برای مبدل آنالوگ به دیجیتال می باشد.
31
ساختار اصلی AVR :
32
ALU : به صورت مستقیم با تمام 32 رجیستر همه منظوره در ارتباط است و تمام عملیاتهای ریاضی در این قسمت در یک سیکل کلاک انجام می شود. رجیستر وضعیت(Status Reegister): این رجیستر اطلاعاتی را در مورد نتایج آخرین عملیات اجرا شده در بر دارد.به کمک این اطلاعات می توان نحوه اجرای برنامه را تغییر داد. بیتI-7(Global interrupt enable): برای فعال سازی وقفه ها این بیت باید یک شود . اگر این بیت صفر شود دگر هیچ وقفه ای فعال نمی شود. این بیت با رخ دادن هر وفقه و ورود به روتین وفقه به صورت سخت افزاری صفر شده و در انتهای روتین مجددا یک می شود
33
بصورت نرم افزاری نیز می توان این بیت را به کمک دستورات اسمبلی SEI,CLI یک یا صفر کرد
#asm(“sei”) #asm(“cli”) بیت :T-6(Bit Copy Storage) از این بیت می توان بعنوان مبدا یا مقصد یک عملیات بیتی استفاده کرد بیت H-5(Half carry flag): این بیت وجود رقم نقلی چهار بایت اول در بعضی از عملیاتهای ریاضی را نشان می دهد. بیت s-4(sign bit) بیت علامت: این بیت همیشه برابر با است
34
بیت V-3 پرچم سر ریز مکمل 2: بیت N-2 پرچم منفی: بیت C-0 پرچم Carry
از این بیت در محاسبات مربوط به مکمل 2 استفاده می شود. بیت N-2 پرچم منفی: نتیجه صفر در عملیاتهای محاسباتی یا منطقی را نشان می دهد. بیت C-0 پرچم Carry وجود نقلی در عملیاتها را نشان می دهد.
35
ریجیستر های همه منظوره:
32 ریجیستر 8 بیتی می باشند که برای اجرای بهینه دستورات avr طراحی شده اند. این ریجستر ها متعلق به فضای حافظه داده ها هستند و در 32 محل اول حافظه SRAM قرار دارند.
36
رجیستر های x,y,z: رجیستر های R26 تا R علاوه بر کاربردهای همه منظوره بصورت اشاره گر های 16 بیتی برای آدرس دهی غیر مستقیم هم بکار می رود. رجیستر اشاره گر پشتهStack pointer : زمانی که برنامه وارد روالها و روتین های وقفه می شود ، از پشته برای نگهداری موقت داده ها نظیر آدرس بازگشت و متغیر های محلی استفاده می گردد. آدرس محل ذخیره این داده ها در پشته ، در اشاره گر پشته قرار می گیرد که یک رجیستر 16 بیتی است.
37
زمانبندی اجرای دستورات :
هر دستور بصورت زیر در یک سیکل cpu اجرا می شود:
38
ساختار حافظه در ATMEGA16 :
1- حافظه FLASH(program memory):این حافظه که 16kb است برای ذخیره کد های برنامه استفاده می شود. نکته :با توجه به اینکه اکثر دستورات avr 16 بیتی هستند ، این فضای حافظه بصورت 8k*16 ساخته می شود.یعنی هر محل حافظه 2 بایتی است. سوال :با توجه به بحث فوق اشاره گر pc که آدرس حافظه را نشان می دهد باید چند بایتی باشد. Flash به دو قسمت تقسیم می شود:1- برنامه کاربردی 2-boot که برای برنامه ریزی avr توسط خودش بکار می رود
39
2-SRAM: از سه قسمت تشکیل شده است * رجیستر های همه منظوره * رجیستر های I/O *حافظه داده داخلی
40
زمانبندی دست یابی به SRAM :
(در دو سیکل) EEPROM-3 برای نگهداری اطلاعات ثابت بکار می رود و 512 بایت ظرفیت دارد.بدلیل احتمال وقوع خرابی در اثر کاهش ولتاژ، نباید کد های برنامه را در این قسمت نوشت.
41
Fuse bit: قسمتی از حافظه flash است که در زمان برنامه ریزی میکرو می توان آنها را برنامه ریزی کرد. بعضی از امکانات جانبی میکرو را فعال یا غیر فعال میکند و یا نحوه استفاده از آنها را مشخص میکند و با پاک کردن میکرو پاک نمی شود. ATMEGA16 ، 2 بایت فیوز بیت دارد که عملکرد آن به شرح زیر است.
42
ادامه جدول فیوز بیت ها
43
اگر منبع ولتاژ کمتر از سطح تعیین شده شود و brown-out detector فعال باشد،Avr در حالت ریست قرار میگیرد و cpu غیر فعال میگردد.
44
توزیع کلاک و منابع آن :( فصل 7 کتاب)
45
انتخاب منابع کلاک بوسیله فیوز بیت های CKSEL بوده و مطابق جدول زیر است
46
نکته: تاخیر start up برای اطمینان از پایداری عملکرد کریستال و همچنین پایداری سطح ولتاژ تغذیه لازم است منبع کلاک پیش فرض: میکرو با مقادیر پیش فرض CKSEL=0001 و SUT=10 طراحی میگردد بنابراین منبع کلاک پیش فرض اسیلاتور RC داخلی 1MHz با بیشترین زمان تاخیر برای شروع عملکرد می باشد.
53
اسیلاتور تایمر/کانتر:
اسیلاتور تایمر/کانتر: در صورتی که میکرو کنترلر avr پایه های مجزایی برای اسیلاتور تایمر / کانتر (TOSC2,TOSC1) داشته باشد ، کریستال ساعتی بطور مستقیم به این پایه ها وصل می شود و در این صورت نیازی به خازن خارجی هم نخواهد بود.
54
منابع Reset:( فصل 11 کتاب)
56
Watchdog reset-4: منبع کلاک این تایمر، از یک اسیلاتور داخلی جداگانه که با فرکانس 1MHz کار میکند ، تامین می شود. اگر cpu در حلقه ای بطور مداوم بماند و یا در برنامه hang کند پس از مدت زمانی که با تنظیم این تایمر مشخص میشود ،reset می شود. این زمان بصورتk,… 16k,32k,64k,128 سیکل تایمر مشخص میشود و البته کمی وابسته به ولتاژ تغذیه است. یک سیکل برابر: مثال:
57
مرور زبان c و توابع خواص codevisionAVR (فصل 6 کتاب)
قسمت تعاریف کلی شامل فایلهای سر آمد(Header file)،تعاریف متغیر های سراسری و ثابت ها است.
59
کلمات رزرو شده زبان :c
60
مثال ساده:
66
تمرین :فرض کنید محل ذخیره آرایه float a[5]; از آدرس 0x0100 شروع می شود
تمرین :فرض کنید محل ذخیره آرایه float a[5]; از آدرس 0x0100 شروع می شود.تعیین کنید تا چه آدرسی به آرایه فوق اختصاص می یابد.(میکرو AVR ATMEGA 16 است)
67
C(0,0)=1 C(0,1)=2 C(0,2)=3 C(1.0)=4 C(1,1)=5 C(1,2)=6
آرایه های دو بعدی: یعنی آرایه ای از آرایه های یک بعدی مثال: فرض کنید دو آرایه یک بعدی بشکل زیر داریم: Int a[3]={1,2,3} int b[3]={4,5,6} حال می خواهیم انها را بصورت یک آرایه دو بعدی نمایش دهیم: int c[2][3]={{1,2,3},{4,5,6}} C(0,0)=1 C(0,1)=2 C(0,2)=3 C(1.0)=4 C(1,1)=5 C(1,2)=6
68
روش تعریف آرایه های دو بعدی:
] تعداد ستون ][ تعداد سطر [ اسم آرایه نوع متغیرها
70
Main() { Int i=0; HERE: i++; If (i<10) Goto HERE; Printf(“THE MAX value of i is:%d “,i); Getch(); }
71
مثال:
79
تابعی بنویسید که عددی را از ورودی بگیرد و توان 3 انرا حساب و چاب نماید
80
مثال 2: تابعی بنویسید که دو عدد را از ورودی بگیرد و بزرگترین آنها را تعیین و چاب نماید
81
نحوه دسترسی به پورتهای I/O:
رجیستر داده(خروجی) پورت: PORTx رجیستر جهت پورت: DDRx رجیسترداده ورودی پورت: PINx دسترسی بیتی به پورتها: شماره بیت اسم رجیسترPORTA : DDRD.6=1 M=PINA.1 اگر DDRx= پایه پورت بصورت ورودی است اگر DDRx= پایه پورت بصورت خروجی است اگر بخواهیم پایه pull up باشد توسط PORTx آنرا یک میکنیم اگر بخواهیم پایه امپدانس بالا باشد توسط PORTx آنرا صفر میکنیم
82
/*****************************************************
Project : LED Flasher on port D Author : R_Abolhasani Company :Tehran east university Chip type : ATmega16 Clock frequency : MHz *****************************************************/ #include<mega16.h> #include<delay.h> int i; void main (void) { DDRD = 0xFF;
83
while(1) { for(i = 1; i <= 128; i = i*2) PORTD = i; delay_ms(100); } for(i = 128; i > 1; i = i/2)
85
/*****************************
Project : PORT status Author : R_AB Company : Chip type : ATmega16 Clock frequency : MHz ****************************/ #include<mega16.h> #include<delay.h> int i; void main (void) { DDRD = 0xFF; DDRB=0x00; PORTB=0x00; while(1) i=PINB; // delay_ms(100); PORTD=i; } مثال: برنامه ای بنویسید که عددی را از پورت B میکرو بخواند و بر روی پورت D آنرا نمایش دهد.
86
/*******************************
Project : equipment status Author : R_ABOLHASANI Company : Chip type : ATmega16 Clock frequency : MHz *********************************/ #include<mega16.h> #include<delay.h> #define xtal int i; void main (void) { DDRD = 0xFF; DDRB=0x00; PORTB=0x00; while(1) i=PINB; PORTD=i; if (PINB.0==0) DDRB.0=1; PORTB.0=0; مثال: برنامه ای بنویسید که روشن (High) و خاموش (low) بودن 8 دستگاه را که به پورت B میکرو متصل اند چک کند .و هر ثانیه وضعیت آنها را روی پورت D (که به LED متصل است ) نشان دهد.در صورت خاموش بودن هر دستگاه پین مربوط به آنرا در پورت Bغیر فعال (LOW) کند(ابتدا باید بصورت خروجی تعریف شود).
87
if (PINB.6==0) if (PINB.1==0) { DDRB.1=1; PORTB.1=0; } if (PINB.2==0)
delay_ms(1);
88
تمرین 1: برنامه ای بنویسید که مکمل پورت A را بر روی پورت B نمایش دهد
تمرین 1: برنامه ای بنویسید که مکمل پورت A را بر روی پورت B نمایش دهد. تمرین 2: برنامه ای بنویسید که مقادیر پورتهای A,B را با هم مقایسه کند و در صورتی که مقدار Aبزرگتر بود آنرا بر روی پورت D بفرستد و حاصل تفریق مقادیر دو پورت، را بر روی پورت C نمایش دهد. و اگرمقدار B بزرگتر بود آنرا روی پورت C و حاصل تفریق آنها را روی پورت D نمایش دهد.
91
#asm “SEI” دستور فعال کردن وقفه ها:
92
مثال فعال سازی وقفه خارجی صفر : GICR=0b01000000;
GICR:general interrupt control register مثال فعال سازی وقفه خارجی صفر : GICR=0b ;
93
نوع تریگر شدن وقفه ها: 1- برای وقفه های صفر و یک(INT0,INT1) با استفاده از رجیستر MCUCR تعیین می شود:
94
2- نوع تریگر شدن وقفه 2 (INT2) با استفاده از ست کردن بیت 6 رجیستر MCUCSR تعیین میشود.
95
شماره بردار وقفه بر اساس جدول بردار وقفه بدست می آید و می توان به جای ان از اسم بردار وقفه نیز استفاده کرد :مثال :شماره وقفه صفر 2 است یا می توان آنرا بصورت EXT_INT0 نوشت.
96
مثال: برنامه ای بنویسد که یک LED متصل به پورت B را در هر ثانیه یک بار روشن و خاموش کند و در صورت فعال شدن وقفه صفر همین کار را برای LED متصل به پورت A یک بار انجام دهد .
98
تمرین :یک اشکار ساز عبور از صفر برای یک ولتاژ ورودی آنالوگ طراحی کنید
تمرین :یک اشکار ساز عبور از صفر برای یک ولتاژ ورودی آنالوگ طراحی کنید . زمانی که سیگنال ورودی از صفر عبور میکند وقفه ای فعال شود و در آن وقفه پین صفر از پورت A به مدت چند ثانیه یک شود.
99
توابع کتابخانه ای: 1- مقایسه char ها ctype.h
2- ارتباط سریال و lcd stdio.h مثال توابع :getcar( ) ,puts( ),sprintf( ); 3- روابط و معادلات ریاضی math.h // // sin( ),cos( ) 4- توابع رشته ی string.h 5- تاخیر میلی یا میکرو ثانیه delay.h مثال توابع: delay_ms( ),delay_us( ) 6-راه اندازی و استفاده از lcd lcd.h مثل توابع :lcd_init( ),lcd_puts( )
100
روشهای برنامه ریزی میکروAVR :
1- موازی:با استفاده از پروگرامر های رایج 2- :JTAGبا استفاده از رابط JTAG 3-Self programming 4-ISP(In system programming)
101
مدار عملی برای پروگرام کردن میکرو با روش ISP
102
اگر از پین های ISP برای کاربردهای دیگر I/O استفاده شود باید موارد زیر رعایت شود:
105
حداقل مدار جهت راه اندازی میکرو:
107
پایه های LCD 2*16:
114
نحوه اتصال LCD به میکرو:
1- اتصال چهار سیمه:تنها 4 عدد از خطوط دیتا ی LCD به میکرو متصل میشود(P7-P4). و بقیه با یک مقاومت به زمین متصل می شوند. 2- اتصال 8 سیمه: از تمامی 8 خط دیتا استفاده می شود. با توجه به اینکه در روش اول تعداد کمتری پین مصرف می شود، بیشتر از این روش استفاده می شود. vcc
115
RS (pin4)------------------------ ------ bit 0
نحوه مناسب اتصال lcdبه میکرو جهت استفاده از کتابخانه lcd.h کامپایلر codevision : [LCD] [AVR Port(A ,B,C,D] RS (pin4) bit 0 RD(R/W) (pin 5) bit 1 EN (pin 6) bit 2 DB4 (pin 11) bit 4 DB5 (pin 12) bit 5 DB6 (pin 13) bit 6 DB7 (pin 14) bit 7 اگر اتصال LCDبر اساس روش فوق صورت گیرد برای استفاده از LCD تنها لازم است آدرس پورتی را که LCD به آن وصل است بصورت زیر درقسمت تعاریف برنامه بیاوریم: #asm .equ __lcd_port=0x1B ;PORTA #endasm برای پورت B این آدرس برابر 0X18 ، برای پورت C برابر 0X15 و پورت D برابر 0X12 است
116
توابع کتابخانه ای lcd.h کامپایلر codevision برای راحتی کار با lcd توابعی را در کتابخانه lcd.h ارائه کرده که عمل نوشتن کارکترها بر روی lcd را بسیار آسان می کنند. این توابع به شرح ذیل می باشند: Unsigned char lcd_init(unsigned char lcd_columms): این تابع lcd را مقدار دهی اولیه می کند و برای شروع کار با lcd حتما باید این عمل انجام شود،با فراخوانی این تابع : 1-صفحه نمایش lcd پاک می شود 2- مکان نما حذف می گردد و lcd برای نوشتن کارکتر در محل سطر و ستون صفر آماده می شود. تعداد ستونهای lcd مورد استفاده(مثلاً 16 ) باید در این تابع مشخص گردد. اگر lcd شناسایی شود تابع یک و در غیر این صورت تابع مقدار صفر را بر می گرداند. Void lcd_clear(void): این تابع صفحه نمایش lcd را پاک می کند و برای چاپ کارکتر در محل سطر و ستون صفر آماده می شود.
117
Void lcd_gotoxy(unsigned char x,unsigned char y):
(15,0) (14,0) (13,0) (12,0) (11,0) (10,0) (9,0) (8,0) (7,0) 6,0) (5,0) 4,0) (3,0) (2,0) (1,0) (0,0) (15,1) (14,1) (13,1) (12,1) (11,1) (10,1) (9,1) (8,1) (7,1) 6,1) (5,1) 4,1) (3,1) (2,1) (1,1) (0,1) Void lcd_putchar(char c): این تابع کاراکتر c را بر روی موقعیت فعلی انتخاب شده بر روی lcd نمایش می دهد. Void lcd_puts(char *str): این تابع رشته str واقع در حافظه SRAM را با شروع از موقعیت فعلی ، بر روی LCD نمایش می دهد.
118
Void lcd_putsf(char flash *str):
این تابع رشته str واقع در حافظه flash را با شروع از موقعیت فعلی ، بر روی lcd می نویسد. نکته: تابع sprintf از کتابخانه stdio.h رشته قالب بندی شده را در داخل متغیر str قرار می دهد . و با استفاده از آن و تابع lcd_puts() می توان str را روی lcd نمایش داد.فرمت sprintf بصورت زیر است: Void sprintf(char *str,charflash *fmstr[,arg1.arg2,…]: مثال:1 (فرمت آرگومانها در صفحه 150 کتاب آمده است) Char str1[5]; Sprintf(str1,”%05u”,321) نتیجه: str1=00321 مثال 2: Char str[10]; Sprintf(str,"%02u:%02u:%02u",2,1,0); این دستور رشته(زمان) "02:01:00" را در متغیر str قرار می دهد و با کمک دستور Lcd_puts(str); می توانیم رشته مذکور را بر روی lcd نمایش دهیم.
119
مثال راه اندازی lcd: #include <stdlib.h> #include <lcd.h>
#asm .equ __lcd_port=0x1B ;PORTA #endasm void main(void) { lcd_init(16); lcd_gotoxy(0,0); lcd_putsf("we are going to learn avr mic!"); while(1); } مثال راه اندازی lcd:
120
تمرین : برنامه مربوط به آشکار ساز عبور از صفر را به گونه ای تغییر دهید که زمانی که سیگنال ورودی از صفر عبور میکند بر روی LCD اعلام شود.
121
تایمر /کانتر ها در میکرو ATMEGA16 دو تایمر /کانتر 8 بیتی و یک تایمر /کانتر 16 بیتی وجود داردکه از لحاظ مد های عملکردی شبیه یکدیگر هستند. تایمر 0و بیتی تایمر بیتی رجیسترهای اصلی برای هر یک از تایمر ها: 1-TCNTn(timer counter register) محتوای تایمر کانتر شماره n (برای تایمر کانتر 16 بیتی 1 این رجیستر نیز 16 بیتی است: TCNT1H,TCNT1L
122
2-OCRn(output compare register)
محتوای این رجیستر با محتوای رجیستر TCNTn مقایسه میشود و از این مقایسه در مد های مختلف عملکرد استفاده های متفاوت می شود. علاوه بر دو رجیستر فوق ، بیت های کنترلی(waveform generation mode) WGMn برای انتخاب مد عملکرد هر تایمر و بیتهای کنترل (output cmpare mode) COMn برای تنظیمات اضافی هر مد کار برد دارد این بیت های کنترلی به شکل زیر در رجیستر TCCR قرار دارند
123
مد های مختلف عملکرد تایمر ها:
1- مد نرمال: در این حالت تایمر بصورت افزایشی کا می کند و زمانی که محتوای TCNTn به حداکثر مقدار خود 0xFF در تایمر 8 بیتی و 0xFFFF در تایمر 16 بیتی برسد پرچم TOVn(timer over flow) را یک میکند .و در صورت فعال بودن وقفه سرریز تایمر، روتین وقفه اجرا شده و محتوای TCNTn صفر می شود.
124
نحوه انتخاب CLOCK بر اساس بیت های کنترلی:
125
مثال تولید موج مربعی با T=512us بر روی پورت A
#include<mega16.h> #define xtal void delay() { //TCNT0=0x00; TCCR0=0B ; // Timer Clock = CLK/8 while(!TIFR&0x01); // Wait Until Overflow //TIFR=TIFR|0B ; // Clear TOV0 TCCR0=0x00; // Stop Timer0 } void main() DDRA=0xFF; PORTA=0x00; TCCR0=0x00; TCNT0=0x00; while(1){ PORTA.0=1; delay(); PORTA.0=0; مثال تولید موج مربعی با T=512us بر روی پورت A
126
برای اینکه بتوانیم از سر ریز شدن تایمر برای ایجاد وقفه استفاده کنیم، باید بیت هایTOIE0 یا TOIE2 در رجیستر TIMSK(timer interrupt mask reg) را یک کنیم. وقفه مربوط به تایمر 0برابر 10 یا TIM0_OVF است
127
مثال: حل مسئله قبل با استفاده از وقفه:
#include<mega16.h> #define xtal Interrupt [TIM0_OVF] void puls1(void) { PORTA^=0XFF; TCNT0=0X00; } void main() DDRA=0xFF; PORTA=0x00; TCCR0=0x02; TIMSK=0x01; #asm (“sei”) while(1); مثال: حل مسئله قبل با استفاده از وقفه:
128
2- مد CTC(clear timer on compare match):
در این مد زمانی که محتوای تایمر با مقدار رجیسترOCR برابر شود ، محتوای تایمر صفر می شود(TCNT) در این مد OCR حداکثر مقدار تایمر را مشخص می کند. زمانی که محتوای تایمر برابر OCR شد ،پرچم OCF(OUTPUT COMPARE) یک می گردد و روتین وقفه اجرا می شود. در این حالت پایه OC(OUTPUT COMPARE) را بگونه ای می توان تنظیم کرد تا در زمان مقایسه تغییر وضعیت دهد و یک موج مربعی با فرکانس زیر تولید کند: N : تقسیم فرکانس Fclk_I/O : فرکانس کلاک اصلی
129
برای انتخاب وضعیت پین OC باید بیت های کنترلی COM1,COM0 از رجیستر TCCR ست شوند.
132
مثال ایجاد موج(5KHz) T=200us بر روی پورت OC0 (OC0=PORTB.3) :
#include<mega16.h> #define xtal void main() { DDRB=0xFF; PORTB=0x00; TCNT0=0x00; TCCR0=0B ; //toggle OC0 on compare match OCR0=0x63; //OCR0=99 while(1); }
133
مد fast PWM(fast pulse width modulation):
موج خروجی در پایه Ocn تولید می شود این پایه قبلاً باید به صورت خروجی تعریف شده باشد در این مد محتوای تایمر(TCNTn) از صفر شروع به افزایش کرده و پس از رسیدن به حداکثر مقدار خود، دوباره صفر می شود و همزمان OCRn تغییر وضعیت می دهد محتوای تایمر بطور مداوم با مقدار OCRn مقایسه می شود و در صورت برابر بودن، پایه Ocn تغییر وضعیت می دهد. زمانی که تایمر به حداکثر مقدار خود رسید پرچم سر ریز تایمر (TOVn) یک می شود و اگر این وقفه قبلاً فعال شده باشد ، روتین مربوط به آن اجرا میشود و می توان از آن برای تغییر مقدار OCR استفاده کرد.
134
فرکانس موج PWM تولید شده در پایه خروجی Ocn از رابطه زیر بدست می آید:
135
در این مد عملکرد بیت های COM01,COM00 بصورت زیر می باشد:
شکل موج خروجی می تواند به صورتInvert یا non-invert تنظیم شود
136
مثال: برنامه ای بنویسید که با استفاده تایمر شماره صفر یک موج PWM با فر کانس 5KHz با duty cycle=%40 ایجاد کند.(فرض کنید کلاک سیستم 8MHz باشد). حل مسئله: با انتخاب N=8 کلاک تایمر برابر 1MHz می شود )TCNT=(مقدار ذخیره شده در تایمر X=256-TCNT0=200 TCNT0=56 لحظه تغییر وضعیت OC0: *%40+56=136 محتوایOCR=0X (136)
137
#include <mega16.h>
#define xtal interrupt [TIM0_OVF] PWM(void) { TCNT0=0x38; } void main(void) PORTB=0x00; DDRB=0x08; // Mode: Fast PWM top=FFh // OC0 output: Non-Inverted PWM TCCR0=0x6A; //0x7A for inverted PWM OCR0=0x88; //OCR0 = 136 // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x01; // Global enable interrupts #asm("sei") while (1);
139
:Phase Correct PWM در این مد مقدار TCNT از صفر شروع می کند و زمانی که به حداکثر مقدار خود رسید شروع به کاهش میکند محتوای تایمر بصورت مداوم با مقدار OCR مقایسه می شود و در صورت برابری در هر یک از حالات صعودی یا نزولی پایه خروجی OC تغییر وضعیت می دهد
142
مبدل آنالوگ به دیجیتال(analog to digital conversion):
برای دریافت سیگنال های آنالوگ بکار میرود: ساختار کلی یک سیستم جمع اوری داده
143
DAQ hardware(ADC): تبدیل سیگنال آنالوگ را به دیجیتال بر عهده دارد.
اجزای سیستم های جمع آوری اطلاعات: : transducersمبدل ها(سنسور ها) نظیر سنسورهای دما،سرعت ، فشار، شدت نور و... Signal conditioning: آماده سازی سگنال آنالوگ نظیر تقویت ، حذف نویز را انجام می دهد. DAQ hardware(ADC): تبدیل سیگنال آنالوگ را به دیجیتال بر عهده دارد. ADC
144
پارامتر های مهم تبدیل انالوگ به دیجیتال:
1- Sampling rate(نرخ نمونه برداری): این پارامتر نشان دهنده تعداد نمونه برداری در واحد زمان است. هر اندازه این نرخ بیشتر باشد تعداد نقاط بیشتری در واحد زمان نمونه برداری می شود و بنابراین سگنال دیجیتال شباهت بیشتری به سیگنال اصلی دارد نرخ نمونه برداری مناسب
145
نرخ نمونه برداری کم تئوری نایکویست: نرخ نمونه برداری ، حداقل باید دو برابر فرکانس سیگنال آنالوگ باشد.( در عمل 5 تا 10 برابر انتخاب می شود)
146
تعداد تقسیمات برابر دو به توان تعداد بیت ها است.
2- کمترین و بیشترین مقدار سیگنال انالوگ ورودی که توسط ADC قابل تبدیل است.(مثال 0-5) 3- دقت (Resolution): تعداد بیت هایی که یک ADC برای نمایش سیگنال انالوگ استفاده میکند را دقت گویند. هر اندازه دقت بیشتر باشد رنج سیگنال ورودی به بخشهای کوچکتری تقسیم می شود. تعداد تقسیمات برابر دو به توان تعداد بیت ها است. ADC سه بیتی
147
4- Multiplexing: تکنیکی برای دریافت چندین سیگنال انالوگ با استفاده از یک ADC است.ADC
از یک کانال نمونه برداری میکند و سپس به کانال دیگر سوئیچ میکند و اینکار ادامه پیدا میکند تا تمامی کانال ها نمونه برداری شود چون نرخ نمونه برداری ADC ثابت است، نرخ نمونه بر داری هر کانال برابر نرخ نمونه برداری ADC تقسیم بر تعداد کانالها می شود مثال: اگر نرخ نمونه برداری ADC=1MS/s باشد و تعداد کانال 10 عدد باشد، نرخ نمونه بر داری هر کانال برابر 100kS/s می شود.
148
خصوصیات مبدل آنالوگ به دیجیتال در ATMEGA16:
دقت 10 بیت زمان تبدیل 65 تا 125 میکرو ثانیه 8 کانال ورودی تک پایه مولتی پلکس شده 7 کانال ورودی دیفرانسیلی 2 کانال ورودی دیفرانسیلی با بهره قابل انتخاب 10, 200 رنج ولتاژ ورودی ADC از صفر تا Vcc ولتاژ مرجع قابل انتخاب (Avcc,VREF,2.56) امکان شروع تبدیل با استفاده از منابع مختلف وقفه امکان ایجاد وقفه در پایان تبدیل مد sleep برای کاهش نویزADC
149
ورودی های ADC0,ADC1 و ADC2,ADC3 ورودی های تفاضلی با بهره قابل تنظیم هستند.
پایه تغذیه انالوگ AVCC نباید بیشتر از Vcc±0.3 باشد ولتاژ مرجع می تواند بصورت داخلی برابر و یا بصورت خارجی به پایه VREF اعمال شود. کمترین مقدار ورودی 0 و بیشترین مقدار آن برابرVREF است
151
نتیجه تبدیل ADC: ریجستر های مهم ADC: ADMUX-1
154
نحوه انتخاب ولتاژ مرجع:
157
بیت 3 بیت 4 بیت 5
158
بیت 6 بیت 7
160
ADTS[2-0] :اگر بیت ADATE در رجیستر ADCSRA یک شود ، مقادیر این بیت ها منبع تریگر ADC را مشخص می کنند.
162
فرکانس نمونه برداری: برای رسیدن به ماکزیمم دقت، فرکامس نمونه برداری ADC باید بین 50KHzتا 200KHz باشد.و درنتیجه حداکثر فرکانس سیگنال آنالوگ ورودی 15khz است.
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.