• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z modułami nRF24l01+
#1
Witam, jestem świeży na forum. Od rana walczę z tymi modułami i mam z nimi spory problem bo nie działają jak powinny.

Od razu mówię ze doczytałem o kondesatorach na zasilaniu i oczywiście ich nie mam ponieważ mam oddzielny moduł zasilający. Płytka zasilana z USB a moduły mają oddzielne zasilacze z modułami - zasilane są napięciem 3.3V - zmierzone. I teraz pytanie - czy w takim przypadku równiez konieczne są kondesatory - bo tego już nie wiem.

Korzystam z przykładu na tej stronie oraz tej biblioteki. Podłączam tak samo, tylko zasilanie mam oddzielne - bo podobno to z arduino UNO jest kiepskie.

Zrobiłem wcześniej kilka eksperymentów z modułem przekaźników, diodami, ds18b20 i wszystko chodzi tylko na tych modułach leżę. Zdarza się że prześle mi stringa czy tam int ale zazwyczaj nie przesyła nic i nie bardzo mam pomysł gdzie szukać przyczyny.

Nadajnik
Kod:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
void setup() {
 radio.begin();
 radio.setRetries(10,10);
 radio.openWritingPipe(address);
 radio.setPALevel(RF24_PA_MIN);
 radio.stopListening();
}
void loop() {
 const char text[] = "test";
 radio.write(&text, sizeof(text));
 delay(1000);
}

Odbiornik:
Kod:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
void setup() {
 Serial.begin(9600);
 radio.begin();
 radio.openReadingPipe(0, address);
 radio.setPALevel(RF24_PA_MIN);
 radio.startListening();
}
void loop() {
 if (radio.available()) {
   char text[32] = "";
   radio.read(&text, sizeof(text));
   Serial.println(text);
   delay(10);
 }
}

Tak naprawdę to próbowałem kilka gotowych przykładów, próbowałem zmieniać kanały, rozważałem czy może domowe WIFI albo nadajnik myszki bezprzewodowej nie zakłóca, sprawdzałem kilkukrotnie piny. Dziwne jest to że czasami dane są jednak przesyłane - ale rzadko. Zazwyczaj jest tak że po wgraniu flash do nadajnika działa przez chwile.

Generalnie nie miałem styczności z tymi modułami, wydają się dość tanie albo kupiłem uszkodzone - kiedyś używałem nrf905 na 433 Mhz i tam nie miałem takich problemów. Dodam że wgrywałem również przykłady z biblioteki i również nie działają prawidłowo - co jakiś czas jakieś dane polecą ale zazwyczaj cisza w eterze.

Ktoś z Was ma jakiś pomysł?
 
Odpowiedź
#2
Wstaw te kondensatory na zasilaniu modułów.
Ja bez tych kondziorków ich nie uruchamiam Smile
Jeżeli pomogłem, to poproszę o punkt reputacji Big Grin
 
Odpowiedź
#3
(21-04-2018, 21:51)ANT napisał(a): Wstaw te kondensatory na zasilaniu modułów.
Ja bez tych kondziorków ich nie uruchamiam Smile

chyba jest postęp - co prawda nie mam kondesatorów 10uF ale znalazłem 4,7uF i dolutowałem ale zmiany nie zauważyłem żadnej - więc podpiąłem spowrotem zasilanie do płytki arduino i moduł przestał pokazywać głupoty.
Już wyjaśniam:

wcześniej funkcja printDetails() zwracała mi głupoty:

Cytat:RF24/examples/pingpair_ack/

ROLE: Pong back
*** PRESS 'T' to begin transmitting to the other node
STATUS         = 0x00 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=0 TX_FULL=0
RX_ADDR_P0-1     = 0x000000003c 0x81c481c430
RX_ADDR_P2-5     = 0xc1 0x00 0xc0 0xc2
TX_ADDR         = 0x000400203c
RX_PW_P0-6     = 0x01 0x00 0x00 0x00 0x00 0x00
EN_AA         = 0x00
EN_RXADDR     = 0x00
RF_CH         = 0x00
RF_SETUP     = 0x00
CONFIG         = 0x01
DYNPD/FEATURE     = 0x00 0x02
Data Rate     = 1MBPS
Model         = nRF24L01+
CRC Length     = 8 bits
PA Power     = PA_MIN


RF24/examples/pingpair_ack/

ROLE: Pong back
*** PRESS 'T' to begin transmitting to the other node
STATUS         = 0x02 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=1 TX_FULL=0
RX_ADDR_P0-1     = 0x000400207c 0x81c481c430
RX_ADDR_P2-5     = 0xc1 0xc0 0xc0 0xc2
TX_ADDR         = 0x544d52687c
RX_PW_P0-6     = 0x01 0x00 0x00 0x00 0x00 0x00
EN_AA         = 0x1f
EN_RXADDR     = 0x00
RF_CH         = 0x00
RF_SETUP     = 0x00
CONFIG         = 0x00
DYNPD/FEATURE     = 0x80 0x00
Data Rate     = 1MBPS
Model         = nRF24L01
CRC Length     = 8 bits
PA Power     = PA_MIN



a teraz przynajmniej adres modułu i kanał są stabilne i powtarzalne:
Cytat:
Cytat:STATUS           = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1     = 0xf0f0f0f0d2 0xf0f0f0f0e1
RX_ADDR_P2-5     = 0xc3 0xc4 0xc5 0xc6
TX_ADDR          = 0xf0f0f0f0d2
RX_PW_P0-6       = 0x08 0x08 0x00 0x00 0x00 0x00
EN_AA            = 0x3f
EN_RXADDR        = 0x03
RF_CH            = 0x4c
RF_SETUP         = 0x07
CONFIG           = 0x0f
DYNPD/FEATURE    = 0x00 0x00
Data Rate        = 1MBPS
Model            = nRF24L01+
CRC Length       = 16 bits
PA Power         = PA_HIGH


To już naprawdę duży postęp.


EDIT:

Dobra, zrobione - kondesatory miały jednak znaczenie - na nadawczym 4,7nF a na odbiorczym 1nF, bo takie udało mi się wylutować ze starego zasilacza ATX. reszta to formalność.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości