LPC2478(21)AD7171

1、开发环境

LPC-2478+IAR+JLINK

2、芯片介绍

AD7171是一款极低功耗、16位模数转换器(ADC),内置一个精密16位Σ-Δ型ADC和一个片内振荡 器。该器件功耗仅为135 µA,因此特别适合要求极低功耗的便携式或电池供电产品。它还具有关断模式,该模式下的器件功耗仅为5 μA,从而可延长产品的电池使用时间。

为便于使用,AD7171的所有特性均由专用引脚控制。每次发生数据读取操作时,8个状态位便会附加到16位转换结果上。这些状态位含有一个码序列,可用来确认串行传输的有效性。

AD7171的输出数据速率为125 Hz,建立时间为24 ms。它具有一路差分输入,增益为1。在用户需用外部放大器来满足系统专用滤波或增益要求的应用中,此特性会很有用。

  • 输出数据速率:125 Hz
  • 引脚可编程的掉电和复位功能
  • 状态功能
  • 内部时钟振荡器
  • 电流:135 µA
  • 电源:2.7 V至5.25 V
  • 温度范围:-40°C至+105°C
  • 封装:10引脚3 mm x 3 mm LFCSP封装

3、搬运数据手册

3.1、时序

时序图

3.2、引脚说明

3.3、状态位说明

4、与LPC2478的连接

  • AIN+、AIN-、REF、VDD、NC、GND、REF-与软件无关
  • PDRST:上拉高电平,ADC连续转换
  • DOUT/RDY:连接单片机P1[0],单片机输入ad7171输出
  • SCLK:连接单片机P0[3],单片机输出ad7171输入

5、代码实现

注意:当获得数据后,必须等待8ms才能开始下一次读取数据

#define CLK_Low         (FIO0CLR   |= 0x01 << 3)
#define CLK_High        (FIO0SET   |= 0x01 << 3)
#define AD_DATA_READY   (FIO1PIN & (1 << 0))
typedef enum {
  No_Err,
  Convert_Err,
  Id_Err,
  Status_Err,
  Noknown_Err
}AD7171_STATUS;

void ad7171_init(void);
uint32_t ad7171_read(void);
AD7171_STATUS ErrorCheck(uint8_t Status);
//Delay(12) 1us
void Delay(unsigned int DelayTime)
{ 
    unsigned long time = DelayTime * 12;
    while(time>0){ 
        time--;
    }
}
void ad7171_init(void)
{
    PINSEL0   &= ~(0x03 << 6);  
    FIO0DIR   |= 0x01 << 3;  
    /* 默认高电平 */
    CLK_High;

    PINSEL0   &= ~(0x03 << 0);  
    FIO0DIR   &= ~(0x01 << 0);  
    Delay(1000);
}
/*
默认CLK拉高,
采样时序:
1、时钟拉高,等待DATA拉低,
2、时钟拉低,延时T2,最小100ns
3、时钟拉高,延时T1,最小100ns
4、读取DATA脚的电平
5、循环2-4,得到24位数据
*/
unsigned char StatusBar = 0x00;
unsigned char ReceivedBit = 0;
unsigned short DataReg = 0x0000;
unsigned int ad7171_read(void)
{
    int ready = 1;
    int TempInput = 0;
    int InputRegister[10];
    int i = 0,j = 0;
    CLK_High;
    while(ready){
      ready = AD_DATA_READY;
    }
    Delay(100);
    for(i = 0;i < 3;i++){
        for(j = 0;j < 8;j++){
            TempInput <<= 1;
            CLK_Low;
            Delay(1);
            CLK_High;
            Delay(1);
            if(0x1==AD_DATA_READY){
                TempInput |= 1;
            }
        }
        InputRegister[i] = TempInput;
    }
    CLK_High;
    Delay(10);
    DataReg = InputRegister[1];
    StatusBar = (InputRegister[2] & 0x0000FF);
    Delay(10);
    do   
    {
      ready = AD_DATA_READY;
    }while(ready != 0x01);
    if(ErrorCheck(StatusBar) == No_Err){
      return DataReg;
    }
    return -1;
}
AD7171_STATUS ErrorCheck(uint8_t Status)
{
  if (0x0D == Status){
    /* 没有错误 */
      return No_Err;
  }else {
    if(0x20 ==(Status & 0x20)){
      /* 转换中发生错误 */
      return Convert_Err;
    }
    if (0x05 != (Status & 0x05)){
      /* 串行传输未正确执行 */
      return Id_Err;
    }
    if (0x08 != (Status & 0x08)){
      /* 状态栏ID不匹配错误 */
      return Status_Err;
    }
  }
  return Noknown_Err;
}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值