[Oberon] FPGA - nRF24L01 connection

Jörg joerg.straube at iaeth.ch
Tue Apr 17 15:23:46 CEST 2018


Do you have an L01 or an L01+?
Strictly speaking „testCarrier()“ should not be used on the L01+ model. You should call „testRPD()“. But as the register both procedures read is the same, it doesn‘t matter practically.
- CD is the name for register 9 on L01
- RPD is the name for register 9 on L01+
The internal mechanisms how the chip detects the carrier/RPD is different however.

testCarrier() on the L01+ is identical to testRPD(). For clarity, you should call testRPD() on a L01+. On a L01+, you have to wait for at least 170us before you can trust the RPD signal. Your delayMicroseconds is too short to reliably trust the signal. I‘m not sure but this might be the reason of the bleeding effect you observe...

br
Jörg

> Am 17.04.2018 um 12:21 schrieb Tomas Kral <thomas.kral at email.cz>:
> 
> On Tue, 17 Apr 2018 10:35:38 +0100
> Paul Reed <paulreed at paddedcell.com> wrote:
> 
>> What happens if you put a pause in that loop?
> I inserted a delay, 
> ...
> Ping; j := Kernel.Time() + Wait; REPEAT UNTIL
> Kernel.Time() >= i;
> ...
> I cannot see any effect, I got 26-32%, with or without a delay.
> 
>> Do all the modules reliably detect a carrier?
> 
> I need to understand this test first, I have an RPI channel scanner
> code.
> Until now, I just executed Ping by hand on Oberon, and on RPI carrier
> detected also bleeding into neighbouring channels. This is the case
> with any modules I have had to tests. Only two of them work so far, but
> only in specific node, Oberon or RPI, not both.
> 
> The code is this
> while (i--)
>      {
> 
>        // Select this channel
>        radio.setChannel(i);
> 
>        // Listen for a little
>        radio.startListening();
>        delayMicroseconds(128);
>        radio.stopListening();
> 
>        // Did we get a carrier?
>        if ( radio.testCarrier() ) ++values[i];
>      }
> 
> bool RF24::testCarrier(void)
> {
>  return ( read_register(CD) & 1 );
> }
> 
> I may also try measuring signal level in the channel as Joerg
> suggested. 
> 
> bool RF24::testRPD(void)
> {
>  return ( read_register(RPD) & 1 ) ;
> }
> 
> -- 
> Tomas Kral <thomas.kral at email.cz>
> --
> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
> https://lists.inf.ethz.ch/mailman/listinfo/oberon



More information about the Oberon mailing list