Example #1
0
void InitADS1115()
{
	I2c_Init();
	uint8_t conf[2];
	//Request
	I2C_StartTransmission(I2C1,I2C_Direction_Transmitter,0x90);
	I2C_Write_Data(I2C1,0x01);
	I2C_GenerateSTOP(I2C1,ENABLE);
	//Response
	I2C_StartTransmission(I2C1,I2C_Direction_Receiver,0x90);
	conf[0] = I2C_Read_ack(I2C1);
	conf[1] = I2C_Read_nack(I2C1);
	I2C_GenerateSTOP(I2C1,ENABLE);
}
Example #2
0
uint_fast16_t getData(uint8_t number)
{

	uint8_t i2c_data[2];
	//Request
	I2C_StartTransmission(I2C1,I2C_Direction_Transmitter,0x90);
	I2C_Write_Data(I2C1,0x00);
	I2C_GenerateSTOP(I2C1,ENABLE);
	//Response
	I2C_StartTransmission(I2C1,I2C_Direction_Receiver,0x90);
	i2c_data[0] = I2C_Read_ack(I2C1);
	i2c_data[1] = I2C_Read_nack(I2C1);
	uint_fast16_t adc = i2c_data[0] <<  8 | i2c_data[1];
	//I2C_GenerateSTOP(I2C1,ENABLE);
	return adc;
}
Example #3
0
//ADS1115 have 4 channel. We can select on of them in one moment.
void selectInput(uint8_t number)
{
	 uint8_t conf[2];
	 conf[1] = 227;

	 //create config for selecting channel
	 if(number == 0)
	 	 {
	 		 conf[0] = 195;
	 	 }
	 if(number == 1)
	 	 {
	 		 conf[0] = 211;
	 	 }
	 if(number == 2)
	 	 {
	 		 conf[0] = 227;
	 	 }
	 if(number == 3)
	 	 {
	 		 conf[0] = 243;
	 	 }

	//send config
	 I2C_StartTransmission(I2C1,I2C_Direction_Transmitter,0x90);
	 I2C_Write_Data(I2C1,0x01);
	 I2C_Write_Data(I2C1,conf[0]);
	 I2C_Write_Data(I2C1,conf[1]);
	 //I2C_GenerateSTOP(I2C1,ENABLE);
}
Example #4
0
/*************************************************************************
*                             野火嵌入式开发工作室
*
*  函数名称:I2C_WriteAddr
*  功能说明:写入一个字节数据到I2C设备指定寄存器地址
*  参数说明:I2Cn        模块号(I2C0、I2C1)
*            SlaveID     7位从机地址
*            Addr        从机的寄存器地址
*            Data        数据
*  函数返回:无
*  修改时间:2012-1-20
*  备    注:
*************************************************************************/
void I2C_WriteAddr(I2Cn i2cn, u8 SlaveID, u8 Addr, u8 Data)
{
    /* send data to slave */
    I2C_StartTransmission(i2cn, SlaveID, MWSR);    //启动传输
    i2c_Wait(i2cn);

    i2c_write_byte(i2cn, Addr);                    //写地址
    i2c_Wait(i2cn);

    i2c_write_byte(i2cn, Data);                    //写数据
    i2c_Wait(i2cn);

    i2c_Stop(i2cn);

    Pause();                                        //延时太短的话,可能写出错
}
Example #5
0
/*************************************************************************
*                             野火嵌入式开发工作室
*
*  函数名称:I2C_ReadAddr
*  功能说明:读取I2C设备指定地址寄存器的数据
*  参数说明:I2Cn        模块号(I2C0、I2C1)
*            SlaveID     7位从机地址
*            Addr        从机的寄存器地址
*  函数返回:从机寄存器的数据
*  修改时间:2012-1-20
*  备    注:
*************************************************************************/
u8 I2C_ReadAddr(I2Cn i2cn, u8 SlaveID, u8 Addr)
{
    u8 result;

    /* Send Slave Address */
    I2C_StartTransmission (i2cn, SlaveID, MWSR);
    i2c_Wait(i2cn);

    /* Write Register Address */
    i2c_write_byte(i2cn, Addr);
    i2c_Wait(i2cn);

    /* Do a repeated start */
    i2c_RepeatedStart(i2cn);

    /* Send Slave Address */
    i2c_write_byte(i2cn, ( SlaveID << 1) | MRSW );
    i2c_Wait(i2cn);

    /* Put in Rx Mode */
    i2c_PutinRxMode(i2cn);

    /* Turn off ACK since this is second to last byte being read*/
    i2c_DisableAck(i2cn); //不应答

    /* Dummy read 虚假读取*/
    result = I2C_D_REG(I2Cx[i2cn]);
    i2c_Wait(i2cn);

    /* Send stop since about to read last byte */
    i2c_Stop(i2cn);

    /* Read byte */
    result = I2C_D_REG(I2Cx[i2cn]);

    return result;
}