در این جلسات آموزشی سعی میکنیم پروتکل های ارتباطی در آردوینو را یاد بگیریم و در اولین جلسه USART را برسی میکنیم. گاهی اوقات در پروژه های مختلف نیاز به ارتباط برقرار کردن بین تعدادی میکروکنترلر یا سنسور وجود دارد. این ارتباط می تواند به سادگی خواندن مقدار یک سنسور و ذخیره سازی در حافظه میکروکنترلر و نمایش آن باشد یا میتواند به پیچیدگی ایجاد یک شبکه و ارسال فرمان ها و دستورات به بخش های مختلف شبکه باشد.
برای این منظور باید از پروتکل های استاندارد به این منظور استفاده نمود. معروف ترین این پروتکل ها در میکروکنترلرها عبارت اند از : USART ، I2C و SPI
در این پست در مورد پروتکل USART و نحوه پیاده سازی آن با آردوینو توضیح می دهیم و در دو جلسه بعدی در مورد دو پروتکل I2C و SPI صحبت می کنیم.
اگر با آردوینو آشنا نیستید مطالب زیر را ابتدا بخو انید:
- چرا باید از آردوینو استفاده کنیم؟
- معرفی بردهای آردوینو Arduino
- دانلود نرم افزار آردوینو Arduino
- آموزش پروگرام کردن برد های آردوینو
- آشنایی با زبان برنامه نویسی آردوینو
دسته بندی روش های ارتباطی :
به طور کلی می توان انواع روش های ارتباطی را به دو دسته بندی کلی تقسیم نمود :
- ارتباط موازی :
این ارتباط برای مسافت های کوتاه که نیاز به سرعت زیادی داریم مناسب می باشد، اما برای مسافت های طولانی به دلیل اشغال فضای زیاد و موارد دیگر استفاده از آن کاربرد چندانی ندارد. مطابق شکل زیر، جریانی از داده ها به شکل بیت های صفر و یک به صورت همزمان از فرستنده به گیرنده ارسال یا دریافت می شود.
یکی از عیب های بسار مهم ارتباط موازی مطابق شکل، استفاده از تعداد پایه های زیاد برای ارتباط است. به عنوان مثال اگر قصد دارید پروژه خود را توسط برد Arduino Uno یا Arduino Mega انجام دهید و از ارتباط موازی استفاده کنید، تعداد پایه های زیادی از برد را باید به ارتباط موازی اختصاص دهید که باعث محدود شدن کاربردهای قابل پیاده سازی بر روی برد می شود.
در ارتباط سریال بر خلاف ارتباط موازی، از تعداد پایه های محدودتری برای ارتباط استفاده می شود. دو عیب ارتباط سریال در مقابل ارتباط موازی عبارت است از سرعت پایین تر و نیازمند بودن به استفاده از پروتکل های سریال.
البته واقعیت این است که امروزه تقریبا می توان دو عیب ذکر شده را برای ارتباط سریال نادید گرفت. در مورد سرعت، امروزه پروتکل های سریال قابلیت پشتیبانی از سرعت های بالا را فراهم کرده اند و در مورد پیاده سازی پروتکل نیز در میکروکنترلرهای ارائه شده توسط شرکت های مختلف دنیا، قابلیت پیاده سازی و استفاده از انواع پروتکل های سریال وجود دارد.
پروتکل های همزمان و غیرهمزمان :
پروتکل USART دارای دو مد عملکرد همزمان (Synchronous) و غیر همزمان (Asynchronous) می باشد. به طور ساده، در روش همزمان نیاز به استفاده از یک پایه به عنوان کلاک برای همزمان کردن فرستنده و گیرنده وجود دارد و در روش غیر همزمان، همزمان سازی فرستنده و گیرنده توسط اسیلاتورهای داخلی صورت می پذیرد و نیاز به استفاده از پایه ی دیگری وجود ندارد.
در اغلب موارد از ارتباط آسنکرون یا غیر همزمان استفاده می شود.
برای آگاهی از نحوه استفاده از پروتکل سریال در میکروکنترلرهای ARM نیز می توانید اینجا را مطالعه کنید.
استفاده از USART در آردوینو :
کد زیر را در محیط برنامه نویسی وارد کرده و برنامه را بر روی برد پروگرام کنید.
void setup() { Serial.begin(9600); Serial.println("Melec.ir"); } void loop() {}
توسط دستور Serial.begin، مقدار سرعت ارتباط را بر روی 9600 بیت بر ثانیه تنظیم می کنیم. (مقداری متداول برای ارتباط USART)
توسط دستور Serial.println ، آردوینو عبارت “Melec.ir” را به خروجی سریال خود ارسال می کند.
به همین سادگی!
توسط برنامه زیر، داده های ارسال شده به برد را می توان مشاهده نمود :
void setup() { Serial.begin(9600); } void loop() { if(Serial.available()){ serial port Serial.print("I received:"); Serial.write(Serial.read()); } }
در این برنامه توسط تابع Serial.available از دریافت داده ها جدید اطلاع پیدا می کنیم، در دستور شرطی if عبارت “:I received” را چاپ کرده و در مقابل آن دستور ارسال شده را می توانیم مشاهده کنیم. به عنوان مثال اگر عبارت “Melec.ir” را به میکروکنترلر ارسال کنیم، در پاسخ خواهیم داشت :
I received:Melec.ir
پس از اجرای کد بر روی برد، در محیط نرم افزار بخش Serial monitor را از طریق کلیک بر روی آیکون :
باز کنید.
در کادر متنی عبارت دلخواه را نوشته و دکمه Send را فشار دهید. میکروکنترلر عبارت ارسال شده را به خروجی سریال ارسال میکند و میتوانید آن را بر روی صفحه مشاهده نمایید.
برای برنامه نویسی پورت سریال در کامپیوتر میتوانید اینجا آموزش ها را بخوانید (#C ، متلب و لب ویو )
دانلود نرم افزار Tera Term ( ترمینال پورت سریال )
منبع :tutorialspoint.com
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
تشکر !!!