// *****************************************************************************
// example for reading device ID
// address is the 7 bit address
// *****************************************************************************
int main(int argc, char **argv)
{
    uint8_t buf[64], j;
    struct bcm2835_i2cbb ibb;
    // address, sda,scl,clock_freq,timeout
    if(bcm2835_i2cbb_open(&ibb,0x21,17,21,300,1000000)) exit(1);
    
    // discover addresses on bus
    bcm8235_i2cbb_discover(&ibb, 0x10, 0xe0);
    
    // most devices have a command 0x55, this will return an incrementing
    // count
//    &ibb.address = 0x21; // change address if required 
//    bcm8235_i2cbb_putc(&ibb, 0x55);
//    bcm8235_i2cbb_gets(&ibb, buf, 4);
//    for(j=0;j<4;j++) {
//        printf("read %x\n",buf[j]);
//    }

    // BV4208 & BV4218 I2C LCD display
    // Clear screen and print Hello
//    ibb.address = 0x21; // address
//    buf[0]=1; // lcd command
//    buf[1]=1; // clear screen
//    bcm8235_i2cbb_puts(&ibb, buf, 2);
//    sleep(1); // cls takes a while
//    strcpy(buf,"\2Hello"); // 2 is command for writing data
//    bcm8235_i2cbb_puts(&ibb, buf, strlen(buf)); 
  
    // Relay BV4502      
//    ibb.address = 0x31; // address
//    buf[0]=1; // relay A
//    buf[1]=1; // on
//    bcm8235_i2cbb_puts(&ibb, buf, 2);
//    sleep(3);
//    buf[1]=0; // off
//    bcm8235_i2cbb_puts(&ibb, buf, 2);

    // ADC BV4205
//    ibb.address = 0x31; // address
    // set auto scan
//    buf[0]=6; // autoscan command
//    buf[1]=1; // on
//    bcm8235_i2cbb_puts(&ibb, buf, 2);
//    buf[0] = 7; // autoscan read
//    buf[1] = 0; // start at 0
    // get all 20 readings
//    bcm8235_i2cbb_puts(&ibb, buf, 2); // auto scan
//    bcm8235_i2cbb_gets(&ibb, buf, 20);

//    uint16_t v;
//    for(j=0;j<20;j+=2) {
//        v = (buf[j]*256) + buf[j]+1;
//        printf("\n A%d %u ",j,v);
//    }  

    exit(0);
}
Example #2
0
int main(int argc, char **argv)
{
   char msg[MAX_GPS_MSG_LEN+1];
   struct bcm2835_i2cbb ibb;
   uint32_t speed = 250;
   uint32_t kbit = 100;

   if (argc > 1) {
      kbit = atoi(argv[1]);
      switch (kbit) {
      case  50: speed = 500; break; // 500 gives roughly  50Kbit/s
      case 100: speed = 250; break; // 250 gives roughly 100Kbit/s
      case 200: speed = 100; break; // 100 gives roughly 200Kbit/s
      case 300: speed =  50; break; //  50 gives roughly 300Kbit/s
      case 400: speed =  23; break; //  23 gives roughly 400Kbit/s
      default:
         printf("Bad speed '%s'=%u, should be 50,100,200,300 or 400\n", argv[1], kbit);
         exit(1);
      }
   }
   printf("Using speed ~ %u Kbit/s\n", kbit);

   // address, sda,scl,clock_freq,timeout
   if(bcm2835_i2cbb_open(&ibb,0x42,2,3,speed,1000000)) {
      printf("Failed to initialize bitbanged I2C. Aborting...\n");
      exit(1);
   }

   while(1) {
      int len = gps_read_message(&ibb, msg);
      if (len > 0) {
         gps_process_message(msg, len);
      }
      gps_delay_ms(100);
   }

   exit(0);
}
Example #3
0
void startI2Cgps(void) {

	gpsi2c.address = GPS_ADDR;
	bcm2835_i2cbb_open(&gpsi2c, GPS_ADDR, 2, 3, 300, 2000000);

}