STM32F103控制ADS1115采集模拟信号

发布者:钱币之歌最新更新时间:2017-09-27 来源: eefocus关键字:STM32F103  控制ADS1115  采集模拟信号 手机看文章 扫描二维码
随时随地手机看文章

程序已经通过

0、定义通道

#define TongDao0 0xc2e3       
#define TongDao1 0xd2e3
#define TongDao2 0xe2e3
#define TongDao3 0xf2e3


1、STM32F103的IIC端口初始化

void ads1115_io_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;

// RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_OD;

GPIO_Init(GPIOB,&GPIO_InitStruct);

}
2、IIC起始位
void I2C_Start(void)
{
//SCL_LOW;
SDAOUT();
//SDA_LOW;
SDA_HIGH;
SCL_HIGH;

ads1115_Delay();

SDA_LOW;
ads1115_Delay();

SCL_LOW;



}
3、IIC停止位
void I2C_Stop(void)
{
/*SCL_LOW;
SDAOUT();
SDA_HIGH;
SCL_HIGH;



ads1115_Delay();
SDA_LOW;
ads1115_Delay();

//SCL_LOW;*/

SCL_LOW;

SDAOUT();
SDA_LOW;



SCL_HIGH;



ads1115_Delay();
SDA_HIGH;
ads1115_Delay();
//ads1115_Delay();
//ads1115_Delay();

}
4、IIC校验位
void I2C_ACK()
{
SCL_LOW;
SDAOUT();
SDA_LOW;

//ads1115_Delay();

//systick_us(2);
ads1115_Delay();
SCL_HIGH;
//systick_us(2);
ads1115_Delay();
SCL_LOW;
}
5、IIC等待校验位
u8 I2C_Wait_ACK()
{
u8 count=0;
SDAIN();

SCL_HIGH;//ÊÍ·Å×ÜÏß 
//systick_us(1);
ads1115_Delay();
SDA_HIGH; //À­¸ßSDA 
// systick_us(1);
ads1115_Delay();

while(SDA) //¶ÁÈ¡SDA״̬£¬0ΪӦ´ð
{
count++;
if(count>50)
{
return 1;
}
}
SCL_LOW;
// ACK++;    //¼Ç¼оƬ¸øµÄÓ¦¸Ã´ÎÊý£¬µ÷ÊÔÓÃ
return 0;
}


6、IIC写数据
void I2C_WriteByte(u8 cmd)
{
u8 i;
SDAOUT();
SCL_LOW;         //scl=0,ÔÊÐíÊý¾Ý±ä»¯
// SysTick_us(5);
for(i=0;i<8;i++)
{
if(cmd&0x80)SDA_HIGH;
else SDA_LOW;
cmd<<=1;
//systick_us(2);
ads1115_Delay();

SCL_HIGH;    //SCL=1,Êý¾Ý±£³Ö
//systick_us(2);
ads1115_Delay();

SCL_LOW;
//systick_us(1);
//ads1115_Delay();
}
}
7、IIC读数据
u8 I2C_ReadByte()
{
u8 i,ans=0;
SDAIN();
SDA_HIGH;
for(i=0;i<8;i++)
{
SCL_LOW;    //ÔÊÐíÊý¾Ý±ä»¯
//systick_us(2);
ads1115_Delay();

SCL_HIGH;   //±£³ÖÊý¾Ý²»±ä
//systick_us(1);
ads1115_Delay();

ans<<=1;     //
if(SDA)ans++;
//systick_us(1);
//ads1115_Delay();
}
SCL_LOW;
I2C_ACK();

ads1115_Delay();

return ans;
}
8、ADS1115配置参数
void ads1115_config(u16 config)
{
I2C_Start();

I2C_WriteByte(0x90);  //дÐźÅ
I2C_Wait_ACK();

I2C_WriteByte(0x01);  //Ö¸ÏòÅäÖüĴæÆ÷
I2C_Wait_ACK();

I2C_WriteByte(config>>8);
I2C_Wait_ACK();


I2C_WriteByte(config);
I2C_Wait_ACK();

I2C_Stop();
}


9、ADS1115
s16 ads1115_readreg(u8 reg)
{
s16 value_h=0;
//s16 x=0;
s16 ConversionResult=0;
u8 value_l=0;
//int count = 0;

I2C_Start();

I2C_WriteByte(0x90);  //дÐźÅ
ads1115_Delay();
I2C_Wait_ACK();

I2C_WriteByte(reg);  //Ö¸ÏòÅäÖüĴæÆ÷
ads1115_Delay();
ads1115_Delay();
I2C_Wait_ACK();
ads1115_Delay();
I2C_Stop();//////////
ads1115_Delay();
I2C_Start();

I2C_WriteByte(0x91);  //¶ÁÐźÅ
ads1115_Delay();
I2C_Wait_ACK();
ads1115_Delay();

value_h=I2C_ReadByte();


value_l=I2C_ReadByte();



//I2C_Wait_ACK();
I2C_Stop();//////////

ConversionResult=value_h*256+value_l;
return ConversionResult;

}

10、ADS1115获取数据
s16 ads1115_getvalue()
{
s16 value=0;
value=ads1115_readreg(CONVER_REG); //CONVER_REG==0;
//delay_uss(100);/////////////////////////////
return value;
}



11、ADS1115切换采集通道

s16 Get_ADS1115_Reture(u8 channel)
{
ADS1115_Reture=0;

switch(channel)
{
case 0:  
//ads1115_config(TongDao0);
//Delay_Ms(5);
//ADS1115_Reture=ads1115_getvalue();
//Delay_Ms(5);
break;
case 1:
  ads1115_config(TongDao1);//TongDao1
Delay_Ms(7);
//delay_uss(10000);
ADS1115_Reture=ads1115_getvalue();
//Delay_Ms(3);
break;
case 2:  
 ads1115_config(TongDao2);//TongDao2
 Delay_Ms(7);
//delay_uss(10000);
ADS1115_Reture=ads1115_getvalue();
//Delay_Ms(3);
break;
case 3:  
 ads1115_config(TongDao3);//TongDao3
Delay_Ms(7);
//delay_uss(10000);
ADS1115_Reture=ads1115_getvalue();
//Delay_Ms(3);//ÑÓʱһ¶¨Òª¼Ó
ads1115counter ++;
break;
default:
break;


}
//ADS1115_Reture=0x8000;
//channel=0;
return ADS1115_Reture;
}

12、数据量转换为模拟量

V1=volt*(8.192/65536.0);


关键字:STM32F103  控制ADS1115  采集模拟信号 引用地址:STM32F103控制ADS1115采集模拟信号

上一篇:stm32F103状态机矩阵键盘
下一篇:STM32F103单片机RTC结合time.h使用

推荐阅读最新更新时间:2024-03-16 15:38

STM32F103R6之系统架构
主系统由四个驱动单元和四个被动单元构成。 四个驱动单元: M3内核的Dcode总线(D-bus) 系统总线 通用DMA1 通用DMA2 四个被动单元: 内部SRAM 内部闪存存储器(flash) FSMC AHB到APB的桥 图 1系统结构 ICode总线将Cortex™-M3内核的指令总线与闪存指令接口相连接。指令预取在此总线上完成。 DCode总线将Cortex™-M3内核的DCode总线与闪存存储器的数据接口相连接(常量加载和调试访问)。 系统总线连接Cortex™-M3内核的系统总线(外设总线)到总线矩阵,总线矩阵协调着内核和DMA间的访问。 总线矩阵协调内核系统总线和DMA主控总线之间的访问仲
[单片机]
<font color='red'>STM32F103</font>R6之系统架构
基于STM32F103的数字式电镀电源并联均流系统设计
  本文为了实现大功率数字式电镀电源,提出了一种基于ARM芯片STM32F103的数字式电镀电源并联均流系统设计方案,并完成系统的软硬件设计。该系统采用STM32F103作为主控芯片,通过CAN总线控制多个电源模块并联工作并使其电流平均,达到大功率输出的目的。系统具有多种工作模式和外设接口,人机界面友善。实际应用表明,系统工作稳定,达到设计要求。   STM32系列处理器是由意法半导体ST公司生产、基于ARM公司Cortex-M3内核的 MCU ,专门为微控制系统、汽车控制系统、 工业控制 系统和无线网络等嵌入式应用领域而设计,具有高性能、低功耗、高集成度、丰富且性能出众的片上外设、编程复杂度低等优点。数字式电镀电源并联均流系统以
[电源管理]
基于<font color='red'>STM32F103</font>的数字式电镀电源并联均流系统设计
STM32F103串口1和串口2不同波特率之间交换数据问题
前几天写一个东西,要用到STM32F103的串口1和串口2以不同的波特率交换数据,也就是说串口1波特率为9600,串口2波特率为115200,串口1可以把接收到的数据通过串口2发送出去,串口2也可以把接收到的数据通过串口1发送出去。低波特率向高波特率发送数据没问题,高波特率向低波特率发送数据会丢数据,原因是低波特率的串口还没发送完数据高波特率的串口就又发数据过来了,处理不过来。在同事的在帮助下,写出一个先进先出环形队列(FIFO)程序。接收数据用中断,发送数据用在主函数中查询发送完成标志位。希望对大家有点帮助,可能程序不完美,但程序可以用。定义一个fifo.h部件和一个fifo.c文件。其他的都在主函数中调用。 #ifndef
[单片机]
STM32F103ZET6 — RTC
简介 RTC 是Real Time Clock 的简称,意为实时时钟。即,提供类似于 PC 上的时间记录信息的功能。既然是实时时钟,则至少应该有秒、分、时等信息。也可以直观的把他理解成为一个计数器,一直累加。但又不同于 CPU 上电后的那些计数器,对于 RTC ,需要支持的是掉电后的继续计数(存在备用电源)。所谓掉电,是指电源Vpp断开的情况下,为了RTC外设掉电可以继续运行,必须给STM32芯片通过VBAT引脚街上锂电池.当主电源VDD有效时,由VDD给RTC外设供电.当VDD掉电后,由VBAT给RTC外设供电.无论由什么电源供电,RTC中的数据始终都保存在属于RTC的备份域中,如果主电源和VBA都掉电,那么备份域中保存的所有
[单片机]
激光测距VL53LX1 配合STM32F103T8U6测试成功
#include vl53l1x.h #include common.h #include usart.h VL53L1_Dev_t VL53L1_dev ; //device param, include I2C //VL53L1_DeviceInfo_t VL53L1_dev_info ;//device ID version info uint8_t Ajusted ={0,0};//adjusted sign, 0-not, 1-had uint16_t Distance = 0;//保存测距数据 VL53L1_RangingMeasurementData_t VL53L1_data ;//ranging resu
[单片机]
STM32f103的数电采集电路的ADC多通道采集程序
STM32拥有1~3个ADC(STM32F101/102 系列只有1个ADC),这些ADC可以独立使用,也可以使用双重模式(提高采样率)。STM32 的ADC是12位逐次逼近型的模拟数字转换器。它有18个通道,可测量16个外部和2个内部信号源。各通道的 A/D 转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。 ADC模数转换设置的一般步骤可以总结为如下几个步骤: 1.ADC时钟使能,GPIO 时钟使能 2.ADC复位 3.ADC端口模式设置 4.ADC参数初始化 5.开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤) 6.使能ADC 7.编写中断处理函数 前端采集模块
[单片机]
<font color='red'>STM32f103</font>的数电<font color='red'>采集</font>电路的ADC多通道<font color='red'>采集</font>程序
STM32F103C8T6用官方bootloader实现IAP升级操作方法
在使用STM32F103C8T6单片机IAP功能时,可以自己写bootloader程序,也可以使用官方bootloader文件。下面说一下使用官方bootloader的使用方法。 首先下载官方bootloader文件 目前使用的是这个版本,打开文件夹,选择适合自己编译器的工程。 目前使用的是keil,所以打开MDK-ARM文件夹 打开IAP工程 打开后根据自己的单片机型号,对工程进行简单的修改。用的是STM32F103C8T6单片机,FLASH为64K,SRAM为20K。 设置IROM1的起始地址和大小。 设置引用的头文件,STM32F103C8T6为中等容量,所以设置文件为STM32F10X_MD,。
[单片机]
<font color='red'>STM32F103</font>C8T6用官方bootloader实现IAP升级操作方法
Stm32f103 ADC 学习笔记
在做有AD模块项目的时候遇到几个问题: 1, ADC配合DMA采样规则是怎样的。 2, ADC在DMA采可否不连续采样,以提高有效采样使用率和降低功耗。 3, 如何提高有效利用率和降低功耗,并减少CPU的占用时间。 4, ADC的如何多通道采样。 针对以上几个问题做解答。 ADC的采样模式主要分两个:规则采样和注入采样。规则模式可采样16个通道,注入模式最多只能4个通道。 配合DMA使用时主要是用规则采样模式。在初始化时配置采样端口为规则采样通道即可如下: 列:DC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5); 端口1为规则采样的
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved