Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Вопрос NodeMCU v3 и модуль nRF24L01+

Тема в разделе "Раздел для начинающих", создана пользователем Gamak15km, 30 апр 2019.

  1. Gamak15km

    Gamak15km Новичок

    Сообщения:
    2
    Симпатии:
    0
    Добрый день! Уважаемые фррумчане подскажите пожалуйста куда копать. Столкнулся с проблемой сканирования частоты 2,4 ГГц по 127 каналам. Использую стандартный скетч из примера библиотеки rf24. Скетч модифицирован:

    -закоментирована библиотека "printf.h" и все что с ней связано.
    - изменена строка
    Код (Text):
    1. printf("%x", min(0xf, values[i]));
    2.  
    на
    Код (Text):
    1. printf("%x", min<int>(0xf, values[i]));
    2.  
    при сканировании всех 127 частот, контроллер перегружается.
    Копия порта:
    Код (Text):
    1. RF24/examples/scanner/
    2. STATUS         = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
    3. RX_ADDR_P0-1     = 0xe7e7e7e7e7 0xc2c2c2c2c2
    4. RX_ADDR_P2-5     = 0xc3 0xc4 0xc5 0xc6
    5. TX_ADDR         = 0xe7e7e7e7e7
    6. RX_PW_P0-6     = 0x00 0x00 0x00 0x00 0x00 0x00
    7. EN_AA         = 0x00
    8. EN_RXADDR     = 0x03
    9. RF_CH         = 0x4c
    10. RF_SETUP     = 0x07
    11. CONFIG         = 0x0e
    12. DYNPD/FEATURE     = 0x00 0x00
    13. Data Rate     = 1MBPS
    14. Model         = nRF24L01+
    15. CRC Length     = 16 bits
    16. PA Power     = PA_MAX
    17. 000000000000000011111111111111112222222222222222333333333333333344444444444444445555555555555555666666666666666677777777777777
    18. 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcd
    19.  
    20. Soft WDT reset
    21.  
    22. >>>stack>>>
    23.  
    24. ctx: cont
    25. sp: 3ffffdc0 end: 3fffffc0 offset: 01b0
    26. 3fffff70:  4010019c 0000005b 3ffee4f8 40202f2c
    27. 3fffff80:  3ffe8579 0000007e 0000005b 4020253b
    28. 3fffff90:  feefeffe feefeffe feefeffe 3ffee590
    29. 3fffffa0:  3fffdad0 00000000 3ffee560 40203960
    30. 3fffffb0:  feefeffe feefeffe 3ffe84f4 40100a05
    31. <<<stack<<<
    Если указать не верную скорость порта, то циклично выдается данное сообщение:
    Код (Text):
    1.  ets Jan  8 2013,rst cause:2, boot mode:(3,6)
    2.  
    3. load 0x4010f000, len 1384, room 16
    4. tail 8
    5. chksum 0x2d
    6. csum 0x2d
    7. v951aeffa
    8. ~ld
    Если начать сканировать менее 40 портов, то сканирование работает.

    Загружаемый скетч:
    Код (Text):
    1. #define D5 14  // SCK
    2. #define D6 12  // MISO
    3. #define D7 13  // MOSI
    4. #include <SPI.h>
    5. #include "nRF24L01.h"
    6. #include "RF24.h"
    7. //#include "printf.h"
    8.  
    9. //
    10. // Hardware configuration
    11. //
    12.  
    13. // Set up nRF24L01 radio on SPI bus plus pins 7 & 8
    14.  
    15. RF24 radio(D4, D8);
    16.  
    17. //
    18. // Channel info
    19. //
    20.  
    21. const uint8_t num_channels = 126;
    22. uint8_t values[num_channels];
    23.  
    24. //
    25. // Setup
    26. //
    27.  
    28. void setup(void)
    29. {
    30.   //
    31.   // Print preamble
    32.   //
    33.  
    34.   Serial.begin(9600);
    35.   //printf_begin();
    36.   Serial.println(F("\n\rRF24/examples/scanner/"));
    37.  
    38.   //
    39.   // Setup and configure rf radio
    40.   //
    41.  
    42.   radio.begin();
    43.   radio.setAutoAck(false);
    44.  
    45.   // Get into standby mode
    46.   radio.startListening();
    47.   radio.stopListening();
    48.  
    49.   radio.printDetails();
    50.  
    51.   // Print out header, high then low digit
    52.   int i = 0;
    53.   while ( i < num_channels )
    54.   {
    55.     printf("%x", i >> 4);
    56.     ++i;
    57.   }
    58.   Serial.println();
    59.   i = 0;
    60.   while ( i < num_channels )
    61.   {
    62.     printf("%x", i & 0xf);
    63.     ++i;
    64.   }
    65.   Serial.println();
    66. }
    67.  
    68. //
    69. // Loop
    70. //
    71.  
    72. const int num_reps = 100;
    73.  
    74. void loop(void)
    75. {
    76.   // Clear measurement values
    77.   memset(values, 0, sizeof(values));
    78.  
    79.   // Scan all channels num_reps times
    80.   int rep_counter = num_reps;
    81.   while (rep_counter--)
    82.   {
    83.     int i = num_channels;
    84.     while (i--)
    85.     {
    86.       // Select this channel
    87.       radio.setChannel(i);
    88.  
    89.       // Listen for a little
    90.       radio.startListening();
    91.       delayMicroseconds(128);
    92.       radio.stopListening();
    93.  
    94.       // Did we get a carrier?
    95.       if ( radio.testCarrier() ) {
    96.         ++values[i];
    97.       }
    98.     }
    99.   }
    100.  
    101.   // Print out channel measurements, clamped to a single hex digit
    102.   int i = 0;
    103.   while ( i < num_channels )
    104.   {
    105.     printf("%x", min<int>(0xf, values[i]));
    106.     ++i;
    107.   }
    108.   Serial.println();
    109. }
    110.  
    111. // vim:ai:cin:sts=2 sw=2 ft=cppagjvjubnt
    Мое предположение, что происходит переполнение памяти и контроллер уходит в рст, а что с этим делать и куда копать, в силу своей не компетенции,"самообучаемости" и новизны для меня, я незнаю. Помогите пожалуйста разобраться.
    Заранее спасибо!
     
  2. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.452
    Симпатии:
    173
    В loop долго не сидите. Один проход loop один канал.

    Ну или попробуйте в цикле while (i--) добавить задержку delay(1) или yield() это нужно для того, что бы есп обработала WiFi.
     
    Gamak15km нравится это.
  3. Gamak15km

    Gamak15km Новичок

    Сообщения:
    2
    Симпатии:
    0
    Спасибо! Скетч завелся! и с delay(1), и с yield() работает.
    Подскажите пожалуйста где почитать информацию, связанную с данной ошибкой? хочется более глубже вникнуть в физику процесса. Литературы полно, но какая более подойдет для новичка не понятно!
     
  4. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.127
    Симпатии:
    226
    Gamak15km нравится это.
  5. nikolz

    nikolz Гуру

    Сообщения:
    4.002
    Симпатии:
    426
    читайте документацию по SDK
    --------------
    есть два способа решить вашу проблему
    1) самый простой - поставьте в цикл сканирования сброс WDT и проблемы не будет
    2) сделайте сканирование по таймеру
     
    Gamak15km нравится это.
  6. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.452
    Симпатии:
    173

Поделиться этой страницей