[资料分享] ADS1100 驱动程序--PIC25K20

[复制链接]
1120|1
 楼主| xyz549040622 发表于 2020-1-27 11:06 | 显示全部楼层 |阅读模式
  1. #include <p18f25k20.h>
  2. #include <delays.h>
  3. #include "main.h"
  4. #include "AD.h"

  5. uint24        ADBuffer[4];//AD数据缓冲区

  6. uint24 ReadSPI(void)
  7. {
  8.         uint8 i;
  9.         uint24 x = 0;
  10.         uint24 result = 0;

  11.         CS = 0;//启动转换
  12.         Delay10TCYx(2);//延时80us(时钟频率为1MHz)
  13.         CS = 1;//启动单次转换
  14.         Delay1KTCYx(20);;//延时80ms,等待转换完成
  15.         CS = 0;//进入休眠,准备读数据
  16.         Delay1TCY();//延时4us,等待数据就绪
  17.         if(SDO == 0)//判断数据是否就绪
  18.         {
  19.                 for(i = 0;i < 24;i ++)
  20.                 {
  21.                         SCK = 0;
  22.                         Delay1TCY();//延时4us,等待数据稳定
  23.                         x = SDO;
  24.                         while(SDO != x)//抖动处理,2次读出电平相同说明数据稳定
  25.                         {
  26.                                 Delay1TCY();
  27.                                 x = SDO;
  28.                         }
  29.                         result <<= 1;
  30.                         result |= x;
  31.                         SCK = 1;
  32.                         Delay1TCY();
  33.                 }
  34.         }
  35.         CS = 1;//进入关断
  36.         Delay1TCY();
  37.         Delay1TCY();
  38.         Delay1TCY();
  39.         return result;
  40. }
  41. void ReadAD(void)
  42. {
  43.         uint8 i;
  44.         for(i = 0;i < 4;i ++)
  45.         {
  46.                 ADBuffer[i] = ReadSPI();//连续读4次AD转换结果
  47.         }
  48. }
  49. uint24 ADFilter(void)
  50. {
  51.         uint8 i;
  52.         uint24 Max,Min;
  53.         uint24 Average = 0,Sum = 0;
  54.    
  55.         Max = ADBuffer[0];
  56.            Min = ADBuffer[0];
  57.       
  58.            for(i = 0;i < 4 ;i ++)
  59.            {
  60.                    if(ADBuffer[i] > Max)
  61.                    {
  62.                            Max = ADBuffer[i];  //AD数据中的最大数据
  63.                    }
  64.                    if(ADBuffer[i] < Min)
  65.                    {
  66.                            Min = ADBuffer[i];  //AD数据中的最小数据
  67.                    }
  68.                    Sum += ADBuffer[i];     //读出的4个AD数据和
  69.            }
  70.            Average = (Sum - Max - Min) >> 1; //AD数据和去掉最大值和最小值,对剩下的2个数据求平均值      

  71.         return Average;                //返回滤波后的数据
  72. }


 楼主| xyz549040622 发表于 2020-1-27 11:07 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2841

主题

19330

帖子

110

粉丝
快速回复 在线客服 返回列表 返回顶部