فصل اول
بکارگیری کامپیوتر در طراحی و ساخت
مقدمه ای بر کاربرد کامپیوتر در علوم مهندسی
دومین انقلاب صنعتی در قرن حاضر با ظهور کامپیوتر بوجود آمده و قابلیت پیشرفت انسان را افزایش داده است . در نتیجه بکارگیری کامپیوتر بوده که سیستم های کنترل عددی بوجود آمده اند و اساسا طراحی و تولید به کمک کامپیوتر با ظهور کنترل عددی مطرح شده که مبنا پایه همه آنها استفاده از کامپیوتر بوده است.
در واقع کاربرد کامپیوتر در تولید و صنعت یکی از مهمترین پیشرفت های بشر در قرن حاضر تلقی می شود که جنبه های مختلف این کاربرد درتاثیر زیاد آن در وضعیت کنونی صنعت بر هیچ کسی پوشیده نیست.
انواع سیستم های کنترل کامپیوتری
سیستم های کنترل عددی کامپیوتری
عرض کالاهای متنوع و تنوع در تولید محصولات و همچنین رقابت در دستیابی به بازار سرعت تولید و ارزانی کالا کنترل و کیفیت نیازی است که یک کنترل کننده و تولید کننده را وادار به دستیابی به تکنولوژی برتر و سیستم های تولیدی مناسب با این تکنولوژی می کند.
ماشین های کنترل عددی اغلب برای تولید قطعات با تعداد کم و یا متوسط و یا دارای شکلهای پیچیده بکار می رود.
ارسال کلیه قوانین و دستورات به مرکز کنترل ماشین برای انجام عملیات و حرکت در قالب کدها و استانداردهای خاص از طریق برنامه ماشین کاری قطعه صورت می گیرد.
فصل دوم
معرفی ماشین های کنترل عددی
تعریف کنترل عددی
کنترل عددی را می توان به صورت یک نوع اتوماسیون با برنامه ریزی تعریف نمود که در آن فرایند توسط اعداد حروف و سنبل ها کنترل می شود. اعداد ، حروف و علائم که بطور منطقی برای هدایت یک ماشین خاص مورد استفاده قرار می گیرد برنامه نامیده می شود.
در برنامه اعداد بخشی از دستورات می باشند که آن برنامه برای قطعه خاصی در نظر گرفته شده است.
وقتی که شکل قطعه عوض شود برنامه نیز تغییر می کند این توانایی تغییر برنامه برای هر قطعه به خاصیت انعطاف پذیری بسیار خوبی را میدهد چون تغییر برنامه به مراتب راحت تر از تغییر ابزار و لوازم تولید می باشد. این دلیل باعث رشد روز افزون بکارگیری سیستم های کنترل عددی گردیده است. کنترل عددی در بخش ها و صنایع مختلف بکار گرفته می شود که عبارتند از :
- صنایع هوایی و نظامی
- صنایع فلز تراشی (شکل دهی فلزات)
- صنایع الکترونیک
- صنایع مونتاژ و بسته بندی
برنامه نویسی ماشین های کنترل عددی کامپیوتری
- صنایع ابزار سازی
- صنایع چوب
- صنایع نساجی
- کنترل کیفیت و بازرسی
لازم به ذکر است که هر یک از اعمال و صنایع فوق خود نیز به انواع و روشهای مختلفی تقسیم بندی می شوند که در تمام آنها بکارگیری کنترل عددی توسعه یافته است. برای نمونه در فرایند شکل دهی فلزات ماشین کاری با استفاده از دستگاه هایی انجام می گیرد که برای صورت کنترل عددی کامپیوتری ساخته می شوند. مانند انواع ماشین های CNC زیر :
- ماشین فرز
- ماشین تراش
- ماشین بورینگ
- ماشین سنگ زنی
- ماشین اسپارک
بطوری که جای به خصوص خود را در ماشین کاری پیدا کرده است و امروزه دامنه صنعت شکل و همه به جایی رسیده است که در اغلب ماشین های ابزار یک سیستم کنترل عددی استفاده می شود و به صورت کاملا خودکار ساخته می شوند.
ماشین های کنترل عددی که اصطلاحا آنها را NC و یا CNC می نامند ماشین های اتوماتیکی هستند که توسط سیستم کنترل و یا کامپیوتر کنترل می شود این ماشین طبق مراحل و مسیر پیش بینی شده به اندازه مورد نیاز و با سرعت و پیشروی مشخص توسط یک سری دستورات در قالب حروف و ارقام کنترل می شوند.
در حقیقت به کمک سیستم CNC حرکت اصلی و حرکت پیشروی و جابجایی سریع که در ماشین های سنتی معمولا به روش دستی انجام می گیرد در ماشین های CNC به صورت اتوماتیک و با یک برنامه و سری دستورات از قبل طراحی شده انجام می گیرد و قطعه کار و ابزار را در موقعیت سایش قرار گرفته و عمل لایه برداری انجام می شود.
میکرو کنترلر چیست ؟
میکروکنترلر در واقع یک کامپیوتر تک تراشه ارزان قیمت می باشد.
تک تراشه بدین معنی است که کل سیستم کامپیوتر در داخل یک تکه نازک سیلیکانی در درون یک محفظه پلاستیکی مدار مجتمع قرار گرفته است . میکروکنترلر دارای خصوصیاتی مشابه به خصوصیات کامپیوتر شخصی استاندارد می باشد. میکروکنترلر محتوی یک CPU ، RAM، ROM، خطوط I/Q ، درگاه های سریال و موازی ، زمان سنج ها و بعضی اوقات وسایل جانبی داخلی دیگری نظیر مبدل آنالوگ به دیجیتال و مبدل دیجیتال به آنالوگ می باشد. به هر حال خصیصه اصلی میکروکنترلر توانایی بارگذاری ، توانایی بارگذاری ، ذخیره و اجرای برنامه است.
چرا از میکروکنترلر استفاده می کنیم ؟
چون میکروکنترلرها کامپیوترهای تک تراشه ای ارزان قیمت هستند به سادگی می توان آنها را در مدارات الکترونیکی بزرگتر قرار داد. توانایی ذخیره سازی و اجرای برنامه های منحصر به فرد میکروکنترلرها را بسیار قابل انعطاف ساخته است.
به عنوان مثال یک فرد می تواند میکروکنترلر را طوری برنامه ریزی کند که تصمیم گیری نماید و براساس شرایط و رویدادها عملیاتی انجام دهد. قابلیت انجام عملیات ریاضی و منطقی به میکروکنترلر اجازه می دهد رفتار مدارات الکترونیکی و سیستم های منطقی را تقلید کند.
برنامه ها همچنین می توانند موجب شوند میکروکنترلر مانند یک شبکه عصبی و یا مشابه یک کنترل کننده با منطق فازی رفتار کند. میکروکنترلرها در لوازم خانگی به کار برده می شوند. و وظیفه هوش این دستگاه های هوشیار را برعهده دارند.
موتورهای پله ای در 3 مدل مختلف در دسترس هستند که عبارتند از :
1- موتورهایی با آهنربای دائمی
2- موتورهایی با مقاومت مغناطیسی متغیر
3- موتورهای پیوندی
شکل 12-11 نمای برش خورده یک موتور پله ای با آهنربای دائم را نمایش می دهد.
موارد استفاده موتورهای پله ای
این موتورها در گستره وسیعی از کاربردهای صنعتی به ویژه در صنعت ساخت وسایل جانبی کامپیوتر ماشین های اداری ، کنترل حرکت و علم رباتیک مورد استفاده قرار می گیرد.
مورد استفاده کاملی از موتورهای پله ای در شکل 13-11 به صورت فهرست شده ارائه داده شده است.
تذکرهای مهم برای انتخاب موتور پله ای مناسب
1- سرعت تعویض پله ها
2- گشتاور
3- سکون
4- زاویه تعویض پله ها
5- زمان شتاب گرفتن موتور به میلی ثانیه
6- زمان کند شدن حرکت موتور به میلی ثانیه
7- نوع تحریک
8- اندازه و وزن
موتورهای پله ای خطی
موتورهای پله ای خطی به جای اینکه به شکل گرد ساخته شوند به صورت تخت ساخته می شوند و حرکت این نوع موتورها نیز به جای حرکت دورانی و چرخشی حرکتی افقی و مستقیم می باشد.
قسمت های اصلی یک موتور پله ای خطی در شکل 14-11 نمایش داده شده اند . همان طور که در شکل مشخص شده است این نوع موتورها از یک صفحه فلزی صاف به اضافه قسمتی که نیروی لازم برای حرکت را وارد می کند ساخته شده اند.
صفحه فلزی صاف قسمتی از این موتور است که محکم در جای خود ثابت شده است و دارای دندانه های روی سطح خود می باشد. این دندانه ها در هنگامی که موتور ایستاده است با دندانه های روی قطبهای Forcer درگیر می شوند.
Forcer یا قسمت وارد کننده نیرو دارای چهار قطب مجزا است که روی هم هرکدام از این قطب ها سه دندانه وجود دارد و از یک غلتک مکانیکی برای حرکت کردن بر روی صفحه فلزی و همچنین بر روی شکاف هوایی بین آنها استفاده می کند.
میدان مغناطیسی قسمت وارد کننده نیرو با گذراندن و تغییر دادن جریان از داخل آن تغییر می کند. هنگامی که جهت جریان گذرنده از این قسمت معکوس می شود جهت حرکت آن نیز عکس خواهد شد.
دقت این موتورها 500/12 پله در اینچ است که درجه دقت بسیار بالایی دارد.
این شکل قسمت Forcer را در حالی که بر روی صفحه صاف یا plater قرار گرفته نشان می دهد. در صنعت از موتورهای پله ای خطی برای کاربردهای خاص که فقط حرکت در راستای افق و در جهت مستقیم مد نظر باشد استفاده می گردد.
شکل 15-11 یکی از کاربردهای این نوع موتور را نشان می دهد که موتور وظیفه حرکت دادن ویفرسیلیکون و رساندن آن به زیر پرتوی لیزر را برعهده دارد.
مختصری راجع به AVR
زبانهای سطح بالا یا همان HLL به سرعت در حال تبدیل شدن به زبان برنامه نویسی استاندارد برای میکروکنترلرها حتی برای میکروهای 8 بیتی کوچک هستند. زبان برنامه نویسی BASIC و C بیشترین استفاده را در برنامه نویسی میکروها دارند ولی در اکثر کاربردها کدهای بیشتری را نسبت به زبان برنامه نویسی اسمبلی تولید می کنند.
ATMEL ایجاد تحولی در معماری جهت کاهش کد به مقدار مینیمم را درک کرد که نتیجه این تحول میکروکنترلرهای AVR هستند که علاوه بر کاهش و بهینه سازی مقدار کدها به طور واقع عملیات را تنها در یک کلاک سیکل توسط معماری REDUCED RISC انجام می دهند و از 32 رجیستر همه منظوره استفاده می کنند که باعث شده 4 تا 12 بار سریع تر از میکروهای مورد استفاده کنونی باشند.
تکنولوژی حافظه کم مصرف غیر فرار شرکت ATMEL برای برنامه ریزی AVR ها مورد استفاده قرار گرفته است در نتیجه حافظه های FLASH و EEPROM در داخل مدار قابل برنامه ریزی هستند. میکروکنترلرهای اولیه AVR دارای 1،2و 8 کیلوبایت حافظه FLASH و به صورت کلمات 16 بیتی سازمان دهی شده بودند.
AVR ها به عنوان میکروهای RISC با دستورات فراوان طراحی شده اند که باعث می شود حجم کد تولید شده کم و سرعت بالاتری بدست آید.
عملیات تک سیکل
با انجام تک سیکل دستورات کلاک اسیلاتور با کلاک داخلی سیستم یکی می شود. هیچ تقسیم کننده ای در داخل AVR قرار ندارد که ایجاد اختلاف فاز کلاک کند. اکثر میکروها کلاک اسیلاتور به سیستم را با نسبت 1:4 یا 1:12 تقسیم می کنند که خود باعث کاهش سرعت می شود.
بنابراین AVR ها 4 تا 12 بار سریع تر و مصرف آنها نیز 12-4 بار نسبت به میکروکنترلرهای مصرفی کنونی کمتر است زیرا در تکنولوژی CMOS استفاده شده در میکروهای AVR مصرف توان سطح منطقی متناسب با فرکانس است.
نمودار زیر افزایش MIPS را به علت انجام عملیات تک سیکل AVR در مقایسه با نسبت های 1:4و 1:12 در دیگر میکروها را نشان میدهد.
طراحی برای زبانهای BASIC و C
زبانهای BASIC و Cبیشترین استفاده را در دنیای امروز بعنوان زبانهای HLL دارند. تا امروزه معماری بیشتر میکروها برای زبان اسمبلی طراحی شده و کمتر از زبانهای HLL حمایت کرده اند.
هدف ATMEL طراحی معماری بود که هم برای زبان اسمبلی و هم زبانهای HLL مفید باشد. به طور مثال در زبانهای C و BASIC می توان یک متغیر محلی به جای متغیر سراسری در داخل زیر برنامه تعریف کرد در این صورت فقط در زمان اجرای زیر برنامه مکانی از حافظه RAM برای متغیر اشغال می شود در صورتی که اگر متغیری بعنوان سراسری تعریف گردد در تمام وقت مکانی از حافظه FLASH ROM را اشغال کرده است.
برای دسترسی سریع تر به متغیرهای محلی و کاهش کد نیاز به افزایش رجیسترهای همه منظوره است. AVR ها دارای 32 رجیستر هستند که مستقیما به LOGIC ALU متصل شده اند. و تنها در یک کلاک سیکل به این واحد دسترسی پیدا می کنند. سه جفت از این رجیسترها می توانند بعنوان رجیسترهای 16 بیتی استفاده شوند.
برنامه صفحه بعد نشان می دهد که چگونه تعداد مناسب رجیسترهای همه منظوره می توانند با معماری CISC با یک ACCUMULATOR مقایسه گردند. برای این منظور می خواهیم از معادله صفحه بعد A را بدست بیاوریم که با کدهای AVR این محاسبه در عرض 4 کلاک سیکل و با کدهای CISC در عرض 96-48 کلاک سیکل انجام می گیرد.
خصوصیات ATmega32، ATmega32L
ازمعماری AVR RISC استفاده می کند.
- کارایی بالا و توان مصرفی کم .
- دارای 131 دستورالعمل با کارایی بالا که اکثر تنها در یک کلاک سیکل اجرا می شوند.
- 8*32 رجیستر کاربردی
- سرعتی تا 16MIPS در فرکانس 16MHZ
حافظه برنامه و داده غیرفرار
- 32کیلو بایت حافظه فلش داخلی قابل برنامه ریزی .
پایداری حافظه فلش : قابلیت 10000 بار نوشتن و پاک کردن
- 2کیلوبایت حافظه داخلی SRAM
- 1024بایت حافظه EEPROM داخلی قابل برنامه ریزی
پایداری حافظه EEPROM : قابلیت 100000 بار نوشتن و پاک کردن
- قفل برنامه فلش و حفاظت داده EEPROM
- قابلیت ارتباط JTAG
- برنامه ریزی برنامه فلش، EEPROM، FUSE BITS، LOCK BITS از طریق ارتباط JTAG
خصوصیات جانبی
دو تایمر – کانتر 8 بیتی با PRESCALER مجزا و دارای مد COMPARE
یک تایمر – کانتر 16 بیتی با PRESCALER مجزا و دارای مدهای COMPARE، CAPTURE
4 کانال PWM
8 کانال مبدل آنالوگ به دیجیتال 10 بیتی
دارای دو کانال تفاضلی با کنترل گین 1X,10X,200X
یک مقایسه کننده آنالوگ داخلی
دارای RTC با اسیلاتور مجزا
WATCHIDOG قابل برنامه ریزی با اسیلاتور داخلی
ارتباط سریال SPI برای برنامه ریزی داخل مدار
قابلیت ارتباط سریال SPI به صورت MASTER یا SLAVE.
قابلیت ارتباط با پروتکل سریال دو سیمه
USART سریال قابل برنامه ریزی
خصوصیات ویژه میکروکنترلر
ON RESET CIRCUIT- POWER
BROWN- OUT DETE قابل برنامه ریزی
دارای 6 حالت SLEEP
منابع وقفه داخلی و خارجی
دارای اسیلاتور RC داخلی کالیبره شده
عملکرد کاملا ثابت
توان مصرفی پایین و سرعت بالا توسط تکنولوژی CMOS
ولتاژهای عملیاتی
2.7V تا 5.5 برای ATmega32L
4.5V تا 5.5V برای ATmega32
خطوط I/Q و انواع بسته بندی
32 خط ورودی / خروجی قابل برنامه ریزی
40 پایه PDIP ،44 پایه TQFP و 44 پایه MLF
ترکیب پایه ها
فیوز بیت های ATmega32
ATmega32 دارای دو بایت فیوز طبق جدول های زیر می باشد :
DEFAULT VALUE
|
DESCRIPTION
|
BIT NO.
|
FUSE HIGH BYTE
|
1
|
ENABLE OCD
|
7
|
OCDEN
|
0
|
ENABLE JTAG
|
6
|
JTAGEN
|
0
|
ENABLE SERIAL PROGRAM AND DATA DOWNLOADING
|
5
|
SPIEN
|
1
|
OSCILLATOR OPTIONS
|
4
|
CKOPT
|
1
|
EEPROM MEMORY IS PRESERVED THROUGH THE CHIP ERASE
|
3
|
EESAVE
|
0
|
SELECT BOOT SIZE
|
2
|
BOOTSZ1
|
0
|
SELECT BOOT SIZE
|
1
|
BOOTSZ0
|
1
|
SELECT RESET VECTOR
|
0
|
BOOTRST
|
DEFAULT VALUE
|
DESCRIPTION
|
BIT NO.
|
FUSE HIGH BYTE
|
1
|
BROWN OUT DETECTOR TRIGGER LEVEL
|
7
|
BODLEVEL
|
1
|
BROWN OUT DETECTOR ENABLE
|
6
|
BODEN
|
1
|
SELECT START-UP TIME
|
5
|
SUT1
|
0
|
SELECT START-UP TIME
|
4
|
SUT0
|
0
|
SELECT CLOCK SOURCE
|
3
|
CKSEL3
|
0
|
SELECT CLOCK SOURCE1
|
2
|
CKSEL2
|
0
|
SELECT CLOCK SOURCE
|
1
|
CKSEL1
|
1
|
SELECT CLOCK SOURCE
|
0
|
CKSEL0
|
فیوز بیت ها با پاک کردن میکرو تاثیری نمی بینند ولی می توانند با برنامه ریزی بیت LBI قفل شوند . منطق 0 به معنای برنامه ریزی شدن و I به معنای برنامه ریزی نشدن بیت است.
OCDEN: در صورتی که بیت های قفل برنامه ریزی نشده باشند برنامه ریزی این بیت به همراه بیت JTAGEN باعث می شود که سیستم ON CHIP DEBUG فعال شود.
برنامه ریزی شدن این بیت به قسمت هایی از میکرو امکان می دهد که در مدهای SLEEP کار کنند که این خود باعث افزایش مصرف سیستم می شود. این بیت به صورت پیش فرض برنامه ریزی نشده است.
JTAGEN: بیتی برای فعال سازی برنامه ریزی میکرو از طریق استاندارد ارتباطی IEEE که در حالت پیش فرض فعال است و میکرو می تواند از این ارتباط برای برنامه ریزی خود استفاده نماید.
پایه های PC 5.2 در این ارتباط استفاده می شود.
SPIEN: در حالت پیش فرض برنامه ریزی شده و میکرو از طریق سریال SPI برنامه ریزی می شود.
CKOPT: انتخاب کلاک که به صورت پیش فرض برنامه ریزی نشده است عملکرد این بیت بستگی به بیت های CKSEL دارد که در قسمت کلاک سیستم در انتهای همین فصل آمده است.
EESAVE: در حالت پیش فرض برنامه ریزی نشده و در زمان پاک شدن میکرو حافظه EEPROM پاک می شود ولی در صورتی که برنامه ریزی شود محتویات EEPROM در زمان پاک شدن میکرو محفوظ می ماند.
BOOTSZI،BOOTSZ0: برای انتخاب مقدار حافظه BOOT طبق جدول زیر برنامه ریزی می شوند و در زمان برنامه ریزی شدن فیوز بیت BOOTRST اجرای برنامه از این آدرس حافظه BOOT آغاز خواهد شد.
BOOTRST : انتخاب بردار ری ست BOOT که در حالت پیش فرض برنامه ریزی نشده و آدرس بردار ری ست $0000 است و در صورت برنامه ریزی آدرس بردار ری ست طبق جدول زیر به آدرسی که فیوز بیت های BOOTSZ0، BOOTSZ1 مشخص کرده اند تغییر می یابد.
جدول انتخاب آدرس بردار ری ست توسط فیوز بیت BOOTREST
RESET ADDRESS
|
BOOTRST
|
RESET VECTOR = APPLICATION RESET
|
1
|
RESET VECTOR = BOOT LOADER RESET
|
0
|
BODLEVEL: زمانی که این بیت برنامه ریزی نشده باشد اگر ولتاژ پایه VCC از 2.7V پایین تر شود ری ست داخلی میکروفعال شده و سیستم را ری ست می کند. زمانی که این بیت برنامه ریزی شده باشد اگر ولتاژ پایه VCC از 4V پایین تر شود ری ست داخلی میکرو فعال شده و میکرو را طبق شکل 3-1 ری ست می کند.
BODEN: برای فعال کردن عملکرد مدار BROWN- OUT این بیت بایستی برنامه ریزی شده باشد. این بیت به صورت پیش فرض برنامه ریزی نشده است.
جدول سطوح مختلف ولتاژ برای مدار BROWN- OUT
BROWN- OUT DETECTION
|
BODEN,BODLEVEL
|
DISABLE
|
11
|
DISABLE
|
10
|
AT VCC=2.7V
|
01
|
AT VCC=4.0V
|
00
|
SUT0، SUT1: برای انتخاب زمان START- UP بکار برده می شوند که عملکرد این دو بیت در بخش کلاک سیستم در انتهای همین فصل کاملا توضیح داده شده است.
CKSEL0...CKSEL3: عملکرد این بیت ها در بخش 3-14در انتهای همین فصل کاملا توضیح داده شده است. مقدار پیش فرض 1MHZ@ INTERNAL RC OSCILLATOR است.
موتور پله ای STEPER MOTOR
موتور پله ای وسیله پر مصرفی است که پالس های الکتریکی را به حرکت مکانیکی تبدیل می کند. در کاربردهای همچون راه اندازهای دیسک سخت چاپگرهای مغناطیسی و رباتیک از موتور پله ای برای کنترل موقعیت استفاده شده است .
هر موتور پله ای دارای یک هسته متحرک مغناطیسی دایمی است که روتور یا شفت هم خوانده می شود و بوسیله یک بخش ثابت به نام استاتور احاطه شده است. معمول ترین موتورهای پله ای چهار سیم استاتور دارند که با سر وسط جفت شده اند.
این نوع موتورها معمولا به موتور پله ای فاز معروفند. موتور پله ای که در این برنامه استفاده شده است دارای 5 سیم است : 4 سیم برای چهار پیچ استاتور و سر دیگر که ولتاژ تغذیه متصل می گردد. با اعمال رشته هایی از تغذیه یا پالس به هر سیم پیچ استاتور روتور خواهد چرخید. رشته های مرسوم متعددی موجودند که هر یک دقت متفاوتی را دارا هستند. جدول زیر یک رشته چهار پله نرمال را نشان می دهد.
جدول رشته چهار پله
خلاف جهت ساعت
|
سیم پیچ D
|
سیم پیچ C
|
سیم پیچ B
|
سیم پیچ A
|
پله
|
در جهت ساعت
|
|
0
|
0
|
0
|
1
|
1
|
|
|
0
|
0
|
1
|
0
|
2
|
|
|
0
|
1
|
0
|
0
|
3
|
|
|
1
|
0
|
0
|
0
|
4
|
|
باید توجه داشت که اگر چه می توان با هر یک از رشته های موجود در جدول فوق آغاز کرد ولی به محض شروع باید ترکیب رعایت شود.
زاویه پله
زاویه پله مشخصه موتور را نشان می دهد که به ازا هر پله موتور چند درجه چرخش دارد. جدول زیر بعضی از زوایا را برای انواع موتورها نشان می دهد.
جدول زاویه پله برای انواع موتورها
پله در دور
|
زاویه پله
|
500
|
72
|
200
|
8/1
|
180
|
0/2
|
144
|
5/2
|
72
|
0/5
|
48
|
5/7
|
24
|
15
|
پله در ثانیه و دور در دقیقه
رابطه بین RPM یا دور در دقیقه پله در دور و پله در ثانیه از رابطه زیر بدست می آید :
یک چرخش کامل
موتور پله ای مورد استفاده در این پروژه دارای زاویه پله 1.8 درجه می باشد و برای یک دور چرخش نیازمند 200 پالس می باشد با شمارش پالسها میکروکنترلر AVR می تواند موقعیت روتور را تنظیم کرده و آن را کنترل کند.
راه انداز نیم پله
تحریک نیم پله موجب می شود که دقت موتور دو برابر شود. در این حالت با توجه به موتور استفاده شده نیاز به 400 پالس می باشد. جدول رشته نیم پله صفحه بعد منطق مورد نیاز برای برنامه را نشان می دهد. وقتی به انتهای جدول رسیدید این روند را تکرار کرده و دوباره از ابتدای جدول شروع کنید.
برنامه موتور پله ای
در این پروژه برای راه اندازی موتور پله ای از راه انداز ULN2003 استفاده شده است. این درایو 16 پایه دارای 7 پایه راه انداز کلکتور باز است و بیشترین جریان خروجی آن برای هر پایه 500Ma می باشد.
جدول زیر چهار نوع از خانواده ULN را نشان می دهد.
پورت سریال کامپیوترهای شخصی PC:
پورت سریال PC که به نامهای COM port و RS- 232 port نیز شناخته می شود از جمله درگاه های پراستفاده در کامپیوترهای شخصی است و کاربردهای متنوعی مانند اتصال کامپیوتر به مودم ماوسهای سریال بعضی از انواع چاپگرها قفل های دیجیتال و ... داشته است.
قلب اصلی پورت سریال یک pc تراشه ای به نام UART می باشد. این تراشه در مدلهای اولیه PC با شماره Intel 8250 بود . سپس در مدل PC- AT از تراشه 16450 استفاده شد که نرخهای داده بالاتری را پشتیبانی می کرد.
تراشه بعدی UART 16650 علاوه بر حمایت از قابلیت های قبلی دارای دو بافر 16 بایتی برای فرستنده و گیرنده است. این بافرها به برنامه اجازه می دهند تا به جای ارسال / دریافت یک بایتی در هر بار و انتظار برای تبادل بعدی حداکثر 16بایت داده را به صورت یکجا مبادله کند.بافر گیرنده به ویژه در حل مشکل سرریزی پورت سریال نقش دارد.
وجود فضای 16 بایتی در بافر احتمال روی هم نویسی اطلاعات در سرعتهای بالاتر که در تراشه های قبلی وجود داشت را به حداقل می رساند. همچنین به دلیل کاهش تعداد وقفه ها یا فراخوانی های لازم در تبادل یک بلوک داده کارآیی برنامه را به مراتب ارتقا می دهد. پورتها و ثباتهای تراشه UART در اموری مانند ارسال / دریافت داده ، خواندن وضعیت خط ، کنترل سیگنالهای دستدهی ، تنظیم baud rate و ... استفاده می شوند.
پایه های مهم بورت سریال RS232:
علاوه بر خطوط داده Tx و Rx تعدادی خط کنترلی برای ارتباط با دستگاه های بیرونی مانند مودم وجود دارد که امکان دستدهی و ارتباط با دستگاه مودم را تامین می کند.
نکته : دستدهی مکانیزمی است که توسط آن دو طرف ارتباط از وضعیت یکدیگر با خبر می شوند. این مکانیزم به کمک دو یا چند سیگنال و معمولا به صورت سخت افزاری و خودکار انجام می شود.
- Tx: پایه خروجی پورت سریال و برای ارسال فریمهای داده آسنکرون مورد استفاده قرار می گیرد.
- Rx: پایه ورودی پورت سریال و برای دریافت فریمهای داده آسنکرون مورد استفاده واقع می شود.
- RTS: سیگنال فعال LOW که به مودم اطلاع می دهد که UART آماده ارسال داده است.
- CTS: سیگنال خروجی مودم به پورت سریال و پاسخی به سیگنال RTS است به عبارت دیگر نشانگر آمادگی متقابل مودم برای تبادل داده است.
- DTR: سیگنال خروجی پورت سریال و نشان دهنده آمادگی UART برای برقراری ارتباط است.
- DSR: سیگنال فعال LOW و نشانگر آمادگی مودم برای ارتباط با UART است. این سیگنال دستدهی در پاسخ به سیگنال DTR فعال می شود.
- DCD: سیگنال فعال LOW که نشان دهنده شناسایی یک حامل داده روی خط توسط مودم می باشد.
سیگنالهای DTR و RTS پس از ریست سیستم غیر فعال می شوند. همچنین این سیگنالها توسط ثبات کنترل مودم قابل مقداردهی می باشند. وضعیت سیگنالهای CTS، DSR، DCD را نیز می توان با خواندن ثبات وضعیت مودم تعیین کرد.
ثباتهای پورت سریال RS-232:
همانطور که قبلا نیز اشاره شد تراشه UART دارای تعدادی ثبات می باشد که از طریق پورتهای خاصی از تراشه قابل دستیابی می باشند. آدرس پورتها و نام ثباتها و بافرهای مربوطه در جدول زیر آمده است :
جدول 14-1 پورتهای تراشه UART
وضعیت بیت DLAB
|
ثبات / بافر مربوطه
|
I/O Address
|
0
|
Tx buffer
|
XF8
|
0
|
Rx buffer
|
XF8
|
1
|
Divisisor latch LSB
|
XF8
|
1
|
Divisisor latch MSB
|
XF9
|
0
|
Interrupt enable register
|
XF9
|
|
Interrupt identification reg.
|
XFA
|
|
Line control register
|
XFB
|
|
Modem control register
|
XFC
|
|
Line status register
|
XFD
|
|
Modem status register
|
XFE
|
|
Reserved
|
XFF
|
در جدول فوق حرف x مشخص کننده شماره پورت سریال می باشد. معمولا 2=x مترداف با پورت COM2 و 3=X مترداف با پورت COM1 می باشد. آدرس XF8 را می توان بعنوان آدرس پایه پورت سریال در نظر گرفت. آدرس پورتهای دیگر با اضافه کردن عددی خاص به این آدرس پایه به دست می آیند.
آدرس پایه پورتهای سریال COM1 تا COM4 در شروع به کار کامپیوترتعیین و به ترتیب در آدرس 0:400h به بعد ازحافظه کامپیوتر ذخیره می شوند. BIOS اغلب بردهای مادر امروزی در PC ها به وسیله برنامه Setup داخلی خود به کاربر اجازه می دهند تا پورت سریال تعبیه شده روی مادر برد را فعال و یا غیرفعال کند و یا آدرس پایه پورت سریال مورد نظر را تغییر دهد.
اکنون به بررسی عملکرد بعضی از پورتهای مهم تراشه UART می پردازیم :
Tx Buffer و Rx Buffer : از این ثباتها برای دریافت و ارسال داده ها بر روی پایه های Tx و Rx استفاده می شود. از ثبات Tx Buffer گاهی به صورت THR نیز نام برده می شود.
نحوه ارتباط پورتهای سریال PC و میکروکنترلر در شکل زیر نشان داده شده است.
با توجه به شکل فوق پایه Tx از میکرو به پایه شماره 2 از کانکتور DB-9 از پورت سریال و پایه Rx میکرو به پایه شماره 3 از کانکتور متصل می شود.
به دلیل استاندارد متفاوت ولتاژ در میکرو و پورت سریال pc که به ترتیب TTL و RS232 می باشد. لازم است که ولتاژهای ارسالی از هر طرف توسط مبدل ویژه ای به سطح ولتاژ مورد قبول طرف دیگر تبدیل شوند. مبدل هایی مانند تراشه MC1488 و تراشه MC1489 و تراشه MAX232 که ترکیبی از دو تراشه قبلی است در بازار موجود است.
پس از بررسی وضعیت آمادگی فرستنده توسط بیت های مربوطه در ثبات LSR بایت مورد نظر را به پورت XF8 ارسال می کنیم که در صورت خالی بودن ثبات شیفت فرستنده به درون آن انتقال می یابد.
در این ثبات بیت های شروع توازن و پایان با توجه به تنظیمات جاری به بیت های داده اضافه شده و در قالب یک فریم کامل بر روی خط Tx ارسال می گردند. بخش گیرنده که وضعیت خط Rx را دائما زیر نظر دارد پس از اطمینان از صحت بیت شروع دریافتی بیت های باقی مانده فریم را دریافت می کند.
در هر صورت بدون توجه به وجود خطای توازن یا خطای framing بیتهای داده دریافتی به ثبات Rx Buffer منتقل شده و بیت وضعیت مربوط به خطای رخ داده در ثبات LSR از تراشه UART به نشانه دریافت داده یک می شود.
فرکانس مورد نیاز دو بخش گیرنده و فرستنده توسط بخش تولید کننده نرخ باود تامین می شود که نحوه برنامه ریزی آن را در قسمت های بعد توضیح خواهیم داد.
Stepper Motor و نحوه کنترل آن :
یک Stepper Motor وسیله ای است که پالسهای الکتریکی دریافتی را به حرکت مکانیکی تبدیل می کند و در کاربردهای مختلف جهت کنترل موقعیت و حرکت وسیله استفاده می شود.
هر Stepper Motor دارای یک آهنربای دایمی چرخان به نام rotor می باشد که در میان دو یا چند سیم پیچ به نام stator قرار داده شده است. متداولترین Stepper Motorها دارای چهار سیم پیچ stator می باشند و معمولا به آنها چهار فازه می گویند . ساختار داخلی این نوع موتور در شکل زیر نشان داده شده است.
در موتورهای چهار فازه دو زوج سیم پیچ stator دارای یک سر مشترک می باشند مانند شکل زیر :
با وجود چرخش آزادانه rotor این حرکت هر بار به اندازه مشخص و ثابتی صورت می گیرد به نحوی که به برنامه نویس اجازه می دهد تا rotor را به مکان دقیقی ببرد. این حرکت مکرر و ثابت نتیجه تئوری پایه مغناطیس یعنی جذب قطبهای غیرهمنام می باشد. جهت چرخش در هر لحظه متاثر از قطبهای stator ها و جریان موجود در هسته آنها می باشد با تغییر جهت جریان قطبها نیز عوض شده و حرکت rotor معکوس می شود.
Stepper Motor مورد استفاده در این آزمایش دارای شش سر سیم می باشد چهار سر مربوط به چهار سر سیم پیچ stator ها و دو سر باقی مانده مربوط به سرهای مشترک است.
برای چرخاندن موتور از یک سری ولتاژ مشخص برای اعمال به سرهای A تا D استفاده می گردد. سریهای مختلف و پراستفاده ای وجود دارند که هر کدام دارای درجه دقت متفاوتی می باشند. در جدول 11-1 سری متداول چهارگامه نشان داده شده است.
جدول 11-1 سری چهار گامه کامل
سیم پیچ D
|
سیم پیچ C
|
سیم پیچB
|
سیم پیچ A
|
شماره گام
|
1
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
1
|
2
|
0
|
1
|
1
|
0
|
3
|
1
|
1
|
0
|
0
|
4
|
مهم : باید توجه داشت که اگر چه می توان از هر نقطه از یک سری مانند سری فوق شروع نمود ولی ادامه کار باید درجهت مناسب و کامل صورت گیرد. به طور مثال اگر از گام شماره 2 عملیات آغاز شده باشد گامهای بعدی شماره های 3 و 4 و سپس 4،3،2،1 و به همیت ترتیب خواهند بود. همچنین هر چهار گام جدول در هر بار باید بی کم و کاست به سیم پیچ ها اعمال شوند.
زاویه گام یا پله :
سوالی که در اینجا مطرح می شود آن است که با اعمال هر گام به موتور چه میزان حرکتی توسط rotor صورت می گیرد. پاسخ این موضوع بستگی به ساختار داخلی موتور به ویژه تعداد دندانه های موجود بر روی rotor دارد زاویه گام حداقل درجه چرخش rotor معادل با یک گام از سری است و برای موتورهای مختلف متفاوت می باشد. این زاویه برای چندین موتور در جدول 11-2 نشان داده شده است.
جدول 11-2 زاویه گام کامل برای چند موتور مختلف
گام بر دور
|
زاویه گام
|
500
|
72%
|
200
|
8/1
|
180
|
0/2
|
144
|
5/2
|
72
|
0/5
|
48
|
5/7
|
24
|
15
|
در جدول فوق عبارت تعداد گام بر دور تعداد گامهایی است که برای یک چرخش کامل 360 درجه ای لازم است و به صورت زیر محاسبه می شود :
(زاویه گام) /360= تعداد گام بر دور
لازم به ذکر است که برای داشتن زاویه گام کوچکتر لازم نیست که استاتورهای بیشتری در موتور تعبیه شود. زاویه گام موتور از مشخصات سخت افزاری موتور بوده و ارتباط مستقیمی با تعداد دندانه ها در rotor دارد .
تعداد گام بر ثانیه و تعداد دندانه ها در rotor:
در رابطه زیر تعداد گام بر ثانیه از روی مقادیر دور بر دقیقه و تعداد گام بر دور محاسبه می شود:
60/ تعداد گام بر یک دور × تعداد دور بر دقیقه = تعداد گام بر ثانیه
با اعمال یک سری چهار گامه rotor فقط به اندازه یک دندانه می چرخد. تعداد دندانه ها متناسب با تعداد گام بر دور بوده و از رابطه زیر به دست می آید:
(طول سری مورد استفاده) / تعداد گام بر دور = تعداد دندانه ها
بعنون مثال در یک موتور با تعداد گام بر دور برابر 200 تعداد دندانه ها به صورت زیر محاسبه می گردد:
وقتی از سری 4 گامه استفاده کنیم
وقتی از سری 8 گامه استفاده کنیم
کلیه Stepper Motor ها از یک سری 8 گامه حمایت می کنند که در آن تغییر زاویه معادل هر گام برابر نصف زاویه گام کامل موتور است. به همین دلیل گاهی به این سریها نیم زاویه گفته می شود. بدیهی است که توانایی موتور در حرکت با نصف زاویه گام عادی خود در کاربردهایی که به دقت بالایی نیاز دارند اهمیت می یابد.
بر این اساس موتوری با زوایه گام 2 درجه می تواند با استفاده از این سریها به عنوان موتوری با زوایه گام 1 درجه استفاده شود.
در جدول زیر سری 8 گامه نمونه نشان داده شده است که حرکت در آن از همان قانون سریهای 4 گامه پیروی می کند :
جدول 11-3 سری 8 گامه مورد حمایت کلیه موتورها
سیم پیچ D
|
سیم پیچ C
|
سیم پیچB
|
سیم پیچ A
|
شماره گام
|
1
|
0
|
0
|
1
|
1
|
0
|
0
|
0
|
1
|
2
|
0
|
0
|
1
|
1
|
3
|
0
|
0
|
1
|
0
|
4
|
0
|
1
|
1
|
0
|
5
|
0
|
1
|
0
|
0
|
6
|
0
|
1
|
0
|
0
|
7
|
1
|
0
|
0
|
0
|
8
|
سرعت موتور : بر حسب تعداد گام بر ثانیه بیان شده و تابعی از نرخ اعمال گامها در یک سری است . ارتباط سرعت موتور را با مقدار RPM در صفحات قبل دیدیم .
سری Wave Drive:
علاوه بر سریهای مورد اشاره سری 4 گامه دیگری به نام Wave Drive وجود دارد که در جدول زیر مشاهده می شود.
جدول 11-4 سری 4 گامه wave drive
سیم پیچ D
|
سیم پیچ C
|
سیم پیچB
|
سیم پیچ A
|
شماره گام
|
0
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
0
|
2
|
0
|
1
|
0
|
0
|
3
|
1
|
1
|
0
|
0
|
4
|
سری فوق از نوع گام کامل است.
تعیین سری های زوج سیم پیچهای مشترک :
برای تعیین سرهای مربوط به سیم پیچ های مشترک از اهم متر استفاده می کنیم . سرهای مشترک com معمولا به یک رنگ و درکنار هم در یک طرف کانکتور موتور قرار دارند. یک سر اهم متر را به یک سر COM و سر دیگر را به یک یک به چهار سر دیگر موتور وصل می کنیم . مقاومت مشاهده شونده در دو سر از این چهار سر برابر می باشد. در این صورت دو سر مذکور مربوط به یک زوج سیم پیچ می باشند این کار را می توانید برای سر COM دوم و دو سر باقی مانده انجام دهید. پایه های Stepper Motor معمولا به شکل زیر در کنار هم قرار می گیرند.
فصل چهاردهم
درگاه سریال و کاربرد آن در اتصال ابزارها
هر کامپیوتر دارای حداقل 2 و حداکثر 4 عدد درگاه سریال به نامهای COM1 تا COM4 می باشد که برای انتقال اطلاعات به صورت سریال برای ابزارهای با سرعت پایین مورد استفاده قرار می گیرند.
استفاده از درگاه سریال نسبت به درگاه موازی دارای مزایای زیادی است که از آن جمله می توان به موارد زیر اشاره کرد :
1- در برابر خرابی های عمدی یا سهوی بسیاری مقاومتر و قوی تر است.
2- ابزارها را می توان در هنگامی که کامپیوتر روشن است به درگاه متصل و قطع نمود.
3- برای ابزارهای ساده می توان تغذیه مورد نیاز را از خود درگاه سریال تامین کرد.
4- طول کابل بین درگاه و ابزار متصل به آن می تواند طولانی تر باشد.
5- برای سرعت های انتقال پایین تر نیاز به تعداد رشته سیم کمتر می باشد.
6- بسیاری از میکروکنترلرهای امروزی دارای خط داخلی اتصال سریال می باشند که می توانند به طور مستقیم و سریال به دنیای بیرون وصل شوند. برای این کار با دو خط TXD و RXD ارتباط بین آنها و درگاه سریال برقرار می شود که این در مقایسه با 8 خط درگاه موازی بسیار کمتر است.
این درگاه ها براساس استاندارد RS.232C تعریف شده اند که در آنها سطح 1 منطقی توسط ولتاژ -3 تا -25 و سطح e توسط ولتاژ 25% تا 3 ولت به وجود می آیند. تمام خروجی ها در برابر اتصال کوتاه حفاظت شده اند و می توانند جریانی بین 10 تا 20 میلی را تامین کنند. مقاومت ورودی حدود 10 است.
کانکتورها وسیگنالهای درگاه سریال
اگرچه در کامپیوترهای امروزی این درگاه فقط به صورت یک کانکتور سوزنی 9 پایه وجود دارد ولی درکامپیوترهای قدیمی و به خصوص دستگاه های صنعتی به صورت یک کانکتور 25 پایه نیز وجود دارد اما سیگنالهای آن در هر دو نوع کانکتور تفاوتی با هم ندارد و به صورت یکسان استفاده می شود.
شکل 1-14 و 2-14 کانکتورهای 9 و 25 پایه از طرف پشت که سیم به آن لحیم می شود را به همراه سیگنالها و عملکرد هر کدام نشان می دهد. همان طور که مشاهده می شود از کل 9 سیگنال موجود 5 پایه ورودی 3 پایه خروجی و یک پایه زمین می باشد.
در استاندارد RS232C به ابزار متصل شده به درگاه سریال DCE و به کامپیوتر حاوی درگاه سریال DTE گفته می شود.
فصل 1
میکروکنترلرهای
اهداف فصل
1-آشنایی با انواع میکروکنترلرهای AVR
2-آشنایی با معماری RISC و CISC
3-آشنایی با حافظه های AVR
4-آشنایی با نحوه عملکرد پورتها درAVR
5-آشنایی با سیستمهای توزیع و تولید پالس ساعت در AVR
واژه های کلیدی
RISC
معماری ازCPU که مجموعه دستورات آن حاوی دستورات ساده و سریع الاجرا است که نوشتن برنامه را سریعتر اما مشکلتر می کند .
CISC
نوعی از معماری CPUکه شامل تعداد دستورات طولانی و پیچیده است و نوشتن برنامه را ساده تر ولی سرعت اجرا را کندتر می کند .
OSCILATOR
نوسانساز
PLL
حلقه فاز قفل شده که عمل ضرب فرکانس اسپلاتور را انجام می دهد .
TMS
گروهی از میکروکنترلرهای DSPمحصول شرکت تگزاس
FLASH
نوعی از تکنولوژی حافظه ROMجهت ذخیره برنامه در میکروکنترلرهای AVR
SRAM
نوعی حافظه RAMجهت ذخیره سازی داده در میکروکنترلرهای AVR
EEPROM
حافظه ROMداخلی جهت ذخیره داده در AVR
FUSEBIT
قسمتی از حافظه FLASHجهت تنظیم برخی از امکانات میکروکنترلر
MCU
یک واحد مرکزی درAVR است که تمام فعالیتهای میکروکنترلر را مدیریت و تمام عملیت لازم بر روی داده ها را انجام می دهد .
IR
رجیستر دستور واقع درCPU
ID
واحد رمز گشایی دستور واقع درCPU
PC
شمارنده برنامه
SP
اشاره گر پیشه
FETCH
واکنشی –فراخوانی
PULL-UP
مقاومت بالاکش
STARTUP
مدت زمان شروع بکار میکروکنترلر پس از باز نشانی
مقدمه
معنی کلمهAVR دقیقا برای کسی مشخص نیست بجز دو مهندس شرکتATMEL به نام های Alf Egil BogenوVegard Wollan که برای اولین بار میکروکنترلرAVR را طراحی نموده اند .
البته برخی بر این باور هستند که کلمه AVRمخفف عبارتRISC,Vegard,Alf یا RISC,Virtual,Advancedاست اما هیچکس جز این دو نفر معنی دقیق AVRرا نمی داند .
خانواده میکروکنترلرهایAVR دارای محدوده نسبتا وسیعی هستند و همچنان این خانواده بزرگ در حال توسعه است در این فصل قصد داریم به بررسی کامل معماری میکروکنترلرهایAVR بپردازیم
این میکروکنترلر هشت بیتی شرکتATMEL بر مبنای معماریRISC بهبود یافته طراحی شده است و دارای سه خانواده کلی زیر است :
1-خانواده ATTiny AVR
2-خانوادهAT90S (سری کلاسیک )
3-خانواده Atmega AVR
1-1معماری RISC
RISC(کامپیوتر با مجموعه دستورات کاهش یافته )را می توان در مقابل معماریRISC (کامپیوتر با مجوعه دستورات پیچیده )مورد بررسی قرار داد .
RISCمعماری ازCPU که مجموعه دستورات آن حاوی دستورات سریع الاجراءو ساده است که نوشتن برنامه را مشکلتر اما سریع تر می کند .
1-2معماری CISC
CISCنوعی از معماریCPU می باشد که شامل تعدادی دستورات طولانی و پیچیده است و نوشتن برنامه را ساده تر ولی سرعت اجرا را کندتر می کند .
از ویژگی های معماری می توان به موارد زیر اشاره نمود :
1-اولین ویژگیAVR با معماریRISC این است که دستورالعمل های آن دارای سایز ثابت 16یا 32بیت می باشد در صورتیکهCPU با معماریCISC دارای دستور العمل های با سایز متغیر است و از ویژگی های آنثابت بودن سایز و سادگی دیکد کردن آن بوسیلهCPU است .
2-از دیگر ویژگی هایRISC تعداد رجیسترهای آن می باشد همهAVR ها دارای 32 رجیستر همه منظورهR0 تاR31 می باشند که بطور مستقیم با واحدALU در ارتباط هستند .
3-معماریRISC دارای تعداد دستور العمل کم و سریع بوده و تعداد این دستورات با توجه به سریAVR بین 89 تا 135 دستورالعمل متغیر است .
به دلیل آنکهRISC دارای محدوده دستورات کمتری نسبت بهCISC است وظیفه برنامه نویس یا کامپایلر است تا دستور مورد نظر را بر اساس دستور العمل های موجود درRISC انتخاب نماید .شاید یکی از معایبی که معماریRISCدارد دستورات محدود است بهمین دلیل نوشتن برنامه اسمبلی را نسبت بهCISC مشکل تر می کند .که این خود دلیلی برای استفاده از زبان های سطح بالا همچونC,Pacsal,Basic و به جای زبان اسمبلی در معماریRISC است .
4-مهمترین مشخصه معماریRISC این است که بیشترین دستورات با یک پالس ساعت (و تعداد کمی با دو پالس ساعت )اجرا می شود بهمین دلیل زمان اجرای برنامه ها در معماری RISCبالا می باشد
1-3فرکانس داخل سیستم
در میکروکنترلرها فرکانس داخل سیستم به سه صورت تعیین می شود :
1-فرکانس سیستم داخلی تقسیمی از فرکانس نوسان ساز میکروکنترلر است .
2-فرکانس داخلی با فرکانس نوسان ساز یکی است این روش در میکروکنترلرهایAVR بکار گرفته شده است یعنی اگر از یک کریستال12MHZ خارجی استفاده شود فرکانس کاری میکرو نیز MHZ12 خواهد بود .
3-فرکانس داخلی به کمک یک PLL(ضرب کننده )Nبرابر فرکانس نوسان ساز است این روش بیشتر در میکروکنترلرهایPIC,CPU و میکروکنترلرهای پیشرفته مانند برخی ازTMS ها کار برد دارد .
در زیر یک مثال ساده برای مقایسه عملیات تک سیلکی درAVR با میکروکنترلر 8051 آورده شده است
الف :یک برنامه جمع ساده در 8051
با فرض استفاده از کریستالMHZ 12 و با توجه به اجرای هر دستور العمل حداقل یک سیکل ماشین (که هر سیکل ماشین دوازده پالس ساعت است )طول خواهد کشید داریم :
MIPS1= MHZ12/12= سرعت اجرای دستورالعمل
MS = MHZ1/1 = مدت زمان اجرای یک سیکل ماشین
ب) یک برنامه جمع ساده در AVR
با فرض استفاده از کریستال MHZ12 داریم :
MIPS= 1/ MHZ12 = سرعت اجرای دستوالعمل
MHZ12 / 1 = مدت اجرای دستورالعمل تک پالسی
n/s4/333= MHZ12/1×4= زمان اجرای برنامه
همانطورکه در مثال بالا ملاحظه می شود در مقایسه بین دو برنامه که دقیقا یک عمل (جمع تک بایتی )را انجام می دهند برای میکرو کنترلر 8051حجم برنامه 5 بایت و زمان اجرای 4 میکرو ثانیه و برای میکروکنترلرAVR حجم برنامه 8 بایت و زمان اجرای برنامه برابر 4/333نانو ثانیه است .
1-4خانواده
این خانواده ازAVR ها بر خلاف نامشان دارای توانایی بالا می باشد بخاطر کوچک بودن و داشتنCPU قدرتمند و با بیش از4 کیلو بابت حافظه برنامه از نوعFLASH 128 بایت حافظه داده از نوعSRAM وEEPROM دارای کاربرد فراوانی می باشند .این نوع ازAVR ها برای انجام عملیات ساده طراحی شده است و در مدارهایی که نیاز به حجم کوچک است بکار گرفته می شود .
از امکانات جانبی Tiny AVRها می توان به موارد زیر اشاره نمود :
1-مبدل آنالوگ به دیجتیال 10 بیتی
2-مقایسه کننده آنا لوگ
3-تایمر/ شمارنده با خروجی PWM
4-واسط ارتبا ط سریال 2 WIRE
5-واسط ارتبا ط سریال USART
6تایمر نگهبان
در جدول 1-1 اجزاء خانوادTINY AVR آورده شده است
جدول 1-1 میکروکنترولرهای خانواده TINY AVR
ATTiny 45
|
ATTiny 26
|
ATTiny 13
|
ATTiny 10
|
ATTiny 85
|
ATTiny 2313
|
ATTiny 15
|
ATTiny 10
|
ATTiny 25
|
ATTiny 28
|
ATTiny 22
|
ATTiny 12
|
1-5 خانواده کلاسیک AT90S
این خانواده ازAVR ها دارای توانایی های بیشتری نسبت بهTiny AVR خانواده میباشند از جمله افزایش حافظه برنامه ، حافظه داده و.........
در جدول 1-2 اجزاء خانوادهAT90S لیست شده است
جدول 1-2 میکروکنترلرهای خانوادهAT90S
AT90S8534
|
AT90S8535
|
AT90S2343
|
AT90S1200
|
AT90S2333
|
AT90S4414
|
AT90S4433
|
AT90S2313
|
|
AT90S4434
|
AT90S8515
|
AT90S2323
|
1-6خانواده MEGA AVR
این خانواده از AVRها قدرتمندترین عضوخانواده هایAVR می باشد وعلاوه بر دارا بودن توانایی های سریAT90S و Tiny دارای امکا نات بیشتری هستند این خانواده ازAVR همچنان در حال افزایش است در جدول 1-3 اجزاءاین خانواده لیست شده است
جدول1-3میکروکنترلرهای خانواده
Atmega2561
|
Atmega3290
|
Atmega165
|
Atmega48
|
Atmega603
|
Atmega8515
|
Atmega406
|
Atmega2560
|
Atmega670
|
Atmega168
|
Atmega88
|
Atmega329
|
Atmega644
|
Atmega640
|
Atmega128
|
Atmega164
|
Atmega64
|
Atmega706A
|
Atmega675
|
Atmega1281
|
Atmega169
|
Atmega8515
|
Atmega256
|
Atmega3250
|
Atmega6450
|
Atmega32
|
Atmega8535
|
Atmega163
|
|
Atmega649
|
Atmega323
|
Atmega16
|
|
Atmega6490
|
Atmega324
|
Atmega161
|
|
Atmega1280
|
Atmega325
|
Atmega162
|
1-7مدل LCD AVR
در میان میکروکنترلرهای سریMEGA AVR چند میکروکنترلر جزءمدلLCD AVR قرار دارند در این نوع میکروکنترلرها یک راه انداز داخلی برای نمایشگرهایLCD قرار داده شده است .
از ویژگی های این خانواده مصرف توان بسیار پاپپن آن برای راه اندازیLCD های عددی و همچنین ولتاژ پاپپن کاری می باشد بطور مثالATmega 169 در حالت فعال می تواند با ولتاژ8/1 ولت و جریان 20میکروآمپر به فعالیت خود ادامه دهد .
در جدول 1-4سری میکروکنترلرهایLCD AVR لیست شده است .
جدول 1-4میکروکنترولرهای خانواده LCD AVR
جدول 1-4 میکروکنترلرهای خانواده LCD AVR
Atmega649
|
Atmega169
|
Atmega6490
|
Atmega329
|
|
Atmega3290
|
1-8ساختار پردازنده AVR
در میکروکنترلرهایAVR یک واحد مرکزی وجود دارد که تمام فعالیت های میکروکنترلر را مدیریت و تمام عملیات لازم بر روی داده ها را انجام می دهد همچنین وظیفه ارتباط با حافظه ها و کنترل تجهیزات جانبی را بر عهده دارد به این واحدMCU می گویند .
شکل 1-1ساختار کلیMCU را نشان می دهد .
در میکروکنترلر هایAVR از معماری ها روارد استفاده شده است بطوریکه حافظه میکروکنترلرهایAVR به دو قسمت ((حافظه برنامه ))و ((حافظه داده ها ))تقسیم می شود ،همچنین برای ایجاد ارتباط با هر یک از این قسمتها ازگذرگاه های مجزا استفاده می شود معماری ها روارد در مقایسه با معماری سنتی ،فون نیومن که از طریق یک گذرگاه مشترک به داده و برنامه دسترسی پیدا می کند ،پهنای باند بهتری دارد .
با توجه به توضیحات بالا به شرح عملکرد هر یک از قسمت ها خواهیم پرداخت .
رجیسترهای عمومی (فایل رجیستر )
تعداد این رجیسترها 32عدد بوده و عبارتند ازR0 تاR31 که هر کدام از این رجیسترها هشت بیتی هستند و با واحدALU در ارتباط مستقیم می باشند .
از میان رجیسترهایR0 تاR31 رجیسترهایR26 تاR31 دارای نام دیگری نیز هستند که بصورت شکل 1-4تعریف میشوند .
همانطور که مشخص است رجیسترهایR26 وr27 تشکیل یک رجیستر 16 بینی به نام را میدهد و برای رجیسترهایY و Z نیز چنین است .
کاربرد این رجیسترها که به آنها رجیسترهای اشاره گر می گویند ،علاوه برکاربرد عمومی برای آدرس دهی غیر مستقیم در فضای حافظه داده و برنامه استفاده می شوند .
واحد ALU
این واحد وظیفه انجام عملیات منطقی و ریاضی مانندADD,SUB,AND,OR را دارد واحدALU بطور مستقیم با رجیسترهایR0 تاR31 در ارتباط می باشد .
IR
این رجیستر،کد دستور العملی را که از حافظه برنامهFLASH خوانده شده و باید اجراءشود را در خود جای می دهد .
IDواحد رمز گشایی دستور
این واحد تشخیص می دهد کد واقع درIR مربوط به کدام دستورالعمل است و سیگنال های کنترلی لازم برای اجرای آنرا صادر می نماید .
PCشمارنده برنامه
شمارنده برنامه آدرس دستور العمل بعدی که باید اجراءشود را در خود نگه می دارد و با اجرای هر دستور العمل محتوای شمارنده برنامه افزایش یافته و به آدرس دستور العمل بعدی اشاره می کند .
نحوه عملکرد واحدCPU
در هنگام روشن شدن میکروکنترلر یک مقدار از پیش تعریف شده در درون شمارنده برنامه قرار می گیرد که می تواند مقدار بردارReset یعنی0000H باشد .
این آدرس همان آدرس شروع برنامه است وبرنامه نویس باید برنامه خود را در آدرس های بعدازآن در حافظه برنامه ذخیره نماید
بعد از مشخص شدن مقدارPC,CPU فرایند خوا ندن دستورالعمل را انجام می دهد که به این مرحله فراخوانی داده می گویندCPU پس از خوا ندن کد دستور العمل آن را در رجیسترIR قرار می دهد پس از این مرحله واحد رمز گشایی دستور کد دستور العمل موجود در رجیسترIR را تجزیه و تحلیل می کند تا تشخیص دهد که چه عملی باید انجام شود مانند جمع یا تفریق و .....پس از آن با ارسال سیگنالهای کنترلی ،سایر داده های مورد نیاز برای انجام عملیات را خوانده و سرانجام ALUعملیات مشخص شده را روی داده ها انجام داده و سپس مقدارPC تغییر می کند و آدرس دستور العمل بعدی که باید اجرا شود در آن قرار می گیرد. شکل 7-1 مراحل عملکرد CPU را نشان می دهد.
1-9حافظه داده SRAM
حافظه SRAMیک فضای داده برای ذخیره سازی اطلاعات موقت در اختیار کار بر قرار میدهد محتوای این حافظه با قطع برق از بین می رود.
حافظهSRAM بطور مستفیم در اختیارCPU نمی باشد .برای دستیابی به حافظهSRAM معمولا از یک رجیستر واسط که یکی از رجیستر هایR0 تاR31 است استفاده می شود .
حافظه دادهSRAM می تواند داخلی یا خارجی باشد .البته داده خارجی در برخی از میکروکنترلرها پشتیبانی می شود (برای اطلاعات بیشتر به فصل سازماندهی حافظه های مراجعه نمایید .
رجیستر وضعیت
بیتهای این رجیستر تحت تائیر برخی عملیاتCPU (ریاضی ،منطقی )فعال می شوند .
پرچم کری
این پرچم هنگامی که یک رقم نقلی از بیت هفتم خارج شود یک می شود این پرچم بین انجام عمل محاسباتی و منطقی تائیر می پذیرد .
پرچم صفر
این پرچم هنگامی که نتیجه یک عملیات محاسباتی یا منطقی صفر باشد یک خواهد شد .
پرچم منفی
این پرچم هنگامی که نتیجه یک عملیات محاسباتی یا منطقی منفی باشد یک خواهد شد .
پرچم سرریز
این پرچم هنگامی که نتیجه یک عملیات علامت دار بزرگتر از 6 باشد یک می شود. یک شدن این بیت بیانگر این است که نتیجه محاسباتی صحیح نیست.
پرچم علامت
پرچم علامت همواره نتیجه XOR بین پرچم های N و V می باشد.
پرچم نیم کری
این پرچم بنام نقلی کمکی نیز شناخته می شود. اگر هنگام عملیات جمع یک انتقال از بیت 3 به 4 در یکی از رجیسترهای عمومی و یا نتیجه نیم بایت پایین بزرگتر از 9 باشد پرچم H یک خواهد شد و برای محاسبه بصورت BCD مفید است.
مثال 1-1
در صورتی که 08H=R0 و 08H=R1 باشد با اجرای دستور R1,ADD R0 محتوای رجیستر R0 با R1 جمع زده شده و حاصل درون R0 قرار می گیرد. پس از اجرای دستور پرچم H یک خواهد شد.
بیت
هنگام استفاده از دستورات اسمبلی کپی کردن بیت ها از این بیت به عنوان مقصد یا مبدا استفاده میشود.
بیت فعال ساز وقفه سراسری
در صورت یک کردن این بیت وقفه سراسری فعال می شود. اگر این بیت صفر باشد هیچ وقفه ای رخ نمی دهد. بیت I در هنگام رخ دادن وقفه بطور سخت افزاری صفر و با دستور RETI یک می شود.
1-10 اشاره گر پشته
پشته قسمتی از فضای حافظه داده SRAM است که جهت ذخیره اطلاعات و معمولا در اجرای دستور فراخوانی و یا اجرای برنامه وقفه نیاز می باشد.
البته به کمک دستور PUSH نیز می توان به این قسمت دسترسی داشت. در AVR ها می توان حداکثر 64کیلو بایت از حافظه SRAM را جهت فضای پشته در نظر گرفت و شماره آدرس این فضا توسط اشاره گر پشته یا SP مشخص می شود.
رجیستر SP یا اشاره گر پشته از دو بایت SPL و SPH تشکیل شده است. که در مجموع یک رجیستر 16 بیتی بنام SP را بوجود می آورد.
در ابتدا وقتی سیستم روشن می شود CPU از محل استقرار حافظه پشته آگاهی ندارد بنابراین این محل را باید به اطلاع آن رساند.
برای این کار معمولا با وارد کردن یک آدرس از حافظه SRAM انجام می گیرد.
حافظه پشته در AVR ها بصورت LIFO است.
به کمک دستور PUSH می توان به طور مستقیم به فضای پشته دسترسی داشت با اجرای دستور PUSH ابتدا محتوای محل تعیین شده در دستور PUSH به خانه ای از حافظه داده SRAM که آدرس آن توسط رجیستر SP مشخص می شود. انتقال می یابد و سپس اشاره گر پشته یک واحد کاهش می یابد.
مثال 1-2
با فرض 55H=R0 و 200H=SP با اجرای دستور R0 PUSH خانه 200H از حافظه SRAM برابر 55H خواهد شد.
به کمک دستور POP می توان اطلاعات ذخیره شده در حافظه پشته را بازیابی نمود باید توجه داشت در هنگام فراخوانی زیربرنامه ها آدرس دستورالعمل های بعدی به صورت خودکار در پشته ذخیره می شود و شمارنده برنامه جدید زیربرنامه را در خود جای می دهد و در هنگام بازگشت از زیربرنامه مجددا شمارنده برنامه با مقدار ذخیره شده در پشته بارگذاری شده و ادامه برنامه اجرا می شود.
مثال 1-3
با فرض 200H=SP داریم :
$10H،R16 LDI
$15H،R17 LDI
$20H،R18 LDI
R16 PUSH
R18 PAUH
R17 PUSH
.
.
.
R18 POP
R16 POP
R17 POP
در هنگام R16 PUSH ابتدا محتوی رجیستر R16 در آدرس 200H قرار گرفته و سپس SP یک واحد کاهش می یابد R17 PUSH و R18 PUSH نیز چنین است.
با اجرای دستور R18 POP ابتدا اشاره گر پشته یک واحد افزایش می یابد و سپس محتوای پشته در رجیستر R18 قرار خواهد گرفت.
قبل از اجرای برنامه : 10H=R16،15H=R17،20H=R18
بعد از اجرای برنامه : 20H=R16،10H=R17،15H=R18
1-11 حافظه داده EEPROM
یکی از خصوصیات بارز میکروکنترلرهای خانواده AVR بهره بردن از یک EEPROM داخلی است. کاربرد حافظه داده EEPROM زمانی مفید خواهد بود که مقدار یک متغیر در برنامه مهم بوده و نباید با قطع ولتاژ تغذیه یا Reset شدن میکروکنترلر از بین برود. به همین دلیل می توان آن متغیر را در فضای حافظه داده EEPROM قرار داد.
واحد CPU بطور مستقیم به فضای حافظه داده EEPROM دسترسی ندارد بلکه توسط رجیسترهای واسط و رجیسترهای کنترلی به آن دسترسی خواهد داشت.
برای اطلاعات بیشتر به فصل سازماندهی حافظه مراجعه فرمائید.
1-12 پورت I/O
پورت ها امکان دسترسی میکروکنترلر با دنیای خارج را میسر می سازند. یک میکروکنترلر به کمک پورت های I/O می تواند داده های مختلفی را از خارج دریافت و یا ارسال نماید. درمیکروکنترلرهای AVR با توجه به نوع میکروکنترلرتعداد پورت ها متفاوت می باشد. بطور مثال در سری ATTiny تعداد 6، I/O در دسترس بوده و درحالی که در ATmega 128 تعداد 53 ، I/O و یا در سری ATmega256 تعداد 86 ، I/O در اختیار کاربر قرار گرفته است. در AVRها پورت بصورت PORTA، PORTB و PORTC و ... نام گذاری می شوند که هر کدام بصورت هشت بیتی عمل می نمایند.
پورت ها علاوه بر کاربرد عمومی به عنوان I/O معمولا دارای وظایفی خاص نیز هستند که با توجه به AVR مورد نظر متفاوت است. بطور مثال در ATmega32 پورت A علاوه بر I/O معمولی ورودی های آنالوگ برای ADC و مقایسه کننده آنالوگ نیز است.
بعنوان نمونه در شکل 1-11 پایه های میکروکنترلر ATmega32 آورده شده است.
ساختار پورت I/O
شکل 1-12 مدار داخلی یک پین از پورت را نشان می دهد.
همانطور که در شکل 1-12 ملاحظه می فرمایید هر یک از پین های I/O دارای دو دیود محافظ برای محافظت از ولتاژ ورودی منفی یا بزرگتر از VCC است و همچنین دارای یک مقاومت بالاکش داخلی می باشند.
مقاومت های بالاکش را می توان به دلخواه فعال یا غیرفعال نمود.
بافر خارجی در هر پین قابلیت جریان کشی جریان دهی تا 20Ma را فراهم می کند. بنابراین می توان بطور مستقیم یک LED را راه اندازی نمود.
با توجه به شکل 1-12 هر پین دارای دو نگهدار DDXn و PORTXn است نگهدار اولی وظیفه تعیین جهت پین بصورت ورودی یا خروجی را برعهده دارد. و دومی نگهدار داده می باشد و داده ای که قرار است روی پین قرار گیرد را در خود نگه می دارد.
بنابراین هر پورت 3 رجیستر برای کنترل پایه ها دارد.
1- رجیستر داده پورت
2- رجیستر جهت داده پورت
3- آدرس پایه های ورودی پورت
تعیین جهت پایه ها بصورت ورودی و خروجی
برای این منظور از رجیستر DDRx استفاده می شود بطوریکه اگر در بیت مورد نظر از این رجیستر صفر منطقی نوشته شود آن پایه بصورت ورودی و در صورت یک شدن به صورت خروجی تعریف می شود.
مثال 1-4
در این مثال پایه های 0و1و2و6 از پورت A بصورت خروجی و پایه های 3و4و7 بصورت ورودی تعریف می شود.
مقاومت بالاکش
هنگامی که پایه بصورت ورودی تعریف می شود اگر در بیت PORTXn مقدار یک منطقی و بیت PUD در رجیستر SFIOR نیز صفر منطقی نوشته شود مقاومت بالاکش داخلی فعال خواهد شد.
هنگامی که بیت PUD برابر یک می گردد مقاومت بالاکش درون پورت های I/O غیرفعال میشود حتی اگر 1=DDXn و1=PORTXn شده باشد.
جدول 1-5 تعیین جهت پایه های PORTXn
comment
|
Pull- up
|
I/O
|
PUD
|
PORTxn
|
DDxn
|
Tri- state
|
No
|
Input
|
x
|
0
|
0
|
Pxn will source current if ext.pulled low
|
Yes
|
Input
|
0
|
1
|
0
|
Tri- state
|
No
|
Input
|
1
|
1
|
0
|
Output low
|
No
|
Output
|
x
|
0
|
1
|
Output high
|
No
|
Output
|
x
|
1
|
1
|
در این مثال پایه های 0 و 1 و 2 و 6 از پورت B بصورت ورودی تعریف شده و مابقی بصورت خروجی تعریف می شود مطابق جدول زیر :
هنگامی که پایه بصورت ورودی تعریف می شود در صورتی که مقاومت بالاکش داخلی یا خارجی فعال نباشد پایه I/O به حالت Hi – Z رفته و مقدار خوانده شده از ورودی پایه قابل اطمینان نمی باشد بنابراین توصیه میشود هنگام ورودی کردن پایه مقاومت بالاکش داخلی یا خارجی برای آن در نظر گرفته شود.
نوشتن در پایه ها
برای این منظور جهت پایه مورد نظر را به صورت خروجی تعریف نموده سپس با مقدار دادن بیت PORTXn مقدار دلخواه را بر روی پایه مورد نظر بنویسید.
بطور مثال اگر FFH=DDRC باشد در این صورت اطلاعات متناظر با رجیستر PORTC روی پورت C نوشته خواهد شد.
خواندن از پورت
به دو صورت می توان داده را از پورت خواند :
1- خواندن مستقیم از روی پایه ها در این حالت به کمک PINX می توان اطلاعات را از روی پایه دریافت نمود.
2- بطور مثال دستور PINA,IN R16 اطلاعات را بطور مستقیم از روی پایه های پورت A خوانده و درون رجیستر R16 قرار می دهد.
3- خواندن از روی نگهدار پایه ها در این حالت داده از روی نگهدار پایه خوانده می شود. بطور مثال دستور PORTA، IN R16 اطلاعات را از رجیستر پورت داده A خوانده و درون رجیستر R16 قرار می دهد.
معمولا خواندن از روی نگهدار پایه هنگامی استفاده می شود که نیاز به خواندن آخرین وضعیت پایه ها و یا تغییر در وضعیت پایه ها باشد.
$00،R16 LDI
R16،DDRA OUT
PINA،R16 IN
R16 COM
$FF،R17 LDI
R17،DDRA OUT
R16،POTRA OUT
برنامه 1
$FF، R16 LDI
R16،DDRA OUT
PORTA،R16 IN
R16 COM
برنامه 2
در مثال 6 هدف تغییر وضعیت پایه های پورت A است.
در برنامه 1 ابتدا اطلاعات روی پایه های پورت A درون R16 قرار می گیرد و بعد با دستور COM معکوس شده و دوباره با دستور OUT بر روی پورت A قرار می گیرد.
در برنامه 2 نیز همین کار انجام می شود با این تفاوت که اطلاعات از خروجی نگهدار پایه ها خوانده می شود.
در حالت عادی تفاوتی بین دو برنامه بالا نمی باشد اما ممکن است در اثر بارگذاری روی پایه ها توسط مدار خارجی سطح ولتاژ آن به شدت تغییر کند در این حالت برنامه 1 به درستی عمل نمی کند زیرا اطلاعات مستقیم از روی پایه خوانده می شود. اما در برنامه 2 به دلیل اینکه از خروجی نگهدار پایه ها خوانده میشود اثر بارگذاری تاثیری روی داده ها نداشته و به درستی عمل می کند.
بنابراین هنگامی که نیاز به تغییر وضع پایه ها بر اساس اطلاعات قبلی موجود روی پایه ها باشد از روش 2 استفاده میشود.
ورودی سیگنال آنالوگ
برخی از پایه های AVR دارای حالت ورودی سیگنال آنالوگ می باشد که معمولا ورودی های مقایسه کننده آنالوگ یا ورودی برای مبدل آنالوگ به دیجیتال می باشد.
عملکرد پایه ها در حالت Sleep
فرمان sleep می تواند توسط میکروکنترلر در حالت های power down,power save,standby,extended standby فعال گردد. این حالت به دلیل جلوگیری از اتلاف توان صورت می گیرد و اگر پایه ها به حالت شناور رها گردند معادل 2/vcc ولتاژ خواهد داشت.
برای اطلاع از مدهای sleep به فصل 17 مراجعه نمائید.
1-13 سیستم توزیع پالس ساعت در AVR
پالس ساعت داخلی از منابع مختلفی ایجاد می شود که با توجه به جدول 1-7 می توان منابعی چون نوسان ساز کریستالی نوسان ساز RC خارجی نوسان ساز کریستالی فرکانس پایین نوسان ساز RC داخلی و پالس ساعت خارجی را نام برد. شکل 1-13 سیستم کلاک اصلی در AVR را نشان می دهد.
پالسهای ساعت تولید شده از این منابع توسط یک clock multiplexer انتخاب شده و پالس ساعت منبع انتخاب شده به قسمت AVR clock control unit وارد می شود این قسمت وظیفه پخش پالس ساعت به قسمت های مختلف AVR ها را برعهده دارد.
پالس ساعت های ایجاد شده توسط واحد Clock control را می توان به صورت زیر دسته بندی نمود.
پالس ساعتCPU
این پالس ساعت به بخش های اصلی AVR مانند CPU رجیسترهای عمومی رجیستر وضعیت SREG و حافظه داده SRAM اعمال می شود.
پالس ساعت I/O
این پالس ساعت برای بخش هایی چون فضای حافظه I/O که برای کنترل قسمت هایی نظیر USART,SPI تایمر شمارنده وقفه های خارجی به کار می رود.
پالس ساعت آسنکرون
این پالس ساعت برای راه اندازی آسنکرون تایمر / شمارنده 2 توسط کریستال ساعت KHZ 768/32 به کار می رود.
پالس ساعت حافظه Flash
این پالس ساعت برای کنترل ارتباط با حافظه flash به کار می رود. و معمولا همراه CLKCPU فعال می شود.
پالس ساعت ADC
این پالس ساعت برای مبدل آنالوگ به دیجیتال بوده و بصورت جداگانه تامین می شود و امکان توقف پالس ساعت CPU و I/O را به منظور کاهش تاثیر نویز مدارات دیجیتال روی ADC و در نتیجه افزایش دقت آن فراهم می کند.
1-14 منابع تولید پالس ساعت در AVR
همانطور که قبلا اشاره شد منابع مختلفی برای تامین پالس ساعت میکروکنترلر وجود دارد. کاربر به کمک فیوزبیت ها می تواند هر کدام از این منابع را انتخاب نماید.
منابع مختلف پالس ساعت با فیوزبیت های 0 ... CKSEL3 قابل انتخاب است.
درجدول 1-6 صفر به معنای برنامه ریزی شدن فیوزبیت و یک به معنی برنامه ریزی نشدن فیوز بیت است. هنگامی که CPU از مد Powerdown یا Power save خارج می شود. پالس ساعت انتخاب شده با مقداری تاخیر به میکرواعمال می شود این تاخیر را زمان startup می نامند و به منظور پایدار شدن پالس ساعت قبل از شروع به کار است.
جدول 1-6 انتخاب منابع مختلف پالس ساعت
Recommended Range for capacitors c1 and c2 use with crystals
|
Freqency range
|
CKSEL3..1
|
CKOPT
|
-
|
04-0.9
|
101
|
1
|
12-22
|
0.9-3.0
|
110
|
1
|
12-22
|
3.0-8.0
|
111
|
1
|
12-22
|
1.0
|
101,110,111
|
0
|
هنگامی کهCPU ازحالت Reset خارج می شود یک زمان تاخیر بیشتری به منظور تثبیت ولتاژ تغذیه پایدار شدن پالس ساعت مورد نیاز است.
زمان startup توسط تایمر watchdog قابل تنظیم است. فیوز بیت های SUT0، SUTI به منظور تنظیم زمان Startup مورد استفاده قرار می گیرد و زمان های 0 و 4.1ms و 65ms را می توان تنظیم نمود.
نوسان ساز کریستال خارجی
یکی از منابع تولید پالس ساعت استفاده از نوسان ساز کریستال خارجی می باشد در این حالت پایه های XTAL1 و XTAL2 مطابق شکل 1-14 A به صورت ورودی و خروجی یک تقویت کننده داخلی وارونگر می باشند که می توانند به عنوان نوسان ساز بکار برده شوند.
دو نوع کریستال خارجی را می توان به این دو پایه متصل نمود
1- کریستال کوارتز
2- کریستال سرامیکی که هر کدام را می توان توسط فیوز بیت CKOPT انتخاب نمود.
هنگامی که فیوز بیت CKOPT برنامه ریزی می شود فرکانس خروجی نوسان ساز دارای محدوده وسیع و دامنه ثابت ولتاژ در خروجی خواهد بود.
این حالت برای زمانی که از میکروکنترلر در محیط های پر نویز استفاده می شود مناسب است. همچنین در این حالت می توان از پایه خروجی XTAL2 مطابق شکل 1-14 B برای فعال کردن بافر پالس ساعت دیگر میکروکنترلرها نیز استفاده نمود.
هنگامی که فیوز بیت CKOPT برنامه ریزی نشده باشد دامنه فرکانس نوسان ساز محدودتر خواهد شد و دیگر نمی توان از پایه XTAL2 به منظور فعال کردن بافر پالس ساعت دیگر میکروکنترلرها استفاده نمود.
در صورت استفاده از رزوناتور سرامیکی اگر فیوز بیت CKOPT برنامه ریزی شود فرکانس نوسان ساز حداکثر MHZ16 و در صورت برنامه ریزی نشدن حداکثر MHZ8 خواهد بود.
خازن های C1 و C2 که بعنوان خازن های بالانس شناخته می شود دارای مقدار یکسانی بوده و مقدار آن به فرکانس کریستال مورد استفاده بستگی دارد و مطابق جدول 1-7 انتخاب می شود.
جدول 1-7 مدهای عملکرد نوسان ساز کریستالی
Recommended Range for capacitors c1 and c2 use with crystals
|
Freqency range
|
CKSEL3..1
|
CKOPT
|
-
|
04-0.9
|
101
|
1
|
12-22
|
0.9-3.0
|
110
|
1
|
12-22
|
3.0-8.0
|
111
|
1
|
12-22
|
1.0
|
101,110,111
|
0
|
هنگام استفاده از کریستال ها بسته به نوع کوارتز یا سرامیکی بودن آنها باید یک سری نکات را رعایت نمود. به طور کلی تفاوت اصلی بین کریستال کوارتز و سرامیکی را می توان به صورت زیر خلاصه نمود :
1- کریستال کوارتز دارای ضریب کیفیت بالا محدوده فرکانس بالا و حساسیت کم نسبت به تغییرات دما است.
2- کریستال سرامیکی نسبت به کوارتز دارای ضریب کیفیت پایین تر حساس نسبت به تغییرات دما و محدوده فرکانس پایین است و یکی از مزایای آن نسبت به کوارتز پایدار شدن سریع تر فرکانس می باشد.
نوسان ساز در سه محدوده مختلف کار می کند که هر کدام برای یک محدوده فرکانس مناسب هستند و به کمک فیوزبیت های CKSEL3:1 قابل انتخاب شدن است.
توجه داشته باشید فیوزبیت CKSEL0 به همراه فیوزبیت های SUT1:0 برای تعیین زمان Start up استفاده می شود مطابق جدول 1-8
جدول 1-8 تعیین زمان start up برای استفاده از اسیلاتور کریستالی
Recommended usage
|
Additional delay from reset
|
Start- up time from power- down and power save
|
SUT1..0
|
CKSEL0
|
Ceramic resonator,fast rising power
|
4.1MS
|
258ck
|
00
|
0
|
Ceramic resonator,slowly rising power
|
65MS
|
258ck
|
01
|
0
|
Ceramic resonator,BOD enabled
|
-
|
1kck
|
10
|
0
|
Ceramic resonator,fast rising power
|
4.1MS
|
1kck
|
11
|
0
|
Ceramic resonator,slowly rising powe
|
65MS
|
1kck
|
00
|
1
|
Crystal oscillator,BOD enabled
|
-
|
16kck
|
01
|
1
|
Crystal oscillator fast rising power
|
4.1MS
|
16kck
|
10
|
1
|
Crystal oscillator slowly rising power
|
65MS
|
|
11
|
1
|
نوسان ساز کریستالی فرکانس پایین
اگر از یک کریستال KHZ768/32 به عنوان منبع پالس ساعت استفاده می کنید باید فیوز بیتهای CLKSEL3:0 را به صورت 1001 برنامه ریزی کرد. کریستال مطابق شکل 1-15 به پایه ها متصل میشود.
در این حالت کاربر می تواند با برنامه ریزی فیوز بیت CKOPT خازن های داخلی بین پایه های XTAK1،XTAL2 که مقدار 36PF است را فعال نماید و نیاز به استفاده از خازن خارجی را از بین ببرد.
با استفاده از این نوسان ساز زمان Start up توسط فیوز بیت های SUT1 و SUT0 مطابق جدول 1-9 تعیین می شود.
شکل 1-15 نوسان ساز کریستالی فرکانس پایین
جدول 1-9 تعیین زمان start up توسط فیوز بیت های SUT1 و SUT0 برای استفاده از اسیلاتور کریستالی فرکانس پایین
Recommended usage
|
Additional delay from reset
|
Start- up time from power- down and power save
|
SUT1..0
|
Fast rising power or BOD enabled
|
4.1MS
|
1kck
|
00
|
Slowly rising power
|
65MS
|
1kck
|
01
|
Stable freqency at start – up
|
65MS
|
32kck
|
10
|
|
Reserved
|
|
11
|
نوسان ساز RC خارجی
می توان به جای استفاده از کریستال خارجی از شبکه RC خارجی مطابق شکل 1-16 استفاده نمود. در این حالت فرکانس نوسان ساز را می توان از فرمول 1=F بدست آورد.
شکل 1-16
نوسان ساز خارجی RC
در این فرمول خازن C حداقل PF22و مقدار مقاومت می باشد.
در صورت برنامه ریزی شدن فیوز بیت CKOPT یک خازن داخلی 36PF بین XTAL1 و GND فعال خواهد شد و دیگر نیازی به استفاده ازخازن خارجی نیست.
این نوسان می تواند در چهار محدوده مختلف کارکند. با استفاده از فیوز بیت های CKSEL3:0 طبق جدول 1-10 قابل انتخاب شدن می باشد.
جدول 1-10 مدهای عملکرد نوسان ساز RC خارجی
Freqency Range
|
CKSEL3..0
|
-0.9
|
0101
|
0.9-3.0
|
0110
|
3.0-8.0
|
0111
|
8.0-12.0
|
1000
|
زمان Start up توسط فیوز بیت های SUT0 و SUT1 طبق جدول 1-11 برای زمان های مختلف قابل انتخاب است.
جدول 1-11 تعیین زمان Start up برای استفاده از RC خارجی
Recommended usage
|
Additional delay from reset
|
Start- up time from power- down
|
SUT1..0
|
BOD enabled
|
-
|
18ck
|
00
|
Fast rising power
|
4.1MS
|
18ck
|
01
|
Slowly rising power
|
65MS
|
18ck
|
10
|
Fast rising power or BOD enabled
|
4.1ms
|
6ck
|
11
|
نوسان ساز RC کالیبره شده داخلی
نوسان ساز RC داخلی 40 فرکانس 1و2و4و8 مگاهرتز را در شرایط ولتاژ تغذیه 5V و درجه حرارت محیط 25 درجه سانتی گراد تولید می کند.
به کمک فیوزبیت های CKLEL3:0 می توان فرکانس مورد نظر را مطابق جدول 1-12 انتخاب نمود. همچنین فیوز بیت CKOPT نباید برنامه ریزی شود.
جدول 1-12 مدهای عملکرد نوسان ساز RC کالیبره شده داخلی
Nominal frequency
|
CKSEL 3..0
|
1.0
|
0001
|
2.0
|
0010
|
4.0
|
0011
|
8.0
|
0100
|
زمان Start up توسط فیزبیت های SUT0 و SUT1 مطابق جدول 1-13 انتخاب میشود. در این حالت پایه های XTAL1 و XTAL2 باید بدون اتصال باشند.
پالس ساعت خروجی
در صورت استفاده از پالس ساعت خروجی مطابق شکل 1-17 پالس ساعت را به پایه XTAL1 اعمال کنید. و فیوز بیت های CKSEL3:0 باید به صورت 0000H تنظیم شوند.
در صورت برنامه ریزی فیوزبیت CKOPT یک خازن داخلی PF36 بین XTAL1 و GND فعال خواهد شد.
زمان Start up توسط فیوزبیت های SUT0 و SUT1 مطابق جدول 1-13 انتخاب می شود در این حالت پایه های XTAL1 و XTAL2 باید بدون اتصال باشند.
جدول 1-13 تعیین زمان Start up برای استفاده از اسیلاتور کالیبره شده داخلی
Recommended usage
|
Additional delay from reset
|
Start- up time from power- down
|
SUT1..0
|
BOD enabled
|
-
|
6ck
|
00
|
Fast rising power
|
4.1MS
|
6ck
|
01
|
Slowly rising power
|
65MS
|
6ck
|
10
|
|
Reserved
|
|
11
|
پالس ساعت خارجی
در صورت استفاده از پالس ساعت خارجی مطابق شکل 1-17 پالس ساعت را به پایه XTAL1 اعمال کنید. و فیوزبیت های CKSEL3:0 باید به صورت 0000H تنظیم شوند. در صورت برنامه ریزی فیوزبیت CKOPT یک خازن داخلی PF36بین XTAL1 و GND فعال خواهد شد.
زمان Start up توسط فیوزبیت های SUT0 و SUT1 و طبق جدول 1-14 برای زمان های مختلف قابل انتخاب است.
جدول 1-14 تعیین زمان Start up برای استفاده از پالس ساعت خارجی
Recommended usage
|
Additional delay from reset
|
Start- up time from power- down
|
SUT1..0
|
BOD enabled
|
-
|
6ck
|
00
|
Fast rising power
|
4.1MS
|
6ck
|
01
|
Slowly rising power
|
65MS
|
6ck
|
10
|
|
Reserved
|
|
11
|
درحالت استفاده از پالس ساعت خارجی باید از تغییر ناگهانی در فرکانس به منظور جلوگیری از اختلال در عملیات پردازنده اجتناب کرد تغییرات بیش از 2% از یک سیکل به سیکل بعدی ممکن است باعث بوجود آمدن حالت های ناخواسته شود. به همین دلیل اگر می خواهید فرکانس پالس ساعت را تغییر دهید مطمئن شوید میکروکنترلر در وضعیت Reset است.
فصل 2
سازمان دهی حافظه های AVR
اهداف فصل
1- آشنایی با سازماندهی حافظه ها در AVR
2- آشنایی با اتصال حافظه داده خارجی
3- سازماندهی حافظه و توابع دسترسی به حافظه در Codevision
4- آشنایی با دسترسی به حافظه EEPROM
واژه های کلیدی
Program Memory
محلی برای ذخیره حافظه برنامه
Data Memory
محلی برای ذخیره اطلاعات
Register File
رجیسترهای عمومی RO تا R31
Boot
قسمتی از حافظه برنامه
I/O Register
محلی ازحافظه AVR که رجیسترهای اصلی CPU و واحدهای جانبی در آن قرار دارد. External Memory
حافظه داده خارجی
Lower Sector
محلی در تقسیم بندی حافظه داده خارجی
Upper Sector
محلی در تقسیم بندی حافظه داده خارجی
Wait States
حالت تاخیر جهت دسترسی به حافظه داده خارجی
مقدمه
در این فصل بخشهای مختلف حافظه داخلی AVR را مورد بررسی قرار می دهیم .
معماری کلی AVR دارای دو فضای حافظه اصلی می باشد :
1- فضای حافظه داده
2- فضای حافظه برنامه .
همچنین ازخصوصیات AVR داشتن یک حافظه EEPROM داخلی برای ذخیره داده می باشد.
حافظه برنامه
میکروکنترلرAVR دارای حافظه برنامه داخلی از نوع FLASH می باشد و قابل برنامه ریزی برای ذخیره برنامه است. از آنجایی که تمام دستورات AVR 16 یا 32 بیت عرض دارند حافظه برنامه بصورت زیر سازماندهی می شود.
با توجه به شکل 2-1 مشخص است که شکل 2-1 الف حافظه برنامه یک میکروکنترلر 32 کیلوبایتی شکل 2-1 ب حافظه برنامه یک میکروکنترلر 64 کیلوبایتی و شکل 2-1 ج حافظه برنامه یک میکروکنترلر 128 کیلوبایتی می باشد.
در میکروکنترلر AVR برای امنیت نرم افزار فضای حافظه برنامه FLASH به دو بخش تقسیم شده است:
1- بخش برنامه کاربردی
2- بخش BOOT
همانطور که در شکل 2-2 مشخص است 1K بایت فضا برای حافظه BOOT درنظر گرفته شده و بقیه آن برای حافظه برنامه کاربردی می باشد.
حافظه برنامه FLASH قابلیت تا 10000 مرتبه نوشتن را دارد.
برای اطلاعات بیشتر در مورد بخش BOOT به فصل BOOT Loader مراجعه نمائید.
حافظه داده
با توجه به شکلهای 2-3 و 2-4 حافظه داده به چندین قسمت تقسیم می شود.
1-32 رجیستر عمومی 2-64 رجیستر I/O 3- حافظه داده داخلی SRAM 4- حافظه داده خارجی
1- رجیسترهای عمومی
رجیسترهای عمومی یا فایل رجیسترها از آدرس 0000H شروع شده و تا 001FH ادامه می یابد. در بین این 32 رجیستر رجیسترهای R26 تا R31 ویژه رجیسترهای اشاره گر می باشند که با نام های X و Y و Z تعریف می شوند. از رجیسترهای اشاره گر جهت آدرس دهی غیرمستقیم استفاده می کنند. شکل 2-5
2- رجیسترهای I/O رجیسترهای I/O ازمهمترین رجیسترهای CPU می باشند و از آدرس 0020H شروع شده و تا 005FH ادامه می یابد هر کدام از این رجیسترها برای کاربردهای خاصی مورد استفاده قرار می گیرند. جدول 2-1
3- رجیسترهای I/O توسعه یافته این قسمت از حافظه از آدرس 005FH شروع شده و تا 00FFH ادامه می یابد در برخی از میکروکنترلرها بعلت امکانات اضافه تری که دارند تعداد 64 رجیستر I/O کافی نبوده و نیازمند فضای بیشتری برای رجیسترهای I/O می باشند. برای مثال رجیستر کنترلی مربوط به PORTG در ATmega128 در محدوده رجیسترهای I/O توسعه یافته قرار دارد شکل 2-4 تعداد رجیسترهای توسعه یافته در میکروکنترلرهای سری ATmega2561 ، ATmega640، ATmega1280،ATmega1281،ATmega2560 به 416 بایت افزایش یافته است.
4- حافظه داده داخلی فضای حافظه داده داخلی پس از رجیسترهای I/O شروع شده و تا XXXXH ادامه می یابد. به طور مثال در ATmega32 آدرس حافظه داده داخلی از 0060H شروع شده و تا آدرس 085FH ادامه می یابد.
جدول 2-1 خلاصه رجیسترهای I/O
زمان بندی دسترسی به حافظه داده داخلی
مطابق شکل 2-6 دسترسی به حافظه SRAM دو سیکل ساعت طول می کشد .در زمان T1 پالس ساعت CPU آدرس خانه مورد نظر را مشخص می کند و در زمان T2 با توجه به نوع عملیات روی حافظه سیگنالهای RDیا WR تولید خواهد شد تا اطلاعات از SRAM خوانده یا در آن نوشته شود.
5- حافظه داده خارجی چنانچه نیاز به توسعه حافظه داشته باشیم در برخی میکروکنترلر AVR این امکان وجود دارد تا علاوه بر حافظه داخلی از 64 کیلوبایت حافظه داده خارجی ینز استفاده گردد. حال نحوه دستیابی به حافظه خارجی را مورد بررسی قرار می دهیم .
در ابتدا میکروکنترلرهای AVR را با توجه به نوع رجیسترهای داخلی و قابلیت های آنها به 2 گروه تقسیم بندی می کنیم :
گروه 1
این گروه میکروکنترلرهای سری ATmega4414 و AT90s8515 و ATmega103 و ATmega603 سری های مشابه را شامل می شوند. این میکروکنترلها برای دستیابی به حافظه داده خارجی از رجیستر کنترلی MCUCR استفاده می نماید.
بیت 7 فعال ساز حافظه داده خارجی
بیت 6 بیت ایجاد تاخیر برای حافظه داده خارجی
زمانی که SRW10=1 باشد یک سیکل به سیکلهای دسترسی حافظه داده خارجی اضافه می شود و زمانی که SRW10=0 باشد سیکلهای دسترسی در حالت معمولی 3 سیکل خواهد بود مطابق شکل 2-7
گروه 2
این گروه از میکروکنترلرهای سری ATmega128 و ATmega64 و سریهای مشابه تشکیل شده است و جهت دسترسی به حافظه داده خارجی از رجیسترهای کنترلی زیر استفاده می کنند.
رجیستر MCUCR
این رجیستر مانند گروه 1 پیکربندی می شود.
رجیستر XMCRA
بیت 7
بیت روزو بوده و در آن صفر نوشته می شود.
بیت های 6:4
قبل از توضیح راجع به این سه بیت لازم است به تقسیم بندی حافظه داده خارجی اشاره ای نماییم. در گروه 2
از میکروکنترلرها این قابلیت وجود دارد که فضای حافظه داده خارجی را به دو قسمت تقسیم بندی کنیم. هدف از این تقسیم بندی ایجاد زمانهای متفاوت جهت دسترسی به هر قسمت می باشد. شکل 2-8
توسط بیتهای SUL0، SRL1،SRL2 می توان مرز بین این دو قسمت از حافظه را با توجه به اندازه حافظه خارجی به دلخواه تعیین نمود. بعنوان مثال جدول 2-3 یک تقسیم بندی حافظه 64 کیلوبایتی را نشان می دهد.
بیتهای 2 و 3
این دو بیت جهت تنظیم حالت تاخیر در قسمت پایینی حافظه داده خارجی مورد استفاده قرار می گیرد.
بیت 1
بیت SRW11 به همراه SRW10 در رجیستر MCUCR جهت تنظیم حالت تاخیر در قسمت بالایی حافظه داده خارجی استفاده می شود. جدول 2-4
رجیستر XMCRB
جدول 2-3 تقسیم بندی حافظه خارجی 64کیلوبایتی
Sector limits
|
SRL0
|
SLR1
|
SRL2
|
Lower sector=n/a upper sector= ox1100- oxFFFF
|
0
|
0
|
0
|
Lower sector= ox1FFF upper sector= ox2000- oxFFFF
|
1
|
0
|
0
|
Lower sector= ox1100- ox3FF Upper sector= ox4000- oxFFFF1
|
0
|
1
|
0
|
Lower sector=ox1100-ox5FFF Upper sector=ox6000- oxFFFF
|
1
|
1
|
0
|
Lower sector=ox1100-oxpFFF Upper sector=ox8000-oxFFFF
|
0
|
0
|
1
|
Lower sector=ox1100-ox9FFF Upper sector=oxAooo-oxFFFF
|
1
|
0
|
1
|
Lower sector=ox1100- oxdFFF Upper sector=oxcooo- oxFFFF
|
0
|
1
|
1
|
Lower sector=ox1100- oxdFFF Upper sectoro=oxEooo- oxFFFF
|
1
|
1
|
1
|
جدول 2-4 Wait states
Wait states
|
SRWn0
|
SRWn1
|
Wait one cycle during read / write strobe
|
0
|
0
|
Wait two cycles during read/write strobe
|
1
|
0
|
No waite states
|
0
|
1
|
Wait two cycles during read/write and waite one cycles befor driving out new address
|
1
|
1
|
بیت 7 XMBK
از این بیت به منظور حفاظت اطلاعات موجود روی گذرگاه استفاده می شود . و با یک کردن آن محافظ خطوط 0 ... AD7 روی گذرگاه فعال شده و از آخرین اطلاعات موجود روی گذرگاه محافظت می نماید.
بیت 6-3
بیت های 3 تا 6 بیتهای رزور بوده و در آنها صفر نوشته می شود.
بیت 2-0 XMM0، XMM1،XMM2
زمانی که حافظه داده خارجی فعال است همه پین های گذرگاه AD8-AD15 بصورت پیش فرض برای بایت بالای گذرگاه آدرس در نظر گرفته می شود. زمانی که حافظه خارجی کمتر از 64 کیلوبایت باشد. بعضی از پین ها بلا استفاده می مانند.
به طور مثال برای حافظه 32 کیلوبایتی 15 خط آدرس مورد نیاز است از این رو 3 پین از گذرگاه بلااستفاده می ماند. بنابراین توسط بیتهای می توان پینهای اضافی را آزاد نمود. جدول 2-5
جدول 2-5 تنظیم بیتهای XMM2,1,0
Released port pins
|
Bits for external memory address
|
XMM0
|
XMM1
|
XMM2
|
None
|
8
|
0
|
0
|
0
|
Pc7
|
7
|
1
|
0
|
0
|
Pc7-pc6
|
6
|
0
|
1
|
0
|
Pc7-pc5
|
5
|
1
|
1
|
0
|
Pc7-pc4
|
4
|
0
|
0
|
1
|
Pc7-pc3
|
3
|
1
|
0
|
1
|
Pc7-pc2
|
2
|
0
|
1
|
1
|
Full port c
|
No address high bits
|
1
|
1
|
1
|
در برخی از میکروکنترلرها مانند ATmega 8515، ATmega161،ATmega162 جهت دسترسی به حافظه خارجی بجای دو رجیستر XMCRA و XMCRB از رجیسترهای EMCUCR و SFIOR استفاده می گردد.
نحوه اتصال حافظه خارجی به AVR
برای اتصال حافظه خارجی به AVR مطابق شکل 2-9 عمل می کنیم. هنگامی که حافظه داده خارجی مورد استفاده قرارمی گیرد. درگاه به عنوان درگاه I/O قابل استفاده نیست. این درگاه به یک گذرگاه آدرس و داده مالتی پلکس شده تبدیل می شود.
ALE با لبه پایین رونده بایت آدرس را در شروع هر سیکل از حافظه خارجی ذخیره می کند. درگاه نیز برای بایت بالای گذرگاه آدرس بکار گرفته می شود.
حال ببینیم که آرایش مالتی پلکس چگونه عمل می کند. در اولین سیکل حافظه بایت پایین آدرس در درگاه AD7-0 قرار می گیرد و توسط لبه پایین رونده ALE در تراشه 74HC373 یا 74HC573 ذخیره می شود.
در طی نیمه دوم سیکل حافظه درگاه AD7-0 به عنوان گذرگاه داده بکار می رود و داده با توجه نوع عملیات خوانده یا نوشته می شود.
حافظه داده EEPROM
یکی از ویژگی های میکروکنترلرهای AVR داشتن حافظه داده EEPROM داخلی می باشد. این حافظه دارای فضای داده جداگانه از دیگر بخشهای حافظه داده بوده و قابلیت دوام حداقل 100000 مرتبه نوشتن و پاک کردن را دارد. در ادامه نحوه دسترسی به EEPROM و رجیسترهای مربوطه را تشریح می کنیم .
رجیستر آدرس در EEPROM
فضای آدرس EEPROM درAVRها بسته به نوع AVR متفاوت می باشد. بعنوان مثال میکروکنترلر ATmega8 دارای 512 بایت و ATmega32 دارای 1کیلوبایت فضای حافظه EEPROM می باشد.
به کمک این دو رجیستر می توان حافظه EEPROM را آدرس دهی نمود.
رجیستر داده EEPROM
داده هایی که قرار است در EEPROM نوشته و یا از آن خوانده می شود در این رجیستر قرار می گیرد. آدرس محل مورد نظر توسط رجیستر EEAR مشخص میشود.
رجیستر کنترل
بیت های 4 تا 7
این بیت ها توسط شرکت ATMEL برای مصارف آینده رزور شده است که بصورت صفر خوانده می شوند.
بیت EERIE
با یک کردن این بیت وقفه آماده بودن EEPROM فعال می شود.
بیت EEMWE
این بیت تعیین می کند که آیا یک کردن EEWE باعث نوشتن در EEPROM می شود یا خیر. اگر این بیت یک باشد با یک کردن EEWE اطلاعات در مدت 4 سیکل در EEPROM نوشته خواهد شد. و اگر بیت EEMWE صفر باشد یک کردن EEWE تاثیری نخواهد داشت. هنگامی که EEMWE توسط نرم افزار یک می شود CPU پس از مدت 4 سیکل بصورت خودکار آن را صفر می کند.
بیت EEWE
جهت نوشتن در EEPROM بایستی این بیت را یک نمود البته قبل از این باید بیت شود در غیر این صورت نوشتن درEEPROM اتفاق نخواهد افتاد.
بیت EERE
جهت خواندن ازEEPROM بایستی این بیت را یک نمود. قبل از خواندن باید EEWEصفر باشد.
پس از اتمام عملیات نوشتن در EEPROM بیت EEWE توسط CPU صفر می شود. بنابراین در برنامه با سرکشی کردن این بیت و تشخیص صفر شدن آن می توان بایت بعدی را در EEPROM نوشت.
توجه داشته باشید CPU برای نوشتن داده در EEPROM زمان طولانی تری را صرف می کند. این زمان وابسته به ولتاژ تغذیه و مدتی بین 5/1 تا 4 میلی ثانیه طول خواهد کشید.
هنگامی که EEPROM خوانده می شود CPU برای مدت 4 سیکل قبل از اینکه دستور بعدی اجرا شود متوقف می ماند و زمانی که EEPROM در حال نوشتن است CPU به مدت 2 سیکل پیش از اجرای دستور بعدی متوقف می گردد.
اگر در هنگام نوشتن در EEPROM ،CPU وارد مد Power down شود عملیات نوشتن ادامه می یابد .و پس از اتمام عملیات نوشتن نوسان ساز متوقف نمی شود و در نتیجه میکروکنترلر وارد مد power down نخواهد شد پس توصیه پیش از ورود به مد power down از اتمام عملیات نوشتن در EEPROM اطمینان حاصل نمایید.
جلوگیری از اختلال در عملکرد EEPROM
اطلاعات موجود در EEPROM وابسته به ولتاژ تغذیه می باشد همین دلیل زمانی که VCC پایین است داده های EEPROM می تواند از دست برود. که این حالت می تواند ناشی از دو علت باشد.
اول آنکه توالی نظم نوشتن اطلاعات در CPU از دست می رود و دوم آنکه خود CPU دستورات را نادرست اجرا می نماید. با اجرای طرح پیشنهادی زیر می توان بسادگی از تخریب داده های EEPROM جلوگیری نمود.
در مدتی که منبع تغذیه در وضعیت مناسبی نیست RESET را در وضعیت فعال نگه دارید. این عمل را می توان با فعال نمودن آشکار ساز Brown – out داخلی انجام داد.
فصل 11
رابط سریال USART
اهداف فصل
1- آشنایی با واحد سریال USART
2- انواع روشهای انتقال سریال
3- برنامه نویسی واحد USART
4- آشنایی با توابع Codevision برای ارسال و دریافت اطلاعات از پورت سریال
5- برنامه نویسی واحد USART بصورت اسمبلی و C
واژه های کلیدی
UART
فرستنده و گیرنده سریال آسنکرون جهانی
USART
فرستنده و گیرنده سریال آسنکرون و سنکرون جهانی
Simplex
یکطرفه – ساده – در روش Simplex اطلاعات فقط در یک جهت انتقال می یابد.
Half Duplex
نیم دو طرفه – در این روش اطلاعات می تواند در دو جهت انتقال یابد.
Full duplex
دو طرفه – در این روش اطلاعات در یک لحظه در دو جهت انتقال می یابد.
Baud Rate
نرخ انتقال اطلاعات
Edge Detector
آشکار ساز لبه
POSO
ورودی موازی ، خروجی سریال
Start bit
بیت شروع
Stopt bit
بیت توقف
MPCM
مد ارتباط چند پردازنده ای
ERROR
خطا
Precision
دقت
Width
پهنا
Frame
قالب
مقدمه
انتقال اطلاعات را می توان به دو روش کلی انتقال به روش موازی و انتقال به روش سریال تقسیم بندی نمود. درروش انتقال موازی که در فصل های قبلی بررسی شده n بیت اطلاعات به وسیله n خط انتقال می یابد.
و در روش انتقال سریال که در این فصل به آن خواهیم پرداخت در هر لحظه فقط یک بیت ارسال می شود. در مقایسه بین این دو روش می توان گفت که در روش انتقال موازی به علت انتقال n بیت اطلاعات در یک لحظه سرعت آن نسبت به سریال که در یک لحظه فقط یک بیت را انتقال می دهد بیشتر است.
همچنین برای فواصل طولانی بکار بردن روش انتقال موازی به علت ازدیاد سیم های ارتباطی دارای هزینه بالا می باشد. بنابراین در فواصل طولانی انتقال به روش سریال مناسب تر است.
ارتباط بین فرستنده و گیرنده در روش انتقال سریال
بطور کلی سه روش ارتباط بین فرستنده و گیرنده قابل بررسی می باشد:
1- روش یک طرفه یا ساده در این روش اطلاعات فقط در یک جهت انتقال می یابد. مانند ارسال داده به چاپگر که کامپیوتر تنها می تواند داده را بفرستد.
2- روش نیم دو طرفه در این روش اطلاعات می تواند در دو جهت انتقال یابد. اما در هر لحظه فقط یک جهت امکان پذیر می باشد. از این روش انتقال در برخی از میکروکنترلرها مانند خانواده 8051 استفاده شده است.
3- روش دو طرفه در این روش اطلاعات در یک لحظه در هر دو جهت انتقال می یابد. از این روش انتقال در میکروکنترلرهای AVR استفاده شده است.
روش های مختلف ارسال سریال
دو روش کلی برای انتقال سریال وجود دارد که عبارتنداز :
1- انتقال سریال به روش سنکرون یا همزمان در این روش انتقال اطلاعات بین دو سیستم به ازای هر پالس ساعت یک بیت ارسال می شود. بطوری که فرستنده همزمان با ارسال اطلاعات پالس ساعت را نیز ارسال می کند و گیرنده به کمک پالس ساعت که از فرستنده ارسال شده خود را تنظیم و همزمان می کند تا از روی خط داده اطلاعات را به درستی بردارد. با توجه به شکل 11-2 درگیرنده نمونه برداری در لبه صعودی صورت می گیرد و با هر لبه صعودی پالس ساعت یک نمونه داده برداشته می شود. با کمی دقت در شکل 11-2 متوجه می شویم که به کمک یک شیفت رجیستر SIPO براحتی این داده ها به داده های موازی تبدیل میشود. این نوع ارتباط سریال به دلیل اینکه دارای پالس های همزمان می باشد در سرعت های بالا قابل استفاده است.
میکروکنترلرهای AVR دارای دو حالت ارتباط سریال همزمان می باشند:
الف) ارتباط سریال سنکرون یا همزمان Masterدر این حالت پالس های همزمانی توسط خود میکروکنترلر (روی پایه )تولید و به عنوان پالس ساعت از میکرو (فرستنده )به گیرنده همراه و همزمان با اطلاعات فرستاده میشود تا گیرنده به وسیله آن خودش را تنظیم کند.
ب)ارتباط سریال سنکرون یا همزمانslave در این حالت میکروکنترلر نقش گیرنده را بر عهده دارد و پالس های همزمانی که از فرستنده ارسال شده است از طریق پایه دریافت می شود .
2-انتقال سریال به روش آسنکرون یا غیر همزمان شکل11-3یک نمونه از ارسال اطلاعات به روش آسنکرون را نشان میدهد
در این روش یک کاراکتر همراه با یک بیت توازن یک بیت پایانی و یک بیت توازن یک بیت پایانی ویک بیت شروع جمعا به تعداد 10 بیت حاوی این اطلاعات می باشند. بیت توازن نشان می دهد که آیا اطلاعات بطور صحیح دریافت شده یا خیر. بیت های شروع و پایان بجای سیگنال ساعت که به همراه اطلاعات ارسال نمی شود بکار گرفته می شوند.
در عوض فرض می شود که اطلاعات با فرکانسی در محدوده 10% فرکانس از پیش تعریف شده ارسال می شود.
هنگام دریافت اطلاعات درمد آسنکرون بدلیل آنکه هیچ پالس ساعتی با اطلاعات فرستاده نمی شود باید با دقت خاص دریافت نمود.
برای این کار اطلاعات را با یک بیت شروع و به دنبال آن اطلاعات اصلی بیت توازن و در انتها بیت پایانی ارسال می شوند. گیرنده خود را با جستجو برای یک بیت شروع همزمان می کند.
برای این کار از رشته اطلاعات نمونه برداری شده تا یک منطق صفر به دست می آید بعد از آن نیمی از زمان یک بیت سپری شده مجددا از آن نمونه برداری گردد. بعد از نمونه برداری در وسط شروع به ترتیب 9 بار دیگر به فواصل زمانی یک بیت از اطلاعات نمونه برداری می شود. اطلاعات نمونه برداری شده در یک رجیستر انتقالی جمع شده تا به صورت یک بایت اطلاعات موازی درآید. سپس با بررسی بیت توازن بررسی خطاها و بیت پایانی آزمایش می گردد. اگر بیت پایانی موجود باشد اطلاعات قابل قبول است و در غیر این صورت یک خطای قالب بندی نشان داده خواهد شد. خطای قالب بندی معمولا در صورتی اتفاق می افتد که اطلاعات با نرخ انتقال اشتباه دریافت گردد. که در شرایط عادی نباید اتفاق بیافتد.
Synchronus and Asynchronous Serial
USART در AVR
ارسال کننده و دریافت کننده همزمان و غیرهمزمان در میکروکنترلرهای AVR دارای ویژگی های زیر می باشند که به توضیح آنها خواهیم پرداخت :
عملکرد کاملا دو طرفه همانطور که قبلا اشاره شد در این عملکرد اطلاعات در یک لحظه در هر دو جهت انتقال می یابد به طوری که اگر پایه RXD از میکروکنترلر در حال دریافت داده سریال می باشد در همین زمان نیز یک داده سریال را می توان از پایه TXD ارسال نمود زیرا رجیسترهای مربوط به دریافت و ارسال کاملا از یکدیگر مجزا هستند و به صورت مستقل عمل می نمایند و قدرت ما را در استفاده از رابط سریال بیشتر می کند.
عملکرد سریال به صورت سنکرون و آسنکرون
عملکرد سنکرون در دو مد Master و Slave
پشتیبانی ازقالب های داده 5 و 6 و 7 و8 و یا 9 بیتی و نیز یک یا دو بیت توقف که به صورت اختیاری انتخاب می گردد. میکروکنترلرهای AVR این توانایی را دارد که داده های سریال را در قالب های مختلف ارسال نماید.
به طور مثال اگر از قالب داده پنج بیتی استفاده می شود ابتدا یک بیت شروع و سپس پنج بیت اطلاعات و یک یا دو بیت توقف خواهیم داشت.
مولد بیت توازن زوج یا فرد و بررسی بیت توازن و تست آن توسط سخت افزار
آشکار سازی خطای قالب بندی
فیلتر کردن نویز شامل آشکار سازی بیت آغاز خطا و فیلتر پایین کدر دیجیتال
در فیلتر پایین گذر دیجیتال در هر بار نمونه برداری سه نمونه ازبیت داده سریال خوانده می شود که پس از بررسی و تصمیم گیری بر اساس اکثریت داده صحیح مشخص می شود.
سه وقفه مجزا برای کامل شدن ارسال کامل شدن دریافت و خالی بودن رجیستر ارسال
حالت ارتباطی چند پردازنده ای
حالت ارتباطی غیرهمزمان با سرعت دو برابر
درمیکروکنترلرهای AVR در صورت استفاده از این مد می توان تا حداکثر 2 میبس سرعت انتقال دست یافت.
در شکل 11-4 یک بلوک دیاگرام ساده از USART یک میکروکنترلر AVR را مشاهده می فرمایید.
واحد تولید کننده پالس سرعت
USART چهار حالت عملکرد پالس ساعت همزمان را پشتیبانی می نماید:
1- آسنکرون معمولی
2- آسنکرون با سرعت دو برابر
3- سنکرون Master
4- سنکرون Slave
بلوک تولید کننده پالس سرعت ساعت وظیفه دریافت و یا ارسال پالسهای همزمانی را از طریق پین XCK برای مد ارتباط سریال سنکرون برعهده دارد. همانطور که می دانیم در حالت دریافت سریال سنکرون می توانیم دو مد Master و Slave داشته باشیم که در مد Master پالسهای همزمانی توسط این بلوک روی پایه XCK ارسال می گردد و در حالت Slave پالس های همزمانی از طریق همان پایه خوانده می شود. همچنین در حالت ارتباط سریال آسنکرون این بلوک وظیفه تولید و تنظیم سرعت ارتباط سریال را برای دریافت و ارسال داده برعهده دارد که این امر به کمک رجیسترهای UBRRH و UBRRL و بلوک تولید کننده نرخ انتقال صورت می گیرد. در شکل 11-5 دقیق تر به این موضوع خواهیم پرداخت .
توضیحات سیگنالها
Txclk پالس ساعت ارسال که یک سیگنال داخلی است.
Rxclk پالس ساعت دریافت که یک سیگنال داخلی است.
Xcki ورودی از پایه XCK که برای پالس های ساعت همزمانی در حالت ارسال سنکرون Slave از آن استفاده می شود.
Xcko خروجی پالس های ساعت همزمانی در حالت ارسال سنکرون Master
Fose فرکانس کاری میکروکنترلر که همان فرکانس نوسان ساز می باشد.
U2x بیت کنترل
با توجه به شکل 11-5 مقدار رجیستر UBRR وارد یک شمارنده پایین شمار شده و با هر بار صفر شدن این شمارنده مقدار UBRR بر روی این شمارنده بارگذاری می گردد. ورودی پالس ساعت این شمارنده در واقع همان فرکانس کاری میکروکنترلر است که از خروجی نوسان ساز به این شمارنده اعمال می گردد و در نتیجه مقدار در خروجی این شمارنده ظاهر خواهد شد. خروجی شمارنده پایین شمار به طور مستقیم جهت پالس های هماهنگی برای دریافت داده آسنکرون استفاده می شود تا روند دریافت و زمان بندی خواندن اطلاعات از روی پایه RXD در حالت دریافت غیر همزمان توسط این پالس ساعت داخلی هماهنگ شود.
خروجی شمارنده پایین شمار برای هماهنگی در ارسال آسنکرون سریال نیز مورد استفاده قرار می گیرد. در صورتی که بیت U2X فعال باشد یکی از تقسیم کننده ها از کار می افتد و در نتیجه خروجی شمارنده پایین شمار بر هشت تقسیم شده و ارسال داده سریال آسنکرون با سرعت دو برابر انجام می شود و اگر بیت U2X صفر باشد خروجی شمارنده بر شانزده تقسیم خواهد شد. و نرخ ارسال به صورت خواهد بود. که در مد دو برابر سرعت این مقدار دو برابر خواهد شد.
با توجه به توضیحات داده شده پالسهای همزمانی برای دریافت داده سریال آسنکرون شانزده برابر و در حالت سرعت دو برابر هشت برابر بیشتر از پالسهای همزمانی برای ارسال است. که این موضوع مشکلی را برای Baud Rate ارسال یا دریافت ایجاد نمی کند.
چرا که در حالت دریافت سریال آسنکرون یک فیلتر دیجیتال پایین گذر طراحی شده است و برای نمونه برداری بیشتر از یک بیت نیاز به پالس های با فرکانس بالاتری نسبت به فرکانس ارسال دارند. همانطور که گفته شد در قسمت دریافت کننده از هر بیت داده سریال سه بار نمونه برداری می گردد و با توجه به اکثریت یکسان بودن نمونه ها سطح منطقی آن تایید می شود.
در جدول 11-1 چگونگی محاسبه Baud Rate آورده شده است.
جدول 11-1 تعیین Baud Rate
مد سریال
|
Baud Rate
|
مد آسنکرون
|
|
مد آسنکرون
|
|
مد آسنکرون
|
|
با توجه به شکل 11-5 پالسهای همزمانی برای حالت سریال سنکرون در مد slave از بلوکهایی عبور می کنند که باعث محدودیت در سرعت خواهند شد. پالسهای ورودی ابتدا توسط رجیستر همزمانی نمونه برداری می شود و سپس وارد یک تشخیص دهنده خواهد شد که این امر دو پالس ساعت را به خود اختصاص می دهد و در نتیجه فرکانس ورودی برای پالسهای همزمانی حداکثر می تواند 4/1 فرکانس نوسان ساز میکروکنترلر باشد در بلوک تشخیص دهنده لبه با توجه به بیت UCPOL نمونه برداری انجام می گیرد. اگر 1=UCPOL باشد نمونه برداری در لبه نزولی و اگر 0= UCPL باشد نمونه برداری در لبه صعودی صورت می گیرد که این بیت کنترلی بیت صفرم از رجیستر کنترلی UCSUC است. شکل 11-6 بهتر این موضوع را نشان می دهد.
واحد فرستنده سریال
این قسمت با توجه به شکل 11-7 دارای یک رجیستر به نام UDR است که با قرار دادن یک بایت در این رجیستر میکروکنترلر اقدام به ارسال آن خواهد نمود. اطلاعات از رجیستر UDR وارد یک شیفت رجیستر PISO شده و اعمال پالس ساعت به شیفت رجیستر اطلاعات به صورت سریال خارج می شود و در صورتی که از بیت توازن نیز استفاده شود با اضافه شدن به اطلاعات بر روی پایه TXD قرار خواهد گرفت.
فرستنده سریال وظیفه تولید بیت شروع و پایان و ایجاد یک قالب استاندارد را برعهده دارد که با توجه به تنظیمات این قالب بندی می تواند 5 و 6 و 7 و 8 یا 9 بیتی بیت توازن و یک یا دو بیت پایان را دارا باشد.
واحد گیرنده سریال
با توجه به شکل 11-8 در این قسمت USART ابتدا شیفت رجیستر گیرنده با سرعتی که به وسیله واحد تولید Baud Rate تنظیم شده است. اطلاعات را بیت به بیت از پایه RXD دریافت می کند پس از حذف بیت های اضافی مانند توازن و پایان داده ها درون شیفت رجیستر قرار می گیرند.
همچنین این واحد وظیفه بررسی بیت توازن و کنترل خطای توازن را بعهده دارد به طوری که می تواند خطاهای قالب بندی داده توازن و سرریزداده را گزارش نماید.
رجیسترهای USART
رجیستر UDR
UDR یک رجیستر هشت بیتی است که فقط برای ارتباط سریال در AVR استفاده می شود. جهت انتقال داده از طریق خط TXD بایتی در رجیستر UDR قرار می گیرد. همین طور UDR یک بایت داده را که بوسیله خط RXD دریافت شده است را در خود نگه می دارد.
هنگامی که یک بایت به درون UDR نوشته شود با بیتهای شروع توقف و در صورت لزوم بیت نهم و بیت توازن قالب بندی شده و به طور سریال از طریق پایه TXD انتقال می یابد.
همین طور هنگامی که بیتها به طور سریال از طریق پایه RXD دریافت می شوند واحد گیرنده سریال با حذف بیتهای توقف و شروع آن را از قالب بندی در آورده و بعد از رمز گشایی بایت بدست آمده در داخل UDR قرار می گیرد.
رجیستر UCSRA
UCSRA یک رجیستر 8 بیتی است که برای برنامه ریزی و کنترل واحد سریال استفاده می شود.
RXC
اگر در بافر گیرنده داده ای موجود بوده و توسط کاربر خوانده نشده باشد بیت RXC یک خواهد بود. در صورت خالی بودن بافر گیرنده این بیت صفر خواهد بود.
همچنین اگر گیرنده غیر فعال باشد بافر خالی و بیت RXCصفر می شود. این بیت می تواند برای فعال کردن وقفه دریافت نیز بکار رود.
TXC
بیت TXC زمانی که تمامی داده سریال به بیرون شیفت رجیستر انتقال یافت و داده جدیدی برای ارسال وجودنداشته باشد یک می شود. این در حالی است که داده جدیدی در بافر فرستنده موجود نباشد. این بیت همچنین می تواند یک وقفه کامل شدن ارسال را ایجاد کند.
UDRE
بیت UDRE زمانی فعال خواهد شد که بافر ارسال آماده دریافت اطلاعات جدید باشد. همچنین این بیت می تواند برای فعال کردن وقفه خالی بودن UDR بکار رود. UDRE بعد از بازنشانی شدن میکروکنترلر یک خواهد شد.
FE
بیت FE زمانی که در قالب داده دریافتی اشکالی وجود داشته باشد یک خواهد شد. به طور مثال اگر بیت STOP اولین کاراکتر دریافتی صفر باشد FE یک خواهد شد. این بیت تا زمانی معتبر است که بافر دریافت UDR خوانده نشده باشد. هنگام نوشتن در رجیستر UCSRA باید این بیت را صفر کرد.
DOR
بیت DOR زمانی فعال خواهد شد که بافر دریافت پر شده باشد و کاراکتر جدیدی به شیفت رجیستر وارد و یا بیت شروع جدید تشخیص داده می شود. در این حالت اطلاعات جدید از بین می رود و یک خطا به نام Data Over Run بوجود می آید.
این بیت تا زمانی معتبر خواهد بود که بافر دریافت خوانده شود. هنگامی که رجیستر UCSRA را مقداردهی می کنید این بیت را نیز صفر کنید.
PE
بیت PE هنگامی که خطای توازن در قالب دریافتی گیرنده ایجاد شود یک خواهد شد و تا زمانی این بیت معتبر خواهد بود که رجیستر دریافت خوانده نشده باشد.
هنگامی که رجیستر UCSRA را مقداردهی می کنید این بیت را نیز صفر کنید.
U2X
بیت U2X دو برابر کننده سرعت ارسال بوده و فقط در زمان ارسال داده به صورت آسنکرون کاربرد دارد و در حالت سنکرون باید آنرا صفر نمود.
MPCM
یک شدن این بیت میکروکنترلر را به حالت ارتباط سریال چند پردازنده ای می برد. در این حالت می توان چند میکروکنترلر را به صورت شبکه ای با یکدیگر ارتباط داد.
رجیستر UCSRB
UCSRB یک رجیستر 8 بیتی است که برای برنامه ریزی و کنترل واحد سریال استفاده می شود.
RXCIE
با یک کردن این بیت وقفه دریافت USART فعال خواهد شد و در صورتی که وقفه سراسری فعال باشد با دریافت داده و فعال شدن پرچم RXC وقفه مورد نظر اجرا خواهد شد.
TXCIE
در صورت یک کردن این بیت وقفه ارسال USART فعال خواهد شد. در صورتی که وقفه سراسری فعال باشد با ارسال داده و فعال شدن پرچم TXC وقفه مورد نظر اجرا می شود.
UDRIE
با فعال شدن این بیت وقفه خالی بودن رجیستر داده فعال خواهد شد به شرط آنکه وقفه سراسری فعال باشد .
RXEN
با یک کردن این بیت گیرنده USART فعال خواهد شد زمانی که این بیت فعال شود عملکرد عادی پایه RXD قطع شده و به عنوان ورودی سریال عمل خواهد نمود. اگر این بیت فعال باشد و بعد از آن را غیرفعال کنیم در این حالت بافر دریافت سریال خالی می شود و بیت های DOR، FE و PE نامعتبر خواهند شد.
TXEN
با یک کردن این بیت فرستنده USART فعال خواهد شد هنگامی که این بیت یک می شود عملکرد عادی پایه TXD قطع شده و بعنوان خروجی سریال عمل خواهد نمود. صفر کردن این بیت تا هنگامی که اطلاعات بطور کامل ارسال نشود فرستنده را غیرفعال نمی کند.
UCSZ2
این بیت به همراه بیت های UCSZ1..0 در رجیستر UCSRC تعداد بیت های داده سریال را در یک قالب برای ارسال و دریافت معین می کند.
RXB8
بیت نهم داده دریافت شده سریال می باشد توجه داشته باشید که این بیت در زمانی که از قالب دریافت و ارسال 9 بیتی استفاده کنید قابل قبول خواهد بود همچنین این بیت باید قبل از خوانده شدن رجیستر دریافت خوانده شود.
TXB8
وقتی از قالب ارسال سریال 9 بیتی استفاده می کنید این بیت بعنوان بیت نهم ارسال شود باید توجه داشت که این بیت قبل از نوشته شدن هشت بیت در رجیستر UDR نوشته شود.
رجیستر UCSRC
رجیستر UCSRC از نظر موقعیت آدرس حافظه با رجیستر UBRRH مشابه می باشد به همین دلیل برای دسترسی به هر دو رجیستر یک بیت کنترلی در نظر گرفته شده است.
URSEL
این بیت دسترسی به یکی از رجیسترهای UBRRH یا UCSRC را تعیین می کند. دربخشهای بعدی بیشتر به عملکرد این بیت می پردازیم
UMSEL
بیت UMSEL برای انتخاب مد کاری USART به کار می رود. اگر این بیت صفر باشد مد کاری آسنکرون و اگر یک باشد مد کاری سنکرون خواهد بود.
UPM1.0
این دو بیت جهت انتخاب فعال یا غیرفعال کردن بیت توازن مورد استفاده قرار می گیرد.
با توجه به انتخاب نوع توازن زوج یا فرد واحد فرستنده سریال بطور خودکار بیت توازن را ایجاد و ارسال خواهد نمود و واحد گیرنده نیز با توجه به بیت توازن می تواند خطای اشکال در بیت توازن را گزارش کند که در این حالت بیت PE فعال خواهد شد. جدول 11-2 چهار حالت توازن را نشان می دهد.
جدول 11-2 تنظیمات بیتهای UPM0 و
حالت بیت توازن
|
UPM0
|
UPM1
|
حالت غیرفعال
|
0
|
0
|
حالت تعریف نشده
|
1
|
0
|
حالت بیت توازن زوج
|
0
|
1
|
حالت بیت توازن فرد
|
1
|
1
|
USBS
در صورت فعال بودن USBS دو بیت پایانی و با صفر شدن این بیت نیز یک بیت پایانی ارسال می شود. دریافت کننده سریال با این بیت کاری ندارد و تاثیری بر عملکرد دریافت کننده نخواهد گذاشت.
UCSZ1.0
این دو بیت به همراه بیت UCSZ2 تعداد بیت های یک داده سریال را انتخاب می کنند. حالتهای عملکرد این سه بیت در جدول 11-3 آمده است.
جدول 11-3 تنظمیات اندازه کاراکتر
اندازه کاراکتر
|
UCSZ0
|
UCSZ1
|
UCSZ2
|
حالت 5 بیتی
|
0
|
0
|
0
|
حالت 6 بیتی
|
1
|
0
|
0
|
حالت 7 بیتی
|
0
|
1
|
0
|
حالت 8 بیتی
|
1
|
1
|
0
|
حالت تعریف نشده
|
0
|
0
|
1
|
حالت تعریف نشده
|
1
|
0
|
1
|
حالت تعریف نشده
|
0
|
1
|
1
|
حالت 9 بیتی
|
1
|
1
|
1
|
UCPOL
این بیت تنها در حالت ارتباط سریال سنکرون استفاده می شود با یک کردن این بیت نمونه برداری از پایه RXD و یا تغییر بیت داده روی پایه TXD به ترتیب در لبه بالا رونده و پایین رونده پالس XCK صورت خواهد گرفت و اگر این بیت را صفر کنید نمونه برداری از پایه RXD در لبه پایین رونده و تغییر بیت داده روی پایه TXD در لبه بالا رونده پالس XCK انجام می شود.
رجیستر UBRR
UBRR یک رجیستر شانزده بیتی است که از دو رجیستر UBRRL و UBRRH تشکیل می شود همان طور که قبلا گفته شد رجیستر UBRRH دارای آدرس یکسانی با رجیستر UCSRC در فضای رجیستر I/O می باشد که بیت URSEL برای انتخاب بین رجیستر UBRRH یا UCSRC مورد استفاده قرار می گیرد.
URSEL
این بیت با همین نام در رجیستر UCSRC نیز وجود دارد و با توجه به اینکه دو رجیستر از آدرس یکسانی در فضای I/O بهره می برند در نتیجه این بیت بین دو رجیستر به صورت مشترک عمل می کند و با صفر شدن URSEL می توان به رجیستر UBRRH دسترسی داشت باید توجه داشت که این بیت هنگام خواندن از رجیستر UBRRH همواره صفر خواهد بود.
BIT12...14
این بیت ها بلااستفاده بوده و در هنگام خواندن و نوشتن صفر هستند.
BIT11..0
این بیت ها برای تعیین Baud Rate رابط USART مورد استفاده قرار می گیرند در واقع بعنوان یک رجیستر دوازده بیتی برای تعیین Baud Rate در اختیار کاربر است.
تعیین نرخ انتقال Baud Rate
همانطور که در بخش های قبلی بررسی شد می توان به وسیله رجیستر UBRR نرخ انتقال را برای ارتباط سریال آسنکرون تعیین نمود. برای این منظور می توان از روابط زیر استفاده نمود :
همچنین برای تعیین Baud Rate در حالت عملکرد سنکرون می توان از رابطه زیر استفاده نمود:
برای محاسبه خطای Baud Rate می توان از رابطه زیر استفاده نمود :
مثال 11-1
برای Baud Rate9600 و فرکانس نوسان ساز 1 مگاهرتز در ارسال سریال و مد آسنکرون مقدار رجیستر UBRR را تعیین کنید.
برای جبران خطای Baud Rate می توان از کبازنشانی ال 432/8 مگاهرتز استفاده نمود در این صورت رجیستر UBRR را با عدد 11 بارگذاری کرده تا خطای حاصل معادل صفر شود جدول 11-4 حداکثر خطای مجاز برای حالت های مختلف ارتباط سریال آسنکرون نشان می دهد.
جدول 11-4 حداکثر خطای مجاز Baud Rate
حداکثر خطای مجاز
U2x=0
|
حداکثر خطای مجاز u2x=1
|
تعداد بیت داده+توازن
|
5/2%
|
3%
|
5بیت
|
2%
|
5/2%
|
6بیت
|
5/1%
|
2%
|
7بیت
|
5/1%
|
2%
|
8بیت
|
5/1%
|
5/1%
|
9بیت
|
1%
|
5/1%
|
10بیت
|
برنامه ریزی اولیه USART
قبل از هر گونه ارتباط سریال بایستی USART را برنامه ریزی نماییم .تنظیماتی مثل تعیین Baud Rateنوع ارتباط سریال قالب بندی اطلاعات و ... توجه داشته باشید که قبل از برنامه ریزی اولیه USART وقفه سراسری را غیرفعال نمایید.
مثال 11-2
مقدار مناسب برای رجیسترهای UCSRA، UCSRC و UBRR که در آن USART به صورت قالب بندی هشت بیتی و یک بیت توقف و بدون توازن و نرخ انتقال 19200 عمل نماید را مشخص کنید.
حل
در ابتدا رجیسترهای UCSRBو UCSRC را مقداردهی می کنیم. چون USART هشت بیتی است. بنابراین با توجه به جدول 11-3 مقدار بیتهای UCSZ2..0=011 خواهد شد و چون قسمت فرستنده باید فعال باشد بنابراین بیت TXEN در رجیستر UCSRB نیز یک می شود.
تذکر هنگام نوشتن در رجیستر UCSRC باید بیت URSEL را یک نمود.
به علت اینکه مد کاری USART در حالت آسنکرون است بنابراین بیت UMSEL=0 می شود همچنین بیت های UPM1..0 با توجه به جدول 11-2 برابر 00H خواهد بود و بیت USBS بخاطر استفاده از یک بیت توقف صفر خواهد شد.
در برنامه ریزی اولیه USART پرچم های وضعیت در رجیستر UCSRA را پاک کنید. بنابراین با توجه به نرخ انتقال 19200 داریم :
ارسال سریال
فرستنده سریال USART با یک کردن بیت فعال ساز ارسال در رجیستر UCSRB فعال خواهد شد.
در این حالت فرستنده آماده ارسال سریال از پایه TXD است. قبل از هر گونه ارسال باید USART را برنامه ریزی اولیه نمود.
ارسال سریال با قالب بندی پنج تا هشت بیتی
در این قالب بندی با بارگذاری اطلاعات در بافر فرستنده ارسال آغاز خواهد شد. و اطلاعات از طریق پایه TXD و با سرعت انتقال از پیش تنظیم شده ارسال می شود.
نکته : قبل از قراردادن اطلاعات در رجیستر UDR باید از وضعیت خالی بودن بافر فرستنده اطلاع حاصل نمود. به این منظور بیت UDRE را بررسی کرده و در صورت یک بودن آن می توان در UDR نوشت و در غیر اینصورت باید منتظر یک شدن UDRE ماند.
مثال 11-3
برنامه ای بنویسید که داده 55H را به صورت قالب زیر و با فرض استفاده از نرخ انتقال 19200 و استفاده از کبازنشانی ال خارجی 0592/11 مگا هرتز روی پایه TXD ارسال نماید.
قالب اطلاعات هشت بیت یک بیت پایان و بدون بیت توازن
حل
با توجه به قالب بندی اطلاعات رجیسترهای USART را مانند مثال قبل مقداردهی می کنیم.
ارسال سریال با قالب بندی 9 بیتی
در این قالب بندی طول اطلاعات 9 بیت می باشد به طوری که هشت بیت پایین اطلاعات در رجیستر UDR و بیت نهم در بیت TXB8 واقع در رجیستر UCSRB قرار خواهد گرفت.
باید توجه داشت که ابتدا بیت نهم نوشته شده و بعد هشت بیت پایین در UDR قرار گیرد.
همچنین قبل از نوشتن در UDR باید از خالی بودن آن اطمینان حاصل نمود.
مثال 11-4
برنامه ای بنویسید که داده 1AAH را به صورت قالب 9 بیتی با یک بیت توقف و بدون بیت توازن برای Baud Rate 9600 تنی و فرکانس 8 مگاهرتز ارسال کند.
حل
از روی جدول 11-3 بیتهای UCSZ2..0=111 خواهد شد بنابراین :
M32def.inc include
$0000 ORG
CLI
R16 CLR
UCSRA,R16 OUT
$0C,R16 LDI
UCSRC,R16 OUT
$86,R16 LDI
R16,UCSRC OUT
R16 CLR
UBBRH,R16 OUT
R16,$33 OUT
UBRRL,R16 OUT
SEL
بررسی بیت UDRE UCSRA,5 SBIS
منتظر خالی شدن بافر UDR LOOP RJMP
بیت نهم برابر یک می شود UCSRB,0 SBI
R16,$AA LDI
UDR,U16 OUT
.
.
.
دریافت سریال
عملکرد دریافت سریال با نوشتن یک در بیت RIXN از رجیستر UCSRB فعال خواهد شد. دریافت سریال با آشکار سازی یک بیت شروع روی پایه RXD آغاز می گردد و با توجه به نرخ دریافت و یا پالس ساعت پایه XCKنمونه برداری شروع می شود و داده ها به شیفت رجیستر گیرنده وارد خواهد شد سپس می توان با خواندن UDR اطلاعات را به دست آورد.
اطلاعات دریافتی می تواند در قالب های 5 تا 9 بیت باشد در صورت استفاده از قالب 9 بیتی باید بیت نهم اطلاعات یا RXB8 از رجیستر UCSRB را ابتدا و سپس هشت بیت پایین موجود در UDR را خواند.
نکته قبل از خواندن رجیستر UDR باید از کامل شدن مرحله دریافت اطمینان حاصل نمود به این منظور با بررسی بیت RXC از رجیستر UCSRA و در صورت یک بودن این بیت می توان داده را از رجیستر UDR خواند در غیر اینصورت باید منتظر یک شدن RXC ماند .
مثال 11-5
برنامه ای بنویسید که داده های سریال را از سیستم جانبی دریافت کند. قالب داده به صورت 9 بیتی با یک بیت توقف و بدون بیت توازن و نرخ انتقال 4800 می باشد
حل
از روی جدول 11-3 بیتهای 111=UCSZ2..0 بنابراین :
M32def.inc include
$0000 ORG
CLI
R16 CLR
UCSRA,R16 OUT
R16,$14 LDI
UCSRB,R16 OUT
R16,$86 LDI
UCSRC,R16 OUT
R16 CLR
UBRRH,R16 OUT
R16,$33 LDI
UBRRL,R16 OUT
SEL
بررسی بیت RXC UCSRA,7 SBIS
انتظار برای دریافت کامل اطلاعات LOOP RJMP
R16,UCSRA IN
R17,UCSRB IN
خواندن 8 بیت پایین اطلاعات R18,UDR IN
بررسی بیتهای خطای DOR,DE,FE R16,$1C ANDI
پرش در صورت بدون خطا بودن دریافت NOERROR BREQ
ERROR JMP
NOERROR
شیفت به راست R17 R17 LSR
جداسازی بیت نهم اطلاعات R17,$01 ANDI
R20برابر بیت نهم اطلاعات R20,R17 MOV
.
.
.
ERROR
NOP
.
.
.
نکته ای که در برنامه بالا وجود دارد بررسی بیت های خطا می باشد در صورت بروز هر کدام از این خطاها برنامه به برچسب ERROR پرش خواهد نمود.
طریقه خواندن اطلاعات دریافتی در قالب های پنج تا هشت بیتی نیز مانند مثال بالا می باشد فقط نیازی به خواندن بیت RXB8 نیست.
ارتباط سریال سنکرون (همزمان)
در مدار ارتباطی سنکرون پایه XCK در حالت Slave بعنوان ورودی پالس ساعت و در حالت master بعنوان خروجی پالس ساعت استفاده می شود. یک رابطه ای بین لبه های پالس ساعت و نمونه برداری از روی پایه RXD و یا تغییر داده روی پایه TXD وجود دارد .
چنانچه بیت UCPOL در رجیستر UCRSC فعال باشد مطابق شکل 11-10 نمونه برداری در لبه بالا رونده و تغییر داده در لبه پایین رونده پالس XCK انجام می شود و اگر بیت UCPOL برابر صفر باشد نمونه برداری در لبه پایین رونده و تغییر داده در لبه بالا رونده پالس XCK انجام خواند شد بطور مثال یکی از کاربردهای استفاده از این مد خواندن صفحه کلید کامپیوتر است.
مد ارتباط چند پردازنده ای
این مد که بیشتر برای شبکه بندی بین میکروکنترلرها استفاده می شود با یک نمودن بیت MPCM از رجیستر UCSRA فعال خواهد شد فرض کنید یک میکروکنترلر Master و تعدادی میکروکنترلر slave به صورت شکل 11-11 وجود داشته باشد. هنگامی که master قصد دارد به یکی از slave ها دسترسی داشته باشد باید آن را آدرس دهی نماید سپس اطلاعات به slave مورد نظر ارسال شود.
برای این منظور در master می توان از قالب اطلاعات 9 بیتی استفاده نمود در این حالت بیت نهم هنگامی که اطلاعات ارسالی شامل آدرس است یک و در صورتی که اطلاعات ارسالی شامل داده باشد باید صفر شود.
تمام slave ها نیز باید در قالب 9 بیتی قرار بگیرند. همه slaveها را در مد چند پردازنده ای فعال کرده و منتظر دریافت اطلاعات از master می مانند.
هنگامی که master قصد ارسال داده ای به یکی از Slave ها را داشته باشد با ارسال یک فرم آدرس تمام slaveها این آدرس را دریافت کرده و با بررسی آن با آدرس خود تشخیص می دهند که آیا انتخاب شده اند یا خیر. اگر انتخاب شده بودند بیت MPCM خود را پاک کرده و منتظر دریافت داده می مانند در غیر این صورت همچنان MPCM=1 و منتظر دریافت آدرس خواهند بود.
پس از انتخاب Slave باید با ارسال پیغامی به Master انتخاب شدن خود را اطلاع دهد تا master بیت نهم خود را صفر کند.
پس از اتمام ارسال داده master بیت نهم خود را یک می کند و پس از این slave مورد نظر نیز با یک کردن MPCM خود منتطر آدرس می ماند.
استفاده از وقفه برای ارتباط سریال
استفاده از وقفه ارسال
فرستنده USART دارای دو پرچم TXC و UDRE می باشد به طوری که پرچم نشانه تکمیل ارسال و پرچم UDRE نشانه خالی بودن با فرارسال است. هر کدام از این دو پرچم می توانند برای تولید وقفه بکار گرفته شوند.
برای استفاده از وقفه پرچم UDRE ابتدا بیت فعال ساز وقفه خالی بودن رجیستر یا UDUIE در رجیستر UCSRB را یک کرده و سپس با فعال شدن پرچم UDRE وقفه مربوطه فعال خواهد شد. البته به شرطی که وقفه سراسری نیز فعال باشد. با نوشتن در رجیستر UDR پرچم UDRE پاک می شود.
هنگام استفاده از وقفه ارسال در روال سرویس وقفه UDRE باید اطلاعات جدید را در UDR نوشت تا پرچم UDRE پاک شود و یا اینکه وقفه را غیر فعال کنید.در غیر اینصورت پس از اتمام روال سرویس وقفه بار دیگر وقفه رخ می دهد. بیت TXC هنگامی که ارسال به طور کامل انجام شود فعال خواهد شد. برای استفاده از وقفه پرچم TXC باید بیت TXCIE از رجیستر UCSRB را یک کرده تا وقفه TXC فعال شود.
استفاده از وقفه دریافت
هنگام دریافت اطلاعات پرچم RXC فعال خواهد شد که نشان دهنده وجود اطلاعات خوانده نشده در رجیسترهای UDR است این پرچم هنگامی که بافر گیرنده خالی باشد صفر است.
برای استفاده از وقفه دریافت ابتدا بیت RXCIE از رجیستر UCSRB را یک کرده تا وقفه RXC فعال شود پس از این به هنگام دریافت کامل اطلاعات وقفه فعال خواهد شد البته به شرطی که وقفه سراسری نیز فعال باشد در روال وقفه اطلاعات موجود در UDR خوانده می شود تا پرچم RXC پاک شود در غیر اینصورت پس از پایان روال وقفه دوباره وقفه RXC فعال خواهد شد.