اطلاعیه

Collapse
No announcement yet.

[آموزش]راه اندازی ماژول +nRF24L01

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پاسخ : راه اندازی ماژول +nRF24L01

    سلام به همه دوستان
    خیلی وقت هست که از این ماژول دارم استفاده میکنم. الان دارم روی یک پروژه کار میکنم که تعداد چند تا از این ماژول ها باید دیتا رو به یک BaseStation بفرستن. برای تفکیک هر Node، من از یک کانال دارم استفاده میکنم. شماره هرکانال مختص یک نود هست و BaseStation با انتخاب کانال، نود مورد نظر رو عوض میکنه. اوایل کار من نرخ ارسال رو روی 2Mbps گذاشته بودم. یک مشکل عجیی که برخوردم این بود که توی بعضی ازکانال هایی که حتی توشون هیچ فرستنده ای نبود دیتا دریافت میکردم :eek: !!!!!! متوجه شدم که سرعت تعویض کانال خیلی تاثر داره و با کم کردن اون وضع بهتر شد ولی باز هم مشکل پابرجا بود. مثلا اوایل هر 3-4 بار یک بار این اتفاق میافتاد ولی بعدش هر 10-15 بار. بعد متوجه شدم که نرخ ارسال زیاد هست و با کم کردن اون) تونستم این خطا رو خیلی کم کنم. ولی مشکل این هست که هنوز این اتفاق میفته! مثلا از هر 40-50 تا ارسال یک بار روی کانالی که هیچ فرستنده ایی قرار نداره دیتا دریافت میکنم! کسی تاحالا به همچین مشکلی برخورده؟؟؟ الان من بین تعویض هر کانال 500 میلی ثانیه تاخیر گذاشتم. توجه کنید اگر مثلا این تاخیر رو به 5 ثانیه برسونم تقریبا مشکل حل میشه ولی از اونجا که ممکنه 100 تا فرستنده داشته باشم برای دریافت دیتا کل شبکه چیزی حدود 500 ثانیه طول میکشه! که اصلا درست نیست! همین 500 میلی ثانیه هم زیاده! اگر کسی تجربه ای داره دریغ نکنه.
    با تشکر

    دیدگاه


      پاسخ : راه اندازی ماژول +nRF24L01

      نوشته اصلی توسط mohammadh1387
      سلام به همه دوستان
      خیلی وقت هست که از این ماژول دارم استفاده میکنم. الان دارم روی یک پروژه کار میکنم که تعداد چند تا از این ماژول ها باید دیتا رو به یک BaseStation بفرستن. برای تفکیک هر Node، من از یک کانال دارم استفاده میکنم. شماره هرکانال مختص یک نود هست و BaseStation با انتخاب کانال، نود مورد نظر رو عوض میکنه. اوایل کار من نرخ ارسال رو روی 2Mbps گذاشته بودم. یک مشکل عجیی که برخوردم این بود که توی بعضی ازکانال هایی که حتی توشون هیچ فرستنده ای نبود دیتا دریافت میکردم :eek: !!!!!! متوجه شدم که سرعت تعویض کانال خیلی تاثر داره و با کم کردن اون وضع بهتر شد ولی باز هم مشکل پابرجا بود. مثلا اوایل هر 3-4 بار یک بار این اتفاق میافتاد ولی بعدش هر 10-15 بار. بعد متوجه شدم که نرخ ارسال زیاد هست و با کم کردن اون) تونستم این خطا رو خیلی کم کنم. ولی مشکل این هست که هنوز این اتفاق میفته! مثلا از هر 40-50 تا ارسال یک بار روی کانالی که هیچ فرستنده ایی قرار نداره دیتا دریافت میکنم! کسی تاحالا به همچین مشکلی برخورده؟؟؟ الان من بین تعویض هر کانال 500 میلی ثانیه تاخیر گذاشتم. توجه کنید اگر مثلا این تاخیر رو به 5 ثانیه برسونم تقریبا مشکل حل میشه ولی از اونجا که ممکنه 100 تا فرستنده داشته باشم برای دریافت دیتا کل شبکه چیزی حدود 500 ثانیه طول میکشه! که اصلا درست نیست! همین 500 میلی ثانیه هم زیاده! اگر کسی تجربه ای داره دریغ نکنه.
      با تشکر
      این مشخص هست که اگه بادریت روی 2mb باشه، فاصله کانالها را باید بزگتر از این بادریت درنظر بگیری تا تداخل کانالی رخ نده. اما در سرعت 250kb یکم عجیبه اگه تداخل دارین! مگه اینکه در محدوده شما ماژول دیگه ای باشه. یه احتمال دیگه برای تداخل اینه که واریانس دمای محیط تست میتونه فرکانس را کمی جابجا کنه. حتما این را چک کنید که همه ماژولهاتون فرکانس یکتا دارن

      دیدگاه


        پاسخ : راه اندازی ماژول +nRF24L01

        ممنون

        من این چیزی که شما گفتین رو قبلا چک کردم. مطمن هستم که هر ماژول فرکانس خودش رو داره. الان برای راحتی کار دارم از 5 تا نود و 1 Basestation استفاده میکنم ولی اگر شبکه بزرگ شه مطمن هستم مشکل پیش میاد. این یک لاگ هست که از شبکه گرفتم:
        کد:
        ======================================================
        ThreadInit:
        ======================================================
        Device Configuration............................passed
        nRF24L01+ Configuration ...................in Progress
        nRF24L01+ Configuration.........................passed
        Initial RF Channel..............................2402Mhz
        Number of Nodes in Network......................5
        Node[1] RF Channel..............................2410Mhz
        Node[2] RF Channel..............................2420Mhz
        Node[3] RF Channel..............................2430Mhz
        Node[4] RF Channel..............................2440Mhz
        Node[5] RF Channel..............................2450Mhz
        
        
        Starting ThreadSleep...
        Starting ReCThread ...
        Starting BLThread...
        Waiting to receive data from Node[1] on Channel[10]
        Data from Node[1] did not received.
        Waiting to receive data from Node[2] on Channel[20]
        Data from Node[2] did not received.
        Waiting to receive data from Node[3] on Channel[30]
        Data from Node[3] did not received.
        Waiting to receive data from Node[4] on Channel[40]
        RF_CH[40]-Data Received from Node[4]: 30509
        Waiting to receive data from Node[5] on Channel[50]
        RF_CH[50]-Data Received from Node[5]: 11565
        ReCThread Finished...
        الان از 5 تا نود فقط یک دونه رو روشن گذاشتم. که توی فرکا نس 2440Mhz داره کار میکنه. همونظور که میبینید، نود شماره 5 هم دیتا دریافت کرده!!!!!!!!!!!!!!!!!!!!! با اینکه اصلا همچین نودی ندارم. به دلایلی تا حد امکان نمیخوام از Acknowledge استفاده کنم.
        واقعا برام عجیب هست. با اینکه فاصله هر کانال 10MHZ هست باز هم مشکل پیش میاد. فاصله کانال ها رو هم بیشتر کردم باز هم همین مشکل هست. برای اظمینان، بین هر تعویض کانال من بافر RX رو هم خالی میکنم. بدون خالی کردن هم امتحان کردم. همشون همون مشکلی که گفتم رو دارن.

        دیدگاه


          پاسخ : راه اندازی ماژول +nRF24L01

          ببین اگه میتونی برای هر ماژول یه هدر خاص اول اطلاعات بزاv. اینطوری اگه اون هدر اول نبود اون اطلاعات را بریز دور. در ضمن بهت کمک میکنه که بفهمی شاید یه ماژول داره اشتباه روی کانالهای دیگه هم کار میکنه و بفهمی که کدومه. متوجه منظورم میشین؟

          دیدگاه


            پاسخ : راه اندازی ماژول +nRF24L01

            سلام

            کل پروژه رو رو تعداد بایت های ارسال شده ارزیابی میشه. بنابراین اصلا نمیخوام چیز دیگه ای به غیر از دیتا ارسال بشه. میخوام حداکثر تلاشم رو توی این قضیه بکنم. اگر نشد بهترین راه همون ACK هست. فرکانس ها رو یک در میون زوج و فرد انتخاب کردم. احساس میکنم بهتر شد. نمیدونم شاید از چیز دیگه ای باشه.

            دیدگاه


              پاسخ : راه اندازی ماژول +nRF24L01

              نوشته اصلی توسط mohammadh1387
              سلام

              کل پروژه رو رو تعداد بایت های ارسال شده ارزیابی میشه. بنابراین اصلا نمیخوام چیز دیگه ای به غیر از دیتا ارسال بشه. میخوام حداکثر تلاشم رو توی این قضیه بکنم. اگر نشد بهترین راه همون ACK هست. فرکانس ها رو یک در میون زوج و فرد انتخاب کردم. احساس میکنم بهتر شد. نمیدونم شاید از چیز دیگه ای باشه.
              به هرحال من جای شما بودم، مشکل را پیدا میکردم چون ممکنه در جایی که ستاپ میکنی مجموعه را و زمانی که خودت هم نیستی به همون مشکل بر بخوره پروژه!

              دیدگاه


                پاسخ : راه اندازی ماژول +nRF24L01

                سلام
                من میخوام اول برنامه، چک کنم ببینم گیرنده در دسترس هست یا نه، بعد داده رو ارسال کنم...همون سیستم ACK
                میشه یکی راهنمایی کنه که بعد ارسال دقیقا باید کدوم بیت رو بررسی کنم؟
                یه توضیحی هم در موردش بدید ممنون میشم
                از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

                دیدگاه


                  پاسخ : راه اندازی ماژول +nRF24L01

                  من یه مشکل خیلی بزرگ دارم و اینه که بردش بیشتر از 4 متر نمیشه و ترتباط قطع میشه.مشکلش چی میتونه باشه؟

                  دیدگاه


                    پاسخ : راه اندازی ماژول +nRF24L01

                    نوشته اصلی توسط mohammadttl
                    من یه مشکل خیلی بزرگ دارم و اینه که بردش بیشتر از 4 متر نمیشه و ترتباط قطع میشه.مشکلش چی میتونه باشه؟
                    از کدوم هدر استفاده میکنید؟
                    رجیستر RF_SETUP رو چطوری تنظیم کردید؟
                    هدر فایلی که تو همین پست هست رو سرعت 256kbps تنظیم شده و گزینه Automatic Retransmission فعال نشده
                    منم اول همچین مشکلی داشتم، کدهام یکی دو خط در میون میرسید به گیرنده
                    بعد اینکه رو سرعت 1Mbps گذاشتم و گزینه Automatic Retransmission رو فعال کردم خطا به صفر رسید، یعنی بی برو برگشت داده رو تحویل گیرنده میده
                    البته نمیدونم مشکل شما از همین باشه یا نه ولی تست کنید
                    از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

                    دیدگاه


                      پاسخ : راه اندازی ماژول +nRF24L01

                      ممنونم از پاسختون.
                      مقدار RF_SETUP در ابتدای هدر فایل برابر 0x06 قرار داده شده.
                      سرعتشو کجا باید تنظیم کنم؟؟
                      Automatic Retransmission چیه و کجا باید فعالش کنم؟

                      دیدگاه


                        پاسخ : راه اندازی ماژول +nRF24L01

                        سلام

                        نرخ ارسال خیلی مهم هست. من هم اوایل خیلی برد ماژولم کم بود، این رجیستر رو میتونی اینجوری تغییر بدی:
                        کد:
                        #define nrf24l01_RF_SETUP		0x06
                        #define nrf24l01_RF_SETUP_DEFAULT_VAL		0x27 // 250Kbps
                        
                        	nrf24l01_write_register(nrf24l01_RF_SETUP, nrf24l01_RF_SETUP_DEFAULT_VAL, 1);
                        در اینجا مقدار رجیستر RF_SETUP روی 0x27 تنطیم میشه که به معنای نرخ ارتباط 250Kbps هست برای اینکه به 1Mbps برسه خودت به دیتا شیت مراحعه کن (صفحه 55 )

                        دیدگاه


                          پاسخ : راه اندازی ماژول +nRF24L01

                          نوشته اصلی توسط mohammadttl
                          ممنونم از پاسختون.
                          مقدار RF_SETUP در ابتدای هدر فایل برابر 0x06 قرار داده شده.
                          سرعتشو کجا باید تنظیم کنم؟؟
                          Automatic Retransmission چیه و کجا باید فعالش کنم؟
                          ببینید، رجیستر RF_SETUP آدرسش 0x06 و رجیستر SETUP_RETR که همون Automatic Retransmission هست آدرسش 0x04 هست.
                          حتما این دو رجیستر رو تو دیتاشیت پیدا کنید و بخونید
                          تنظیمات رجیستر RF_SETUP برای من این شکلیه:
                          کد:
                          Command_Reg = 0x06;  
                            Set_Reg(0x06);
                          یعنی سرعت 1مگابیت و قدرت خروجی 0dB

                          رجیستر SETUP_RETR هم به این شکل:
                          کد:
                          Command_Reg = 0x04;  
                            Set_Reg(0x1F);
                          که یعنی اگه داده به گیرنده نرسید تا 15 بار با تاخیر 500us مجدد ارسال بشه

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

                          دیدگاه


                            پاسخ : راه اندازی ماژول +nRF24L01

                            با سلام آقا shahin2222 شما قبلا در مورد کم کردن قدرت فرستنده توضیح دادید میخواستم بدونم با این روش یعنی کم کردن قدرت و این چیزها آیا میتوان تشخیص داد که فرستنده به گیرنده نزدیک شده یا از اون دور شده؟

                            دیدگاه


                              پاسخ : راه اندازی ماژول +nRF24L01

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

                              دیدگاه


                                پاسخ : راه اندازی ماژول +nRF24L01

                                نوشته اصلی توسط زوار
                                با سلام آقا shahin2222 شما قبلا در مورد کم کردن قدرت فرستنده توضیح دادید میخواستم بدونم با این روش یعنی کم کردن قدرت و این چیزها آیا میتوان تشخیص داد که فرستنده به گیرنده نزدیک شده یا از اون دور شده؟
                                تو این آی سی های NRF24L01 همچین امکانی تعریف نشده متاسفانه
                                ولی الان که همه رجیستر هارو نگاه کردم فقط یک رجیستر به چشمم خورد که به این قضیه مربوط میشه
                                رجیستری با آدرس 0x09 و بیت صفرم که RPD نام داره، یعنی Received Power Detector ،چیزی که از توضیحاتش فهمیدم به این صورت عمل میکنه که ، اگه قدرت سیگنال دریافتی کمتر از 64dB- بشه این بیت صفر میشه و در حالت عادی برابر 1 هست
                                البته فکر نمیکنم این رجیستر به درد کار شما بخوره
                                از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

                                دیدگاه

                                لطفا صبر کنید...
                                X