632|14

1785

帖子

4

TA的资源

纯净的硅(高级)

ADX824 32bit ADC驱动 [复制链接]

 
#include "main.h"
#include "main_thread.h"
#include "set.h"
#include "ADX824.H"


/*****************************************
1 delay(TCSSC) > 40ns
2 delay(TSCLKDLY) > (24 * (1 /fclk)) 
3 delay(TSCSC)  > (24 * (1 /fclk))
4 Send the CMD_RDATAC before using ADX824_ReadValue
*****************************************/


/*
Function:       ADX824_Init
Description:    ADX824 GPIO and SPI initialization  
Input :         null
return:         null
*/
void ADX824_Init(void)
{
	// RESET/PWDN/RESET definition
	GPIO_Init();
	ADX82X_PWDN_HIGH;
	ADX82X_RESET_HIGH;
	// SPI INIT   CPOL = LOW/CPHA = 1EDGE/BaudRate 2Mhz
	ADX824_SPI_Init();
}

/*
Function:       ADX824_WriteCMD
Description:    ADX824 Write cmd 
Input :         CMD
return:         null
*/
void ADX824_WriteCMD(uint8_t CMD)
{
	uint8_t r;
	SPI_NSS_L;
	delay(TCSSC);
	ADX824_SPI_TransmitReceive_ReadSetREG(&CMD,&r,1);
	delay(TSCSC);
	SPI_NSS_H;
}

/*
Function:       ADX824_SetReg
Description:    ADX824 Write register
Input :         regAddess : Need to write the first address of the register
								sbuff : Write reg value
								size:		Write the number of registers
return:         null
*/
void ADX824_SetReg(uint8_t regAddess,uint8_t *sbuff,uint8_t size)
{
	uint8_t p[3],r[20],i;
	
	p[0] = CMD_SDATAC;
	p[1] = CMD_WREG | regAddess;
	p[2] = size - 1;
	SPI_NSS_L;
	delay(TCSSC);
	for(i = 0;i < 3;i ++)
	{
		ADX824_SPI_TransmitReceive_ReadSetREG(&p[i],&r[i],1);
		delay(TSCLKDLY);
	}
	for(i = 0;i < size;i ++)
	{
		ADX824_SPI_TransmitReceive_ReadSetREG(&sbuff[i],&r[i],1);
		delay(TSCLKDLY);
	}
	delay(TSCSC);
	SPI_NSS_H;
}

/*
Function:       ADX824_ReadReg
Description:    ADX824 read register
Input :         regAddess : Need to read the first address of the register
								sbuff : Read register save buff
								size:		read the number of registers
return:         null
*/
void ADX824_ReadReg(uint8_t regAddess,uint8_t *rbuff,uint8_t size)
{
	uint8_t p[3],r[20],i;
	
	p[0] = CMD_SDATAC;
	p[1] = CMD_RREG | regAddess;
	p[2] = size - 1;
	SPI_NSS_L;
	delay(TCSSC);
	for(i = 0;i < 3;i ++)
	{
		ADX824_SPI_TransmitReceive_ReadSetREG(&p[i],&r[i],1);
		delay(TSCLKDLY);
	}
	for(i = 0;i < size;i ++)
	{
		ADX824_SPI_TransmitReceive_ReadSetREG(&r[i],&rbuff[i],1);
		delay(TSCLKDLY);
	}
	delay(TSCSC);
	SPI_NSS_H;
}

/*
Function:       ADX824_ReadValue
Description:    ADX824 read value
Input :         null
return:         read value
*/
uint32_t ADX824_ReadValue(void)
{
	uint8_t p[4],r[4];
	uint32_t  value;
	SPI_NSS_L;
	ADX824_SPI_TransmitReceive_ReadValue(p,r,4);
	SPI_NSS_H;
	value = (uint32_t)(r[0] << 24) + (uint32_t)(r[1] << 16) + (uint32_t)(r[2] << 8) + (uint32_t)(r[3]);
	return value;
}

void ADX824_Test(void)
{
	uint32_t Value;
	uint8_t config0;
	ADX824_Init();
	config0 = Pulse_sync_mode | High_resolution_mode | DR_500sps | Linear_phase | FILTR_Sinc_LPF;
	ADX824_SetReg(CONFIG0,&config0,1);
	ADX824_WriteCMD(CMD_RDATAC);
	while(1)
	{
		if(ADX82X_DRDY_READ == 0)
		{
			Value = ADX824_ReadValue();
		}
	}
}

#ifndef _ADX824_H_
#define _ADX824_H_

#define ADX82X_PWDN_HIGH		
#define ADX82X_PWDN_LOW			
#define ADX82X_RESET_HIGH		
#define ADX82X_RESET_LOW		

#define ADX82X_DRDY_READ		

#define	SPI_NSS_L						
#define	SPI_NSS_H						

#define CMD_WAKEUP					0x00
#define CMD_STANDBY					0x02
#define CMD_SYNC						0x04
#define	CMD_RESET						0X06
#define CMD_RDATAC					0X10
#define CMD_SDATAC					0x11
#define	CMD_RDATA						0x12
#define	CMD_RREG						0x20
#define CMD_WREG						0x40
#define CMD_OFSCAL					0x60
#define	CMD_GANCAL					0x61

#define REG_ID_CFG					0X00
#define	CONFIG0							0X01
#define	CONFIG1							0X02
#define	HPF0								0X03
#define	HPF1								0X04
#define	OFC0								0X05			
#define	OFC1								0X06		
#define	OFC2								0X07	
#define	FSC0								0X08	
#define	FSC1								0X09	
#define	FSC2								0X0A	

//config0 01h
#define Pulse_sync_mode						0x00
#define Continuous_sync_mode			0x80
#define	Low_power_mode						0x00					
#define	High_resolution_mode			0x40	
#define DR_250sps									0x00
#define	DR_500sps									0x08	
#define	DR_1000sps								0x10
#define	DR_2000sps								0x18
#define	DR_4000sps								0x20
#define Linear_phase							0x00
#define Minimum_phase							0x04
#define	FILTR_Reserved						0x00
#define	FILTR_Sinc								0x01
#define	FILTR_Sinc_LPF						0x02
#define	FILTR_Sinc_LPF_HPF				0x03

//config1 02h
#define MUX_AINP1_N1							0X00
#define MUX_AINP2_N2							0X10
#define MUX_Shout_400_res					0X20
#define MUX_Shout_AIN1_CONN_AIN2	0X30
#define MUX_EXT_Shout_AINN2				0X40
#define PGA_CHOP_DISABLE					0X00
#define PGA_CHOP_ENABLE						0X08
#define PGA_GAIN_1								0x00
#define PGA_GAIN_2								0x01
#define PGA_GAIN_4								0x02
#define PGA_GAIN_8								0x03
#define PGA_GAIN_16								0x04
#define PGA_GAIN_32								0x05
#define PGA_GAIN_64								0x06

void ADX824_Init(void);
void ADX824_WriteCMD(uint8_t CMD);
void ADX824_SetReg(uint8_t regAddess,uint8_t *sbuff,uint8_t size);
void ADX824_ReadReg(uint8_t regAddess,uint8_t *rbuff,uint8_t size);
uint32_t ADX824_ReadValue(void);

#endif

ADX824驱动,通常是用来测地震的

此帖出自stm32/stm8论坛

最新回复

能分享数据手册吗?看看参数如何   详情 回复 发表于 5 天前
个人签名

希望做一些大家觉得好用的东西!


回复

5181

帖子

0

TA的资源

五彩晶圆(中级)

厉害了,来测地震的

此帖出自stm32/stm8论坛

点评

测其他的当然也行,但是可以用来测地震  详情 回复 发表于 2023-9-13 08:43

回复

1785

帖子

4

TA的资源

纯净的硅(高级)

Jacktang 发表于 2023-9-13 07:28 厉害了,来测地震的

测其他的当然也行,但是可以用来测地震

此帖出自stm32/stm8论坛
个人签名

希望做一些大家觉得好用的东西!


回复

989

帖子

17

TA的资源

纯净的硅(高级)

这么高精度,确实少见,不知价格几何?

此帖出自stm32/stm8论坛

点评

价格不太清楚,官网看看  详情 回复 发表于 2023-9-13 08:55

回复

1785

帖子

4

TA的资源

纯净的硅(高级)

fxyc87 发表于 2023-9-13 08:47 这么高精度,确实少见,不知价格几何?

价格不太清楚,官网看看

此帖出自stm32/stm8论坛
个人签名

希望做一些大家觉得好用的东西!


回复

4814

帖子

3

TA的资源

版主

楼主这是准备用到哪里呢?

此帖出自stm32/stm8论坛

点评

是我们公司的芯片,我分享下驱动  详情 回复 发表于 2023-9-13 09:51

回复

1785

帖子

4

TA的资源

纯净的硅(高级)

damiaa 发表于 2023-9-13 09:25 楼主这是准备用到哪里呢?

是我们公司的芯片,我分享下驱动

此帖出自stm32/stm8论坛
个人签名

希望做一些大家觉得好用的东西!


回复

23

帖子

0

TA的资源

一粒金砂(中级)

这个精度够高的,想来价格也应该是天花板级别的。

此帖出自stm32/stm8论坛

点评

还好还好,国产肯定是物美价廉  详情 回复 发表于 2023-9-13 10:57

回复

1785

帖子

4

TA的资源

纯净的硅(高级)

如果您需要查看本帖隐藏内容,请登录或者注册
此帖出自stm32/stm8论坛
个人签名

希望做一些大家觉得好用的东西!


回复

3191

帖子

1

TA的资源

版主

如果您需要查看本帖隐藏内容,请登录或者注册
此帖出自stm32/stm8论坛

点评

各有各的市场  详情 回复 发表于 7 天前

回复

1785

帖子

4

TA的资源

纯净的硅(高级)

如果您需要查看本帖隐藏内容,请登录或者注册
此帖出自stm32/stm8论坛
个人签名

希望做一些大家觉得好用的东西!


回复

4578

帖子

3

TA的资源

版主

如果您需要查看本帖隐藏内容,请登录或者注册
此帖出自stm32/stm8论坛

点评

没有测地震的原理图,有客户这么用  详情 回复 发表于 7 天前

回复

1785

帖子

4

TA的资源

纯净的硅(高级)

如果您需要查看本帖隐藏内容,请登录或者注册
此帖出自stm32/stm8论坛
个人签名

希望做一些大家觉得好用的东西!


回复

226

帖子

1

TA的资源

一粒金砂(高级)

如果您需要查看本帖隐藏内容,请登录或者注册
此帖出自stm32/stm8论坛

点评

半导小芯搜索一下  详情 回复 发表于 5 天前

回复

1785

帖子

4

TA的资源

纯净的硅(高级)

如果您需要查看本帖隐藏内容,请登录或者注册
此帖出自stm32/stm8论坛
个人签名

希望做一些大家觉得好用的东西!


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

相关帖子
猜你喜欢
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
一步一步教你使用uCOS-II

前言篇 前段时间看了Linux版块“zjw50001”网友上传的资料《一步一步教你开发嵌入式 Linux 应用程序》感觉对于学习Linux的新 ...

【DIY新作】LED点阵时钟.3种字体.4种动画.自动旋屏.GPS校时【附原理图】

半年来一直在DIY辉光管、荧光管的时钟,其实算来,我最早DIY的时钟是LED点阵的。 时隔3年,再次汇集这段时间以来的想法,重新DI ...

[MSP430笔记] MSP430 UART自升级的相关资料

这里上传一份LSD关于MSP430 UART自升级的资料供大家参考。稍微更改下便可实现在I2C或SPI接口升级程序。 79092 79093 79094 7 ...

〖分享〗MSP-EXP430F5529显示汉字(使用字库)

MSP-EXP430F5529评估板是我在一个网友处买来的,花了200多大洋,虽然没有论坛团购的便宜,但是也物所超值了。 一般不带字库的 ...

LPC810串口控制八位数码管,labview上位机

似乎很久没有发帖了,看着EEworld的活动办得风声水起,也赶过来凑凑热闹。前阵子NXP送板子,想到如此小气的公司居然也送板子,未 ...

50欧的阻抗匹配电路,哪个有,参考下。

50欧的阻抗匹配电路,哪个有,参考下。

micropython更新:2020.4

unix/mpthreadport: Ensure enough thread stack to detect overflow. unix/mpthreadport: Ensure enough thread stack to ...

【GD32E503评测】01.开箱与硬件测评

本帖最后由 caizhiwei 于 2021-1-6 22:21 编辑 板子终于收到了,可是是元旦,又耽误了3天,今天迫不及待的已经开箱了! ...

The Lion lamp 狮子灯

雷达传感器检测运动,微控制器(MCU)改变RGB LED颜色以响应人体运动。如果超出某个时间没有运动,灯将关闭。 ae70e08245 ...

使用 UWB 技术的卓越汽车

想象一种用于距离和定位的无线通信技术,该技术尺寸小巧且经济高效,同时还可以实时提供厘米级精度。这就是超宽带技术 (UWB)。 ...

关闭
站长推荐上一条 1/10 下一条
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2023 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表