历史上的今天
返回首页

历史上的今天

今天是:2024年09月16日(星期一)

2021年09月16日 | STM8单片机ADC模拟看门狗功能实现

2021-09-16 来源:eefocus

  看门狗的功能大家都知道,而这个模拟看门狗又是什么东西呢?


  简单的说就是这个模拟看门狗可以实时监控ADC采样的数据,当采样的数据值小于设置的最小值或者大于设置的最大值时,单片机就会触发ADC中断。这个在温度监控中非常实用,比如现在要监控设备的温度值,当温度值不在设置范围内的时候,就会自动触发中断,而不需要程序一直去采集ADC通道的值,然后使用软件来判断当前的温度值是否超出正常范围。


  官方介绍如下:

image.png?imageView2/2/w/550

  下面直接通过代码来演示一下这个模拟看门狗的功能:


#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 设置为悬空输入

}

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_HTRH = ( u8 )( 800 >> ( u8 )2 );    //存放10位数据的高8位

    ADC_HTRL = ( u8 )800;                   //存放10位数据的低8位

    //设置下限门槛值

    ADC_LTRH = ( u8 )( 300 >> ( u8 )2 );    //存放10位数据的高8位

    ADC_LTRL = ( u8 )300;                   //存放10位数据的低8位

    ADC_CSR |= 0x10;                       // 使能看门狗中断


    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;

}


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

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

__interrupt void ADC_Handle( void )

{

    ADC_CSR &= ~0x40;

    //处理温度异常事件

}


ADC使用单次触发模式,然后设置ADC_HTR寄存器为上限报警值,这里设置为800,ADC_LTRL设置下限报警值,这里设置为300,也就是说当ADC的采样值大于800或者小于300的时候,ADC就会产生中断,然后将ADC_CSR寄存器的第4位,也就是AWDIE位设置为1,开启模拟看门狗中断。接下来在主函数中循环读取ADC采样值。


主程序代码如下:


#include "iostm8s103f3.h"

#include "led.h"

#include "adc.h"


void SysClkInit( void )

{

    CLK_SWR = 0xe1;       //HSI为主时钟源  16MHz CPU时钟频率

    CLK_CKDIVR = 0x00;    //CPU时钟0分频,系统时钟0分频

}


u16 val1 = 0;

void main( void )

{

    SysClkInit();

    __asm( "sim" );                       //禁止中断

    LED_GPIO_Init();

    ADC_CH_Init( 3 );

    __asm( "rim" );                       //开启中断

    while( 1 )

    {

        LED = !LED;                      //采样

        val1 = ReadVol_CH3();

    }

}


val1为采样的电压值,全速运行程序,在观察窗口中观察采样值:

image.png?imageView2/2/w/550

当采样电压值在300到800之内时,ADC中断函数不会触发。

image.png?imageView2/2/w/550

当电压值低于300时,ADC中断触发,ADC_CSR寄存器的第6位置位,说明产生了一次模拟看门狗中断。

image.png?imageView2/2/w/550

当采样值大于800时,同样可以产生中断

产生中断后,需要在中断中手动清除AWD标志位。

image.png?imageView2/2/w/550

在这里要特别注意一个问题,就是在设置模拟看门狗的上下限值时,高位寄存器存储的是10位值的高8位,低位寄存器存储的是10位值的低2位。

image.png?imageView2/2/w/550

这里要参考英文手册中的寄存器设置,中文参考手册中这4个寄存器介绍是错误的。如果按照中文手册中的方法设置,模拟看门狗就会永远在中断中出不来。一定要注意。

image.png?imageView2/2/w/550
image.png?imageView2/2/w/550

中文手册中这几个寄存器介绍是错误的

image.png?imageView2/2/w/550image.png?imageView2/2/w/550

image.png?imageView2/2/w/550image.png?imageView2/2/w/550

这里的中文参考手册都是在ST官网上下载的,不知道是官方人员疏忽些写错了,还是翻译的时候搞错了。在使用模拟看门狗时一定要注意这个四个寄存器的设置。

推荐阅读

史海拾趣

广东奥科公司的发展小趣事

随着企业规模的扩大和影响力的提升,广东奥科公司开始积极承担社会责任,推动可持续发展。公司注重环保和节能技术的应用,致力于生产环保型电子产品,减少生产过程中的能源消耗和环境污染。同时,广东奥科公司还积极参与社会公益事业,为社会的发展贡献自己的力量。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实的基础。

这些故事展示了广东奥科公司在电子行业中的发展历程和取得的成就,也体现了公司不断创新、追求卓越的精神。未来,广东奥科公司将继续秉持这一精神,为电子行业的发展贡献更多的力量。

APX Technologies公司的发展小趣事

APX Technologies在成立初期就专注于研发高性能的半导体芯片。经过数年的努力,公司成功开发出一种具有革命性的低功耗芯片技术,这一技术极大地提高了电子设备的能效比。随着这一技术的广泛应用,APX Technologies迅速在电子行业中崭露头角,赢得了众多客户的青睐。

EFC [Electronic Film Capacitors, Inc.]公司的发展小趣事

在当今社会,绿色环保已经成为一种趋势。EFC公司积极响应这一号召,将绿色环保理念融入到产品设计和生产过程中。他们采用环保材料和技术,减少废弃物和污染物的排放。同时,EFC还积极推广绿色能源和节能技术,帮助客户降低能源消耗和碳排放。这种对环保的关注和贡献让EFC赢得了社会各界的赞誉。

Cooper Industries公司的发展小趣事

为了进一步拓展全球业务,Cooper Industries在2007年收购了韩国防爆电力设备制造商Hyundai Explosion-Proof Electric Co.。这一收购使公司能够更好地进入韩国市场,并充分利用韩国在造船业以及国内能源与石化基础设施方面的优势。通过这次收购,Cooper Industries不仅提升了在韩国市场的竞争力,也为其在全球防爆电力设备市场的地位打下了坚实基础。这一举措再次展现了Cooper Industries在全球化战略中的远见卓识和果断行动。

这五个故事只是Cooper Industries发展历程中的一部分,但它们足以展现出公司在电子行业中的卓越地位和不断创新的精神。通过全球扩张、收购整合、技术创新和市场拓展等方式,Cooper Industries不断壮大自身实力,为行业的发展做出了积极贡献。

GaN Systems公司的发展小趣事

GAIA盖亚电源深知质量是企业生存和发展的基石,因此一直将质量管理放在首位。公司通过了ISO9001 V2008等国际质量管理体系认证,并建立了完善的质量管理体系。在生产过程中,GAIA盖亚电源采用高标准流程和自动化制造能力,确保每一个产品都符合严格的质量标准。此外,公司还定期对产品进行严格的测试和验证,以确保其在实际应用中的可靠性和稳定性。

Digilent公司的发展小趣事

DIALIGHT在工业LED照明领域取得了显著成就。公司专注于为工业应用设计集成系统,以减少安装和维护的复杂性,并确保产品在恶劣条件下持续稳定运行。此外,DIALIGHT的LED产品旨在提供优越的运行性能、可靠性和耐久性,帮助客户降低能源成本、维护成本和碳足迹,同时提高设施的安全性和生产力。

问答坊 | AI 解惑

怎样为arm写c代码

简单的ARM C语言代码说明…

查看全部问答>

Ep2c8 fpga的原理图,pcb,gerber图。

完整的工程文件,包括pcb图原理图gerber图,不同时期的版本都有。 花了半年功夫做的。 06年的作品,当时,房价是现在的1/4 没最后做pcb,大家参考吧。 [ 本帖最后由 wangkj 于 2009-12-24 17:04 编辑 ]…

查看全部问答>

求个 .NET Compact Framework 2.0 for CE5.0 的下载地址

求个 .NET Compact Framework 2.0 for CE5.0 的下载地址就是能放到 CE 系统里。然后能安装的那个。我只下到WM5版的。。下不到CE版的 …

查看全部问答>

51单片机的定时器0和串口同时使用问题,急!

这是我的程序:当定时器打开后就接收不到数据了,屏蔽掉定时器就可以了!请大侠指教原因所在! /*************************************************************/ /*本设计采用STC89C52单片机           &nb ...…

查看全部问答>

求助一个闹铃关闭的问题

最近老大要我用 ce6.0开发一个程序 要求实现 晃下手机就能关闭闹铃提示,我以前做游戏开发的,应用这方面做起来真的是好无头绪。 我想了 1中设计模式来实现: 就是做一个程序注入内存中时刻监视闹铃是否响 如果响了  然后关闭。不知道 ...…

查看全部问答>

IAR编译结果,提示信息中code和data大小信息

12 446 bytes of readonly  code memory          58 bytes of readonly  data memory   11 045 bytes of readwrite data memory 12 446个字节代码? 58和11 045是哪个 ...…

查看全部问答>

想实现USB数据通过网线传输,带宽想做到480M,行吗?

说白了就是想搞个USB延长设备  想通网线读取远端USB接口的硬盘的数据,希望做过的或者准备搞的或者有兴趣的朋友进来讨论讨论 版主有没什么想法啊?…

查看全部问答>

STM32f103RB老是死机,帮帮忙哦!

最近做了2个大功率充电设备(86V100A),用了STM32f103RB做人机接口,可以选择电压、电流、时间等。 考虑到不熟悉这个片子,直接买了淘宝上一位朋友的ARM_PLC板,散件130元。做好的180元。他是上海的,考虑到如果有问题能请教。怕自己焊好了 ...…

查看全部问答>

msp430 launchpad哪里有卖的?

 想买个msp430 launchpad,不知除了官网还有哪里有卖,申请等不了回音,30块很有吸引力!啊啊啊啊啊啊啊啊啊啊啊!淘宝那些坑爹的整套要150!  …

查看全部问答>