搜索
bottom↓
回复: 16

采样得到的数据放在LCD上显示时需要做何处理?特别是方波这样的存在极高频分量的波。

[复制链接]

出0入0汤圆

发表于 2009-11-25 21:19:12 | 显示全部楼层 |阅读模式
开学时看了魏学长的示波器,还有网站开源的stm8那个,然后自己决定用stm32做一个,现在的方案是stm32内部ad+320×240液晶,以后再换到fpga上用高速ad。几个月前从51学起到现在终于能把采集到波形显示到液晶屏上了。但是遇到了几个显示策略上的问题不太清楚:
(1)我做的示波器在观测方波的时候,发生跳变的边沿是显示不出来的,因为我是直接把AD过来的数据放到屏幕的相应坐标上,而AD在这个跳变沿上显然只能采集到一两个点嘛,所以就看不到那条竖线。但我又想不到其它什么办法,印象中模拟示波器看方波时那个跳变沿似乎也不太清楚?刚才看到魏同学的第二版,看起来不像是一个点一个点地写上去的,所以我只好请教各位如何解决这个问题呢?
(2)还有,我的这个逐点写到屏幕上的方法,结果是波形的线宽就是1,不好看,真实的DSO显然不会这样做,但那是有强大的FPGA处理数据的,想请问一下stm32上怎么处理这个问题呢?我想了个多写几屏的波形然后再擦除的方法,但又觉得这样一来波形刷新率就上不去了,而且在测量低频信号时这个方法就完全行不通了。
谢谢各位了。

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入21汤圆

发表于 2009-11-27 16:55:09 | 显示全部楼层
3.将采样数据转换成显示数据
LCD显示屏为320×240点阵的图形显示模块,内置RA8803 控制器。模块不仅可以显示单一的文本、图形,而且可以实现双图层的(“或”、“异或”、“同或”、“与”四种逻辑关系)合成显示。在本示波器中显示格线与波形是在不同的层上显示,显示关系为“或”,画方格线的程序见原程序,比较简单就不多说了,着重解释一下如何将采样数据转换成显示数据。
显示屏的地址结构见图3,由图可知对显示数据的操作最小单位为字节,因为Mega32的内存为2K字节,显示波形的区域为240*240,显示一屏波形所需处理的数据为7.2K,故Mega32不可能同时处理一屏波形的全部数据,所以将一屏波形按字节分为30列,每次处理一列,处理完后直接显示,然后处理下一列。将AD转换所得的数据作为给LCD显示器写数据的列地址,因为一列数据位240字节,所以定义一个容量为240字节的数组lcd_buffer[240],lcd_buffer[]在初始时数据全为00H,因为每次对数据的操作至少是一个字节,而每次处理数据处理的是所显示一个点,所以对每列数据处理8次,定义一个变量m,在一列数据处理之前将其赋值为m=10000000B,处理该列第1个点时让该点垂直地址所对应的数组中的数据(00H)与m相或并将结果存入数组,再将变量m右移一位,即m=01000000B。让第2点垂直地址所对应的数组中的数据与m相或并将结果存入数组,再将变量m右移一位,即m=00100000B ……,这样直到一列数据中的8个点全处理完,重新给m赋值为m=10000000B,然后送显示。为了有较好显示效果,将显示相邻的点用线连接起来,在处理第一个点时预读出第二个点的垂直坐标,与第一个点的垂直坐标进行比较,如果比第一个点的垂直坐标小则从第一个点向第二个点拉线,如果比第一个点的垂直坐标大则从第二个点向第一个点拉线。具体程序如下所示:
for(j=0;j<30;j++)         //将一屏数据分为30列
  {
    m=0b10000000;        //
    for(i=j*8;i<(j+1)*8;i++)  //处理每列中的8个点
     {
      k=add; // 读出采样数据作为垂直坐标
      lcd_buffer[k]=(lcd_buffer[k]|m); //让该坐标对应数据与m相或并原位保存
      if(add[i+q]<add[i+q+1])          //判断拉线方向
        {
         for(k=add[i+q];k<add[i+q+1];k++)
{
lcd_buffer[k]=(lcd_buffer[k]|m);
}
        }
      else
        {
         for(k=add[i+q];k>add[i+q+1];k--)
{
lcd_buffer[k]=(lcd_buffer[k]|m);
}
        }
         m>>=1;       //将m的值右移一位
       }
    for(h=0;h<240;h++)    //送显示
     {
        SdCmd(0x60);SdCmd(j);         //设置显示X坐标
        SdCmd(0x70);SdCmd(h);         //设置显示Y坐标
        SdData(lcd_buffer[h]);        //传送显示数据
        lcd_buffer[h]=0;              //将已送出数据的存储器单元清零
      }
}
头像被屏蔽

出0入0汤圆

发表于 2010-5-13 21:14:46 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2010-5-15 11:47:28 | 显示全部楼层
Mark

出0入0汤圆

发表于 2010-5-17 22:58:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-19 23:27:19 | 显示全部楼层
好好学习,好好理解。

出0入0汤圆

发表于 2010-8-27 20:39:32 | 显示全部楼层
mark,学习了!

出0入0汤圆

发表于 2010-8-28 03:31:00 | 显示全部楼层
mark,学习了

出0入0汤圆

发表于 2011-4-28 17:11:21 | 显示全部楼层
顶顶!

出0入0汤圆

发表于 2011-4-28 17:35:45 | 显示全部楼层
任意相邻两点都用画线函数连起来。

出0入0汤圆

发表于 2011-5-23 13:16:12 | 显示全部楼层
请问函数中的q是什么作用?

出0入0汤圆

发表于 2011-8-4 10:07:45 | 显示全部楼层
mark,好东西,待消化

出0入0汤圆

发表于 2011-10-8 10:15:16 | 显示全部楼层
好东西,微懂,谢谢

出0入0汤圆

发表于 2011-10-22 14:49:12 | 显示全部楼层
mark,好东西,待消化

出0入0汤圆

发表于 2011-10-29 23:04:15 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 00:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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