Выключается модуль nrf24l01
- Войдите на сайт для отправки комментариев
Чт, 04/10/2018 - 12:22
Передаю сигнал с одной UNO на другую при помощи двух nrf24l01 + pa + lna. Связь есть, все хорошо.
Но появилась проблема. Начал отключаться радиомодуль приемник. Некоторое время принимает сигнал и в одно мгновенье перестает.
Код приемника вот:
#include <SPI.h>
#include <RF24.h>
#include <Thread.h>
RF24 radio(9, 10);
const uint32_t pipe = 123456789;
const byte rgbPins[3] = {3,5,6};
byte massiv[3];
int command = 1;
int t = 0, h = 0;
Thread questThread = Thread();
void setup()
{
pinMode(6, OUTPUT);
Serial.begin(57600);
radio.begin();
radio.setDataRate(RF24_1MBPS); // RF24_1MBPS или RF24_2MBPS
radio.openReadingPipe(1,pipe); // открыть канал на приём
radio.startListening(); // приёмa
ledThread.onRun(ledBlink); // назначаем потоку задачу
ledThread.setInterval(1000); // задаём интервал срабатывания, мсек
questThread.onRun(quest); // назначаем потоку задачу
questThread.setInterval(1000); // задаём интервал срабатывания, мсек
analogWrite(rgbPins[0], 255);// устанавливаем светодиод в красный цвет
analogWrite(rgbPins[1], 0);
analogWrite(rgbPins[2], 0);
}
void loop()
{
if (questThread.shouldRun())
questThread.run(); // запускаем поток приема с датчика радиомодуля
}
void quest() {
if(radio.available()) //проверяем есть ли
{
radio.read(massiv, sizeof(massiv)); // читаем данные с радиомодуля в массив
bool original = false; //проверяем на изменения полученных данных, что бы не выводить в порт кучу одинаковых данных
if( t != massiv[0]) //проверяем на оригинальность данных
{
t = massiv[0]; // записываем в переменную данные полученные с радиомодуля
original = true;//устанавливаем флаг оригинальности в true
}
if(h != massiv[1])//проверяем на оригинальность данных
{
h = massiv[1];// записываем в переменную данные полученные с радиомодуля
original = true;//устанавливаем флаг оригинальности в true
}
if( command != massiv [2])//проверяем на оригинальность данных
{
command = massiv[2];// записываем в переменную данные полученные с радиомодуля
original = true;//устанавливаем флаг оригинальности в true
}
Serial.println("--------"); // выводим в мониторинг порта строку
if(h!= 0)// && original == true)
{
static int count = 0;
Serial.print("Количество проходов:"); // выводим в мониторинг порта строки
Serial.println(count++);
Serial.print("Влажность: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Температура: ");
Serial.print(t);
Serial.println(" *C "); //Вывод показателей на экран
Serial.print("Номер команды: ");
Serial.println(command);
}
if(command == 1)
{
analogWrite(rgbPins[0], 255); // Включаем красный свет
analogWrite(rgbPins[1], 0);
analogWrite(rgbPins[2], 0);
}
else
{
if(command == 2)
{
analogWrite(rgbPins[0], 0);// Включаем синий свет
analogWrite(rgbPins[1], 255);
analogWrite(rgbPins[2], 0);
}
else
{
analogWrite(rgbPins[0], 0);// Включаем зеленый свет
analogWrite(rgbPins[1], 0);
analogWrite(rgbPins[2], 255);
}
}
}
else { //перезапускаем радиомодуль
Serial.println("Error"); //сообщение об ошибке
radio.stopListening();//остановка приема
delay(1000);
radio.openReadingPipe(1,pipe); // открыть канал на приём
radio.startListening(); // приём
}
}
Почему может останавливаться прием? На плате диод, на прием, перестает гореть. Перезапуск решает проблему, но на время. Примерно пол минуты работает стабильно, а потом ошибка и прием прекращается.
не от +5 питаешь, часом?
От 3.3В на Arduino UNO разъеме
Из-за этого может отключаться модуль периодически?
памойму, встроенный в Дуню стабилизатор на 3.3 на NRF не рассчитан. Потрогай его, мошт от по перегреву отключаеца
он сразу включается и начинает работать, как только перезаписываю скетч или по питанию перезагружаю
памойму, встроенный в Дуню стабилизатор на 3.3 на NRF не рассчитан. Потрогай его, мошт от по перегреву отключаеца
Деда, по-моему это байка. Там же обычно ams1117 стоит. При такой небольшой разнице напряжения (5в -> 3.3) он ампер должен тянуть...
Деда, по-моему это байка. Там же обычно ams1117 стоит. При такой небольшой разнице напряжения (5в -> 3.3) он ампер должен тянуть...
Вполне может быть.
Тада на этом моё ясновиденье заканчивается, ждём более компетентных прарицателей, которые без схемы и скетча скажут, штонетак.
По этой схеме подключены оба модуля.
Скетч выше предоставлен
памойму, встроенный в Дуню стабилизатор на 3.3 на NRF не рассчитан. Потрогай его, мошт от по перегреву отключаеца
Деда, по-моему это байка. Там же обычно ams1117 стоит. При такой небольшой разнице напряжения (5в -> 3.3) он ампер должен тянуть...
Вот здесь http://arduino.ru/Hardware/ArduinoBoardUno клевещут: "3V3. Напряжение на выводе 3.3 В генерируемое встроенным регулятором на плате. Максимальное потребление тока 50 мА."
Нужно конкретную плату смотреть.
В рефренсном дизайне стоит https://www.ti.com/lit/ds/symlink/lp2985-n.pdf - "Micropower 150-mA Low-Noise Ultra-Low-Dropout Regulator in a SOT-23 Package"
А по сравнению с этим - еще одного проводка не хватает: http://xn--18-6kcdusowgbt1a4b.xn--p1ai/%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D1%80%D0%B0%D0%B4%D0%B8%D0%BE%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F-nrf24l01/
А где "волшебный " конденсатор ??
"Волщебного" конденсатора нет. Все подключено на прямую в ардуинку.
"Волщебного" конденсатора нет.
Напрасна.
"Волщебного" конденсатора нет. Все подключено на прямую в ардуинку.
Вот вы сами и ответили
На сколько он должен стоять и где?
На сколько он должен стоять и где?
Я делаю так http://arduino.ru/forum/programmirovanie/led-kostyumy-pomoshch-v-optimizatsii-koda#comment-314067
Любой 10-50 микрофарад
между +3.3 и GND на радиомодуле?
Да