Esempio n. 1
0
void inline static mcp7941x_setup(void) {
	FUNC_PREFIX(i2c_setSlaveAddress(i2c_mcp7941x_slave_address));
#ifdef __AVR_ARCH__
#else
	bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_2500);
#endif
}
Esempio n. 2
0
// set I2C clock divider by means of a baudrate number
void bcm2835_i2c_set_baudrate(uint32_t baudrate)
{
	uint32_t divider;
	// use 0xFFFE mask to limit a max value and round down any odd number
	divider = (BCM2835_CORE_CLK_HZ / baudrate) & 0xFFFE;
	bcm2835_i2c_setClockDivider( (uint16_t)divider );
}
Esempio n. 3
0
uint16_t SlushBoard::getTempRaw(void) {
	uint8_t buf[2] = { 0, 0 };

	bcm2835_i2c_setSlaveAddress(MAX1164_I2C_ADDRESS);
	bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_626);
	(void) bcm2835_i2c_read((char *) buf, (uint32_t) 2);

	return (uint16_t) ((uint16_t) buf[0] << 8 | (uint16_t) buf[1]);
}
Esempio n. 4
0
int main(int argc, char **argv) {

    printf("Running ... \n");
    
    // parse the command line
    if (comparse(argc, argv) == EXIT_FAILURE) return showusage (EXIT_FAILURE);

    if (!bcm2835_init())
    {
      printf("bcm2835_init failed. Are you running as root??\n");
      return 1;
    }
      
    // I2C begin if specified    
    if (init == I2C_BEGIN)
    {
      if (!bcm2835_i2c_begin())
      {
        printf("bcm2835_i2c_begin failed. Are you running as root??\n");
	return 1;
      }
    }
	  

    // If len is 0, no need to continue, but do I2C end if specified
    if (len == 0) {
         if (init == I2C_END) bcm2835_i2c_end();
	 printf("... done!\n");
         return EXIT_SUCCESS;
    }

    bcm2835_i2c_setSlaveAddress(slave_address);
    bcm2835_i2c_setClockDivider(clk_div);
    fprintf(stderr, "Clock divider set to: %d\n", clk_div);
    fprintf(stderr, "len set to: %d\n", len);
    fprintf(stderr, "Slave address set to: %d\n", slave_address);   
    
    if (mode == MODE_READ) {
    	for (i=0; i<MAX_LEN; i++) buf[i] = 'n';
    	data = bcm2835_i2c_read(buf, len);
    	printf("Read Result = %d\n", data);   
    	for (i=0; i<MAX_LEN; i++) {
    		if(buf[i] != 'n') printf("Read Buf[%d] = %x\n", i, buf[i]);
	}    
    }
    if (mode == MODE_WRITE) {
    	data = bcm2835_i2c_write(wbuf, len);
    	printf("Write Result = %d\n", data);
    }   

    // This I2C end is done after a transfer if specified
    if (init == I2C_END) bcm2835_i2c_end();   
    bcm2835_close();
    printf("... done!\n");
    return 0;
}
Esempio n. 5
0
int MAG3110_Init() {
	char v = 0;
	bcm2835_i2c_begin();
	bcm2835_i2c_setClockDivider(2500);
	MAG3110_WRITE_REGISTER(16, 0);
	v = MAG3110_READ_REGISTER(7);
	if (v == 0xc4) {
		MAG3110_WRITE_REGISTER(17, 128);
		MAG3110_Initialized = 1;
	}
	return MAG3110_Initialized;
}
Esempio n. 6
0
/**
 * @ingroup I2C
 * Prints the identification string.
 * @param device_info
 */
void bw_i2c_read_id(const device_info_t *device_info) {
	char cmd[] = { BW_PORT_READ_ID_STRING };
	char buf[BW_ID_STRING_LENGTH];
	FUNC_PREFIX(i2c_setSlaveAddress(device_info->slave_address >> 1));
#ifdef __AVR_ARCH__
#else
	bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_2500);
#endif
	FUNC_PREFIX(i2c_write(cmd, sizeof(cmd) / sizeof(char)));
	FUNC_PREFIX(i2c_read(buf, BW_ID_STRING_LENGTH));
	printf("[%s]\n", buf);
}
Esempio n. 7
0
static PyObject *
PyBCM2835_i2c_setClockDivider(PyObject *self, PyObject *args)
{
	int divider;

	if (!PyArg_ParseTuple(args,"i",&divider)) {
		return NULL;
	}

	bcm2835_i2c_setClockDivider(divider);
	Py_RETURN_NONE;
}
Esempio n. 8
0
int main(int argc, char **argv) {
	int first = 0x03, last = 0x77;
    int flags = 0;
    int version = 0;

	while (1 + flags < argc && argv[1 + flags][0] == '-') {
		switch (argv[1 + flags][1]) {
		case 'V': version = 1; break;
		case 'a':
			first = 0x00;
			last = 0x7F;
			break;
		default:
			fprintf(stderr, "Warning: Unsupported flag \"-%c\"!\n", argv[1 + flags][1]);
			//help(); // TODO
			exit(1);
		}
		flags++;
	}

    if (version) {
		fprintf(stderr, "i2cdetect version %s\n", VERSION);
		exit(0);
	}

	if (bcm2835_init() != 1) {
		fprintf(stderr, "bcm2835_init() failed\n");
		exit(1);
	}

	bcm2835_i2c_begin();

	bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_2500); // 100kHz

	int address;

	for (address = 0x00; address <= 0x7F; address++) {
		if (address < first || address > last) {
			continue;
		}
		bcm2835_i2c_setSlaveAddress(address);
		if (bcm2835_i2c_write(NULL, 0) == 0) {
			printf("0x%.2X : 0x%.2X : %s\n", address, address << 1, lookup_device(address));
		}
	}

	bcm2835_i2c_end();

	bcm2835_close();

	return 0;
}
Esempio n. 9
0
/**
 *@brief Initializes the I2C peripheral
 *@param address Address the I2C peripheral is communicating with.
 *@return none
 */
void I2C_Initialize(unsigned char address)
{
    if (!bcm2835_init())						//Configure I2C pins
    {
        printf("BCM libray error.\n");
    }
    bcm2835_i2c_end();		//Close I2C peripheral to reconfigure it

    bcm2835_i2c_begin();						//Set pins as I2C
    bcm2835_i2c_set_baudrate(baudrate);			//Set I2C baudrate
    bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_2500);		//100 Khz
    bcm2835_i2c_setSlaveAddress(address);	//Set device address
}
Esempio n. 10
0
int init_all(I2CVariables *i2c_var) {
    if (!bcm2835_init()) return ERROR_BCM2835_INIT;
    bcm2835_i2c_begin();
    bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_626);         // 400 kHz

    ADXL345_init();
    L3G4200D_init();
    HMC5883L_init();
    BMP085_init();
    PCA9685PW_init(1);

    I2CVariables_init(i2c_var);
    return 0;
}
Esempio n. 11
0
/**************************************************************************//*!
* @brief    The IIC Initialization for MMA7660
*
* @param    mod - current used module for conection
******************************************************************************/
uint8_t MAG3110_Init(void)
{
  byte who_i_am = 0;

  bcm2835_i2c_begin();
  bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_2500); // The default	 
  
  MAG3110_WRITE_REGISTER(REG3110_CTRL_REG1, 0x00);

  who_i_am = MAG3110_READ_REGISTER(REG3110_WHO_AM_I);
	
  if(who_i_am == ID_MAG3110) 
  {
    MAG3110_WRITE_REGISTER(REG3110_CTRL_REG2, 0x80);
    MAG3110_enabled = TRUE;
  }
  
  return MAG3110_enabled;
}  
Esempio n. 12
0
void inline static mcp7941x_setup(void) {
	bcm2835_i2c_setSlaveAddress(i2c_mcp7941x_slave_address);
	bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_2500);
}
Esempio n. 13
0
void bcm2835_i2c_set_baudrate(uint32_t baudrate) {
	uint32_t divider = ((uint32_t)BCM2835_CORE_CLK_HZ / baudrate);
	bcm2835_i2c_setClockDivider((uint16_t) divider);
}
//void bcm2835_i2c_setClockDivider(uint16_t divider);
/// Call bcm2835_i2c_setClockDivider with 1 parameter
/// \par            Refer
/// \par            Modify
void ope_i2c_setclockdivider(void)
{
    get_short_code();
    bcm2835_i2c_setClockDivider( *((uint16_t *)(buff+1)) );
}