IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 关于ads1255/6的基本使用 -> 正文阅读

[嵌入式]关于ads1255/6的基本使用

这段时间用这个1255芯片进行了一个读取adc的操作,在此分享一些ads1255/6的一些使用方法以及需要注意的一些东西。
这个芯片的话支持读取一个24bit的adc的值,mcu通过spi与1255/6来进行通信,老手通过对芯片使用手册的浏览其实可以很快上手,可惜本人比较菜,很多地方都是看的一知半解,最后也是问大佬才对那些地方进行了了解。
1255/6对于电压和spi的波特率都是有要求的,电压第一脚电压不应低于4.7v,然后在使用过程中spi波特率通过分频之后保持在1.8mhz-1.9mhz左右会比较合适,我这里使用的是120m,8分频之后就是1.8mhz的样子,用cubemx来配置还是很简单的。
然后就到了写代码的时间了,用逻辑分析仪来看ads1255/6的DRDY脚,默认速率是很快的,所以需要注意上来第一件事情最好是改变速率,选择改成你自己需要的速率(下面这些就是对应的速率)。

#define AD1256_RATE_30000_SPS           0xF0
#define AD1256_RATE_15000_SPS           0xE0
#define AD1256_RATE_7500_SPS            0xD0
#define AD1256_RATE_3750_SPS            0xC0
#define AD1256_RATE_2000_SPS            0xB0
#define AD1256_RATE_1000_SPS            0xA1
#define AD1256_RATE_500_SPS             0x92
#define AD1256_RATE_100_SPS             0x82
#define AD1256_RATE_60_SPS              0x72
#define AD1256_RATE_50_SPS              0x63
#define AD1256_RATE_30_SPS              0x53
#define AD1256_RATE_25_SPS              0x43
#define AD1256_RATE_15_SPS              0x33
#define AD1256_RATE_10_SPS              0x20
#define AD1256_RATE_5_SPS               0x13
#define AD1256_RATE_2D5_SPS             0x03


//写速率函数
```c
void SetAd1256DataRate(uint8_t DataRate)
{
    static uint8_t TempTxBuff[4] = {0x53, 0x00, 0x00, 0x00};
    static uint8_t TempRxBuff[4] = {0};
    TempTxBuff[2] = DataRate;
    TempTxBuff[3] = DataRate;
    Ad1256SpiTransRecv(TempTxBuff, TempRxBuff, 3);
    //Ad1256SpiTransmit(TempTxBuff, 4);
}

//读取速率是否写成功

uint8_t ReadAd1256DataRate(void)
{
    static uint8_t TempTxBuff[3] = {0x13, 0x01, 0x00};
    static uint8_t TempTxBuff1[3] = {0};
    static uint8_t TempRxBuff[3] = {0};
    //TempTxBuff[2] = DataRate;
    Ad1256SpiTransRecv(TempTxBuff, TempRxBuff, 2);
    Ad1256SpiTransRecv(TempTxBuff1, TempRxBuff, 2);
    return TempRxBuff[0];
}

//读ID

bool ReadAd1256Id1(void)
{
    static uint8_t TempTxBuff[3] = {0x10, 0x00, 0x00};
    static uint8_t TempTxBuff1[3] = {0};
    static uint8_t TempRxBuff[3] = {0};
    Ad1256SpiTransmit(TempTxBuff, 2);
    Ad1256SpiReceive(TempRxBuff, 1);
	printf("id:%x\r\n",TempRxBuff[0]&0xf0);
    if((TempRxBuff[0] & 0xF0) == 0x30)
        return true;
    else
        return false;
}

//自动校准

void SetAd1256AutoCali(void)
{
    static uint8_t TempTxBuff[4] = {0x50, 0x01, 0x34, 0x08};
    static uint8_t TempRxBuff[4] = {0};
    Ad1256SpiTransRecv(TempTxBuff, TempRxBuff, 4);
}

//还有一个自检

void SetAd1256SelfCal(void)
{
    static uint8_t TempTxBuff[2] = {0xF0, 0x00};
    Ad1256SpiTransmit(TempTxBuff, 1);
}

//循环读取数据

void SetAd1256DataContinueMode(uint8_t Stat)
{
    static uint8_t TempTxBuff[2] = {0x03, 0x00};
    if(Stat == 0)
        TempTxBuff[0] = 0x0F;
    Ad1256SpiTransmit(TempTxBuff, 1);
}

//spi发送、接受函数

void Ad1256SpiTransmit(uint8_t *sbuffer, uint16_t size)
{
	HAL_GPIO_WritePin(STM32_SPI_CS_GPIO_Port, STM32_SPI_CS_Pin, GPIO_PIN_RESET);
	HAL_SPI_Transmit(&hspi1, sbuffer, size, 100);
	HAL_GPIO_WritePin(STM32_SPI_CS_GPIO_Port, STM32_SPI_CS_Pin, GPIO_PIN_SET);
}

void Ad1256SpiReceive(uint8_t *rbuffer, uint16_t size)
{
	HAL_GPIO_WritePin(STM32_SPI_CS_GPIO_Port, STM32_SPI_CS_Pin, GPIO_PIN_RESET);
	HAL_SPI_Receive(&hspi1, rbuffer, size, 100);
	HAL_GPIO_WritePin(STM32_SPI_CS_GPIO_Port, STM32_SPI_CS_Pin, GPIO_PIN_SET);
}

void Ad1256SpiTransRecv(uint8_t *sbuffer,uint8_t *rbuffer, uint16_t size)
{
	HAL_GPIO_WritePin(STM32_SPI_CS_GPIO_Port, STM32_SPI_CS_Pin, GPIO_PIN_RESET);
	HAL_SPI_TransmitReceive(&hspi1, sbuffer, rbuffer, size, 100);
	HAL_GPIO_WritePin(STM32_SPI_CS_GPIO_Port, STM32_SPI_CS_Pin, GPIO_PIN_SET);
}

需要注意配置速率、读取id,自校准这些最好是分开一步一步来进行配置,不然容易出问题。

这里的话基本流程就已经弄完了,如果买了ads1255/6的开发板还需要注意rest脚以及SYNC需要拉高,不然一直这两个脚一直处于低电平是没有办法正常工作的。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:22:20  更:2021-08-25 12:22:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 5:17:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码