۵-۸ ارتباط میکروکنترلرهای AVR با کامپیوتر
۲۸ بهمن ۱۳۹۷۱-۹ معرفی ارتباط I2C
۲۸ بهمن ۱۳۹۷9گاه لازم است بخواهیم اطلاعات چند میکروکنترلر را هر زمان که خواستیم بخوانیم و با توجه به محدود بودن تعداد ورودیهای COM کامپیوتر باید روشی را داشته باشیم که بتوانیم با یک پورت اطلاعات تعدادی میکروکنترلر را بخوانیم.
برای این کار باید برای هر میکروکنترلر یک آدرس فرضی در نظر بگیریم، مثلا میکروکنترلر اول را با آدرس A و میکروی بعدی را با آدرس B و همین طور تا آخر. سپس کاری کنیم که هر میکرو زمانی اطلاعات خود را بفرستد که ما از آن میخواهیم.
بنابراین به بلوک دیاگرام زیر توجه کنید:
همانطور که میبینید تمام TX ها در میکروکنترلرها به هم وصل شدهاند و تمام RX ها نیز به هم و سپس این TX و RX کلی به PC متصل شده است. ( البته فرض کرده ایم که MAX233 در مدار موجود است ).
حال باید تمام تنظیمات میکروکنترلرها مشابه باشد و تمام Baud Rate ها یکسان تنظیم شود.
در اینجا قطعه کدی را میآوریم که برای یک بورد از ربات مار مانند Python ساخته شده در دانشگاه فردوسی مشهد است ( این ربات نایب قهرمان لیگ Demo در مسابقات بین المللی ایران اپن ۲۰۱۳ شد ).
از آنجا که این ربات ۸ عدد بورد الکترونیکی داشت و هر بورد نیز ۲ میکروکنترلر، برای همین به چنین ارتباطی نیاز بود. بنابراین قطعه کدی مثل زیر برای ارتباط بوردها با کنترلر مرکزی نوشته شد:
#include <mega16.h> #include <delay.h> #include <stdio.h> #define ADC_VREF_TYPE 0x00 int amount; char test;
ابتدا پس از تعریف متغیرهای مورد نیاز، کد برنامهی اصلی در زیر نوشته شده است.
while(1) { UCSRB = 0X10; test = getchar(); if(test == 'E') { UCSRB = 0X18; PORTB.0 = 0; PORTB.1 = 0; PORTB.2 = 0; amount = read_adc(0); printf("5A%d-",amount); PORTB.0 = 1; PORTB.1 = 0; PORTB.2 = 0; amount = read_adc(0); printf("5B%d-",amount);
از آنجا که میخواهیم هر میکرو تنها زمانی اطلاعات را ارسال کند که ما میخواهیم، بنابراین تا زمانی که این اتفاق نیفتاده است پایهی TX هر میکرو را در حالت غیر فعال قرار میدهیم. (خط ۳ )
سپس در صورت دریافت دستور ارسال اطلاعات ( در اینجا گرفتن کاراکتر ‘E’ ) خط ارسال را فعال کرده ( خط ۷ ) و نهایتا هر چیزی را که میخواهیم بر روی پورت سریال قرار میدهیم. این کد بخشی از کد است که مربوط به ارسال اطلاعات میشود.
همانطور که میبینید در رشتهی ارسالی نیز کاراکترهایی وجود دارد که نشان دهندهی آدرس بورد و دیگر اطلاعات هستند ( خط ۱۳ و ۲۰ ). مثلا در اینجا بورد شمارهی ۵ انتخاب شده است، بنابراین این بورد در ابتدای رشتهی ارسالی خود کاراکتر ۵ را قرار داده است.