打印
[STM8]

STM8L101G3U6A的COMP使用问题

[复制链接]
4119|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
highdone|  楼主 | 2012-8-8 22:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近用STM8L101做低功耗产品,用到电压检测功能,打算用COMP2比较器做个电压比较,我的使用方法如下:
      COMP_REF:接1.2V电压,COMP2_CH2(PB3)是待比较的电压输入,电压范围为0.7到1.5V。
我准备只用比较功能,不用什么中断,只查询COMP2_OUT的值来确定是否大于参考电压,但最近做测试发现不能查询到比较的结果,不管我输入电压大于或小于COMP_REF,COMP2_OUT的值始终为0(手册上说COMP2_OUT是比较器输出的结果),不过CEF2的值有变化,在大于COMP_REF时候,CEF2为1;小于COMP_REF时,CEF2为0,不过这个CEF2的值不稳定,经常为0,不知道怎么使用这个比较器做简单电压比较,还请知道的给个提示,下面是我的代码:
void adcStart(void)
{

/* AD converter initialization */

/* Comparator configuration */

delay_soft_us(250);

COMP_DeInit();

/*Enable Comparator interface */

COMP_Cmd(ENABLE);
               delay_soft_us(250);


COMP->CR |= 0x10;    // pol bit

COMP->CR |= 0x08;    // COMP_REF Bit

COMP->CCS |= 0x20;   // channel select

COMP->CSR |= 0x40;    // CLEAR
                COMP->CR  |= 0x04;

}
static void adcStop(void)
{

/*Disable Comparator interface */

COMP->CR &= ~0x01;

COMP->CR &= ~0x04;


}

BOOL check_power_low_volume(void)
{

u16 timeCount =3;

sysVccLowAlarmFlag = FALSE;

adcStart();



while(--timeCount)

{

delay_soft_us(70);

}

adcStop();

if(!(COMP->CSR & 0x40))
       {
           return TRUE;       // 电压偏低
       }else{
           return FALSE;      // 电压正常
       }

}
沙发
highdone|  楼主 | 2012-8-8 23:00 | 只看该作者
自己先顶个先

使用特权

评论回复
板凳
shyinyang| | 2012-8-9 09:40 | 只看该作者
COMP_REF:接1.2V电压,COMP2_CH2(PB3)是待比较的电压输入,电压范围为0.7到1.5V。

使用特权

评论回复
地板
IJK| | 2012-8-9 13:50 | 只看该作者
LS说得对,STM8L101的比较器 比较怪,输入不是轨到轨的。

使用特权

评论回复
5
highdone|  楼主 | 2012-8-9 18:10 | 只看该作者
这个COMP感觉没什么用,看过有个用COMP作为ADC的说明文档,但没找到作为普通比较器的信息,不知道怎么配置。还是希望知道怎么用的出来发发贴吧,当初也是觉得COMP可以作为普通的比较器,所以选择这个芯片,不过相当纠结,一直没弄好,不稳定。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝