打印

DIY一台史上最“烂”的示波器!(连载中……)

[复制链接]
64848|280
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
程序匠人|  楼主 | 2009-12-24 15:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DIY一台史上最“烂”的示波器!
题记:既然不能做到最好,那么就让我们设法做到最烂吧,呵呵。

前言:

上次看到网友“不亦心”转来的贴子,说是有牛人用单片机+VGA显示器做了个俄罗斯方块游戏。匠人看后对VGA也有了点兴趣。于是和同事商量了一下,决定采用一颗成本只有2元多的EMC单片机,不借助外围复杂电路,直接驱动VGA显示器,去打造一款“史上”(同时也是“世上”)最“烂”的示波器。

项目还在DIY过程中,今天先上几张图片给大家看看,回头咱们慢慢展开这个故事。

图片1:输入正弦波时显示如下:

图片2:输入三角波时显示如下:

图片3:输入方波时显示如下:

-------------------------------------------------------
20010年01月01日补充:

传一个视频给大家看看:


这是又一个视频:


说明:这个视频中,演示了示波效果。以及切换采样速率和暂停功能。
大家可以看到,还做了几个汉字哦。


-------------------------------------------------------
2010年01月10日日补充:
*老x用51单片机做的VGA示波器——将匠人彻底打趴下
评分
参与人数 1威望 +10 收起 理由
谈的元 + 10

相关帖子

来自 2楼
xwj| | 2010-1-3 21:25 | 只看该作者
匠人 我有个想法 这个示波器 应该把屏幕旋转90度来用 即行扫方向表示幅值  场方向表示t
那么每一行只需要输出一个点就可以也不需要中间产生多少缓存了
即使显示双路信号 也仅两个点而已
因此这个示波器也不怎么“烂 ...
牛牛特工 发表于 2010-1-3 13:50


呵呵,老x也是这么想的。
对于资源极少的低端单片机,只能这么干:)


另外提醒下你:
电脑显示器只能识别时序、行场频正确的那几种信号,而不是你想怎么扫描就能扫描出来的。
所以VGA显示器你按320*240*xxHz去发信号的话绝大多数的显示器都会认不出信号的。

所以只能按规定的分辨率和频率去输出,一般建议按最低640*480*60Hz来显示输出。
而这时实际上是一场扫描525行,一行是800个点,行频31.5kHz,点频是25.2MHz。
很明显,单片机输出不了这么快,那就把点拉宽,每次电平变化对应几个点的宽度即可,然后对应把相邻的行多复制几遍,这样显示出来的点就还是方的了。
但不管怎样,都必须得保证行频大致正确,而且确保一帧是扫描525行,场同步是2行。
——也就是说:一行内的数据可以变粗,但一行的总宽度(对应行频)、场频以及同步头的格式不能乱来。
(当然,行频、场频也允许有一定的误差,显示器内的锁相环照样会同步、调整粗正确的显示宽度的,但也不能差得太离谱了哦:))

使用特权

评论回复
来自 3楼
牛牛特工| | 2010-1-8 03:09 | 只看该作者
本帖最后由 牛牛特工 于 2010-1-8 09:22 编辑

今天点亮了屏 测试了静态输出 然后想换成输出点阵 结果屏幕过段时间就开始闪烁 时间参数反复排查了N多遍未果  只好先凑合着做了点阵显示 从屏显的直线看起来行场应该没什么错误了 但不知为何仍然闪烁 ,
每32行插入一行黑色数据用于计算下行要显示的内容  

程序 VGAplayer.rar (1.55 KB)

使用特权

评论回复
评分
参与人数 1威望 +30 收起 理由
程序匠人 + 30
来自 4楼
王紫豪| | 2010-1-9 22:49 | 只看该作者
匠人牛b啊,哈哈。我也发个我写的vga的教程,相比而下我的就贵很多。。。跟匠人差距啊


VGA驱动与实现.pdf

865.34 KB

使用特权

评论回复
5
宇容创行| | 2009-12-24 15:25 | 只看该作者
mark

使用特权

评论回复
6
cubasa| | 2009-12-24 15:42 | 只看该作者
板凳搬好,匠人开讲了。

使用特权

评论回复
7
awmc_m| | 2009-12-24 15:44 | 只看该作者
为什么是虚线?

使用特权

评论回复
8
cubasa| | 2009-12-24 15:50 | 只看该作者
我猜可能是:
1.单片机采样速度不够。
2.还没有做直线和曲线的拟合。

使用特权

评论回复
9
xwj| | 2009-12-24 15:54 | 只看该作者
呵呵;P

使用特权

评论回复
10
程序匠人|  楼主 | 2009-12-24 16:00 | 只看该作者
为什么是虚线?
awmc_m 发表于 2009-12-24 15:44


不是因为采样速度不够,而是因为显示扫描速度跟不上

使用特权

评论回复
11
lxyppc| | 2009-12-24 16:01 | 只看该作者
广告位招租

使用特权

评论回复
12
xwj| | 2009-12-24 16:03 | 只看该作者
不是因为采样速度不够,而是因为显示扫描速度跟不上
程序匠人 发表于 2009-12-24 16:00


为什么?
要花几行的时间来处理数据吗?
那为什么不放在场消隐器件处理?

使用特权

评论回复
13
huangqi412| | 2009-12-24 16:08 | 只看该作者
:lol  显示扫描速度跟不上?不会吧,          LS说的对,

想玩这个的童鞋,把不亦心的帖子那HEX烧进单片机,然后示波器抓抓波就知道玩了,更聪明办法是在PROTEUS里用虚拟示波器抓抓波,然后了解下VGA和电视机的行和场.就出来了.

使用特权

评论回复
14
古道热肠| | 2009-12-24 16:10 | 只看该作者
哈哈,不错!
是用汇编写的吧,用汇编做的东西理解和移植都很累,如果是C代码实现的,那这作品移植以其它平台很容易。

使用特权

评论回复
15
程序匠人|  楼主 | 2009-12-24 16:13 | 只看该作者
这个东西如果要用c写,在单片机上,几乎是不可能完成的任务

使用特权

评论回复
16
反质子| | 2009-12-24 16:14 | 只看该作者
哈哈

使用特权

评论回复
17
程序匠人|  楼主 | 2009-12-24 16:15 | 只看该作者
为什么?
要花几行的时间来处理数据吗?
那为什么不放在场消隐器件处理?
xwj 发表于 2009-12-24 16:03


问题不在行间,而在列间。

使用特权

评论回复
18
不亦心| | 2009-12-24 16:19 | 只看该作者
题记:既然不能做到最好,那么就让我们设法做到最烂吧,呵呵。

程序匠人 发表于 2009-12-24 15:11


这题记写的,呵呵

俺搬个凳子来,好好学习下

使用特权

评论回复
19
yewuyi| | 2009-12-24 16:27 | 只看该作者
呵呵,路过。。。

使用特权

评论回复
20
程序匠人|  楼主 | 2009-12-24 16:32 | 只看该作者
顺带介绍一下VGA的知识吧。

VGA简介

VGA(Video Graphics Array) 也叫D-Sub接口,是IBM1987年随PS2机一起推出的一种视频传输标准。具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用。目前VGA技术的应用主要基于VGA显示卡的计算机、笔记本等设备。
VGA是输出模拟信号的接口。计算机内部以数字方式生成的显示图像信息,被显卡中的数字/模拟转换器转变为RG、B三原色信号和行、场同步信号,信号通过电缆传输到显示设备中。对于模拟显示设备,如模拟CRT显示器,信号被直接送到相应的处理电路,驱动控制显像管生成图像。

虽然液晶显示器可以直接接收数字信号,但很多低端产品为了与VGA接口显卡相匹配,因而也采用VGA接口。

常见的彩色显示器一般由阴极射线管(CRT)构成,彩色由GRB(Green Red Blue)基色组成。显示采用逐行扫描的方式解决。VGA显示控制器控制 CRT显示图象的过程如下图所示。


使用特权

评论回复
21
程序匠人|  楼主 | 2009-12-24 16:35 | 只看该作者
CRT工作原理

逐行扫描方式

显示器采用光栅扫描方式,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB基色,合成一个彩色像素。扫描从屏幕的左上方开始,从左到右(受行(水平)同步信号HSYNC控制),从上到下(受场(垂直)同步信号VSYNC控制),逐行扫描。每扫完一行(到达最右端),电子束回到下一行的起始位置(最左端)。在这期间,CRT、对电子束进行消隐。每行结束时,用行同步信号进行行同步。扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一的扫描。这种方法也就是常说的逐行扫描显示。

扫描轨迹见下图(实线是行正程扫描,虚线是行逆程扫描(实际已被消隐))。


使用特权

评论回复
22
程序匠人|  楼主 | 2009-12-24 16:39 | 只看该作者
行场振荡、自动同步跟踪

由于显示器需要显示适应不同分辨率的图像,相应的行场扫描频率会随显卡给出的同步信号而变,因而显示器具有自动同步跟踪的功能。


显示器内部的自动同步偏向IC通过2个锁相环(PLL)将行输出、行振荡、行同步信号三者的频率锁定,使三者始终处于同频同相状态。其中一个PLL将行振荡频率和行同步信号频率锁定,使之处于稳定的工作状态,另一个PLL用来修正行驱动的输出以补偿行输出电路的延迟。这样就可以实现行同步、行振荡、和行输出三者的同步。


从显卡输出的行场同步信号经自动同步偏向IC识**控制行场振荡器工作,场振荡锯齿波驱动场输出电路(IC),经场输出电路放大后加在场偏转线圈上,产生垂直方向的扫描。


行振荡PWM脉冲送到水平偏向输出电路,通过行激励放大后在行输出极产生行锯齿波电流后加在行偏转线圈上,生产水平方向的扫描



行场扫描电流如下图所示:






另外,由于分辨率改变后偏转电流要求也会随着改变,所以行输出的供电电压也会跟随分辨率而变化。CRT显示器会根据不同的分辨率将行供电电压调整至相应的水平以满足行电流的要求。




使用特权

评论回复
23
原野之狼| | 2009-12-24 16:39 | 只看该作者
先占座

使用特权

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

本版积分规则

个人签名: 《匠人手记》第二版已经上市,各大网络书店和实体书店有售! 匠人手机——手机中的颤抖机!欧耶! 匠人手记——手记中的战斗记!欧耶!

734

主题

11156

帖子

678

粉丝