6

I have had minor success using the PIGPIO library and interfacing the Pi as an I2C Slave (Using GPIO Pins 18 and 19 as SDA and SCL) with a Campbell CR1000X Datalogger

I am encountering a problem receiving messages after I slow down the scan rate from the Campbell program though. It seems my program on Pi only successfully reads and outputs data when I send the data from the master at 10ms intervals or faster.

Placing a sleep() function call (tried from one second to upwards of 30 seconds) in my Pi program after every successful read/output did not work either.

Any ideas as to why the Pi program is not reading anything at a scan rate slower than 10ms? (Ideally I want to only send data to the pi every few minutes or more so this is a big problem)

relevant code:

Campbell Controller

PortPairConfig(C7,2) //3.3 V 
I2COpen (C7,50000) //50000 Hz
Scan (30, sec, 0, 0) // send Information every 30 seconds
  I2CWrite(C7,&H0A,Counter, 4, &H3) //&H3 sends start condition at beginning, and stop condition(NACK) at end of transaction
  //Counter is the information variable being sent, 4 is number of bytes
....
Next Scan

Pi Code

atomic<bool> Quit = ATOMIC_VAR_INIT(false);
 void quit(int sig){
 Quit = true;
}

int main(int argc, char** arg){ signal(SIGINT,quit); bsc_xfer_t xfer; gpioInitialise(); xfer.control = (0x0A<<16) | 0x305;

while(!Quit){ int status = bscXfer(&xfer); if(status){ if(xfer.rxCnt > 0){ cout << xfer.rxBuf << endl; memset(xfer.rxBuf, '\0', sizeof(char)*BSC_FIFO_SIZE); } } } return 1; }

Note: This program outputs the expected information when I have my Campbell scan at 10, msec

Thanks for taking the time to read this and help me out.

Sophi
  • 11
  • 3

0 Answers0