PS: Forgot to mention that I am using a USRP N310 and its front panel GPIO...
  
  
Thank you for your help!
  
Von: Discuss-gnuradio <discuss-gnuradio-bounces+anton.dobler=unibw.de@gnu.org> im Auftrag von Dobler, Anton <anton.dobler@unibw.de>
Gesendet: Freitag, 10. September 2021 16:18
An: discuss-gnuradio@gnu.org
Betreff: USRP, GPIO toggling and Gnuradio   
  Gesendet: Freitag, 10. September 2021 16:18
An: discuss-gnuradio@gnu.org
Betreff: USRP, GPIO toggling and Gnuradio
Dear all, 
  I am currently trying to write an OOT block to switch a GPIO pin high or low depending on the input signal. So far it has worked with the configuration of the pins and I can also switch the pins according to the input signal in a relatively simple flowgraph   consisting of a signal generator that produces a square wave signal. 
  The block's work function looks like this:
  int GPIO_IO_impl::work(int noutput_items,
              gr_vector_const_void_star &input_items,
              gr_vector_void_star &output_items)
      {        
          const float *in_signal = (const float *) input_items[0];
          for(int i=0; i < noutput_items; i++) {
              if(in_signal[i] >= d_threshold)
              {
                   _dev->set_gpio_attr(gpio, std::string("OUT"), "HIGH", 0xffffffff)                 
              }
              if(in_signal[i] < d_threshold)
              {
                   _dev->set_gpio_attr(gpio, std::string("OUT"), "LOW", 0xffffff);
              }
          boost::this_thread::sleep_for(boost::chrono::nanoseconds((unsigned long long)d_samp_period));
          }
          return noutput_items;
      }
  The sleep function is important in that without it, regardless of the sampling rate of the square wave signal, the pin is switched with a period of 20us. If I use the sleep function, the whole thing works better, but only up to a sampling rate of about   20kHz. I have read a little bit about the function of the scheduler in GNURadio, but I did not find a solution.
  Starting from the standing approach, I have tried using both Timed Commands and Boost Signals, with the result that the pins are switched completely asynchronously. Since I don't really know what to do at this point, I wanted to ask if any of you had experience   with this kind of OOT block in GNURadio.
  
  
Best regards, 
  
  
Anton
  
  
  
  
No comments:
Post a Comment