步骤1 写入0x90,然后写入控制字0x44。控制字0x04表示开启自动增。控制字0x40表示使能DAC输出,当我们开启自动增后,必须打开DAC输出,这样内部时钟才稳定。
c/* PCF8591初始化 */
void init_pcf8591(void)
{
i2c_start();
i2c_sendbyte(0x90);
i2c_sendbyte(0x44); /* 自动增加 */
i2c_stop();
}
步骤2 写入0x91,然后读取一个字节。调用四次这个函数,每一次都是代表了某个通道的ADC结果。
c/* 通过I2C总线读取ADC结果 */
unsigned char adc_pcf8591(void)
{
unsigned char temp;
i2c_start();
i2c_sendbyte(0x91);
temp = i2c_receivebyte();
i2c_stop();
return (temp);
}
步骤3 我们得到的是四个数据。每个数据一个字节。
每个数据的大小是0到255,表示0到5V。
所以:
电压伏特=读取到的结果 / 255 * 5
或者按照下面的时序读取。一个通道一个通道来。
cunsigned char ReadADC(unsigned char Chl) //0 1 2 3
{
unsigned char Val;
Start_I2c(); //启动总线
SendByte(AddWr); //发送器件地址 0X90
if(ack==0)return(0);
SendByte(Chl);//0 //发送通道
if(ack==0)return(0);
Start_I2c();
SendByte(AddRd); //0X91
if(ack==0)return(0);
Val=RcvByte();
NoAck_I2c(); //发送非应位
Stop_I2c(); //结束总线
return(Val);
}
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!