找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ADS1115模块原理图PCB以及单片机程序源码分享

[复制链接]
跳转到指定楼层
楼主
这是前段时间我个人制作的一块ADS1115模块
测试性能良好,误差较小
附件有原理图PCB和测试数据
属个人制作,请多多指教

Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)

单片机源程序如下:
  1. #include "STC8.h"
  2. #include "uart.h"
  3. #include "ADS1115.h"
  4. #include "stdio.h"

  5. pdata uint ADC_Result[20];
  6. extern char dac_str[16];

  7. /***********************************************************************************/
  8. uint    result=0;
  9. uchar   Initdata[4]={0};

  10. void delay1(uchar T)
  11. {
  12.   while(--T);
  13. }

  14. /*************************************函数功能:开始ADC通信 **************************************/
  15. void StartADcom()
  16. {
  17.   SDA =0;
  18.   SCL=1;
  19.   delay1(100);
  20.   SDA =1;
  21.   delay1(20);
  22.   SDA =0;
  23.   SCL=0;  
  24.   delay1(10);
  25. }

  26. /***********************************函数功能:停止ADC通信 **************************************/
  27. void StopADcom()
  28. {
  29.   SDA=0;
  30.   delay1(10);
  31.   SCL=1;
  32.   delay1(20);
  33.   SDA=1;
  34.   delay1(10);
  35. }
  36. /******************************** 函数功能:单字节SPI传输 **************************************/
  37. void Send_Byte(uchar byte)
  38. {
  39.   uchar i;
  40.   for(i=0;i<8;i++)
  41.     {
  42.           if((byte<<i)&0x80)
  43.                   SDA=1;
  44.       else
  45.                   SDA=0;
  46.           delay1(5);
  47.           SCL=1;
  48.           delay1(10);
  49.       SCL=0;        
  50.       delay1(10);              
  51.         }
  52.   delay1(5);
  53.   SDA=1;
  54.   delay1(5);
  55.   SCL=1;
  56.   delay1(10);
  57.   SCL=0;
  58.   delay1(10);  
  59. }
  60. /***************************函数功能:读取一个字节 *******************************/
  61. uchar Read_Byte()
  62. {
  63.   uchar temp=0;
  64.   uchar i;
  65.   for(i=0;i<8;i++)
  66.     {
  67.           temp=temp<<1;           //shift left to receive next bit
  68.           SCL=0;                        //set clock high
  69.           delay1(10);
  70.           SCL=1;
  71.           delay1(5);
  72.           if(SDA==1)                //check if Data=high  如果有数据到来               
  73.           temp|=0x01;            //yes - set bit high
  74.       delay1(10);               
  75.     }
  76.   SCL=0;
  77.   delay1(5);
  78.   SDA=0;
  79.   delay1(5);
  80.   SCL=1;
  81.   delay1(20);
  82.   SCL=0;
  83.   delay1(5);
  84.   SDA=1;
  85.   return temp;
  86. }
  87. /**************************函数功能:配置AD转换芯片 *************************************/
  88. void Confige1115(uint config)
  89. {
  90.   uchar i=0;

  91.   Initdata[0] =0x90;       // 地址 + 写命令
  92.   Initdata[1] =0x01;       // 指向配置寄存器
  93.   Initdata[2] = (uchar)(config>>8);   // 配置字高字节
  94.   Initdata[3] = (uchar)config;       // 配置字低字节,860sps,disable comparator
  95.   SCL=1;
  96.   StartADcom();
  97.   for(i=0;i<4;i++)
  98.     {
  99.           Send_Byte(Initdata[i]);
  100.       delay1(20);
  101.         }
  102.   StopADcom();
  103. }
  104. /*********函数功能:指向转换结果寄存器 ***************************/
  105. void Pointregister(void)
  106. {
  107.   uchar i=0;
  108.   Initdata[0] =0x90;           // 地址 + 写命令
  109.   Initdata[1] =0x00;            // 指向转换结果寄存器
  110.   SCL=1;
  111.   StartADcom();
  112.   for(i=0;i<2;i++)
  113.     {
  114.           Send_Byte(Initdata[i]);
  115.       delay1(20);
  116.         }
  117.   StopADcom();
  118.   delay1(10);
  119. }
  120. /***********************************************************************************************
  121. 函数功能:读AD转换结果
  122. ************************************************************************************************/
  123. uint Read1115(void)
  124. {
  125.   uchar   ResultL,ResultH;
  126.   uint    Result;
  127.   Initdata[0] =0x91;         // 地址 + 读命令
  128.   SCL=1;
  129.   StartADcom();
  130.   delay1(10);
  131.   Send_Byte(Initdata[0]);
  132.   delay1(20);
  133.   ResultH=Read_Byte();
  134.   delay1(10);
  135.   ResultL=Read_Byte();         
  136.   StopADcom();
  137.   Result=ResultH*256+ResultL;   
  138.   return   Result;
  139. }

  140. /*****模拟量采集转化为数字量*****************/
  141. uint Ad_1115()                        
  142. {
  143.     uint result_gd;
  144.     Pointregister();               
  145.     delay1(10);
  146.         result_gd=Read1115();             //结果存储AD转化值
  147.     return result_gd;
  148. }

  149. uint ADC_GET_AV(uchar num)
  150. {
  151.         uchar i, j;
  152.         uint adc, temp;
  153.         ulong Result_sum;
  154.         
  155.         Result_sum = 0;
  156.         
  157.         for(i = 0; i < num; i++)
  158.                 ADC_Result[i] = Ad_1115();
  159.         
  160.         for (i = 0; i < num - 1; i++)
  161.                 for (j = 0; j < num - 1 - i; j++)
  162.                         if (ADC_Result[j] > ADC_Result[j + 1])
  163.                         {
  164.                                 temp = ADC_Result[j];
  165.                                 ADC_Result[j] = ADC_Result[j + 1];
  166.                                 ADC_Result[j + 1] = temp;
  167.                         }
  168.                                 
  169.         for(i = 8; i < 12; i++)
  170.                 Result_sum += ADC_Result[i];
  171.         adc = Result_sum / 4;
  172.         
  173.         return adc;
  174. }
复制代码



上图资料51hei附件下载:
ADS1115资料.7z (3.22 MB, 下载次数: 160)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:961328 发表于 2021-10-7 09:48 | 只看该作者
你的ADS1115的板子弄好了吗,差分电压精度如何?是否供电5V,才能测量5V?
回复

使用道具 举报

板凳
ID:957480 发表于 2021-11-1 12:43 | 只看该作者
你好,你的uart.c .h能分享一下么
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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