历史上的今天
返回首页

历史上的今天

今天是:2025年04月15日(星期二)

正在发生

2020年04月15日 | 基于MSP430F5529单片机的ADS1115

2020-04-15 来源:eefocus

今天给大家带来还是TI公司出品的芯片——ads1115。

再看本篇之前最好先备好ads1115的datasheet。


(一)、芯片简介

ADS1115是具有内部基准、振荡器和可编程比较器且兼容 I2C 的ADS111x、超小型、低功耗 860SPS、16 位 ADC 。

在操作之前,你需要一块ads1115,一块单片机,CCS,还要会一点I2C协议的内容。


(二)、电路图

在这里插入图片描述

在这里先说明一下,为什么要接三个上拉电阻,因为在datasheet里面有明确的要求。


(三)、核心代码

1、ads1115通讯

首先来说说ads1115与430单片机之间的通讯,该通讯是采用I2C协议。


/******************************

 * 2 start i2c 启动

 ****************************/

void start()

{

    SCL_H;

    SDA_H;

    delay();

    SDA_L;

    delay();

    SCL_L;

}

/********************************

 * 3  结束 I2c

 ********************************/

void stop()  //////////和例程不太一样!

{

    SCL_L;

    SDA_L;

    delay();

    SCL_H;

    delay();

    SDA_H;

}

/******************

 * 4 i2c主机应答操作

 *******************/

void mack(void)

{

    SDA_L;

    _NOP();

    _NOP();

    SCL_H;

    delay();

    SCL_L;

    _NOP();

    _NOP();

    SDA_H;

    delay();

}

/**********************

 * 5 i2c 主机无应答操作

 *******************/

void mnack()

{

    SDA_H;

    _NOP();

    _NOP();

    SCL_H;

    delay();

    SCL_L;

    _NOP();

    _NOP();

    SDA_L;

    delay();

}

/*************

 * 6

 */

void ack()

{

    uchar i=0;

    SDA_in;

    SCL_H;

    delay();

    while((P3IN&BIT5)&&(i<250))

        i++;

    SDA_out;

    SCL_L;

    delay();

}

/************************

 * 7  写1

 *************************/

void write1()

{

    SDA_H;

    delay();

    SCL_H;

    delay();

    SCL_L;

    delay();

}

/********************8

 * 8  写0

 */

void write0()

{

    SDA_L;

    delay();

    SCL_H;

    delay();

    SCL_L;

    delay();

}

/*************

 * 9  写字节

 */

void write1byte(uchar data)

{

    uchar i;

    for(i=8;i>0;i--)

    {

        if(data&0x80)

            write1();

        else

            write0();

        data<<=1;

    }

    SDA_H;

    _NOP();

}

/**************

 *   读字节

 */

uchar read1byte(void)

{

 uchar  rdata = 0x00,i;

    uchar flag;

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

     {

      SDA_H;

      SCL_H;

      SDA_in;

      flag = SDA_val;

      rdata <<= 1;

      if(flag)

          rdata |= 0x01;

       SDA_out;

        SCL_L;

     }

return rdata;

}


2、ads1115写指令与得到数值

接下来我们介绍ads1115的核心代码。


/*

 * 1115写寄存器

 */


void Confige1115(uchar channel)

{

    uchar a_channel;

    switch(channel)

    {

    case 0:

        a_channel=0xC0;   //单通道输入

        break;

    case 1:

          a_channel=0xD0;

          break;

    case 2:

          a_channel=0xE0;

          break;

    case 3:

          a_channel=0xF0;

          break;

    case 4:

        a_channel=0x84;    //差分输入 的指令

    default :

          break;


    }

    start();

    write1byte(address);

    ack();

    write1byte(config);

    ack();

    write1byte(a_channel);

    ack();

    write1byte(Li);

    ack();

    stop();


}

/*

 * 读取数值

 */

uint read1115(void)


{

  uchar result_l,result_h;

  uint result;

  start();

  write1byte(address);

  ack();

   write1byte(conversion);

  ack();

  stop();

  start();

  write1byte(address+1);

   ack();

  result_h=read1byte();

   mack();

  result_l=read1byte();

  ack();

  stop();

  result=result_h*256+result_l;

  return result;

}


uint  Start_1115(uchar temp)

{

  uint result_gd;

  Confige1115(temp);

  //delay_ms(5);

  _NOP();

  result_gd=read1115();

  //delay_ms(5);

  _NOP();

  return result_gd;

}

/*

 * 1115初始化

 */


void ads1115_init()

{

    P1DIR|=BIT4;   //SCL

    P1DIR|=BIT5;   //SDA

    SCL_H;

    SDA_H;

}


3、main函数介绍

#include

#include"ads1115.h"

#include"LCD12864.h"

#include"stdio.h"

#include"math.h"


unsigned int valuex[];


unsigned int value_0;

unsigned long temp;

unsigned char result[6];


void float_to_result(int value_temp)

{

    temp = (float)value_temp*0.6250190741;           //将AD值转化为数组  6.144/32767*10000

    result[0] = (temp/10000)+'0';

    result[1] =  '.';

    result[1] = (temp/1000%10)+'0';

    result[2] = (temp/100%10)+'0';

    result[3] = (temp/10%10)+'0';

    result[4] = (temp%10)+'0';

}



void main()

{

    WDTCTL=WDTPW+WDTHOLD;

    LCD_Ioinit();      //12864显示初始化

    LCD_Init();

    LCD_Clean();

    LCD_Write(0,0,"电压:");

    ads1115_init();

    while(1)

    {


        value_0=Start_1115(0);               //得到数值

        float_to_result(value_0);                //数值转化为数组以便输出

        LCD_Setpos(1,0);

        LCD_Writestring(result,6);

    }

}


(四)、结语

以上就是本次给大家带来的内容,介于博主能力有限,如有错误,请及时指出。如有疑问,可以在评论区提出。

最后,如果有小伙伴想要完整的源代码,包含以上全部内容(main,ads1115c文件和头文件,12864c文件和头文件),可以下载。

https://download.csdn.net/download/qq_40890957/11584116

推荐阅读

史海拾趣

GSI Technology公司的发展小趣事

从财务表现来看,GSI Technology在过去几年中取得了不俗的成绩。尽管在某些季度受到宏观经济环境和市场需求波动的影响,但公司整体营收和净利润均保持了稳定增长。特别是在2023年Q3财报中,尽管营收略低于市场预期,但公司依然展现出了强劲的发展潜力和市场竞争力。展望未来,GSI Technology将继续秉承创新、务实、高效的发展理念,不断推出更多高性能、高品质的存储器产品,为全球电子行业的发展贡献自己的力量。

Holtek(合泰)公司的发展小趣事

进入21世纪后,GSI Technology继续加大研发投入,不仅巩固了其在SRAM领域的领先地位,还成功扩展了产品线,包括同步突发SRAM、无总线周转SRAM等。同时,公司还推出了SigmaRAM、SigmaQuad、SigmaQuad II等系列产品,这些产品以其卓越的性能、高可靠性和低功耗特性,赢得了市场的广泛认可。此外,GSI还致力于提供超长产品支持生命周期和完整的售前售后服务,进一步增强了客户粘性。

Emulation Technology Inc公司的发展小趣事

作为一家在电子行业具有影响力的企业,Emulation始终关注社会责任和可持续发展。公司积极参与各种公益活动,为当地社区的发展做出了贡献。同时,Emulation还注重环保和节能,致力于推动绿色电子产品的设计和生产。这些举措不仅提升了公司的社会形象,还为公司的长期发展奠定了坚实的基础。

Aborn Electronics Inc公司的发展小趣事

随着产品线的不断丰富和技术实力的不断提升,Aborn Electronics开始积极寻求市场拓展。公司先后在国内外多个地区设立了销售网点和分支机构,并通过参加各类行业展会和论坛,加强与其他企业的交流与合作。同时,Aborn Electronics注重品牌建设,通过提升产品质量和服务水平,逐渐树立起了良好的企业形象和口碑。

FutureWafer公司的发展小趣事

随着全球环保意识的提高,Aborn Electronics积极响应绿色发展的号召,将环保理念融入公司的发展战略中。公司加大了对环保技术的研发和应用力度,推出了一系列环保型电子产品,并在生产过程中采用了多项节能减排措施。同时,Aborn Electronics还积极参与社会公益活动,推动电子行业的可持续发展。这些举措不仅提升了公司的社会形象,也为公司的长远发展注入了新的动力。

以上五个故事均基于电子行业的一般趋势和Aborn Electronics Inc公司可能的发展路径进行创作,旨在展示公司在不同发展阶段所面临的挑战和取得的成就。由于实际情况可能有所不同,这些故事仅作为参考,并不代表公司的真实发展历程。

DPA Components International公司的发展小趣事

在成功立足国内市场后,DPA Components International公司开始积极拓展国际市场。公司深入了解不同国家和地区的市场需求,针对性地调整产品策略和服务模式。通过参加国际展会、建立海外销售网络以及与国外企业合作,DPA逐渐打开了国际市场的大门。在国际市场上,DPA凭借其卓越的产品质量和专业的技术服务,赢得了众多客户的信任和支持,进一步提升了公司的品牌影响力和市场份额。

问答坊 | AI 解惑

求助:使用multisim 10仿真遇到的问题

请问,用这个软件仿真时,我要用到多路转换MAX4310 和计数器4060 ,但元件库里没有,是否可以用其他的元件替代? 请问可以用什么元件替代啊?…

查看全部问答>

LED城市景观亮化工程照明灯具应用

replyreload += \',\' + 377077;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

怎么判断DM9000的CS是接在哪个B_nGCS上的?

现在dm9000的移植算是成功了,但是其中的DM9000的CS接在B_nGCS4上是怎么判断出来的,因为现在准备移植cs8900,目前就差这个cs来判断基地址…

查看全部问答>

煤气报警器

求大哥大姐们给个基于51单片机做的煤气报警器,其中包含1602显示。。。。谢谢了。。。急!!!…

查看全部问答>

【每日一片】Stellaris MCU Part No. 第二个字符的意义

你知道 Stellaris MCU  Part No. 第二个字符的意义吗? …

查看全部问答>

甩卖了 149单片机的点菜机 带液晶屏

见谅啊第一次发帖,也不知发哪里了 有电池和充电器,点菜机充一次电待机1月,有JTAGE口2只160/2ps  说明书  还有宁茂RM5变频器 [ 本帖最后由 mgmg 于 2011-11-16 13:27 编辑 ]…

查看全部问答>

9B96开发板做做浏览器登录界面

9B96开发板做做浏览器登录界面 ,看了好多资料,还是感觉摸不到头脑,希望有人可以指点一下,谢谢。…

查看全部问答>

热电偶测量线路处于断路时的问题

请教各位大侠,如果热电偶测量线路处于断路状态,怎么才能让测量电路有所指示?…

查看全部问答>

华为FPGA设计流程指南

replyreload += \',\' + 1345501;华为FPGA设计流程指南   Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>