模数转换器ADS1118 四通道采集电压 stm32f103
模数转换器ADS1118 四通道采集电压 stm32f103
寄存器配置
uint16_t cha0_count=0xD08B;//0xC08B 0xD08B 0xE08B 0xF08B
uint16_t cha1_count=0xE08B;
uint16_t cha2_count=0xF08B;
uint16_t cha3_count=0xC08B;
引脚配置
配置 SCK引脚, GPIOA^5
配置 DOUT引脚,GPIOA^6
配置 DIN引脚,GPIOA^7
配置CE引脚,GPIOA^4
代码ADS1118.C
#include "ADS1118.h"volatile uint8_t readata1;
volatile uint8_t readata2;
volatile uint8_t readata3;
volatile uint8_t readata4;
volatile uint32_t readata;void GPIO_ADS_Init(void)
{SPI_InitTypeDef SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);/*SCK,MISO,MOSI,GPIOA^5,GPIOA^6,GPIOA^7 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);CS_SET; SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7;SPI_Init(SPI1, &SPI_InitStructure);SPI_Cmd(SPI1, ENABLE);
}int8_t SPI_ADS_Send(uint8_t dat) //发送数据
{/* 当 SPI发送缓冲器非空时等待 */while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);/* 通过 SPI2发送一字节数据 */SPI_I2S_SendData(SPI1, dat); /* 当SPI接收缓冲器为空时等待 */while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);/* Return the byte read from the SPI bus */return SPI_I2S_ReceiveData(SPI1);
}void delay( uint32_t nCount )
{for(; nCount != 0; nCount--){;}
}uint32_t SPI_RW_Reg(uint16_t CofigReg)
{delay(10);readata1=SPI_ADS_Send((uint8_t)(CofigReg>>8));readata2=SPI_ADS_Send((uint8_t)CofigReg);readata=( ((uint32_t)readata1<<8) | (uint32_t)readata2 );delay(1000);if(readata>65499)readata=0;return readata;
}
代码ADS1118.H
#ifndef __ADS1118_H
#define __ADS1118_H
#include "stm32f10x.h"#define CS_RESET GPIO_ResetBits(GPIOA,GPIO_Pin_4)
#define CS_SET GPIO_SetBits(GPIOA,GPIO_Pin_4)void GPIO_ADS_Init(void);
int8_t SPI_ADS_Send(uint8_t dat);
void delay( uint32_t nCount );uint32_t SPI_RW_Reg(uint16_t CofigReg);#endif
代码
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "exti.h"
#include "ADS1118.h"
#include "deal.h"
#include "timebreak.h"
#include "soundout.h"/*配置寄存器的值:0x8283 ( 1000 0010 1000 0011 )bit15:1bit14-12: 100 AIN0模拟输入 bit11-9: 001 参考电压4.096V000 参考电压6.144Vbit8: 0 连续转换模式bit4 0 ADC模式配置 SCK引脚, GPIOA^5 配置 DOUT引脚,GPIOA^6 配置 DIN引脚,GPIOA^7 配置CE引脚,GPIOA^4LCD_DrawLine(500,360,800, 360);LCD_Fill(200,0,210,210,0x0000);ch0_offset=get_offset(cha0_count);ch1_offset=get_offset(cha1_count);ch2_offset=get_offset(cha2_count);ch3_offset=get_offset(cha3_count);printf("%fV ",ch1_volte);
*/int main(void)
{SystemInit(); GPIO_ADS_Init(); //ADS1118 引脚配置delay_init(); //延时函数 初始化 delay_ms(10);uart_init(115200); //串口初始化115200 LCD_Init(); //LCD初始化 delay_ms(10); LED_Init();delay_ms(10);tim2_config(); LCD_interface();POINT_COLOR=BLACK; TIM4_PWM_Init(99,0); showhz24str(20,50,BLACK,WHITE,"电压"); showhz24str(20,100,BLACK,WHITE,"电压"); showhz24str(20,150,BLACK,WHITE,"电压"); showhz24str(20,200,BLACK,WHITE,"电压"); LCD_ShowString(20+24*2,50,200,24,24,"L-X: ."); LCD_ShowString(20+24*2,100,200,24,24,"L-Y: ."); LCD_ShowString(20+24*2,150,200,24,24,"R-X: ."); LCD_ShowString(20+24*2,200,200,24,24,"R-Y: ."); LCD_ShowString(245,5,200,24,24,"POSE"); while(1){LCD_interface() ;ch0_volte=ch0_AD*0.1875/1000;ch1_volte=ch1_AD*0.1875/1000;ch2_volte=ch2_AD*0.1875/1000;ch3_volte=ch3_AD*0.1875/1000-1.04;//buchang ch0_AD_int=ch0_volte;ch1_AD_int=ch1_volte;ch2_AD_int=ch2_volte;ch3_AD_int=ch3_volte;LCD_ShowxNum(20+24*4,50,ch0_volte,1,24,0);LCD_ShowxNum(20+24*4,100,ch1_volte,1,24,0);LCD_ShowxNum(20+24*4,150,ch2_volte,1,24,0);LCD_ShowxNum(20+24*4,200,ch3_volte,1,24,0);LCD_ShowNum(20+24*5,50,(ch0_volte-ch0_AD_int)*1000,3,24);LCD_ShowNum(20+24*5,100,(ch1_volte-ch1_AD_int)*1000,3,24);LCD_ShowNum(20+24*5,150,(ch2_volte-ch2_AD_int)*1000,3,24);LCD_ShowNum(20+24*5,200,(ch3_volte-ch3_AD_int)*1000,3,24); pose_deal();}
}void TIM2_IRQHandler(void)
{static u8 k=0;if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){switch (k){case 1:{ch0_AD=get_AD(cha0_count);LCD_Fill(0,250, 320, 450,0xffff);break; }case 2:{ch1_AD=get_AD(cha1_count);LCD_Fill(0,250, 320, 450,0xffff);break; }case 3:{ch2_AD=get_AD(cha2_count);LCD_Fill(0,250, 320, 450,0xffff);break;} case 4:{ch3_AD=get_AD(cha3_count);LCD_Fill(0,250, 320, 450,0xffff);break; }case 5:{ pose_judge();break; }default: break;}k++;if(k>5) k=1;}TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update);//清除标志位
}
模数转换器ADS1118 四通道采集电压 stm32f103相关推荐
- 基于STM32F407使用ADC采集电压实验
核心板:STM32F407 实验目的:使用ADC采集电压值将其打印在串口助手上 目录 ADC简介 STM32F407 ADC通道对应的引脚 STM32F407中的数据寄存器 ADC 规则数据寄存器 ( ...
- 长程蓝牙温湿度及光照度传感器 , 带四通道开关及指示灯(集成太阳能微能量采集功能)
主要硬件: Nordic nRF52840 长程蓝牙 SoC , 外置棒式天线 TE HTU21DF 数字温湿度传感器 ROHM BH1750FVI 光照度传感器 ANALOG ADP5092 集成M ...
- 用ADC0809实现八通道采集
ADC0809完成八通道采集 1.ADC0809的概述 1.1芯片特点 1.2引脚介绍 1.3工作过程 2.使用原理图仿真 2.1实验仿真概述 2.2原理图 3.解析原理图 3.1晶振和复位模块 3. ...
- 14位125MSPS四通道ADC电路图讲解(通过后端数字求和增强SNR性能)_电工基础电路图讲解
电路图简介: 所示电路是14位.125 MSPS四通道ADC系统的简化图,该电路使用后端数字求和将信噪比(SNR)从单通道ADC的 74 dBFS提升到四通道ADC的78.5 dBFS.这项技术特别适 ...
- STM-32:ADC模数转换器—ADC单通道转换/ADC多通道转换
目录 一.ADC 模数转换器 1.1ADC简介 1.2 逐次逼近型ADC工作原理 1.3STM32中的ADC基本结构 1.4STM32中ADC的输入通道 1.5STM32中的ADC的四种转换模式 1. ...
- Pico四通道汽车诊断示波器柴油车套装(型号:PQ179)
Pico汽车诊断示波器把你的PC电脑变成一台功能强大的汽车诊断工具,快速查找现代车辆上日益增加的传感器,执行器和电路的故障. 12位高分辨率的PC示波器模块连接到你的电脑的USB接口上,并且能够采集达 ...
- Pico四通道汽车诊断示波器高级套装(型号:PQ180)
Pico汽车诊断示波器把你的PC电脑变成一台功能强大的汽车诊断工具,快速查找现代车辆上日益增加的传感器,执行器和电路的故障. 12位高分辨率的PC示波器模块连接到你的电脑的USB接口上,并且能够采集达 ...
- STM32F0xx_ADC采集电压配置详细过程
前言 关于ADC这一块的功能基本上也算是CortexM芯片的标配了.ST的每一块芯片都有这个功能,只是说因型号不同,通道数.位数等有所不同.STM8的芯片大多数都是10的,也就是说分辨率可达到:参考电 ...
- STM32F4 ADC+DMA单通道采集
背景:对锂电池电压进行采集,由于电池电压为12V,已经提前对12V进行分压,保证ADC采集电压的范围为0~3.3V.对电池电压的采集不用太过频繁,循环模式下的ADC+DMA对一直采集电压浪费资源.于是 ...
最新文章
- php stortime,文件存储 - Laravel 5.8 中文文档手册 - php中文网手册
- 【数字信号处理】线性常系数差分方程 ( “ 线性常系数差分方程 “ 与 “ 线性时不变系统 “ 关联 | 根据 “ 线性常系数差分方程 “ 与 “ 边界条件 “ 确定系统是否是 线性时不变系统方法 )
- 计算机组装大赛队名,比赛项目设计及评分标准-中国海员技能大比武.DOC
- PHP通过GET方法参数为数组请求
- java激光推送ios_关于ios极光推送server端注意的地方
- RandomizedLogisticRegression ImportError解决思路参考
- A - 顺序表应用1:多余元素删除之移位算法
- C++ String封装
- 有趣的算法:1元=1分
- android 上传图片给js,安卓中HTML5图片上传实例详解
- 手把手教你逆向分析 Android 程序
- siamfc代码解读_SiamFC算法改进思路
- 球体积公式推导(积分)
- gromacs 安装_安装gromacs的一些心得
- linux多线程_免费Linux下载工具,你还不知道?
- 中国进入被觉醒时代 - 长平
- 《C++大学教程》学习笔记(九)
- 用户行为分析的基本概览和常用名词解释
- ubuntu 修改默认用户名_Ubuntu更改用户名的方法
- 关于builder模式的使用