北京赛车pk10开奖

MSP430杂谈--AD7745硬件IIC驱动与模拟IIC驱动

2019-10-30来源: eefocus关键字:MSP430  AD7745  硬件IIC驱动  模拟IIC驱动

和上一篇AD7793类似,项目中也涉及到利用AD7745读取电容值,来测环境湿度。编写了基于MSP430的AD7745的硬件IIC驱动和模拟IIC驱动,分享给大家。


北京赛车pk10开奖AD7745硬件IIC驱动完整版下载链接:https://download。csdn。net/download/qq_42580947/11041942


AD7745模拟IIC驱动完整版下载链接:https://download.csdn.net/download/qq_42580947/11041947


PS:目前资源积分无法自行调整,有谁知道可以修改积分的方法请告知,我想免费分享给大家。


1. AD7745的硬件IIC驱动


MCU:MSP430F57XX


AD7745的硬件IIC驱动失败的几个原因有:单片机配置IIC资源错误(包括IIC的时钟,IIC的运行模型等配置错误),单片机的系统时钟配置错误(注意MCLK, SMCLK, ACLK的分配)


1。1 AD7745的写函数


void AD7745_W(unsigned char addr, unsigned char data)

{

  while(UCB0STAT& UCBBUSY)

    InitUCB0();

  UCB0CTL1 |= UCTR;

  UCB0CTL1 |= UCTXSTT;   

 

  UCB0TXBUF = addr;

  delayus(200);

  while(!(UCB0IFG & UCTXIFG0));

  

  UCB0TXBUF = data;

  delayus(200);

  while(!(UCB0IFG & UCTXIFG0));

 

  UCB0CTL1 |= UCTXSTP;

  while (UCB0CTL1 & UCTXSTP);

}

1。2 AD7745的读函数


void AD7745_R(unsigned char addr, unsigned char *buffer, char n)

{

  unsigned char index;

  UCB0CTL1 |= UCTR;

  UCB0CTL1 |= UCTXSTT; 

  delayus(200);

北京赛车pk10开奖  UCB0TXBUF = addr;

  delayus(200);

  while(!(UCB0IFG & UCTXIFG0));

  while (UCB0CTL1 & UCTXSTP);

 

  UCB0CTL1 &=~ UCTR;

  RXByteCtr = n;

  UCB0CTL1 |= UCTXSTT;  

  delayus(200);

  while (UCB0CTL1 & UCTXSTP);

  for(index=0; index < n-1; index++)

  {

    while(!(UCB0IFG & UCRXIFG0));            

北京赛车pk10开奖    *buffer++ = UCB0RXBUF;

    delayus(200);

  }

 

  UCB0CTL1 |= UCTXSTP+UCTXNACK;

  delayus(200);

  while((UCB0IFG&UCRXIFG)==0);

  *buffer = UCB0RXBUF;

  delayus(200);

  while (UCB0CTL1 & UCTXSTP); 

}

1.3 AD7745的复位


void Reset_AD7745()

{

  while(UCB0STAT& UCBBUSY)

    InitUCB0();

  UCB0CTL1 |= UCTR;

  UCB0CTL1 |= UCTXSTT; 

  delayus(200);

北京赛车pk10开奖  UCB0TXBUF = 0xBF;

  while(!(UCB0IFG & UCTXIFG0));

  

  UCB0CTL1 |= UCTXSTP;

  while (UCB0CTL1 & UCTXSTP); 

}

1。4 AD7745的初始化


void Init_AD7745(void)

{

  AD7745_W(0x0D, offset_buf[0]);

北京赛车pk10开奖  AD7745_W(0x0E, offset_buf[1]);

  capdac_offset = Capdac_Parameter;                           

  out_buff[4] = 0x80+capdac_offset;               //CAPDACA is set to capdac_offset

  out_buff[5] = 0x80;                             //CAPDACB is set to 0

  CAPDAC = (float)(capdac_offset*CAPDAC_UNIT);   //CAPDAC只会取4值,即4.25,8.5,12.75,17

  AD7745_W(0x07, out_buff[0]);                    // data collect

  AD7745_W(0x08, out_buff[1]);

  AD7745_W(0x09, out_buff[2]);

  AD7745_W(0x0A, out_buff[3]);

  AD7745_W(0x0B, out_buff[4]); 

  AD7745_W(0x0C, out_buff[5]);

 

  memset(DataArr,0,sizeof(float)*DataNumber);

}

1。5 读取测量数据


void ReadData(void)

{

  AD7745_R(0x01, in_buff, sizeof(in_buff));  // read the data register

  CDC_Register_data = in_buff[1];

  CDC_Register_data = 0;

  CDC_Register_data = in_buff[1];

  CDC_Register_data <<= 8;

  CDC_Register_data += in_buff[2];

  CDC_Register_data <<= 8;

  CDC_Register_data += in_buff[0];

  CDC_Register_data &= 0x00ffffff;

 

  CDC_Capacitance2 = (float)(FULL_SCALE-SEMI_SCALE);

 

  if(CDC_Register_data>= SEMI_SCALE)

  {

      CDC_Capacitance1 = (float)(CDC_Register_data-SEMI_SCALE);

      CDC_Capacitance = 4.096 * (CDC_Capacitance1/CDC_Capacitance2);

  }

  else

  {

      CDC_Capacitance1 = (float)(SEMI_SCALE-CDC_Register_data);

北京赛车pk10开奖      CDC_Capacitance = -4.096 * (CDC_Capacitance1/CDC_Capacitance2);

  }

 

北京赛车pk10开奖  CDC_Capacitance = CAPDAC+CDC_Capacitance;

  Capacitance  = CDC_Capacitance;

}

2. AD7745模拟IIC驱动


模拟IIC驱动失败的最主要原因是:时钟!时钟!时钟!注意时钟的配置和延时的处理


2.1 AD7745基础子函数的处理


void start()

{

    SCL_OUT;

    SDA_OUT;

    SDA_H;

    delayms(1);

    SCL_H;

    delayms(1);

    SDA_L;

北京赛车pk10开奖    delayms(1);

    SCL_L;

    delayms(1);

}

 

void stop()

{

  SDA_OUT;

  SCL_OUT;

  SDA_L;

  delayms(1);

北京赛车pk10开奖  SCL_H;

  delayms(1);

  SDA_H;

  delayms(1);

}

 

void Ack()

{

  SDA_OUT;

  SCL_OUT;

  SCL_L;

  SDA_L;

  delayms(1);

  SCL_H;

  delayms(1);

  SCL_L;

}

void NAck()

{

  SDA_OUT;

  SCL_OUT;

北京赛车pk10开奖  SCL_L;

  SDA_H;

  delayus(2);

  SCL_H;

  delayus(2);

  SCL_L;

}

 

unsigned int WAck()

{

    SDA_H;

北京赛车pk10开奖    SDA_IN;

北京赛车pk10开奖    SCL_H;

    

    while(P1IN & BIT6)

北京赛车pk10开奖    {

    }

  SCL_L;

  delayms(1);

  return 0;

}

1.2 读取字节数据


uchar read_byte()

{

  uchar i,read_data;

  SDA_OUT;

  SCL_L;

  SDA_H;

  for(i = 0;i<8;i++)

  {

    SDA_H;

    delayus(2);

    SCL_H;

    SDA_IN;

    delayus(2);

    read_data <<= 1;

    if(P1IN & BIT6)

      read_data |= 0x01;

    SDA_OUT;

北京赛车pk10开奖    SCL_L;   

  }

  delayms(5);

  return(read_data);

}

1.3 写字节数据


void write_byte(uint data)

{

  uchar i;

  SCL_OUT;

  SDA_OUT;

  for(i = 0;i<8;i++)

  {

    if(data & 0x80)

      SDA_H;

北京赛车pk10开奖    else

      SDA_L; 

 

    delayms(1);

    SCL_H;

    delayms(1);

    SCL_L;

    delayms(1);

    data = data << 1;

  }

  delayms(5);

}

1.4 向指定地址写数据


void write_dat(uchar addr,uchar write_data)

{

  start();

  write_byte(OP_WRITE);

  WAck();

  write_byte(addr);

北京赛车pk10开奖  WAck();

  write_byte(write_data);

  WAck();

  stop();

  delayus(1000);

}

1。5 从指定地址读数据


uchar read_random(uint random_addr)

{

  uchar i;

  start();

  write_byte(OP_WRITE);

  WAck();

  write_byte(random_addr);

  WAck();

  start();

北京赛车pk10开奖  write_byte(OP_READ);

  WAck();

  i = read_byte();

  stop();

  return i;

}

1。6 AD7745的初始化


void Init_AD7745()

{

  start();

  write_byte(0X09);

  WAck();

  write_byte(0xBF);

  delayus(500);

  WAck();

北京赛车pk10开奖  stop();

}

1。7 写数组与读数组


void EEPROM_WriteArray (unsigned char dest_addr, unsigned char* src_addr,

                        unsigned char len)

{

   unsigned char i;

   start();

北京赛车pk10开奖   write_byte(OP_WRITE);

   WAck();

   write_byte(dest_addr);

北京赛车pk10开奖   WAck();

   for( i = 0; i < len; i++ )

北京赛车pk10开奖   {

   write_byte(src_addr[i]);

   WAck();

   }

   stop();

   delayus(1000);

}

void EEPROM_ReadArray (unsigned char* dest_addr, unsigned char src_addr,

                       unsigned char len)

{

  uchar i;

北京赛车pk10开奖  start();

  write_byte(OP_WRITE);

  WAck();

  write_byte(src_addr);

  WAck();

  start();

  write_byte(OP_READ);

  WAck();

  for( i = 0; i < len; i++ )

  {

    dest_addr[i] = read_byte();

    if(i!=len-1)

    Ack();

    else

    NAck();

  }

    stop();

}

北京赛车pk10开奖1。8 AD7745的配置


void Capdacsetup(void)

{

   EEPROM_WriteArray(0x0D, offset_buf, sizeof(offset_buf));      // OFFSET寄存器初始化

   Capdac_Parameter = 127;

   capdac_offset = Capdac_Parameter;                           

北京赛车pk10开奖   out_buff[4] = 0x80+capdac_offset;                            

北京赛车pk10开奖   out_buff[5] = 0x80;                                         //CAPDACB is set to 0

   CAPDAC = (float)(capdac_offset*CAPDAC_UNIT);                                 

   EEPROM_WriteArray(0x07, out_buff, sizeof(out_buff));         // data collect

   memset(DataArr,0,sizeof(float)*DataNumber);

}

1.9 读取测量数据


void ReadData(void)

{

EEPROM_ReadArray(in_buff, 0x01, sizeof(in_buff));  // read the data register

CDC_Register_data = 0;

北京赛车pk10开奖 CDC_Register_data = in_buff[0];

CDC_Register_data <<= 8;

CDC_Register_data += in_buff[1];

CDC_Register_data <<= 8;

CDC_Register_data += in_buff[2];

北京赛车pk10开奖 CDC_Register_data &= 0x00ffffff;

CDC_Capacitance2 = (float)(FULL_SCALE-SEMI_SCALE);

 

北京赛车pk10开奖 if(CDC_Register_data>= SEMI_SCALE)

{

CDC_Capacitance1 = (float)(CDC_Register_data-SEMI_SCALE);

CDC_Capacitance = 4.096 * (CDC_Capacitance1/CDC_Capacitance2);

}

else

{

CDC_Capacitance1 = (float)(SEMI_SCALE-CDC_Register_data);

CDC_Capacitance = -4.096 * (CDC_Capacitance1/CDC_Capacitance2);

}

CDC_Capacitance = CAPDAC+CDC_Capacitance;

DataArr[Int_dec++]=CDC_Capacitance;

if(Int_dec==DataNumber)

Int_dec=0;

}

关键字:MSP430  AD7745  硬件IIC驱动  模拟IIC驱动 编辑:什么鱼 引用地址:http://news.2689mr.com/mcu/ic478717.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:MSP430勘误表使用
下一篇:msp430学习笔记之uart

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430G2553与MSP430F5336系列单片机总结[4]——比较器B的使用
比较器B是什么,顾名思义,它其实就是用来比较模拟电压+输入端和-输入端的电压大小,然后设置输出信号CBOUT的值的,如果 + 端电压高于 - 端电压,则CBOUT置高,否则置低。主要的控制寄存器有CBCTL0,CBCTL1,CBCTL2,CBCTL3,CBINT,CBIV,在MSP430G2553中没有比较器B,但是F5336中有,所以接下来的代码全都是F5336的比较器B使用程序:1.比较器B输入通道CB0接外部模拟输入信号,并且引至比较器+输入端,内部参考电压发生器利用共享电压源产生2.0V参考电压。最后当CB0输入模拟信号电压高于2.0V时,CBOUT输出高电平,当CB0输入模拟信号电压低于2.0V时,输出低电平
发表于 2019-11-06
怎么用keil5实现MSP432E401Y点灯
**第一步**先去官网下载芯片包在keil这个序列中选择TI公司相对应的芯片包下载后在pack installer->import->I agree ->finish出现绿色图标,就代表成功。第二步下载模板模板链接打开工程,选择正确的芯片出现下载失败或者没法编译时选择正确的编译器版本插好线接下来Debug的配置是选择正确的芯片flash然后点击编译下载就好了第三步下面两个网站可以下载资料开发板资料芯片资料从开发板原理图可以知道LED灯的引脚接下来是简单流水灯
发表于 2019-11-06
怎么用keil5实现MSP432E401Y点灯
MSP432E401Y-PWM的生成和占空比的调整
 * MSP432E4 Empty Project * * Description: An empty project that uses DriverLib * *                MSP432E401Y *             ------------------ *         /||          
发表于 2019-11-06
北京赛车pk10开奖MSP432时钟系统CS
MSP432共有六个时钟源,五个时钟,下面分别由我来介绍一下时钟源分别有以下几个LFXTCLK:低频振荡器(LFXT),可与低频32768-Hz手表配套使用,晶体,标准晶体,谐振器,或外部时钟源在32千赫或以下的范围。当在旁路模式下,LFXTCLK可以由32 khz或以下的外部方波信号驱动的范围内。HFXTCLK:高频振荡器(HFXT),可与1-MHz至48-MHz范围内的标准晶体或谐振器一起使用。在旁路模式下,HFXTCLK可以通过外部方波信号驱动。DCOCLK:内部数字控制振荡器(DCO),默认频率为可编程频率和3 mhz频率。VLOCLK:内部极低功率低频振荡器(VLO),典型频率为9.4 khzREFOCLK:内部低功率
发表于 2019-11-06
MSP432E401Y单片机智能小车测速功能
 * MSP432E401Y * Description:本函数实现定时和测速功能   * 引脚:PD0->编码器输入信号 *         * Author: Robin.J***************************************************************************//* DriverLib Includes */#include <ti/devices/msp432e4/driverlib/driverlib.h>/* Standard
发表于 2019-11-06
北京赛车pk10开奖MSP432学习笔记:IAR的环境配置(官方demo程序的测试)
近来入手一块MSP432,折腾了一天,终于把官方demo程序导入IAR,可以愉快的写代码了,以下是我个人的解决办法。首先,如果要使用IAR对TI的单片机进行开发,首先要下载对应的单片机型号的MSPWARE,本人目前使用的是TI的MSP432P401R的launchpad,对应的MSPWARE的下载地址为msp432ware下载地址,下载完成后默认路径安装即可,安装完成后可以在安装路径下找到下图的文件IAR的下载安装在这里就不做赘述了,需要注意的是IAR的版本应该为IAR for ARM版本,这个千万不能搞错,否则可能会吃很多问题,不能正常运行。正确安装完IAR后应该是这个样子的,我现在安装的是最新的版本,测试没有问题准备工作完成
发表于 2019-11-06
MSP432学习笔记:IAR的环境配置(官方demo程序的测试)
小广播
何立民专栏 单片机及嵌入式宝典

北京赛车pk10开奖北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 2689mr.com, Inc. All rights reserved
双色球机器人 北京赛车pk10计划 北京赛车pk10开奖 北京赛车pk10计划 北京赛车pk10开奖 飞鸟公众号系统 乐购彩票开户 pk10投注 北京赛车pk10开奖 北京赛车pk10开奖