找回密码
 立即注册

QQ登录

只需一步,快速开始

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

fdc2214 oled电容测试msp430程序源码

[复制链接]
跳转到指定楼层
楼主
fdc2214 oled 电容测试程序,用的是msp430f5529单片机

单片机源程序如下:
  1. /**
  2. ******************************************************************************
  3. * @file    FDC2214.c
  4. * @author  BOB   
  5. * @version V1.0
  6. * @date    2018-07-5
  7. * @email   
  8. * @brief   FDC2214配置及数据读取函数
  9. ******************************************************************************
  10. **/
  11. #include <io430.h>
  12. #include "fdc2214.h"
  13. #include "iic.h"
  14. #include "math.h"
  15. #include "Config.h"

  16. //ADDR和SD引脚初始化
  17. #define FDC_ADDR_0                P1OUT &= ~BIT4           //FDC_ADDR置低
  18. #define FDC_ADDR_1                P1OUT |=  BIT4           //FDC_ADDR置高

  19. #define FDC_SD_0                    P1OUT &= ~BIT5           //FDC_SD置低
  20. #define FDC_SD_1                    P1OUT |=  BIT5           //FDC_SD置高



  21. /***************************************
  22. * 函数名:ADDR_SD_Init
  23. * 描述  :配置LDC用到的I/O口
  24.                    ADDR--PC11
  25.                                    SD  --PC12
  26. * 输入  :无
  27. * 输出  :无
  28. **************************************/
  29. /*
  30. void ADDR_SD_Init(void)       //ADDR和SD引脚初始化
  31. {                                             

  32.   
  33. }
  34. */

  35. /***************************************
  36. * 函数名:InitFDC2214
  37. * 描述  :初始化FDC2214
  38. * 输入  :无
  39. * 输出  :retVal  0 and 1
  40. **************************************/
  41. u8 FDC2214_init(void)
  42. {
  43.         u16 id;
  44.         u8 retVal=1;
  45.         u8 ErrCount = 0;
  46.        
  47.         FDC_ADDR_0;// ADDR=0(FDC2214_IIC地址选择=0X2A) // ADDR=1(FDC2214_IIC地址选择=0X2B)
  48.         FDC_SD_0;  // SD=0开启输入   // SD=1关闭输入
  49.        
  50.     default_addr = EVM_DEFAULT_I2CADDR;  //FDC2214地址选择暂存
  51.     delay_ms(10);       
  52.        
  53.         // software reset
  54.         MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_RESET_DEVICE,0x8000);
  55.        
  56.     delay_ms(10);
  57.        
  58.         do
  59.         {
  60.                 if (ErrCount++ > 50)
  61.                         {
  62.                                 return 0;
  63.                         }
  64.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_REF_COUNT_CH0,0xFFFF); // 4 clock periods
  65.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_REF_COUNT_CH1,0xFFFF);
  66.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_REF_COUNT_CH2,0xFFFF);
  67.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_REF_COUNT_CH3,0xFFFF);
  68.                        
  69.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_OFFSET_CH0,0x0000);    //补偿值
  70.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_OFFSET_CH1,0x0000);
  71.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_OFFSET_CH2,0x0000);
  72.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_OFFSET_CH3,0x0000);
  73.                        
  74.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_SETTLE_COUNT_CH0,0x0400); // 1 clock period
  75.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_SETTLE_COUNT_CH1,0x0400);
  76.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_SETTLE_COUNT_CH2,0x0400);
  77.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_SETTLE_COUNT_CH3,0x0400);
  78.                        
  79.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_CLOCK_DIVIDERS_CH0,0x1001); // 1000
  80.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_CLOCK_DIVIDERS_CH1,0x1001);
  81.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_CLOCK_DIVIDERS_CH2,0x1001);
  82.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_CLOCK_DIVIDERS_CH3,0x1001);
  83.                        
  84.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_DRIVE_CURRENT_CH0,0xF800); //
  85.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_DRIVE_CURRENT_CH1,0xF800); //
  86.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_DRIVE_CURRENT_CH2,0xF800); //
  87.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_DRIVE_CURRENT_CH3,0xF800); //       
  88.                        
  89.                 retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_ERROR_CONFIG,0x0001); // report only DRDYs to INT
  90.                
  91.                        
  92.             retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_MUX_CONFIG,0xC20C); // ch0, ch1,ch2,ch3-> Wipro for 4 ch
  93.                        
  94.             retVal &= MPU_Write_2Byte(default_addr,LDC13xx16xx_CMD_CONFIG,0x1E01); // CLKIN pin1281
  95.                                

  96.         }while(retVal!=0);
  97.        
  98.   //        id=MPU_Read_2Byte(default_addr,LDC13xx16xx_CMD_DEVID);//读设备ID
  99. //    if(id==0x3055||id==0x3054)
  100. //        {   
  101. //       return 1;
  102. //        }
  103. //    else
  104. //    {
  105. //      return 0;
  106. //    }       
  107.      return 1;
  108. }


  109. /***************************************
  110. * 函数名:evm_processDRDY
  111. * 描述  :读取寄存器数据
  112. * 输入  :无
  113. * 输出  :无
  114. **************************************/
  115. void evm_processDRDY(unsigned long allData[4])
  116. {
  117.     u8 i=0;
  118.     unsigned long reading = 0;
  119.     float CAP_Data[4];
  120.     float conver = 0;   //最终的转换的结果               
  121.                
  122.    for(i=0;i<=3;i++)
  123.         {                                                         //0x0FFF  最高到只28位
  124.           reading = (unsigned long)(MPU_Read_2Byte(default_addr,i*2) & 0x0FFF) << 16;
  125.           reading |= MPU_Read_2Byte(default_addr,(i*2)+1);
  126.           allData[i]=reading;
  127.           //CAP_Data[i]=reading;
  128.           reading=0;
  129.         }
  130.        
  131. //***注意Init中各通道寄存器0x10-0x17的时钟分频***//
  132. //*******以下四步计算根据datasheet P19公式*******//   
  133.    for(i=0;i<=3;i++)
  134.     {   
  135.           CAP_Data[i] = (CAP_Data[i] * 40000000.0F)/268435456.0F;//得到F(sensorx)       
  136.           CAP_Data[i] = CAP_Data[i] * 2.0F *3.1515926F;
  137.           CAP_Data[i] = 1.0F/((CAP_Data[i] * CAP_Data[i]) * 0.000018F);
  138.           CAP_Data[i] = CAP_Data[i] - 0.000000000033F;       
  139.           CAP_Data[i] = CAP_Data[i] * 1000000000000.0F;//F转换pF;       
  140.           //allData[i]=CAP_Data[i];               
  141.     }       
  142. }

  143. /***********************************/
  144. /******FDC2214检测电容值程序********/
  145. /************************************/
  146. double GetCapacitance(unsigned long value)
  147. {
  148.     double pi = 3.14159265359;
  149.     double L = 18; //uH
  150.     double Cboard = 33; //pf
  151.     double Cparacitic = 3; //pf
  152.     unsigned long long fsensor;
  153.     double temp;
  154.           
  155.     fsensor = 1 * 40000000 * value;
  156.     fsensor = fsensor / pow(2,28);

  157.         temp = 2 * pi * fsensor;  
  158.     temp = temp * temp;
  159.                
  160.     temp = temp / 1000000; //uH
  161.     temp *= L;
  162.     return temp;
  163. }
复制代码

所有资料51hei提供下载:
FDC2214程序TI430 OLED0.96(V3.0).zip (1.52 MB, 下载次数: 67)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:413568 发表于 2019-11-19 08:50 | 只看该作者
这个程序有问题,不能用
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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