[Oberon] FPGA - nRF24L01 connection

Jörg Straube joerg.straube at iaeth.ch
Sun Apr 15 06:52:05 CEST 2018


Tomas

How do you measure „x% loss“? Currently, all your packets contain a constant string. Please enter an increasing number in it and see how many numbers you miss.

BTW:
You can delete „openReadingPipe“ („openWritingPipe“ does everything you need), and you can call „available()“ without parameter „pipe“.

br
Jörg

> Am 14.04.2018 um 11:20 schrieb Tomas Kral <thomas.kral at email.cz>:
> 
> On Fri, 13 Apr 2018 10:46:11 +0300
> Jörg <joerg.straube at iaeth.ch> wrote:
> 
>> The easiest is to only use pipe 0.
> Hi,
> 
> I worked out a simple code from `rpi-hub.cpp' modified to use only
> pipe-0 for reading/writing. Attached, if you wished to follow, as I'd
> learn about experience on your systems.
> 
> On Oberon end, I just execute `Ping' procedure, that in return calls
> `Pong'. Outbound 90% loss, inboud 10% loss.
> 
> This makes me curious how to manage RPI reliable network time server,
> file server, etc.
> 
> /*  Filename : rpi-hub.cpp
> *
> *  Author : Stanley Seow
> *  e-mail : stanleyseow at gmail.com
> *  date   : 6th Mar 2013
> *
> * 03/17/2013 : Charles-Henri Hallard (http://hallard.me)
> *    Changed to use modified bcm2835 and RF24 library 
> * 14.04.2018 : [tcat] thomas.kral at email.cz
> *    Adapted for RISC-5 Oberon `SCC.Mod'
> */
> 
> #include <cstdlib>
> #include <iostream>
> #include <RF24/RF24.h>
> 
> using namespace std;
> 
> // Default pipe addresses after radio reset
> const uint64_t pipes[6] = {
>          0xe7e7e7e7e7LL, 0xc2c2c2c2c2LL,
>          0xc3, 0xc4, 0xc5, 0xc6 
>  };
> 
> // CE Pin, CSN Pin, SPI Speed
> // Setup for GPIO 22 CE and CE0 CSN with SPI Speed @ 4Mhz
> RF24 radio(RPI_V2_GPIO_P1_22, BCM2835_SPI_CS0, BCM2835_SPI_SPEED_4MHZ); 
> 
> 
> int main(int argc, char** argv) 
> {
>  uint8_t len;
> 
>  // Default radio setting
>  radio.begin();
>  radio.setRetries(50,50);
>  radio.setChannel(5);
>  radio.maskIRQ(1,1,1);
> 
>  // Enable pipe-0 for reading and writing
>  radio.openWritingPipe(pipes[0]);
>  radio.openReadingPipe(0,pipes[0]);
> 
>  // Start listening
>  // Dump radio configuration for debugging
>  radio.startListening();
>  radio.printDetails();
> 
>  printf("Output below [Ctrl-C to exit]: \n");
>  delay(1);
> 
>  while(true)
>  {
>    char receivePayload[32];
>    uint8_t pipe = 0;
> 
>    // Start listening
>    radio.startListening();
> 
>    if ( radio.available(&pipe) ) 
>    {
> 
>      // Read payload 32 bytes from Oberon
>      len = 32;
>      radio.read( receivePayload, len );
>      len = strlen(receivePayload);
> 
>      // Display it on screen
>      printf("Recv: size=%i payload=%s
>      pipe=%i\n",len,receivePayload,pipe);
> 
>      // Return payload back, stamped with 'x'
>      radio.stopListening();
>      receivePayload[len-1]='x';
>      radio.write(receivePayload,len);
>      printf("Send: size=%i payload=%s
>      pipe:%i\n",len,receivePayload,pipe); }
> 
>    // delayMicroseconds(20); /* 100% of CPU */
>    delay(1); /* 15% of CPU */
>  }
>  return 0;
> }
> 
> -- 
> 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