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); }
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; }
//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); }
/************************************************************************* * 野火嵌入式开发工作室 * * 函数名称: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(); //延时太短的话,可能写出错 }
/************************************************************************* * 野火嵌入式开发工作室 * * 函数名称: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; }