找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5146|回复: 8
打印 上一主题 下一主题
收起左侧

ADS1256 ADS1115采集芯片单片机程序源码与资料下载

  [复制链接]
跳转到指定楼层
楼主
24位采集芯片资料,含STM32与其他各平台的单片机源程序,需要的请查收


ADS1256的源程序:

  1. /*********************************************************************************
  2. * 文件名  :main.c
  3. * 描述    :ADS1256模块测试程序         
  4. * 实验平台:
  5. * 库版本  :ST3.0.0
  6. * 连线    :            
  7.                          ADS_DRDY     PA2
  8.                          ADS_RESET    PA4
  9.                          ADS_CS       PA3
  10.                          ADS_CLK      PA5
  11.                          ADS_DIN          PA7
  12.                          ADS_DOUT          PA6
  13.            //水平有限,可能有些地方写法不标准,欢迎提建议。
  14. **********************************************************************************/
  15. #include "stm32f10x.h"
  16. #include "usart1.h"
  17. #include "delay.h"
  18. #include "ads1256.h"

  19. #define MEDIAN_LEN  5                     //中直滤波的总长度,一般选取奇数   
  20. #define MEDIAN      2                     //中值在滤波数组中的位置
  21. unsigned long   AD_buffer[MEDIAN_LEN];    //ad采集数组缓存
  22. //unsigned long   MED_buffer[MEDIAN_LEN];   //中值滤波数组缓存
  23. unsigned char   medleng = 0;          //存入缓存的数据个数

  24. unsigned long medina_filter(unsigned long *MED_buffer);
  25. /**********************************************************/
  26. // 函数名:main
  27. // 描述  :主函数
  28. // 输入  :无
  29. // 输出  :无
  30. /*********************************************************/
  31. int main(void)
  32. {  
  33.         unsigned long results = 0;
  34.         unsigned char i = 0;
  35.         SystemInit();                              //主频时钟初始化
  36.         delay_init(72);                            //延时时钟初始化
  37.         USART1_Config();                                                                    //串口初始化          
  38.         SPI_ADS1256_Init();                                                                  //SPI初始化
  39.         ADS1256_GPIO_init();                                                          //端口初始化
  40.         ADS1256_Init();
  41.        
  42.         while(1)
  43.         {
  44. //                ADS1256WREG(ADS1256_MUX,ADS1256_MUXP_AIN2 | ADS1256_MUXN_AIN3);                //设置通道
  45.                 results = ADS1256ReadData();                                        //读取AD值,返回24位数据
  46.                 AD_buffer[i] = results;
  47.                 results = medina_filter(AD_buffer);                                 //调用排序函数获得滤波中值
  48.                 i ++;                                                               //AD采集缓存计数
  49.                 if(i > MEDIAN_LEN)
  50.                 {
  51.                         i = 0;
  52.                 }
  53.                                
  54.                 results1 = (results >> 16) & 0x0000ff; //发送最高位       
  55.                 results2 = (results >> 8) & 0x0000ff;  //发送中间位
  56.                 results3 = results & 0x0000ff;                   //发送低位
  57.                 sendChar(results1);
  58.                 sendChar(results2);
  59.                 sendChar(results3);

  60.                 sendChar(0x0a);                                  //换行
  61.                 sendChar(0x0d);                                  //换行

  62. //                delay_ms(100);
  63.         }
  64. }

  65. /**********************************************************/
  66. // 函数名:中值滤波函数
  67. // 描述  :提取前9次采集的数据,去掉高3个,去掉低3个,然后中间的
  68. // 描述  :3个数据求平均值,该算法可尽可能的滤掉干扰数据,并不影响采集速度。
  69. // 输入  :9个数据的数组
  70. // 输出  :中间3个数据的平均值
  71. /*********************************************************/
  72. unsigned long medina_filter(unsigned long *MED_buffer)  //xad - ADC转换值   
  73. {   
  74.        
  75.         unsigned char i,j;
  76.         unsigned long xd;
  77.         u32 xxd;
  78.        
  79.         for(i = 0; i < MEDIAN_LEN; i ++)     
  80.         {   
  81.                 for(j = 0; j < MEDIAN_LEN - i; j ++)
  82.                 {
  83.                        
  84.                         if( MED_buffer[i] > MED_buffer[i + 1]) // 轮询到的当前元素>AD值,则交换它们的值   
  85.                         { xd = MED_buffer[i]; MED_buffer[i] = MED_buffer[i + 1]; MED_buffer[i + 1] = xd;}
  86.                 }                       
  87.         }
  88.         xxd = MED_buffer[MEDIAN - 1] + MED_buffer[MEDIAN] + MED_buffer[MEDIAN + 1];
  89.         xd = xxd/3;
  90.         return xd; //中值     
  91. }

  92. /******************* (C) COPYRIGHT 2014 三峰电子开发工作室 *****END OF FILE****/
复制代码



ADS1115测量正负10V模块资料单片机源程序如下:
  1. /********************************************************************
  2.                                          ADS1115模块
  3.         功能:ADS1115采集电压,采用中值滤波算法,串口将电压数值返回PC
  4.         单片机测试: 89C52
  5.         使用软件:串口助手
  6.         修改日期:2014.4.26
  7.         作者:梦想电子工作室
  8. **********************************************************************/        

  9. #include "main.h"

  10. void main()
  11. {
  12.         unsigned long ADS1115_Value;

  13.         Com_Init();                //串口初始化

  14.         while(1)
  15.     {                                                                 
  16.                 ADS1115_Value = ADS1115(0);                                //0 1 2 3:分别代表通道0、1、2、3               
  17.                 medina_filter(ADS1115_Value);                        //中值滤波算法, 串口显示包含在其中

  18.                 DelayNms(20);
  19.         }
  20. }



复制代码
  1. #include "ads1115.h"
  2. int D_ADS;                 //转换的数字量
  3. float VIN_DAS;         //输入的电压值
  4. unsigned char  t_DAS;

  5. unsigned int Config;
  6. unsigned char Writebuff[4],Readbuff[3];
  7. unsigned int Result[2];

  8. uchar Channel_Value;

  9. int  Format[5]={0};  //转换的数字量转换成十进制

  10. ///*******************************************
  11. //函数名称:Start
  12. //功    能:完成IIC的起始条件操作
  13. //参    数:无
  14. //返回值  :无
  15. //********************************************/
  16. void Start(void)
  17. {
  18.         SCL=1;
  19.         SDA=1;
  20.         DelayNus (15);
  21.                 SDA=0;
  22.         DelayNus (15);
  23.                 SCL=0;
  24.         DelayNus (15);
  25. }
  26. //
  27. ///*******************************************
  28. //函数名称:Stop
  29. //功    能:完成IIC的终止条件操作
  30. //参    数:无
  31. //返回值  :无
  32. //********************************************/
  33. void Stop(void)
  34. {
  35.         SDA=0;
  36.         DelayNus (15);
  37.         SCL=1;
  38.         DelayNus (15);
  39.                 SDA=1;
  40.         DelayNus (15);
  41. }
  42. ///*******************************************
  43. //函数名称:ACK
  44. //功    能:完成IIC的主机应答操作
  45. //参    数:无
  46. //返回值  :无
  47. //********************************************/
  48. void ACK(void)
  49. {
  50.         SDA=0;
  51.         _nop_(); _nop_();
  52.         SCL=1;
  53.         DelayNus (15);
  54.         SCL=0;
  55.                 _nop_(); _nop_();
  56.                 SDA=1;
  57.         DelayNus (15);
  58. }
  59. //*******************************************
  60. //函数名称:NACK
  61. //功    能:完成IIC的主机无应答操作
  62. //参    数:无
  63. //返回值  :无
  64. //********************************************/
  65. void NACK(void)
  66. {
  67.         SDA=1;
  68.         _nop_(); _nop_();
  69.         SCL=1;
  70.         DelayNus (15);
  71.         SCL=0;
  72.         _nop_(); _nop_();
  73.         SDA=0;   
  74.         DelayNus (15);      
  75. }
  76. //**********检查应答信号函数******************/
  77. ///*如果返回值为1则证明有应答信号,反之没有*/
  78. ///*******************************************
  79. //函数名称:Check
  80. //功    能:检查从机的应答操作
  81. //参    数:无
  82. //返回值  :从机是否有应答:1--有,0--无
  83. //********************************************/
  84. unsigned char Check(void)
  85. {
  86.     unsigned char slaveack;
  87.    
  88.     SDA=1;
  89.     _nop_(); _nop_();
  90.     SCL=1;
  91.     _nop_(); _nop_();

  92.     _nop_(); _nop_();
  93.     slaveack = SDA;   //读入SDA数值
  94.     SCL=0;
  95.     DelayNus (15);
  96.   
  97.     if(slaveack)    return FALSE;
  98.     else            return TRUE;
  99. }

  100. /***************Write a Byte****************/
  101. void Write_1_Byte(unsigned char DataByte)
  102. {
  103.         int i;

  104.         for(i=0;i<8;i++)
  105.         {
  106.                 if(DataByte&0x80)  //if((DataByte<<i)&0x80)
  107.                   SDA=1;
  108.                 else
  109.                   SDA=0;
  110.         DelayNus (15);
  111.                 SCL=1;
  112.         DelayNus (15);
  113.         SCL=0;
  114.         DelayNus (15);
  115.         DataByte <<= 1;
  116.         }
  117.         SDA=1;
  118.         _nop_();
  119. }
  120. /***************Write N Byte****************/
  121. unsigned char Write_N_Byte(unsigned char *writebuffer,unsigned char n)
  122. {
  123.         int i;

  124.         for(i=0;i<n;i++)
  125.         {
  126.                 Write_1_Byte(*writebuffer);
  127.                 if(Check())
  128.                 {
  129.                         writebuffer ++;
  130.                 }
  131.                 else
  132.                 {
  133.                         Stop();
  134.                     return FALSE;
  135.                 }
  136.         }
  137.         Stop();
  138.         return TRUE;
  139. }

  140. //***************Read a Byte****************/
  141. unsigned char Read_1_Byte(void)
  142. {
  143.     unsigned char data_Value = 0, FLAG, i;
  144.         
  145.     for(i=0;i<8;i++)
  146.     {
  147.         
  148.         SDA=1;
  149.         DelayNus (15);
  150.     SCL=1;
  151.         DelayNus (15);
  152.         FLAG=SDA;
  153.         data_Value <<= 1;
  154.         if( FLAG)
  155.            data_Value |= 0x01;

  156.     SCL=0;
  157.     DelayNus (15);
  158.     }
  159.     return data_Value;
  160. }

  161. //***************Read N Byte****************/
  162. void Read_N_Byte(unsigned int*readbuff, unsigned char n)
  163. {
  164.         unsigned char i;
  165.         
  166.         for(i=0;i<n;i++)
  167.         {
  168.                 readbuff[i]=Read_1_Byte();
  169.                 if(i==n-1)
  170.                         NACK();  //不连续读字节
  171.                 else
  172.                         ACK(); //连续读字节
  173.         }
  174.         Stop();

  175. }
  176. //*****************初始化******************/
  177. void InitADS1115(bit S_MUX_0, bit S_MUX_1)
  178. {
  179.         if (S_MUX_0 == 0 && S_MUX_1 == 0)
  180.         Config = OS+MUX_A0+PGA+DR+COMP_QUE+MODE;
  181.         if (S_MUX_0 == 0 && S_MUX_1 == 1)
  182.         Config = OS+MUX_A1+PGA+DR+COMP_QUE+MODE;
  183.         if (S_MUX_0 == 1 && S_MUX_1 == 0)
  184.         Config = OS+MUX_A2+PGA+DR+COMP_QUE+MODE;
  185.         if (S_MUX_0 == 1 && S_MUX_1 == 1)
  186.         Config = OS+MUX_A3+PGA+DR+COMP_QUE+MODE;
  187.    
  188.     Writebuff[0]=ADDRESS_W;
  189.     Writebuff[1]=Pointer_1;
  190.     Writebuff[2]=Config/256;
  191.     Writebuff[3]=Config%256;
  192.         
  193.     Readbuff[0]=ADDRESS_W;
  194.     Readbuff[1]=Pointer_0;
  195.         
  196.     Readbuff[2]=ADDRESS_R;
  197. }

  198. //***************Write a Word***********************/
  199. void WriteWord(void)
  200. {
  201.      int t;
  202.      Start();   //写入4个字节
  203.      do
  204.      {
  205.           t=Write_N_Byte(Writebuff,4);
  206.      }while(t==0);
  207. }
  208. //***************Read Word***********************/
  209. void ReadWord(void)
  210. {
  211.     int t;
  212.     Start();  //写入2个字节
  213.     do
  214.     {
  215.       t=Write_N_Byte(Readbuff,2);
  216.     }while(t==0);

  217.     Start();   //写入2个字节
  218.     do
  219.     {
  220.       t=Write_N_Byte(&Readbuff[2],1);
  221.     }while(t==0);
  222.    
  223.     Read_N_Byte(Result,2);  //读出2个字节

  224. }
  225. //***************ADS1115********************/
  226. unsigned int ADS1115(int Channel)
  227. {
  228.         bit S_MUX_0, S_MUX_1;

  229.         switch(Channel)
  230.         {
  231.                 case 0:
  232.                         S_MUX_0 = 0;
  233.                         S_MUX_1 = 0;
  234.                         Channel_Value = Channel + '0';
  235.                         break;
  236.                 case 1:
  237.                         S_MUX_0 = 0;
  238.                         S_MUX_1 = 1;
  239.                         Channel_Value = Channel + '0';
  240. ……………………

  241. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
ADS1256模块资料.rar (13.69 MB, 下载次数: 139)
ADS1115测量正负10V模块资料.zip (2.15 MB, 下载次数: 144)


评分

参与人数 1黑币 +1 收起 理由
ygloo + 1 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶1 踩1
回复

使用道具 举报

沙发
ID:372961 发表于 2018-11-14 10:37 | 只看该作者
运行通过了吗?就贴出来,不负责任
回复

使用道具 举报

板凳
ID:403447 发表于 2018-11-21 08:10 | 只看该作者
正想学习ADS,没通过运行,白下了。赔我币币
回复

使用道具 举报

地板
ID:468406 发表于 2019-1-19 11:15 | 只看该作者
学习了
回复

使用道具 举报

5#
ID:487362 发表于 2019-3-9 13:52 | 只看该作者
有谁下下来了,可以私发一份么
回复

使用道具 举报

6#
ID:377519 发表于 2019-8-3 15:14 | 只看该作者
为了赚黑币不择手段吗
回复

使用道具 举报

7#
ID:616761 发表于 2019-9-26 16:32 | 只看该作者
例程直接用不行,需要自己修改
回复

使用道具 举报

8#
ID:64765 发表于 2019-10-14 20:06 | 只看该作者
下载学习,谢谢分享。
回复

使用道具 举报

9#
ID:115740 发表于 2019-10-27 18:37 | 只看该作者
谢谢分享,学习了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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