STM8 ADC转换模式-------单次模式

发布者:数据之翼最新更新时间:2021-10-18 来源: eefocus关键字:STM8  ADC  转换模式  单次模式 手机看文章 扫描二维码
随时随地手机看文章

STM8单片机ADC支持5种转换模式:单次模式,连续模式,带缓存的连续模式,单次扫描模式,连续扫描模式。


单次模式

在单次转换模式中,ADC仅在由ADC_CSR寄存器的CH[3:0]选定的通道上完成一次转换。该模式是在当CONT位为0时通过置位ADC_CR1寄存器的ADON位来启动的。


一旦转换完成,转换后的数据存储在ADC_DR寄存器中,EOC(转换结束)标志被置EOCIE 被置位将产生一个中断。


其中ADC结果的读取可以采用查询模式也可以采用中断模式。


查询模式代码如下:


#include "adc.h"

#include "main.h"

 

u16  DATAH = 0;                          //ADC转换值高8位

u16  DATAL = 0;                          //ADC转换值低8位

_Bool ADC_flag = 0;                     //ADC转换成功标志

 

//AD通道引脚初始化

void ADC_GPIO_Init( void )

{

    PD_DDR &= ~( 1 << 3 );              //PD3 设置为输入      电流

    PD_CR1 &= ~( 1 << 3 );              //PD3 设置为悬空输入

}

/*

ch 为ADC对应通道

通过置位ADC_CR1寄存器的ADN位来开启ADC。当第一次置位ADON时,ADC从低功耗模式唤醒。


为了启动转换必须第二次使用写指令来置位ADON位。


在转换结束时,ADC会保持在上电状态,用户只需要置位ADON位一次来启动下一次转换。


转换完成后,转换数据存储在ADC_DR寄存器中,EOC(转换结束)标志被置位,如果EOCIE被置位将产生一个中断

ADC输入通道初始化入口参数表示通道选择

*/

void ADC_CH_Init( u8 ch )

{

    char l = 0;

    ADC_CR1  = 0x00;                    //fADC = fMASTER/2, 8Mhz  单次转换,禁止转换

    ADC_CSR  = ch ;                     //控制状态寄存器 选择要 AD输入通道  如:PD2(AIN3)

    ADC_CR2  = 0x00;                    //默认左对齐 读数据时先读高在读低

    ADC_TDRL = ( 1 <<  ch  );           //禁止相应通道 施密特触发功能 1左移ch+1位

    ADC_CR1 |= 0x01;                    //使能ADC并开始转换

    //ADC_CSR |= 0x20;                    //EOCIE 使能转换结束中断  EOC中断使能

    for( l = 0; l < 100; l++ );         //延时,保证ADC模块的上电完成 至少7us

    ADC_CR1 = ADC_CR1 | 0x01;           //再次将CR1寄存器的最低位置1 使能ADC 并开始转换

}

 

//采集PD2电压值

u16 ReadVol_CH3( void )

{

    u16 voltage = 0;

    while( ( ADC_CSR & 0x80 ) == 0 );      //等待转换结束

    if( ADC_CSR & 0x80 )

    {

        DATAH = ADC_DRH;                    // 读出ADC结果的高8位

        DATAL = ADC_DRL;                    // 读出ADC结果的低8位

        voltage = ( DATAH << 2 ) + DATAL ; //得到十位精度的数据  0--1024

        ADC_CR1 = ADC_CR1 | 0x01;          //再次将CR1寄存器的最低位置1  启动下一次转换

        ADC_CSR &= 0x7F;

    };

    return voltage;

}

中断模式代码如下:


#include "adc.h"

#include "main.h"

 

u16  DATAH = 0;                          //ADC转换值高8位

u16  DATAL = 0;                          //ADC转换值低8位

_Bool ADC_flag = 0;                     //ADC转换成功标志

 

//AD通道引脚初始化

void ADC_GPIO_Init( void )

{

    PD_DDR &= ~( 1 << 3 );              //PD3 设置为输入      电流

    PD_CR1 &= ~( 1 << 3 );              //PD3 设置为悬空输入

}

/*

ch 为ADC对应通道

通过置位ADC_CR1寄存器的ADON位来开启ADC。当第一次置位ADON时,ADC从低功耗模式唤醒。

为了启动转换必须第二次使用写指令来置位ADON位。

在转换结束时,ADC会保持在上电状态,用户只需要置位ADON位一次来启动下一次转换。

转换完成后,转换数据存储在ADC_DR寄存器中,EOC(转换结束)标志被置位,如果EOCIE被置位将产生一个中断

ADC输入通道初始化入口参数表示通道选择

*/

void ADC_CH_Init( u8 ch )

{

    char l = 0;

    ADC_CR1  = 0x00;                    //fADC = fMASTER/2, 8Mhz  单次转换,禁止转换

    ADC_CSR  = ch ;                     //控制状态寄存器 选择要 AD输入通道  如:PD2(AIN3)

    ADC_CR2  = 0x00;                    //默认左对齐 读数据时先读高在读低

    ADC_TDRL = ( 1 <<  ch  );           //禁止相应通道 施密特触发功能 1左移ch+1位

    ADC_CR1 |= 0x01;                    //使能ADC并开始转换

    

    ADC_CSR |= 0x20;                    //EOCIE 使能转换结束中断  EOC中断使能

    

    for( l = 0; l < 100; l++ );         //延时,保证ADC模块的上电完成 至少7us

    ADC_CR1 = ADC_CR1 | 0x01;           //再次将CR1寄存器的最低位置1 使能ADC 并开始转换

}

//采集PD3电压值

u16 ReadVol_CH3( void )

{

   static  u16 voltage = 0;

    if( ADC_flag )

    {

        ADC_flag = 0;

        voltage = ( DATAH << 2 ) + DATAL ; //得到十位精度的数据  0--1024

        ADC_CR1 = ADC_CR1 | 0x01;          //再次将CR1寄存器的最低位置1  启动下一次转换

    };

    return voltage;

}

//AD中断服务函数 中断号22

#pragma vector = 24                     // IAR中的中断号,要在STVD中的中断号上加2

__interrupt void ADC_Handle( void )

{

    ADC_CSR &= ~0x80;                   // 转换结束标志位清零  EOC

    //默认左对齐 读数据时先读高高8位 再读低8位

    DATAH = ADC_DRH;                    // 读出ADC结果的高8位

    DATAL = ADC_DRL;                    // 读出ADC结果的低8位

    ADC_flag = 1;                       // ADC中断标志 置1

}

关键字:STM8  ADC  转换模式  单次模式 引用地址:STM8 ADC转换模式-------单次模式

上一篇:STM8 ADC转换模式-------连续模式
下一篇:STM8学习笔记---ADC平均值采样和有效值采样算法分析

推荐阅读最新更新时间:2024-11-07 10:13

低功耗24位模数转换器AD7787
1 概述 AD7787是ADI公司推出的适用于低频测量的低功耗、低噪声、双通道、24位Σ-Δ模数转换器。它利用片内时钟电路工作,因而无需用户提供时钟源。AD7787的数据输出速率可由软件设置,这一特性使其转换速率可在9.5Hz~120Hz之间变化。该芯片采用10脚MSOP封装,非常适合用需要高分辨率、低功耗的便携式仪器、温度测量、传感器测量、称重仪等。 AD7787的主要特点如下: ●可在2.5V~5.25V电压范围内工作。正常模式下的最大工作电流为75μA,掉电模式下为1μA; ●9.5Hz转换速率下的RMS噪声为1.1μV; ●22位有效分辨率时的峰峰值分辨率为19.5位; ●内部非线性度:3.5ppm; ●
[模拟电子]
W806-ADC-PWM-TIM尝鲜
本文使用环境: 电脑:windows10 主控:W806(240MHZ) 编译环境:平头哥的CDK 注意:本文默认已经搭建好平台。 前言 写这篇问章的目的是记录一下自己的ADC使用路程,前期这个ADC我是一直没有看明白,后面才搞的是懂非懂。 当然本文肯定不止使用ADC,那样显得没有技术水平,SO,为了提升技术难度,在adc的基础上加了一点点东西: 使用PB0产生100KHZ动态变化的的PWM,然后由PA1的ADC获取到,并转化成实际的电压。B0产生的PWM通过不断的改变比较值可以输出不同的电压,所以就能够满足ADC的采集要求,这里需要注意的是,不能直接测量电源电压,要不然要烧。。。。。 完整程序下载: https://down
[单片机]
W806-<font color='red'>ADC</font>-PWM-TIM尝鲜
MSP430教程:MSP430单片机ADC12模块
MSP430单片机的ADC12模块是一个12位精度的A/D转换模块,他具有高速度,通用性等个性。大局部都内置了ADC模块.而有些不带ADC模块的片子,也可穿越利用内置的模仿比拟器来告终AD的转换。在系列产品中,我们能够穿越以下列表来容易地认识他们的ADC功能告终。 系列型号ADC功能告终转换精度 MSP430X1XX2比拟器告终10位 MSP430F13XADC模块12位 MSP430F14XADC模块12位 MSP430F43XADC模块12位 MSP430F44XADC模块12位 MSP430X32XADC模块14位 从以下ADC12构造图中能够看出,ADC12模块中是由以下局部构成:输入的16
[单片机]
双通道12位ADC SC1232可用于光纤测试仪
光纤测试仪是测量光纤的损耗、色散等特性。光纤信号一般要先通过一级的光电转换,将光信号转化为电流信号,电流信号通过跨导放大器转化为电压信号,部分光纤测试系统中,电压信号带宽一般在10M~30M之间,在此方案设计中,国芯思辰某工程师需要一颗12位以上的ADC,最终选择了国产芯炽双通道12位SC1232-65应用在了光纤测试仪。 芯炽SC1232是一款单芯片、双通道、12位ADC,支持20MSPS/40MSPS/65MSPS/80MSPS,采用的1.8V电源供电,内置了高性能采样保持电路和片内基准电压源。该产品采用多级差分流水线架构,内置输出纠错逻辑,在80MSPS数据速率时可提供14位的高精度,并保证在整个工作温度范围内无失码。
[测试测量]
双通道12位<font color='red'>ADC</font> SC1232可用于光纤测试仪
lpc1114 adc硬件扫描_单通道_多通道
硬件扫描模式与软件控制模式的主要区别是:软件控制模式需要有触发条件,AD通道才转换引脚上的电压值,触发一次转换一次;硬件扫描模式无需触发条件,只要开启硬件扫描模式,转换就会一直循环进行。 软件控制模式只能开启一个通道,硬件扫描模式可以开启多个通道。 1. 单通道 新建一个工程,结构如下图所示: 所有的文件都用《 cortex m0 lpc1114 adc start位控制转换 》中的。 在adc.c文件中,修改ADC_Init()函数中的CR寄存器配置语句,如下所示: LPC_ADC- CR = (1 Channel)| /* bit7:bit0 选择通道Channel*/ (24 8)| /* bi
[单片机]
lpc1114 <font color='red'>adc</font>硬件扫描_单通道_多通道
PIC单片机adc转换并显示
#INCLUDE P16F877.inc W_TEMP EQU 20H ; 实际上20H、A0H、120H和1A0H STATUS_TEMP EQU 21H ;在体0中建立保护单元 PCLATH_TEMP EQU 22H ;在体0中建立保护单元 ORG 000H GOTO A1 ORG 004H;定时中断入口地址 GOTO ZD01; ORG 0CH ;******************************************** ; 数据表 ;******************************************** Q1 ADDWF PCL,1
[单片机]
ADI—AD7380系列SAR ADC的片内过采样解析
简介 本应用笔记讨论逐次逼近寄存器(SAR)型模数转换器(ADC)中的片内过采样。常见过采样技术有两种:正常平均和滚动平均。这些技术是在AD7380/AD7381及其高吞吐速率SAR ADC系列中执行的,因此平均转换数据可以直接获得,数字控制器的负担得以减轻,这在数据采集系统中是一个优势。 在精密数据采集系统中,信噪比(SNR)和有效位数(ENOB)越高,系统在有宽带噪声的情况下测量信号的性能就越好。 噪声会降低系统性能。降低噪声的方法包括:用分辨率更高的ADC(例如Σ-Δ ADC或SAR ADC)替换该系统,或者进行过采样并使用数字滤波技术。 过采样技术在Σ-Δ ADC架构设计中有很长的历史。Σ-Δ ADC由Σ
[模拟电子]
ADI—AD7380系列SAR <font color='red'>ADC</font>的片内过采样解析
构建完整工业ADC接口的微控制器和调制器
  设计师们通常使用0至20-mA和0到10V的隔离输入作为工业应用控制的信号。由隔离电源、AnalogDevicesAD7400调制器内置隔离及TexasInstrumentsMSP430微控制器共同为工业设计师要求的一种完整、隔离且牢靠的模拟信号接口创建一种设计。其中精确的信号调节电路生成AD7400所需的较小的差分电压(图1),该电路可生成所需的200-mV差分电压。为清晰起见,图中略去了过压二极管和保护电路。         0至20-mA电流通过一个适当值的电阻R2转换成电压,进入一个精密的运算放大器中。在放大器的正向输入端维持恒定的电压,从而使连接到负向输入的信号电平得到正向偏移。0至10V的信号,如来自于电位器
[工业控制]

推荐帖子

AC101网络接口电路图
AC101网络接口电路图AC101网络接口电路图
klanlan 工控电子
精确测量nA级别微弱电流的开源方案
最近遇到如何精确测量nA级电流的问题,一般的手持万用表是难以达到这个要求的,且非常昂贵。那么有没有一种低成本的方法呢?答案是肯定的,采用电流放大+4位半万用表就可以实现,有没有大神组个团做几套的均摊下成本。下面是一个开源的微弱电流放大方案μCurrentGOLD:AProfessionalPrecisionCurrentAdapterforMultimeters.TheμCurrentturnsyourmultimeter(oroscillosc
dql2016 stm32/stm8
大家来啊
本版希望游客多多支持学生,老师,专业人士多来顶啊大家来啊一顶一顶Re:大家来啊看到斑竹的呼唤~也许这是斑竹苦心经营的一大败笔~怎么才能让现实有所改观?7月中旬就开始追问的斑竹,现在想到什么好主意了没有?还是由有所希望已经步入无可奈何的现在呢?~Re:大家来啊这么好的论坛真是不多见.永远支持版主,支持论坛.版主大学是学什么专业的啊?真不知道还要学多长时间才能达到版主的水平哦Re:大家来啊会常来这里的,这里很亲切!Re:大家来啊
fighting 模拟电子
学习PCB制作流程
本帖最后由jameswangsynnex于2015-3-320:01编辑PCB加工工PCB(印刷电路板)的原料是玻璃纤维,这种材料我们在日常生活中出处可见,比如防火布、防火毡的核心就是玻璃纤维,玻璃纤维很容易和树脂相结合,我们把结构紧密、强度高的玻纤布浸入树脂中,硬化就得到了隔热绝缘、不易弯曲的PCB基板了--如果把PCB板折断,边缘是发白分层,足以证明材质为树脂玻纤。光是绝缘板我们不可能传递电信号,于是需要在表面覆铜。所以我们把PCB板也称之为覆铜基板。在工厂里,常
gqq890611 移动便携
玻璃盖板知识大全
玻璃盖板知识大全,大家看看用的上不!玻璃盖板知识大全
Jason.D 传感器
请问这种LLC 谐振电路问题
这种半桥LLC谐振电路的变压器是怎么进行设计的呢?除了输入输出电压和功率参数,还要考虑哪些因素请问这种LLC谐振电路问题
kal9623287 电源技术
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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