OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3251|回复: 4

片外adc驱动程序

[复制链接]

2

主题

8

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2018-10-18
在线时间
3 小时
发表于 2018-11-11 10:30:43 | 显示全部楼层 |阅读模式
有大佬写过片外的adc驱动程序吗,不知道如何写,有大佬能发下代码看一下吗
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6745
金钱
6745
注册时间
2017-4-12
在线时间
1258 小时
发表于 2018-11-11 11:11:29 | 显示全部楼层
外接AD模块不外乎就是单片机通过总线跟他通信,找找资料吧,不同的芯片程序不同
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2018-10-18
在线时间
3 小时
 楼主| 发表于 2018-11-11 11:37:34 | 显示全部楼层
大佬还有写好的驱动代码吗,随便哪款adc芯片的都行
回复 支持 反对

使用道具 举报

3

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-1-15
在线时间
18 小时
发表于 2018-11-11 13:24:20 | 显示全部楼层
我做过ADS1114的程序。步骤如下:
1、初始化I2C
I2C_HandleTypeDef hI2C2

void I2C_Init(void)
{
        __HAL_RCC_I2C2_CLK_ENABLE();
       
        hI2C2.Instance = I2C2;
        hI2C2.Init.Timing = 0x10909CEC;
        hI2C2.Init.OwnAddress1 = 0;
        hI2C2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
        hI2C2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
        hI2C2.Init.OwnAddress2 = 0;
        hI2C2.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
        hI2C2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
        hI2C2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
        HAL_I2C_Init(&hI2C2);

//******************************************************************************
// fn : HAL_I2C_Send
//
// brief : 发送指定数据
//
// param : addr -> 从设备地址
//         pData -> 数据指针
//         len  -> 数据长度
//
// return : 状态信息
uint8_t HAL_I2C_Send(I2C_HandleTypeDef hand,uint8_t addr,uint8_t *pData,uint16_t len)
{
  if(len == 0 || pData == 0)
  {
    return HAL_ERROR;
  }
  return HAL_I2C_Master_Transmit(&hand,addr,pData,len,100);
}
//******************************************************************************
// fn : HAL_I2C_Send
//
// brief : 发送指定数据
//
// param : addr -> 从设备地址
//         pData -> 存放数据地址
//         len  -> 数据长度
//
// return : 状态信息
uint8_t HAL_I2C_Read(I2C_HandleTypeDef hand,uint8_t addr, uint8_t *pData, uint16_t len)
{
  if(len == 0 || pData == 0)
  {
    return HAL_ERROR;
  }
  return HAL_I2C_Master_Receive(&hand,addr,pData,len,100);
}
2、初始化ADS1114
#define ADS1114_READ_ADDR        0x93
#define ADS1114_WRITE_ADDR        0x92
#define ADS1114_CONVERSION_CMD        0x00
#define ADS1114_CONFIG_CMD                0x01
#define ADS1114_LO_THRESH                0x02
#define ADS1114_HI_THRESH                0x03

void ADS1114Init(void)
{
        u8 cmd[3];
        cmd[0] = ADS1114_CONFIG_CMD;
        cmd[1] = 0xc0;                //1100 0000
        cmd[2] = 0xe2;                //1110 0010
        HAL_I2C_Send(hI2C2,ADS1114_WRITE_ADDR,cmd,3);
       
        cmd[0] = ADS1114_CONVERSION_CMD;
        HAL_I2C_Send(hI2C2,ADS1114_WRITE_ADDR,cmd,1);
}

3、读取AD值
u16 ADS1114Read(void)
{
        u8 ReadData[2];
        u16 AD;
        HAL_I2C_Read(hI2C2,ADS1114_READ_ADDR,ReadData,2);
        AD = ReadData[0];
        AD = (AD << 8) + ReadData[1];
        return(AD);
}
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2018-10-18
在线时间
3 小时
 楼主| 发表于 2018-11-11 14:18:47 | 显示全部楼层
谢谢大佬!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 13:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表