معماری

ارتباط سریال USART در میکروکنترلر AVR

برای وصل کردن کامپیوتر و میکروکنترلر بهم  و یا وصل کردن چن تا میکروکنترلر به هم دیگه  از  ارتباط سریال USART استفاده میکنیم که این ارتباط در میکروکنترلر AVR تعبیه شده و در ادامه،با این واحد بیشتر آشنا میشیم.

روش های انتقال داده:

  1. انتقال داده ها بصورت موازی

در این روش همونطوری که از اسم این روش مشخصه،داده ها بصورت موازی و به تعداد بیتی که موجوده، به خطوط(سیم) نیاز داریم تا ارتباط ایجاد کنیم.مثلن برای انتقال داده ی یک بایتی (که ۸بیت هستش) به ۸خطوط نیاز داریم که به این ترتیب داده ها نسبت به روش سریال، سریع تر منتقل میشن ولی عیب هایی هم دارن که  در اثر طولانی بودن مسیر و به تعداد زیاد خطوط،نویز سیم ها بیشتر میشه و همچنین سیم هایی که در مجاور هم هستن،ظرفیت خازنی شان هم بیشتر میشه که این کار باعث تغییر شکل پالس ها میشه.

  1. انتقال داده ها بصورت متوالی(سریالی)

در این روش،انتقال داده معمولا توسط یه خط(سیم) انجام میشه که این تک سیمه بودن با این که سرعت انتقال داده رو پایین میاره ولی باعث کاهش نویز و کاهش هزینه سیم های اضافی میشه که اینکار هم برای فواصل دور این سبک انتقال رو بهینه میکنه.

این روش به این صورته که  تمام ۸ بیتِ یک بایت توسط رجیستر جابجایی با ورودی موازی و خروجی سریال به بیت های سریال در قالب مشخص بر تک سیم وارد میشه و تو قسمت دریافت کننده یه رجیستر جابجایی با ورودی سریال  و خروجی موازی هستش که داده های انتقال یافته رو بصورت یک بایت در میاره.

اصول ارتباط سریال و انواع آن در میکروکنترلرAVR:

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

میکروکنترلر Atmega32/16 از سه سیستم ارتباط سریال پشتیبانی میکنه:

  1. ارتباط سریال USART
  2. پروتکل گذرگاه SPI
  3. پروتکل دوسیمه TWI

 

ارتباط سریال USART در  AVR:

ارتباط سریال USART یک نوع از انواع ارتباطات AVR هستش که به دو روش سنکرون(همزمان) و آسنکرون (غیرهمزمان) برای  انتقال داده استفاده میکنه.در روش سنکرون تمام اطلاعات در یک لحظه و بدون قالب بندی و بدون نیاز به بیت های اضافی(بیت های STOP,START,PARITY) و بصورت یک بلوک داده منتقل میشه در این مدل،دو دستگاه فرستنده و گیرنده با ارسال پالس کلاک با هم همزمان میشن ولی در مدل آسنکرون،در هر لحظه یک بایت منتقل میشه و تا تمام نشدن انتقال بایت اول،انتقال بایت دوم شروع نمیشه و همچنین این مدل به ارسال پالس کلاک نیازی نیس.

میتوان برنامه ایی ساخت که هم به روش سنکرون و هم به روش آسنکرون طراحی شده باشه ولی ممکنه برنامه ایی  با روش سنکرون طولانی باشه ولی با روش آسنکرون ساده یا برعکس،برای همین آیسی هایی به نام USART طراحی شده ان که این کار رو میکنه.

USART=Universal  Synchronous-Asynchronous Receiver-transmitter

از انتقال سنکرون داده ها معمولا برای ارسال تک کاراکتر استفاده میشه و از آسنکرون برای انتقال بلوکی (مجموعه ای از کاراکترها)استفاده میشه که در این روش بلوک قالب بندی شده و در وسط بیت آغاز و پایان قرار داره.(قالب بندی یعنی اینکه داده ها رو در وسط بیت های آغاز و پایان قرار بدیم).

در قالب بندی هنگامی که داده ایی منتقل نمیشه،سیگنال یک هستش(که به آن نشانه میگن) و انتقال داده با بیت آغاز شروع شده که یک بیته و مقدار این بیت صفره و به دنبال همین بیت آغاز،بیت های داده که به ترتیب،اول بیت b0 و بعد b1 و…وb7 میان و درنهایت بعد از بیت b7 بیت پایان که مقدارش یک هستش و میتونه یک یا دو بیتی باشه،میاد.

شکل زیر قالب بندی دریافت کد اسکی کاراکتر M رو نشون میده.

قالب بندی در مد آسنکرون در ارتباط سریال USART

نکته:همزمان سازی در مد آسنکرون توسط انتخاب مناسب  نرخ بیت (Boud Rate) و بیت های شروع و پایان انجام میشه.

در ارتباط سریال (مخصوصا ارتباط سریال USART)سه حالت وجود داره که به این قراره:

یک طرفه: در این نوع انتقال داده فقط ارسال میشه یا اینکه فقط دریافت میشه.مثلن پرینتر،داده از کامپیوتر فقط دریافت میکنه و یا اینکه موس،داده به کامپیوتر فقط ارسال میکنه.

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

تمام دوطرفه:در این نوع انتقال در هر لحظه،میتوان داده هم ارسال کرد و هم میتوان دریافت کرد.

انواع ارتباط سریال در ارتباط سریال USART

قبل از فعال سازی پورت سریال باید آن را تنظیم کرده سپس فعال کنیم، تنظیمات عبارت است از سرعت انتقال ، قالب داده ها(۵،۶،۷،۸،۹ بیتی) ، حالت سنکرون و آسنکرون و آسنکرون با سرعت دو برابر ، حالت مستر و …

 

معرفی رجیسترهای ارتباط سریال USART:

در میکروکنترلر avr پنج ثبات به ارتباط سریال USART اختصاص دارد که عبارتند از:

۱٫UDR

۲٫UCSRA

۳٫UCSRB

۴٫UCSRC

۵٫UBRR

رجیستر UDR:

USART DATA REGISTER

این رجیستر،یه رجیستر ۸ بیتی بوده که دیتای ارسالی و دریافتی ارتباط سریال USART تو این رجیستر  ذخیره میشه،یعنی زمانی که اطلاعات دریافت میشه تو این رجیستر ذخیره میشه و قابل خواندنه و همچنین زمانی که بعنوان ارسال کننده استفاده کنیم،اطلاعات تو این رجیستر نوشته میشه(قابل نوشتنه)  تا میکرو بتونه بفرسته.

 

رجیستر UCSR:

USART CONTROL STATUS REGISTER

این رجیستر وظیفه تنظیم و کنترل وضعیت پورت ارتباط سریال USART رو برعهده داره که از سه رجیستر UCSRA و UCSRBو UCSRC تشکیل میشه.

 

رجیستر UCSRA:

USART CONTROL STATUS REGISTER A

رجیستر UCSRA در ارتباط سریال usart در میکروکنترلر AVR

بیت RXC:

این بیت پرچم دریافت اطلاعات هستش،زمانی که بافر دریافت اطلاعات خالیه،مقدار این بیت صفره و زمانی که دریافت اطلاعات تکمیل شده (بافر گیرنده پر باشه) و همچنین زمانی که داده ها خوانده نشده،پرچم این بیت فعال شده و مقدار یک تو این بیت ذخیره میشه.

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

بیت TXC:

عملکرد این بیت هم مثل عملکرد بیت RXC بوده با این تفاوت که بیت TXC پرچم فرستنده و RXC پرچم گیرنده هستش.

هنگامی تمامی محتویات رجیسترUDR بطور کامل  ارسال بشه این پرچم،یک میشه.

از این بیت هم مثل بیت RXC،میتونیم برای ایجاد وقفه (وقفه تکمیل ارسال داده) استفاده کنیم به این صورت که با فعال کردن وقفه تکمیل ارسال(روش فعال سازی در ادامه گفته میشه)،هنگامی که اطلاعات بصورت کامل ارسال بشه،وقفه تکمیل ارسال رخ داده و طبق این وقفه،روتین سرویس وقفه (وقفه تکمیل ارسال) اجرا میشه.

تو آموزش های قبلی هم گفته بودم که برای صفر کردن پرچم ها در محیط کدنویسی،به بیت پرچم مربوطه مقدار یک میدیم تا پرچم پاک بشه(مقدارش صفر بشه) به عبارت دیگه اگه بخواییم پرچمی صفر بشه باید از طریق کدنویسی به اون بیت مقدار یک بدیم تا صفر  بشه(تو پروژه ها این مطلبو میبینین).

بیت UDRE :

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

بیت FE :

این بیت خطای قالب بندی که در ابتدای مطلب بحث کردبم رو میگه  که اگه در قالب بندی مشکلی وجود داشته باشه این بیت یک میشه که لازمه برای مطلع بودن از خطا ی قالب بندی،ابتدا مقدار این بیت رو صفر قرار بدیم تا در صورت وجود خطا مطلع بشیم.

بیت DOR :

هنگامی که بافر دریافت (رجیسترUDR) پر بشه و اطلاعات جدید وارد بافر بشه،اطلاعات قبلی از بین رفته و این پرچم یک میشه و تا وقتی که اطلاعات از بافر خوانده نشده باشه این بیت همچنان صفر باقی میمونه.این بیت هم باید در ابندا صفر کنیم.

بیت PE :

این بیت زمانی یک میشه که خطای توازن در داده دریافتی رخ بده.

بیت U2X :

این بیت سرعت ارسال داده رو فقط در حالت آسنکرون دو برابر میکنه و که برای استفاده ازین قابلیت باید این بیت یک بشه و درحالت سنکرون نمیشه سرعت ارسال رو دو برابر کرد بنابرین باید این بیت رو در این حالت صفر کنیم.

بیت MPCM :

ازین بیت زمانی که میخواییم چن تا میکرو رو بهم وصل کنیم،استفاده میکنیم و با یک کردن این بیت،ارتباط شبکه ایی بین میکروکنترلرها فعال میشه.

بیت های U2X و MPCM کاربرد عمومی چندانی تو پروژه ها ندارن.

 

رجیستر UCSRB:

USART CONTROL STATUS REGISTER B

رجیسترUCSRB در ارتباط سریال USART در میکروکنترلر AVR

بیت RXCIE:

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

بیت TXCIE :

این بیت هم مثل بیت RXCIE عمل میکنه که اگه این بیت فعال باشه و ارسال اطلاعات به پایان برسه،به این وقفه پرش کرده و برنامه ای این وقفه رو اجرا میکنه.

بیت UDRIE:

این بیت برای فعال سازی وقفه پرچم UDRE در رجیستر UCSRA به کار میره،یعنی اگه رجستر دیتا(UDR) خالی باشه(بافر خالی باشه)،وقفه ی خالی بودن اجرا میشه.

بیت RXEN:

در صورت یک بودن این بیت،گیرنده ارتباط سریال USART فعال میشه.

بیت TXEN :

در صورت یک بودن این بیت،فرستنده ارتباط سریال USART،فعال میشه.

بیت UCSZ2 :

این بیت و بیت های UCSZ1 و UCSZ0 (این دو بیت تو رجیستر بعدی قرار داره) برا تنظیم قالب بندی به کار میرن.

بیت RXB8 :

این بیت زمانی که از قالب ۹ بیتی استفاده کنیم بیت نهم دریافتی در این بیت ذخیره شده و قابل خواندنه و باید قبل از خواندن هشت بیت دیگر در UDR این بیت خوانده بشه.

بیت TXB8 :

این بیت هم زمانی قابل استفاده اس که از قالب نه بیتی استفاده کنیم و برای ارسال بیت نهم کاربرد داره و باید برای ارسال بیت نهم، اول بیت نهم در این بیت نوشته بشه و سپس هشت بیت دیگر و در رجیستر UDR نوشته بشه.

 

رجیستر UCSRC:

USART CONTROL STATUS REGISTER C

رجیسترUCSRC در ارتباط سریال USART در میکروکنترلر AVR

بیت URSEL:

برای انتخاب و تنظیم رجیستر UCSRC باید این بیت رو یک کنیم زیرا آدرس I/Oاین رجیستر باUBRRH یکسان بوده و اگه این بیت یک باشه میتونیم این رجیستر رو تنظیم کنیم.

بیت UMSEL:

این بیت مد ارتباط سریال USARTرو انتخاب میکنه.اگه این بیت یک باشه مد سنکرون انتخاب میشه و اگه صفر باشه حالت آسنکرون انتخاب میشه.

بیت های UPM1,UPM0:

این بیت،میتونه بیت توازن را غیرفعال یا فعال کنه و در واحد فرستنده،بیت توازن زوج و یا فرد ایجاد کنه.

همانطوری که گفته شد یک بودن بیت  PE،خطا رو نشون میده و اگه در توازن هم خطایی بود تو این بیت ثبت میشه.

بیت های UPM0 و UPM1 رجیسترUCSRC در ارتباط سریال USART در میکروکنترلر AVR

بیت USBS:

این بیت ،تعداد بیت های STOP رو مشخص میکنه اگه این بیت صفر باشه یک بیت STOPداریم و اگه یک باشه،دو بیت STOP داریم.

بیت های UCSZ2 و UCSZ1 و UCSZ0:

این بیت ها سایز کاراکترها(داده ها)رو تعیین میکنه

بیت های UCSZ در رجیسترUCSRC در ارتباط سریال USART در میکروکنترلر AVR

بیت UCPOL:

این بیت در حالت سنکرون کاربرد داشته و تعیین میکنه که از حالت پایین رونده نمونه برداری کنه یا از حالت بالارونده.

 

رجیستر UBRR:

USART BUAD RATE REGISTER

رجیسترUBRR در ارتباط سریال USART در میکروکنترلر AVR

از  این رجیستر برای تنظیم نرخ انتقال(Bd rate) استفاده میشه که یه رجیستر ۱۶ بیتی بوده که از دو رجیستر UBRRH و UBRRL تشکیل میشه.

بیت URSEL:

همونطور که قبلا گفته شد،آدرس رجیستر UBRRH با آدرس رجیستر UCSRC یکسان بوده و برای تنظیم و انتخاب رجیستر UCSRC ،بیت URSEL رو یک میکنیم و برای انتخاب و تنظیم رجیستر UBRRH ،این بیت رو صفر میکنیم.

بیت های ۰ تا ۱۱:

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

فرمول UBRR و باودریت و فرکانس میکرو و Buadrate در ارتباط سریال USART در میکروکنترلر AVR

Buad rate=1200 , 2400 , 4800 , 9600 , 19200 , 38400 , 57600 , 115200 , 000

مثال)مقدار رجیستر UBRR با باودریت ۲۴۰۰ و با فرکانس ۱۶مگا هرتز برابر خواهد بود با:

این عدد رو رند کرده و تو رجیستر UBRR قرار میدیم که تو این رند کردن مقدار خطا ظاهر میشه که باید کمتر از۲ درصد باشه.

همونطوری می بینین میزان خطا ۰٫۱۶درصد بوده و این مقدار هم کمتر از ۲درصد میشه که یه مقدار مقبولی هستش.

پس  مقدار ۴۱۵ رو تو این رجیستر مینویسیم.عدد ۴۱۵ به باینری بصورت ۱۱۱۱ ۱۰۰۱ ۰۰۰۱میشه که خواهیم داش:

در صورتی که عدد کمتر از ۲۵۵ باشه مقدار UBRRH برابر صفره.

 

برای مطالعه ارتباط سریال USART در محیط Codewizard اینجا کلیک کنید.

یک دیدگاه

  1. ممنون,سریال ترکی هم بگذارید

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

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

قالب وردپرس