AVR64.com - راه اندازی ماژول ارتباط سریال بی سیم HC-11

AVR64.com



ماژول HC-11 یک ماژول ارتباط سریال بر پایه آی سی CC1101 می باشد که با برد متوسط ۱۰۰ متر در فضای باز و فرکانس کاری ۴۳۳ مگاهرتز بعنوان یک راهکار نسبتا مناسب برای ارتباط بین دو دستگاه بشمار می رود. ماژول HC-11 را می توان جایگزینی خوب برای ماژول قدیمی HMTR به حساب آورد. این ماژول از یک میکروکنترلر ۸ بیتی کوچک ST برای ارتباط با آی سی رادیویی CC1101 بهره می گیرد و قابلیت کنترل رجیستر های این آی سی را با دستورات ساده AT Command فراهم می آورد. ماژول ارتباط سریال HC11 با ولتاژ ۳/۶ تا ۵ ولت عمل می کند و بدلیل ماهیت TTL بصورت مستقیم و بدون نیاز به تبدیل سطح به میکرو متصل می شود.

این ماژول ۵ پایه داشته که دو پایه تغذیه + و زمین، دو پایه Tx و Rx و یک پایه برای ورود به مد تنظیمات AT Command بکار می رود. برای ورود به مد تنظیمات باید ابتدا پایه set را به زمین متصل کرده و سپس تغذیه ماژول را وصل نمود؛ در این حالت می توان با ارسال دستوراتی ماژول را پیکره بندی کرده و مد کاری، سرعت ارتباط (باود ریت)، قدرت سیگنال، فرکانس کاری (کانال) و در صورت لزوم آدرس ماژول را تغییر داد. ماژولهای HC11 با تنظیمات پیش فرض روی کانال (باند فرکانسی) یک، آدرس صفر، سرعت ۹۶۰۰ و حداکثر قدرت سیگنال عرضه می شوند، بنابراین معمولا نیازی به تنظیم ماژول احساس نمی شود.

در این مقاله تصمیم داریم یک لینک ارتباطی بیسیم بین دو میکروکنترلر ATmega8 از خانواده AVR به وسیله ماژول HC-11 ایجاد نماییم. در این برنامه از کامپایلر بسکام (BASCOM) استفاده می کنیم.


نقشه مدار ارتباط دو ماژول HC-11 با یکدیگر (شماتیک):

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






در مشاهده ویدیو مشکل دارید؟ روی این لینک کلیک کنید


برنامه فرستنده (بسکام):

پس از اینکه یک جفت از مدار بالا را بصورت فیزیکی پیاده سازی نمودید یکی را بعنوان فرستنده و دیگری را بعنوان گیرنده مشخص کنید، البته ماژول HC-11 دو طرفه می باشد ولی برای آزمایش، یکی از بردها را بعنوان فرستنده تعیین می کنیم و یک متغیر را به طور مداوم افزایش داده و بر روی آنتن می فرستیم.

'HC-11 Send
'By Behnam Zakizadeh
'www.avr64.com
'1396/07/19
'freeware

$regfile = "m8adef.dat"
$crystal = 11059200
$hwstack = 64
$swstack = 64
$framesize = 64
$baud = 9600

'fusebit
$prog &HFF , &HBF , &HC1 , &H00

'LCD
Config Lcdpin = Pin , Rs = Portc., E = Portc., _
 Db4 = Portc., Db5 = Portc., Db6 = Portc., Db7 = Portc.0
Config Lcd = 16 * 2
Cursor Off Noblink
Cls

Dim I As Byte

Lcd "Send..."

Do
   Print I
   Lowerline
   Lcd I ; "  "
   Incr I
   Wait 1
Loop

End

در این برنامه در ابتدا نوع میکرو، فرکانس کاری، اندازه پشته های نرم افزاری و سخت افزاری و اندازه فریم (فضایی برای محاسبات و تبدیلات داخلی کامپایلر) و سرعت انتقال اطلاعات (باود) را تنظیم کرده ایم. سپس با دستور fuse فیوزبیتهای میکرو را تنظیم نموده ایم (این دستور در هگز تاثیری ندارد و فقط در صورتی که میکرو توسط بسکام و با پروگرمر USBASP پروگرم شود بطور خودکار فیوزبیت ها را تنظیم می کند). اگر به هر دلیل از پروگرم های دیگر استفاده می کنید فیوزبیت نوسان ساز میکرو را بر روی کریستال خارجی قرار دهید (گزینه 111111 در بسکام) و در سایر پروگرمرها گزینه های CKSEL0-3 و SUT0 و SUT1 را روی 1 تنظیم نمایید. دستورات بعدی برای معرفی LCD کاراکتری 2x16 بکار می رود و در قسمت بعدی متغیر به نام i تعریف کرده ایم که در حلقه اصلی برنامه با دستور Print مقدار آن را به طور مداوم و با تاخیر یک ثانیه (Wait 1) به پورت سریال میکرو ارسال می کنیم و سپس مقدار آن را با دستور Incr یک واحد افزایش می دهیم. از آنجایی که این متغیر از نوع Byte تعریف شده پس از شمارش تا 255 سرریز شده و به 0 باز می گردد و مجددا افزایش می یابد.


برنامه گیرنده (بسکام):

برنامه زیر را نیز بر روی میکروکنترلر برد گیرنده ذخیره نمایید.

'HC-11 Receive
'By Behnam Zakizadeh
'www.avr64.com
'1396/07/19
'freeware

$regfile = "m8adef.dat"
$crystal = 11059200
$hwstack = 64
$swstack = 64
$framesize = 64
$baud = 9600

Config Input = Crlf , Echo = Crlf

'fusebit
$prog &HFF , &HBF , &HC1 , &H00

'LCD
Config Lcdpin = Pin , Rs = Portc., E = Portc., _
 Db4 = Portc., Db5 = Portc., Db6 = Portc., Db7 = Portc.0
Config Lcd = 16 * 2
Cursor Off Noblink
Cls

Dim S As String * 10

Lcd "Receive..."

Do
   Input S Noecho
   Lowerline
   Lcd Spc(16)
   Lowerline
   Lcd S
Loop
End

برنامه گیرنده در بدنه اصلی شبیه به برنامه فرستنده می باشد و از تکرار توضیحات خودداری می شود و فقط به بیان تفاوت ها می پردازیم. در این برنامه با دستور Config Input جفت کاراکتر CRLF را بعنوان کاراکتر انتهای خط تعریف نموده ایم. همانطوریکه می دانید دستور Input برای دریافت رشته ها از پورت سریال بکار برده می شود. این دستور در حالت پیشفرض برنامه را Freeze می کند و برنامه در خط حاوی دستور Input آنقدر منتظر می ماند تا رشته ای منتهی به کاراکترهای تنظیم شده در خط Config Input را دریافت نماید. از آنجاییکه دستور Print پس از ارسال رشته، جفت کاراکتر CRLF را به طور خودکار به انتهای رشته اضافه کرده و بر روی پایه Tx میکرو جاری می کند؛ در برنامه گیرنده نیز با دستور Config Input این جفت کاراکتر را برای دستور Input بعنوان کاراکترهای انتهای خط تنظیم می نماییم. در این حالت دستور Input پس از مشاهده جفت کاراکتر CRLF، هر دو کاراکتر مذکور را از رشته حذف می کند و هرآنچه که باقی ماند را در متغیری که در جلوی دستور Input قرار داده شده است ذخیره می کند (در این برنامه متغیر S) و از حالت Freeze یا یخ زدگی خارج می شود و بقیه کد را اجرا می کند. البته برای جلوگیری از یخ زدگی برنامه در دستور Input می توان با استفاده از دستور $timeout=1000000 در ابتدای برنامه، یک مقدار تایم اوت بر حسب میکروثانیه برای دستور Input تعریف کرد که به اندازه این مدت به پورت گوش کند و اگر متغیری دریافت نشد پس از به سر آمدن زمان تعریف شده از دستور خارج شود. (زمان جلوی timeout دقیق نیست و باید بطور تجربی مقدار آن را بیابید). عبارت Echo نیز در دستور Config Input با CRLF تنظیم شده. ما در این برنامه از Echo استفاده نمی کنیم اما بخاطر اینکه دستور Config Input را استفاده کرده ایم ناچاریم مقدار آرگومان Echo را هم تنظیم نماییم. Echo قابلیتی برای دستور Input می باشد که به طور پیش فرض روی این دستور اجرا شده و هر کاراکتری که به پورت Rx میکرو ارسال می شود را روی پایه Tx همان میکرو تکرار می کند. با تنظیم Echo=CRLF می توانیم در صورت فعال بودن Echo رشته دریافتی را با جفت کاراکتر CRLF به خروجی ارسال نماییم. ما در این برنامه نیاز به قابلیت اکو نداریم و به همین دلیل در حلقه اصلی برنامه در جلوی دستور Input (پس از متغیر S) از دستور Noecho استفاده کرده ایم تا هیچ کاراکتری از سمت گیرنده به ماژول ارسال نشود. در نهایت محتوای دریافت شده بر روی نمایشگر کریستال مایع نشان داده می شود و برنامه در یک حلقه بینهایت اطلاعات دریافتی از فرستنده را نمایش می دهد.


شبکه کردن ماژول های HC-11:

یکی از قابلیت های خوب ماژول بیسیم HC-11 قابلیت شبکه کردن هر تعداد ماژول می باشد. به طور مثال اگر یک ماژول اطلاعاتی را ارسال نماید هر تعداد ماژول دیگر می توانند به طور همزمان اطلاعات را دریافت کنند، مانند رادیو. در این حالت بطور مثال می توان 100 ماژول را به میکروکنترلر و سنسور دما متصل کرد (همانند برنامه گیرنده ی بالا) و یک ماژول بعنوان فرستنده رشته هایی مثل get_sens1، get_sens2 .. get_sens100 را ارسال کند، در تمام گیرنده ها نیز می توان رشته ها را دریافت نمود و هر گیرنده ای که رشته مربوط به آن ارسال شده باشد دمای سنسورش را با دستور print به سمت فرستنده ارسال نماید. مسلم است که فرستنده پس از ارسال هر رشته باید به مدت مشخصی با دستور ipnut به اطلاعات دریافتی (دمای سنسور) گوش کند و پس از زمان مشخص، سنسور بعدی را فراخوانی نماید. (چنین پروژه ای برای اتوماسیون دمای 4 سالن گلخانه توسط AVR64 انجام شد و در عمل بسیار عالی جواب داد). هیچ محدودتی در تعداد پایانه ها در این نوع شبکه وجود ندارد و به این روش به اصطلاح Broadcasting یا همه پخشی می گویند، چرا که درخواست برای همه پایانه ها ارسال می شود. در چنین شبکه هایی حتما باید یکی از دستگاه ها فرستنده باشد و بقیه در حالت گیرنده؛ و فرستنده دستگاه ها را یکی یکی فراخوانی نماید، چرا که در غیر این صورت اگر همه سنسورها بخواهند مدام دمای خود را ارسال کنند تصادم یا Collision رخ می دهد و یک گیرنده از عهده دریافت همزمان اطلاعات بر نخواهد آمد.




تنظیمات ماژول HC-11 (مد AT Command):

همانطوریکه در ابتدای این مقاله ذکر شد ماژول HC-11 در واقع ترکیبی از آی سی رادیویی CC1101 و یک میکروکنترلر STM8 می باشد. راه اندازی CC1101 به تنهایی کار دشواری می باشد چرا که اولا پروتکل آن SPI بوده و سیم های بیشتری از میکرو را اشغال می کند و درثانی تنظیم کردن رجیسترهای آن برای ارسال و دریافت اطلاعات زمان زیادی را می طلبد. شرکت hc01.com که کار آن ساده سازی کار با چیپ های مخابراتی است، در ماژول HC11 با استفاده از یک میکروکنترلر STM8 کوچک تمام تنظیمات و ارتباطات مورد نیاز برای راه اندازی آی سی CC1101 را پیاده سازی کرده است و کاربر نهایی فقط کافیست اطلاعات خود را به پورت سریال این ماژول (آی سی STM8) ارسال کند. از طرفی با توجه به اینکه گاهی اوقات لازم است تنظیماتی از قبیل سرعت انتقال اطلاعات (باود)، فرکانس یا کانال ارتباطی، آدرس ماژول، تنظیم قدرت سیگنال و... در این ماژول اعمال شود امکانی را برای تنظیم رجیسترهای این چیپ رادیویی فراهم آورده است که از طریق ارسال رشته های متنی استاندارد َبه نام AT Command امکان پذیر است.

برای تنظیم کردن ماژول در ابتدا بایستی پایه Set ماژول به زمین (Gnd) متصل شده و سپس تغذیه ماژول وصل گردد. در این حالت می توان با سرعت پیشفرض 9600 بیت در ثانیه 8 بیت دیتا، بدون توازن (n) و 1 بیت stop با هر نرم افزار ترمینال دلخواه و یک مبدل USB به سریال به ماژول متصل شد و دستورات را ارسال کرد. در این بخش دستورات پرکاربرد ماژول HC-11 را شرح می دهیم.


نکته ١: سرعت پورت در حالت AT Command همیشه 9600 می باشد حتی اگر سرعت حالت دیتا تغییر داده شود.
نکته ٢: تمام کلمات دستورات AT Command باید با حروف بزرگ ارسال شود، مثل: AT+RA

در ضمن برای ارتباط با ماژول از نرم افزار سریال Hype!Terminal استفاده شده است که پرتابل بوده و تنها 127KB حجم دارد. این نرم افزار را می توانید از بخش دانلود های سایت AVR64.com یا انتهای همین صفحه دانلود نمایید.


آزمایش صحت ارتباط:

برای اطمینان ار صحت اتصال می توانید رشته AT را با جفت کاراکتر انتهای خط CRLF ارسال نمایید (گزینه مقابل دکمه send را روی CR+LF تنظیم کنید). اگر ارتباط بدرستی برقرار باشد باید رشته OK بازگردد:




تغییر سرعت ماژول HC-11:

برای تغییر سرعت پورت در حالت دیتا کافیست یکی از دستورات زیر را ارسال نمایید:

AT Command Baud
AT+B1200 1200
AT+B2400 2400
AT+B4800 4800
AT+B9600 9600
AT+B19200 19200
AT+B38400 38400
AT+B57600 57600
AT+B115200 115200

نکته: اگر سرعت بر روی 115200 تنظیم شود نمیتوانید اطلاعات بیشتر از 254 بایت را بطور پیوسته ارسال کنید، اطلاعات در این سرعت در یک بافر 245 بایتی ذخیره شده و با تاخیر ارسال می شود. در سایر سرعت ها می توانید اطلاعات را بطور پیوسته ارسال نمایید. اگر بین دستورات Print از تاخیر استفاده میکنید نگران این موضوع نباشید.


مشاهده سرعت تنظیم شده (باود) ماژول:

برای مشاهده Baud تنظیم شده کافیست دستور AT+RB را ارسال نمایید. پاسخ چیزی شبیه به B9600 خواهد بود که بیانگر سرعت تنظیم شده 9600 در مد ارتباطی می باشد.


تغییر کانال (باند فرکانسی):

یکی از قابلیت های ماژول HC11 امکان تعیین باند فرکانسی یا کانال ماژول می باشد. بصورت تئوری امکان تنظیم کانال 001 تا 127 وجود دارد ولی در عمل فقط 20 کانال از 001 تا 020 را می توان تعیین نمود (طبق ادعای سازنده). ماژول HC-11 بطور پیشفرض بر روی کانال 001 تنظیم شده است. فرکانس هر کانال با کانال بعدی اندکی تفاوت دارد. مثلا اگر کانال 001 روی 433 مگاهرتز اطلاعات را بر روی آنتن بفرستد کانال 002 بر روی 433.1 مگاهرتز عمل انتقال را انجام خواهد داد. (مقادیر دقیق فرکانس متناظر باکانال ها در برگه اطلاعاتی HC-11 ذکر نشده است).

برای تنظیم کانال ماژول بر روی 002 باید دستور AT+C002 را به سمت ماژول ارسال نمایید. توجه داشته باشید که هر دو ماژول باید روی کانال یکسان تنظیم شوند. یکی از کاربردهای تعیین کانال امکان پیاده سازی دو یا چند شبکه مختلف در کنار یکدیگر می باشد. در این حالت دو ماژول می توانند با سرعت به انتقال اطلاعات بپردازند و دو ماژول دیگر نیز که روی کانال بالاتر تنظیم شده اند بدون اختلال با یکدیگر مبادله اطلاعات نمایند.


مشاهده کانال تنظیم شده:

برای مشاهده کانال تنظیم شده کافیست دستور AT+RC را ارسال نمایید. خروجی چیزی شبیه به C001 خواهد بود که بیانگر کانال یک می باشد.


تنظیم آدرس:

یکی از امکانات دیگر ماژول HC-11 امکان تنظیم آدرس برای هر ماژول می باشد. به طور پیشفرض همه ماژول ها روی آدرس 000 تنظیم شده اند. این مقدار می تواند تا 255 تغییر یابد. برای اتباط بین دو ماژول باید آدرس هر دو یکسان باشد. تغییر آدرس برای ایجاد 255 زیر شبکه مستقل در یک کانال خاص بکار می رود و زیر شبکه ها می توانند بدون اختلال دیگر شبکه ها به تبادل اطلاعات بپردازند. پیشنهاد می شود کانال و آدرس را برای مصارف عادی تغییر ندهید. برای تغییر آدرس به آدرس 002 کافیست دستور AT+002 را برای تنظیم آدرس ماژول به 002 ارسال نمایید.


مشاهده آدرس:

برای مشاهده آدرس تنظیم شده ماژول کافیست رشته دستوری AT+RA را به سمت ماژول ارسال کنید. خروجی چیزی شبیه به A000 خواهد بود که بیانگر آدرس تنظیم شده است.


تنظیم قدرت سیگنال (برد ماژول):

یکی از قابلیت های چیپ مخابراتی CC1101 امکان تنظیم قدرت سیگنال می باشد. ما همیشه به بیشترین برد نیاز نداریم، گاهی اوقات برد بالا سبب تداخل شبکه ها روی یکدیگر می شود. به همین روی برای تنظیم قدرت سیگنال ماژول HC-11 می توانیم از دستورات AT+P1 الی AT+P8 برای کمترین و بیشترین برد ممکن استفاده نماییم. این دستورات طبق جدول زیر قدرت سیگنال ماژول HC11 را تنظیم می کنند. برد کم (به طور مثال ۵ متر) برای ساخت دستگاه هایی که به محض دور شدن از یکدیگر شروع به آژیر کشیدن می کند بسیار کاربردی است، همچنین برای ساخت تگ های فعال مثل RFID، انبارداری و ردیاب اشیاء گم شده همیشه برد کم بهتر از برد زیاد است.

AT Command Transmit Power
AT+P1 -30dBm
AT+P2 -20dBm
AT+P3 -15dBm
AT+P4 -10dBm
AT+P5 0dBm
AT+P6 5dBm
AT+P7 7dBm
AT+P8 10dBm

مشاهده قدرت سیگنال:

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


مشاهده سرعت، کانال، آدرس، و قدرت سیگنال با یک دستور:

برای مشاهده Baud، کانال، آدرس تنظیم شده و قدرت سیگنال کافیست از دستور AT+RX استفاده نمایید.


بازگردانی به تنظیمات پیشفرض کارخانه:

برای ریست ماژول به تنظیمات پیشفرض کافیست دستور AT+RESET را به ماژول ارسال کنید.




دانلود سورس، شماتیک، دیتاشیت HC-11 و CC1101، نرم افزار Hype!Terminal و PDF این مقاله


© 2009-2017 AVR64.com