همه چیز درباره ماژول nRF24L01

چیپ NRF24L01 نمونه تصحیح شده با امکانات بیشتر و دیتا ریت بالاتر چیپ NRF2401 است که توسط شرکت NORDIC در اوایل سال 2008 معرفی شد.ماژول nRF24L01این چیپ در واقع یک ماژول بسیار عالی برای ارسال و دریافت اطلاعات بدون خطا است چیزی که در ماژول های HMTR یا حتی در RFMXX ها یا به کلی وجود نداشت یا این که مشکلات خاص خود را داشت. مدولاسیون ارتباطی این ماژول به صورت GFSK است , همان مدولاسیونی که در تکنولوژی BLUETOOTH استفاده شده و به صورت انحصاری در دست چند شرکت بزرگ مثل BLUETOOTH و NORDIC SEMICONDUCTOR و TEXAS INSTRUMENT و چند شرکت دیگر قرار دارد.فرکانس ارتباطی این چیپ 2.4 گیگا هرتز است که این خاصیت آن ویژگی های زیادی را برای ما به ارمغان می آورد ! از جمله کوچک شدن سایز آنت که حتی میتوان از خود PCB به صورت یک آنتن استفاده کرد , مورد دیگر هم به دلیل فرکانس بالا بسیار راحت تر از دیوار یا اجسام دیگر عبور می کند و با عث می شود که برد بیشتری هم به ما بدهد , می توانید فرکانس RFM12 یا HMTR را با این چیپ مقایسه کنید ! می بینید که فرکانس این چند حداقل چند برابر آن ها است.این چیپ به صورت دو طرفه کار می کند و در کل شما فقط به 2 عدد از این چیپ ها برای ارتباط لازم دارید (مشابه RDM12 )دیتا ریت این چیپ حداکثر 2 مگابیت بر ثانیه است که می توان از آن برای انتقال اطلاعات سنگینی مشابه صوت و یا حتی ویدئو استفاده کرد!ویژگی های خاص ماژول nRF24L01:- حداکثر دیتا ریت تا 2 مگا بیت بر ثانیه در هوا- بسیار کم مصرف- جریان مصرفی در هنگام ارسال دیتا در 0 دسی بل فقط 11.3 میلی آمپر- جریان مصرفی در حالت دریافت دیتا با 2 مگا بیت بر ثانیه دیتا ریت 12.3 فقط 12.3 میلی آمپر- جریان مصرفی در هنگام POWER-DOWN 900 نانو آمپر- جریان مصرفی در هنگا آماده باش 22 میکرو آمپر- بدون نیاز به ولتاژ های مختلف به همراه رگولاتور داخلی- محدوده ولتاژ تغذیه چیپ از 1.9 تا 3.6 ولت که با افزایش ولتاژ برد بیشتری را باید در انتظار داشت- مجهز به تکنولوژِی پیشرفته SHOCKBURST- آماده سازی بسته ها دیتا به صورت خودکار- 6 لوله دیتا MULTICEIVER برای ارتباط چند ماژول به یکدیگر و ایجاد یک شبکه محلی- تست شده برای ارسال د دریافت دیتا که سالم بودن تمامی چیپ ها 100% است- یک چسپ فرکانسی کم هزینه- نیاز به یک کریستال اسیولاتور 16 مگا هرتزی کوارتز برای ایجاد فرکانس 2.4 گیگا هرتزی- ورود ولتاژ بر روی پین های دیتا حداکثر تا 5 ولت امکان پذیر است- سایز کوچک چیپ و نیاز به قطعات کم خارجیماژول nRF24L01موارد استفاده از ماژول nRF24L01:-قطعات کامپیوتری وایرلس مانند موس یا کی بورد یا قطعات دیگر-هدست های بیسیم مانند VOIP HEADSET-دسته های بیسیم کنسول های بازی مانند PS3-ساعت های ورزشی یا سنسور ها-ریموت کنترل برای مصارف الکترونیکی-اتوماسیون خانگی(خانه هوشمند) که فرضا تمامی ارتباطات الکتریکی فرضا برای روشنایی به صورت بیسیم می باشد-در شبکه هایی که نیاز به یک ارتباط وایرلس بسیار کم مصرف است-سیستم های مسیر یاب مانند GPS-و اسباب بازی ها !معرفی ماژول nRF24L01:چیپ NRF24L01 دارای یک موتور بلادرنگ تکنولوژی پیشرفته( SHOCKBURST ) که اساسا طراحی شده برای موقعیت های که نیاز به مصرف توان بسیار پایین است.NRF24L01 در رده فرکانسی جهانی ISM که در محدوده فرکانسی 2.400 گیگاهرتز تا 2.4835 گیگا هرتز که در کل برای اجرا فقط به یک میکروکنترلر و تعداد کمی قطعات دیگر نیاز است که شامل چند خازن و سلف است.نحوه ارتباطی این چیپ به پروتکل SPI است که می توان با این پروتکل بر تمامی خواص نرم افزاری و سخت افزاری داخلی چیپ مدیریت داشت و آن را کنترل کرد.مدولاسیون چیپ GFSK است که به نحوی طراحی شده که هر چیپ شبیه به این است که یک کانال فرکانس خاص را برای خود دارد و از این رو می توان گفت درصد خطا و اختلال چیپ ها با یک دیگر (یا چیپ هایی به غیر از NRFL24L01) به صفر می رسد.دیتا ریت چیپ در 2 مگابیت بر ثانیه پیکره بندی شده و دو مد متفاوت مصرف پایین نیز دارد که آن را کم مصرف تر می کند.یک رگولاتور داخلی که باعث گسترش محدوده ولتاژ ورودی می شود.Send AMS1117-3.3 3.3V LDO Voltage Regulator tube 2.4G operating frequency, the transmission distance is about the open distance 40 meters! NRF24L01 basic characteristics: 1.2Mbit/s received under rates peak at 12.5mA 2. @0dBm 2Mbit/s rate output peak current 11mA 3. power off mode power consumption of 400nA 4. the power consumption in standby mode 32uA 5.130us quick switch and wake up 6. has the on-chip voltage regulator oltage regulators 7.1.9 to 3.6V low-voltage operation 8. MultiCeiverMT hardware 6 receiver functions at, 2Mbit/s makes it possible to high quality VoIPمزیت های ماژول nRF24L01 :در محیط با مانع از این ماژول بیشتر در پروژه هایی که قابلیت اطمینان ( reliability) باید بالا باشد و کاربردش بیشتر در جاهای صنعتی و پر نویزه و جاهای حساس که اشتباه باعث خسارت میشود. ( یک لینک کاملا مطمئن براتون ایجاد میکنه ( استفاده میکنیم وبه خاطرداشتن قابلیت های auto acknowlegement و auto retransmition و error checking و فرستادن اطلاعات همراه با یکی از بهترین استانداردهای ECC (Error Correcting Code ) CRC در عمل فوق العاده خوب جواب داده و اصلا عمل پیش بینی نشده ، انجام نداده. دقیقا هرکاری بخواهید و ازش انتظار دارید انجام میدهد. ( در عمل مهم اینکه دیوایس، عکس العمل غیر منتظره ای از خودش بروز ) .تغذیه خود آی سی با 3.3 ولت هست اما پایه های ورودی خروجی آن توان کار کردن تا 5 ولت رو دارند ( تغذیه IC را با 3.3 V راه می اندازید اما اگر ورودی خروجی هاش به مداری که 5 ولت هست وصل بشه، آی سی نمی سوزه و میتواند با سطح لاجیک TTL کار کنند ) این ماژول 60 میلی وات و بردآن در فضای باز حدودا 40 مترمی باشد که اگر آنتن برای آن نصب کنید ( آنتن معمولی! ) حداکثر بردش به 70 متر میرسد ....برای مصارفی با مسافت کم ، استفاده از چیپ بر روی PCB اصلی پروژه ( نه ماژول ) بسیار ایده آل می باشد و همچنین میشود کانال ارسال دیتا را عوض کرد ! برای ارسال فلگ تایید دریافت دارد . همینطور امکان ارسال مجدد ( ( restry در صورت نرسیدن دیتا به مقصد!کارکرد پایه هاIRQ : ماژول توسط این پایه به میکرو وقفه میدهد ( در حالت عادی پایه high است ) و low شدن IRQ یکی از این حالت ها را می رساند :1- در گیرنده یک پکت دریافت شده2- در فرستنده پکت بدرستی ارسال شده ACK ) تصدیق دریافت شد ) 3- در فرستنده یک پکت چندبار ارسال شده ( retransmition ) ولی تصدیقی دریافت نکرده پس عمل فرستادن اطلاعات به درستی انجام نشده است.CE : همان chip enable می باشد. در حالت عادی low است وقتی بخواهیم اطلاعات با ماژول بفرستیم یا دریافت کنیم باید این پین را high کنیم تا ماژول از مد استندبای ( 1 ) به active tx یا active rx برود ( میتونید این پین را به VCC وصل کنید تا همیشه در حالت high باشد.CSN : در ارتباط spi به منظور پین CS یا ss استفاده میشود . در حالت عادی باید 1 باشد و وقتی با spi می خواهیم چیزی به ماژول بفرستیم باید آن را 0 کنیمMOSI, MISO, CLK, CS : MOSI, MISO, CLK, CS برای ارتباط SPI هستند و به پایه های متناظرشون در میکرو. MISO و MOSI به صورت ضربدری وصل میشوند.: VCC , GND VCC و GND هم تغذیه ماژول می باشد ماژول به ولتاژ معکوس و ولتاژ زیاد روی vcc و gnd حساس می باشد همچنین دمای زیاد روی پایه ها بوسیله هویه ( چون پایه ها مستقیم به آیسی وصل می باشد ) . حتما از رگلاتور lf33 استفاده کنید وبین مثبت ومنفی ماژول حتما از خازن استفاده کنید ا گر از خازن در ورودی استفاده نکنید ماژول بدرستی کانفیگ میشود ولی زمانی که میخواهد اطلاعات را بفرستید به کلی ریست میشود.سرعت انتقال :سرعت انتقال درماژول های nrf24l01p قابل تنظیم می باشد و میتوان در سه حالت 256kbps و 1 Mbps و 2 Mbps تنظیم نمود (هرچه سرعت بالاتر تنظیم شود برد کمتر میشود(چطوری میتونیم سرعت رو از 1M به 2M تغییر بدیم ؟به صورت دستی هدر فایل رو تغییر بدید. خط 209 هدر فایل را به command_buff = 0x07; تغییر بدید. ( سرعت بیشتر = برد کمتر )" payload" چی هست ؟payload یک اصطلاح در شبکه است ، یک پکت دیتا تشکیل شده است از چندین قسمت که یک قسمتش payload میباشد ، در این قسمت دیتای اصلی شما قرار میگیرد. ( این قسمت اصلی و بقیه بالا سری ( overhead ) پکت هستند که شامل آدرس و pid و sequence و... ( . فرقnRF24L01 با nRF24LE1 چیست ؟ nRF24l01+ یه آی سی transciever برای انتقال داده بیسیم در باند 2.4 GHz است .nRF24LE1 این ماژول ترکیب همون nRF24l01p بعلاوه ی یک سری چیز دیگس:که این چیزها شامل:1ـ cpu هشت بیتی که با همون 8051 معروف سازگار است. ( پس همینجا نتیجه میگیریم این آیسی به تنهایی قابل استفاده است و دیگه نیاز نیست با میکرو درایوش کنیم چون خودش واحد پردازشگر inteligent device ) ) دارد2ـ 1kB + 256B رم داره که این رم همون حافظه ای است که باید کنار cpu باشه.3ـ یک فلش مموری 16 کیلو بایتی داره که میتونید توش داده ها و دستورات را ذخیره کنید ( بعد از قطع برقم نمیپره )4ـ یک مقایسه گر ( ADC ) دوازده بیتی داره!!همچنین سه تا اینترفیس ارتباط spi و uart و TWI رو هم داره (یه جورایی همه چی تمومه ،خودش یه میکرو کنترلره) ) گفته اوسیلاتور داخلی هم داره ( که خوب معلومه باید داشته باشه چون cpu داره (این چیپ حالت صرفه جویی در مصرف یا lowe power هم داره ؟با این پین و رجسترهای PWR_UP , PRIM_RX 2تا مد standby داره و یه مد power downیکی از ویژگی های خیلی جالب این ماژول مصرف بسیار پائین اون نسبت به ماژول های مشابه هست که در مواقعی که مجبور به استفاده از باتری هستین از کم مصرف بودن این ماژول حیرت زده میشیدتو نسخه پلاس این ماژول مد اسلیپ ماژول بسیار هوشمند عمل میکنه و مصرف رو در حد ۹۰۰ نانو آمپر قرار میده یعنی ماژول روشنه ولی داره فقط ۹۰۰ نانو آمپر مصرف میکنه و فقط موقع ارسال مصرفش به حدود ۱۳ میلی آمپر میرسه Enhanced ShockBurst چیست ؟یک مد که توی این نوع آیسی ها معرفی شده . اولا که با استفاده از این مد میتونید با میکرو کنتزلرهای کند مثل avr و صف های موجود در خود آیسی ، به سرعت های بالا ( سرعت انتقال در هوا ( air ) ) دست یابید همچنین اگر با شبکه آشنا باشید ، خیلی شبیه به پروتکل TCP در لایه ی transport در مدل های لایه بندی TCP/IP و OSI می باشد. که با استفاده از قابلیت های auto acknowledgment و autoretransmition یک لینک کاملا مطمئن برای شما فراهم میکند. (به زبون ساده بعد از هر ارسال گیرنده به فرستنده میگه پکت بهم رسیده یا نه و اگر نرسیده باشه یا حتی پیام رسیدن بر نگرده ، فرستنده دوباره ارسال میکند ( در شبکه به آن پیام تصدیق یا همون ACK گفته می شود ) Enhanced ShockBurst یه پروتکلی 2 سویه است که برای چلوگیری از دست رفتن اطلاعات بین فرستنده و گیرنده استفاده میشود به این صورت که اگر پکت ارسالی به درستی دریافت نشود دوباره توسط فرستنده ارسال می گردد.یک چیز جالب در مورد این ماژول هوشمند بودنش هست مثلا شما از عدد ۱ تا ۱۰۰۰ رو میفرستید تا با دور کردن گیرنده برد ماژول رو به دست بیارید چیزی که خیلی جالبه اینه که مثلا اگر اطلاعات دریافتی گیرنده بر روی عدد ۵۴۶ متوقف بشود وقتی به ماژول فرستنده نزدیک می شوید از عدد ۵۴۷ شروع به ارسال میکند و به عبارتی هیچ اطلاعاتی تا وقتی گیرنده دریافت آن را تائید نکند از دست نمی رود و تا زمانی که از سمت گیرنده پیام تائید دریافت نکند اطلاعات بعدی را ارسال نمی کند و به ارسال مجدد ادامه میدهد و این حالت به صورت پیشفرض در ماژول فعال است و به طور پیشفرض ۱۰ بار در فاصله زمانی مشخص انجام میدهد , میتوانید با تنظیمات رجیستر های ماژول تعداد و مدت زمانی که بین هر ارسال باید صبر کند را تغییر دهیداین ماژول ها امکان شبکه کردن هم دارند ؟شبکه کردن یعنی آدرس دادن به ماژول ها به طوری که فقط با ماژولی که میخواهید ارتباط برقرار کنید (جدا کردن از طریق آدرسدهی ) شما با تغییردر آرایه 5 بایتی آدرس (40 بیتی ) میتوانید به ماژول یک آدرس دلخواه نسبت دهید که می توانید تا 1 ترلیون ( یا 1 ترا = 2 به توان 40 ) آدرس متفاوت ایجاد کنید. ولی شما نمی توانید در حین اجرا آدرس را تغییر بدید و حتما تغییرات باید در زمان کامپایل باشد یعنی در زمانی که کد مینویسید شما یک آدرس مشخصی از 0x0000000000 تا 0 xFFFFFFFFFF به ماژول نسبت میدهید و وقتی برنامه را داخل میکرو پروگرم کردید ماژول همین آدرس را دارد . اگر می خواهید آن را عوض کنید باید دوباره میکرو رو با آدرس جدید پروگرام کنیدهر ماژول با هر چندتا ماژول که در دیدش باشه شبکه میشود که البته با تنظیماتی میشود این را نقض کرد یعنی مثلا ما 100 تا ماژول در یکجا داریم که همه در برد هم هستند ولی جوری باشند که 10 تا 10 تا باهم در ارتباط باشند و گروه های دیگر را اصلا نبینند و در کار هم مشکل بوجود نیاورند . مثلا اگر شما با شبکه کامپیوتر آشنا باشید ، هر شبکه از 5 لایه تشکیل شده ( لایه بندی osi یا tcp/ip ( با این ماژول می توانید ارتباط تا دو لایه زیرین ( Data Link Layer و ( Physical Layer داشته باشید. که در لایه دیتا لینک می توانید ارتباط به صورت rdt ( reliable data transfer ارتباط مطمئن ) تضمین کنید. شبکه کردن ،هیچ کاری ندارد وقتی شما یک لینک مطمئن دارید شبکه یعنی یک سری پروتکل که خودتان قرار میدید .به عنوان مثال شما یک بخش همیشه ثابت تو ارایه ای که میفرستید میگذارید ( مثلا یک بایت ) و این رو به عنوان آدرس فرستنده تلقی میکنید. و یک بایت هم برای گیرنده . حالا شما اطلاعاتتون رو در بسته ( packet ) های 32 بایتی درون شبکه میریزید که 30 بایت اونها دیتای اصلی یا payload هستند. به همین راحتی .شما میتونید در یک شبکه پایپ به ۶ تا ماژول دیگه اطلاعات رو ارسال کنید و از ۶ تا ماژول دیگه اطلاعات رو دریافت کنید فقط باید دقت کنید واسه هر ماژول یک آدرس ۳۲ بیتی جداگانه بگذارید.این مطلب رو چند سال پیش در بلاگ شخصیم منتشر کرده بودم. و چون هاستش منقضی شده بود حیفم اومد توی سیستمم خاک بخوره.