找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 914|回复: 3
收起左侧

PCF8591写DA问题,请大佬指点下单片机程序

[复制链接]
ID:998389 发表于 2023-4-25 15:10 | 显示全部楼层 |阅读模式
主程序如下:
void        main()
{
        long date;
        initialize();//液晶初始化        
        while(1)
        {        
                date = Get_Voltage();      // 读取 A/D 转换结果
               
                write_byte(date);//启动DA,将读取结果重新赋给DA输出
               
                date=date*450/255; // 将采样结果转换为电压值
        
                show(1,1,0x30+date/100);
                show(1,2,'.');
                show(1,3,0x30+date%100/10);
                show(1,4,0x30+date%100%10);
                show(1,5,'V');  
        }
}

实现以下功能:(已经实现,就是存在小问题)
1.用AD模式读出电位器当前电压,显示在LCD1206上.(没有问题)
2.然后把读到的这个电压写进DA,用DA输出控制LED亮度。(存在小问题)

当前现象:
LED会一直微微闪烁,虽然闪的不明显但是可以看出来。

分析原因:(纯纯根据自己理解分析,如果有错误,还望指出)
因为写DA函数在大循环里,也就是说会无限循环写入数据的,当在写入数据这个过程时,DA输出会不稳定,数据写完后,DA输出变稳定,一直循环这个过程,所以LED亮度会看见微微闪烁。但是写DA函数还必须在while循环里面。

目前想到解决办法:
当检测到电位器电压不变的时候,停止写DA,当检测到电位器电压重新开始变化的时候启动写DA。

想了好久没想出来程序怎么实现,还请高手指点下。




回复

使用道具 举报

ID:998389 发表于 2023-4-25 15:35 | 显示全部楼层
当前程序DA输出波形

当前程序DA输出波形

当前程序DA输出波形

回复

使用道具 举报

ID:123289 发表于 2023-4-26 16:53 | 显示全部楼层
方法一:
加个迟滞回线。
设计定一个Δ,
开始:
1、记录一个采样值X并送去显示。
2、下个:当新的采样值在X±Δ之内,不改显示。
3、当新的采样值在X±Δ之外,回到1、。
方法2:去头去尾求平均。
采样2M+N次(如M=4,N=8),去除最大的M次,去除最小的M次,余下的N次求平均后,再送出。
方法3,压仓。
例:那个仓位,可存16个采样值。每次采样后,去掉最前面的第16个值,存入当前值,再求16个值的平均值,取用。
方法多多,但有一点,显示与硬件有关,硬件上在DA未转换稳定前不应该有输出变化,即应该有OE控制。
回复

使用道具 举报

ID:998389 发表于 2023-4-28 15:59 | 显示全部楼层
yzwzfyz 发表于 2023-4-26 16:53
方法一:
加个迟滞回线。
设计定一个Δ,

感谢指明方向,我再去试试!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表