标题:
ADS1256 ADS1115采集芯片单片机程序源码与资料下载
[打印本页]
作者:
24981232
时间:
2018-7-16 18:19
标题:
ADS1256 ADS1115采集芯片单片机程序源码与资料下载
24位采集芯片资料,含STM32与其他各平台的单片机源程序,需要的请查收
0.png
(40.73 KB, 下载次数: 66)
下载附件
2018-7-17 03:07 上传
ADS1256的源程序:
0.png
(52.2 KB, 下载次数: 58)
下载附件
2018-7-17 03:11 上传
/*********************************************************************************
* 文件名 :main.c
* 描述 :ADS1256模块测试程序
* 实验平台:
* 库版本 :ST3.0.0
* 连线 :
ADS_DRDY PA2
ADS_RESET PA4
ADS_CS PA3
ADS_CLK PA5
ADS_DIN PA7
ADS_DOUT PA6
//水平有限,可能有些地方写法不标准,欢迎提建议。
**********************************************************************************/
#include "stm32f10x.h"
#include "usart1.h"
#include "delay.h"
#include "ads1256.h"
#define MEDIAN_LEN 5 //中直滤波的总长度,一般选取奇数
#define MEDIAN 2 //中值在滤波数组中的位置
unsigned long AD_buffer[MEDIAN_LEN]; //ad采集数组缓存
//unsigned long MED_buffer[MEDIAN_LEN]; //中值滤波数组缓存
unsigned char medleng = 0; //存入缓存的数据个数
unsigned long medina_filter(unsigned long *MED_buffer);
/**********************************************************/
// 函数名:main
// 描述 :主函数
// 输入 :无
// 输出 :无
/*********************************************************/
int main(void)
{
unsigned long results = 0;
unsigned char i = 0;
SystemInit(); //主频时钟初始化
delay_init(72); //延时时钟初始化
USART1_Config(); //串口初始化
SPI_ADS1256_Init(); //SPI初始化
ADS1256_GPIO_init(); //端口初始化
ADS1256_Init();
while(1)
{
// ADS1256WREG(ADS1256_MUX,ADS1256_MUXP_AIN2 | ADS1256_MUXN_AIN3); //设置通道
results = ADS1256ReadData(); //读取AD值,返回24位数据
AD_buffer[i] = results;
results = medina_filter(AD_buffer); //调用排序函数获得滤波中值
i ++; //AD采集缓存计数
if(i > MEDIAN_LEN)
{
i = 0;
}
results1 = (results >> 16) & 0x0000ff; //发送最高位
results2 = (results >> 8) & 0x0000ff; //发送中间位
results3 = results & 0x0000ff; //发送低位
sendChar(results1);
sendChar(results2);
sendChar(results3);
sendChar(0x0a); //换行
sendChar(0x0d); //换行
// delay_ms(100);
}
}
/**********************************************************/
// 函数名:中值滤波函数
// 描述 :提取前9次采集的数据,去掉高3个,去掉低3个,然后中间的
// 描述 :3个数据求平均值,该算法可尽可能的滤掉干扰数据,并不影响采集速度。
// 输入 :9个数据的数组
// 输出 :中间3个数据的平均值
/*********************************************************/
unsigned long medina_filter(unsigned long *MED_buffer) //xad - ADC转换值
{
unsigned char i,j;
unsigned long xd;
u32 xxd;
for(i = 0; i < MEDIAN_LEN; i ++)
{
for(j = 0; j < MEDIAN_LEN - i; j ++)
{
if( MED_buffer[i] > MED_buffer[i + 1]) // 轮询到的当前元素>AD值,则交换它们的值
{ xd = MED_buffer[i]; MED_buffer[i] = MED_buffer[i + 1]; MED_buffer[i + 1] = xd;}
}
}
xxd = MED_buffer[MEDIAN - 1] + MED_buffer[MEDIAN] + MED_buffer[MEDIAN + 1];
xd = xxd/3;
return xd; //中值
}
/******************* (C) COPYRIGHT 2014 三峰电子开发工作室 *****END OF FILE****/
复制代码
ADS1115测量正负10V模块资料单片机源程序如下:
/********************************************************************
ADS1115模块
功能:ADS1115采集电压,采用中值滤波算法,串口将电压数值返回PC
单片机测试: 89C52
使用软件:串口助手
修改日期:2014.4.26
作者:梦想电子工作室
**********************************************************************/
#include "main.h"
void main()
{
unsigned long ADS1115_Value;
Com_Init(); //串口初始化
while(1)
{
ADS1115_Value = ADS1115(0); //0 1 2 3:分别代表通道0、1、2、3
medina_filter(ADS1115_Value); //中值滤波算法, 串口显示包含在其中
DelayNms(20);
}
}
复制代码
#include "ads1115.h"
int D_ADS; //转换的数字量
float VIN_DAS; //输入的电压值
unsigned char t_DAS;
unsigned int Config;
unsigned char Writebuff[4],Readbuff[3];
unsigned int Result[2];
uchar Channel_Value;
int Format[5]={0}; //转换的数字量转换成十进制
///*******************************************
//函数名称:Start
//功 能:完成IIC的起始条件操作
//参 数:无
//返回值 :无
//********************************************/
void Start(void)
{
SCL=1;
SDA=1;
DelayNus (15);
SDA=0;
DelayNus (15);
SCL=0;
DelayNus (15);
}
//
///*******************************************
//函数名称:Stop
//功 能:完成IIC的终止条件操作
//参 数:无
//返回值 :无
//********************************************/
void Stop(void)
{
SDA=0;
DelayNus (15);
SCL=1;
DelayNus (15);
SDA=1;
DelayNus (15);
}
///*******************************************
//函数名称:ACK
//功 能:完成IIC的主机应答操作
//参 数:无
//返回值 :无
//********************************************/
void ACK(void)
{
SDA=0;
_nop_(); _nop_();
SCL=1;
DelayNus (15);
SCL=0;
_nop_(); _nop_();
SDA=1;
DelayNus (15);
}
//*******************************************
//函数名称:NACK
//功 能:完成IIC的主机无应答操作
//参 数:无
//返回值 :无
//********************************************/
void NACK(void)
{
SDA=1;
_nop_(); _nop_();
SCL=1;
DelayNus (15);
SCL=0;
_nop_(); _nop_();
SDA=0;
DelayNus (15);
}
//**********检查应答信号函数******************/
///*如果返回值为1则证明有应答信号,反之没有*/
///*******************************************
//函数名称:Check
//功 能:检查从机的应答操作
//参 数:无
//返回值 :从机是否有应答:1--有,0--无
//********************************************/
unsigned char Check(void)
{
unsigned char slaveack;
SDA=1;
_nop_(); _nop_();
SCL=1;
_nop_(); _nop_();
_nop_(); _nop_();
slaveack = SDA; //读入SDA数值
SCL=0;
DelayNus (15);
if(slaveack) return FALSE;
else return TRUE;
}
/***************Write a Byte****************/
void Write_1_Byte(unsigned char DataByte)
{
int i;
for(i=0;i<8;i++)
{
if(DataByte&0x80) //if((DataByte<<i)&0x80)
SDA=1;
else
SDA=0;
DelayNus (15);
SCL=1;
DelayNus (15);
SCL=0;
DelayNus (15);
DataByte <<= 1;
}
SDA=1;
_nop_();
}
/***************Write N Byte****************/
unsigned char Write_N_Byte(unsigned char *writebuffer,unsigned char n)
{
int i;
for(i=0;i<n;i++)
{
Write_1_Byte(*writebuffer);
if(Check())
{
writebuffer ++;
}
else
{
Stop();
return FALSE;
}
}
Stop();
return TRUE;
}
//***************Read a Byte****************/
unsigned char Read_1_Byte(void)
{
unsigned char data_Value = 0, FLAG, i;
for(i=0;i<8;i++)
{
SDA=1;
DelayNus (15);
SCL=1;
DelayNus (15);
FLAG=SDA;
data_Value <<= 1;
if( FLAG)
data_Value |= 0x01;
SCL=0;
DelayNus (15);
}
return data_Value;
}
//***************Read N Byte****************/
void Read_N_Byte(unsigned int*readbuff, unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
{
readbuff[i]=Read_1_Byte();
if(i==n-1)
NACK(); //不连续读字节
else
ACK(); //连续读字节
}
Stop();
}
//*****************初始化******************/
void InitADS1115(bit S_MUX_0, bit S_MUX_1)
{
if (S_MUX_0 == 0 && S_MUX_1 == 0)
Config = OS+MUX_A0+PGA+DR+COMP_QUE+MODE;
if (S_MUX_0 == 0 && S_MUX_1 == 1)
Config = OS+MUX_A1+PGA+DR+COMP_QUE+MODE;
if (S_MUX_0 == 1 && S_MUX_1 == 0)
Config = OS+MUX_A2+PGA+DR+COMP_QUE+MODE;
if (S_MUX_0 == 1 && S_MUX_1 == 1)
Config = OS+MUX_A3+PGA+DR+COMP_QUE+MODE;
Writebuff[0]=ADDRESS_W;
Writebuff[1]=Pointer_1;
Writebuff[2]=Config/256;
Writebuff[3]=Config%256;
Readbuff[0]=ADDRESS_W;
Readbuff[1]=Pointer_0;
Readbuff[2]=ADDRESS_R;
}
//***************Write a Word***********************/
void WriteWord(void)
{
int t;
Start(); //写入4个字节
do
{
t=Write_N_Byte(Writebuff,4);
}while(t==0);
}
//***************Read Word***********************/
void ReadWord(void)
{
int t;
Start(); //写入2个字节
do
{
t=Write_N_Byte(Readbuff,2);
}while(t==0);
Start(); //写入2个字节
do
{
t=Write_N_Byte(&Readbuff[2],1);
}while(t==0);
Read_N_Byte(Result,2); //读出2个字节
}
//***************ADS1115********************/
unsigned int ADS1115(int Channel)
{
bit S_MUX_0, S_MUX_1;
switch(Channel)
{
case 0:
S_MUX_0 = 0;
S_MUX_1 = 0;
Channel_Value = Channel + '0';
break;
case 1:
S_MUX_0 = 0;
S_MUX_1 = 1;
Channel_Value = Channel + '0';
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
ADS1256模块资料.rar
(13.69 MB, 下载次数: 139)
2018-7-17 03:14 上传
点击文件名下载附件
源码
下载积分: 黑币 -5
ADS1115测量正负10V模块资料.zip
(2.15 MB, 下载次数: 144)
2018-7-16 18:18 上传
点击文件名下载附件
源码
下载积分: 黑币 -5
作者:
Vence
时间:
2018-11-14 10:37
运行通过了吗?就贴出来,不负责任
作者:
大米861
时间:
2018-11-21 08:10
正想学习ADS,没通过运行,白下了。赔我币币
作者:
abolisalohei
时间:
2019-1-19 11:15
学习了
作者:
coffeexz
时间:
2019-3-9 13:52
有谁下下来了,可以私发一份么
作者:
基51hei33
时间:
2019-8-3 15:14
为了赚黑币不择手段吗
作者:
12sshddnigngb
时间:
2019-9-26 16:32
例程直接用不行,需要自己修改
作者:
lyl_420819
时间:
2019-10-14 20:06
下载学习,谢谢分享。
作者:
zyt心有所寄
时间:
2019-10-27 18:37
谢谢分享,学习了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1