打印

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

[复制链接]
楼主: 程序匠人
手机看帖
扫描二维码
随时随地手机跟帖
161
本帖最后由 牛牛特工 于 2010-1-3 11:42 编辑

EM78P418真强悍 又便宜~~ 酷啊
匠人 能否不加上拉 直接IO串电阻驱动~~
PIC的IO可以承受20mA 5V/500欧= 10mA

使用特权

评论回复
162
程序匠人|  楼主 | 2010-1-3 11:44 | 只看该作者
关于动态组织数据的问题 每行前肩+后肩+脉冲宽度 对于640*480来说 共有7us的“空闲时间”
如果换到320*240的情况 不晓得是否可以乘4 即28us
我的PIC16估计肯定不行了 不晓得匠人的EM怎么样 用这段时间能做多少运算。够不够把320个点组织出来

VGA那边信号只有0.7V啊? 我的IO不是OC的 还的加个三极管才行
牛牛特工 发表于 2010-1-3 11:16


你很聪明哦,想到了用4行的空闲时间来处理下一个显示行(这里说的显示行是指实际显示分辨行,一个显示行=4个扫描行),这样可以的到4倍的时间。确实,匠人就是这么做的!

另外还有一个技巧,就是把画面做窄些,这样就可以得到更多的空闲时间。

但是即使这样,也来不及准备320个点的缓存数据,所以我只做了40个点。当然,这40个点是指动态的画面部分(波形)。

对于静态的部分,比如画面中的网格线、汉字、英文字符,是可以做到更多分辨点的,因为那部分不需要缓存,直接在ROM里建表查询即可。

如果没有OC口,也可以考虑用推挽式输出,不一定要用三极管,前提是你的每个IO口在输出高电平时能够提供10ma以上的拉电流。如果采用推挽式输出,需要把我图中的上拉电阻改为线内串联方式。

使用特权

评论回复
163
程序匠人|  楼主 | 2010-1-3 11:46 | 只看该作者
匠人 能否不加上拉 直接IO串电阻驱动~~
PIC的IO可以承受20mA 5V/500欧= 10mA
牛牛特工 发表于 2010-1-3 11:31


正解。我刚回复。你就已经想到了

使用特权

评论回复
164
程序匠人|  楼主 | 2010-1-3 11:49 | 只看该作者
补充一句,RGB信号上限值=0.75V

使用特权

评论回复
165
牛牛特工| | 2010-1-3 13:50 | 只看该作者
本帖最后由 牛牛特工 于 2010-1-3 14:08 编辑

匠人 我有个想法 这个示波器 应该把屏幕旋转90度来用 即行扫方向表示幅值  场方向表示t
那么每一行只需要输出一个点就可以也不需要中间产生多少缓存了
即使显示双路信号 也仅两个点而已
因此这个示波器也不怎么“烂”嘛 哈哈
我的板子 先就弄个双色  就用个R B好了 加上行场 总共4个信号 刚好那板子上有4个IO空的 嘎嘎

使用特权

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


哈哈,你真是太对我的胃口了,说实话,那个把屏幕旋转90度的疯狂想法,我也曾经有过。而且理由也是一样的的。 :handshake

使用特权

评论回复
167
牛牛特工| | 2010-1-3 14:33 | 只看该作者
现在刚好可以试试呗 :lol

使用特权

评论回复
168
a121036481| | 2010-1-3 14:36 | 只看该作者
万卷书不如行**路
行**路不如阅人无数
阅人无数不如名师指路
名师指路不如自己去悟

使用特权

评论回复
169
牛牛特工| | 2010-1-3 15:04 | 只看该作者
本帖最后由 牛牛特工 于 2010-1-3 15:32 编辑

偶如果两条指令输出一个像素 即0.4us 行数130 有效120 前肩2行 脉冲1行 后肩7行 列数200 有效162点 前肩3点 脉冲24 后肩11   总时间为 10400us 即10ms 100HZ 好 开试 RGB PIC IO直接输出 串1K电阻 行场同步串的电阻也是33欧

使用特权

评论回复
170
牛牛特工| | 2010-1-3 16:15 | 只看该作者
靠 板子烧写器连不上 换一块~~

使用特权

评论回复
171
程序匠人|  楼主 | 2010-1-3 16:54 | 只看该作者
万卷书不如行**路
行**路不如阅人无数
阅人无数不如名师指路
名师指路不如自己去悟
a121036481 发表于 2010-1-3 14:36


你的帖子发重复了,帮你删去。。。

使用特权

评论回复
172
程序匠人|  楼主 | 2010-1-3 16:56 | 只看该作者
偶如果两条指令输出一个像素 即0.4us 行数130 有效120 前肩2行 脉冲1行 后肩7行 列数200 有效162点 前肩3点 脉冲24 后肩11   总时间为 10400us 即10ms 100HZ 好 开试 RGB PIC IO直接输出 串1K电阻 行场同步串的 ...
牛牛特工 发表于 2010-1-3 15:04


静候佳音

使用特权

评论回复
173
牛牛特工| | 2010-1-3 17:45 | 只看该作者
目前还毫无反映 显示器上显示 NO SIGNAL

使用特权

评论回复
174
牛牛特工| | 2010-1-3 17:57 | 只看该作者
本帖最后由 牛牛特工 于 2010-1-3 18:19 编辑

我想我刚才焊接错误
把VGA显示器的红色脚给烧掉了  现在跟地之间的电阻为无穷大了 本来是70欧左右的
测量了一下我的一行实际时间为 750微妙 看来这速度肯定不行 乘以120行 那就得100ms一帧了 得改改~~ 暂时先改成100us每行
郁闷中 信号都有的 但是就是显示NOSIGNAL 难道不符合时序要求 或者需要严格按照VGA的标准时间? 俺把行时间改到640*28us看看~~~
VGAPlaytest.rar (1.73 KB) 大伙帮忙看看代码
我测得G信号幅度为0.4V左右 行场信号5V

使用特权

评论回复
175
程序匠人|  楼主 | 2010-1-3 18:49 | 只看该作者
我想我刚才焊接错误
把VGA显示器的红色脚给烧掉了  现在跟地之间的电阻为无穷大了 本来是70欧左右的
测量了一下我的一行实际时间为 750微妙 看来这速度肯定不行 乘以120行 那就得100ms一帧了 得改改~~ 暂时先改成10 ...
牛牛特工 发表于 2010-1-3 17:57


晕,焊接错误?:L :L :L

使用特权

评论回复
176
牛牛特工| | 2010-1-3 18:54 | 只看该作者
焊在电阻前面了 5V直接上了~~

使用特权

评论回复
177
程序匠人|  楼主 | 2010-1-3 21:23 | 只看该作者
焊在电阻前面了 5V直接上了~~
牛牛特工 发表于 2010-1-3 18:54


看来你得修显示器了,估计是那个内部下拉电阻烧掉了,但愿其他部位没坏。。。。

使用特权

评论回复
178
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行。
——也就是说:一行内的数据可以变粗,但一行的总宽度(对应行频)、场频以及同步头的格式不能乱来。
(当然,行频、场频也允许有一定的误差,显示器内的锁相环照样会同步、调整粗正确的显示宽度的,但也不能差得太离谱了哦:))

使用特权

评论回复
179
xwj| | 2010-1-3 21:36 | 只看该作者
另外再提醒下:
尽量保证每一行(包括消隐期间)的时间完全一致(即任何行的总时间都完全相等),同步头的位置也完全一致!

否则轻则每行内容左右位置错位,重则显示器每次都黑屏一下然后重新识别。

使用特权

评论回复
180
牛牛特工| | 2010-1-3 22:17 | 只看该作者
貌似可能是因为我的时间误差太大了 行的误差已经达到数个uS 导致实际频率差N多

使用特权

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

本版积分规则