步骤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



或者按照下面的时序读取。一个通道一个通道来。
c展开代码unsigned 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 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!