[讨论]
准备DIY个具备VGA显示功能的学习版~~~大家给点建议?
如题,
近期
准备在DIY个具备vga显示功能的单片机学习版,
在功能确定上,
想听听大家的建议~~
我补充一些内容,感谢小志和soso
我这里刚巧完成cpld控制sdram的vga显示,聊起来,他们觉得这个东西非常好,就打算做这个活动。
这个东西,我做了一年了,等我慢慢写清楚
今天事情太多。
原始的进度和地址
创世:http://bbs. 21ic.com/icview-119600-1-1.html
继续:http://www.embcom.net/thread-1872-1-1.html
现在:https://bbs.eeworld.com.cn/viewthread.php?tid=88276
相关qq群:630571
硬件接口和编程示例 ,这是最原始的arm版本的程序
硬件spi总线,vga 1024*768 65536真彩色
速率不能大于13M byte写入速率。
接口定义:
接口引脚 说 明
NPCS0 spi片选信号(未用)
MOSI SPI数据信号
SPCK SPI时钟
EA0 数据/地址选择
VCC3 电源3.3V
GND 地
EA0=1 地址状态,设置光标地址。
EA0=0 数据状态,显示数据操作
void cursor(int addr) //设置显存地址 8M 寻址空间。
{
int i;
AT91F_PIO_SetOutput(AT91C_BASE_PIOA, AT91C_PIO_PA12 ); //set cmd status, EA0=1
//addr=272*y+x;
DelayUs(1);
pSpi -> SPI_TDR =(addr>>16)&0xffff; //16bit 地址低位
DelayUs(1);
pSpi -> SPI_TDR =addr&0xffff; //16bit 地址低位
DelayUs(1);
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, AT91C_PIO_PA12 );//set data status,EA0=0
DelayUs(1);
}
//清屏:
cursor(0);
for(i=0;i<272;i++)
for (j=0;j<480;j++)
{ pSpi -> SPI_TDR =0;for(n=0;n<2;n++);} //清屏 延时用2足够了,将来可以省略。
pSpi -> SPI_TDR =0 是写入0数据,写入其他数据可参考。
配置spi,修改这两个函数:
IO配置
__inline void AT91F_SPI_CfgPIO (void)
{
// Configure PIO controllers to periph mode
AT91F_PIO_CfgPeriph(
AT91C_BASE_PIOA, // PIO controller base address
((unsigned int) AT91C_PA11_NPCS0 ) |
((unsigned int) AT91C_PA13_MOSI ) |
// ((unsigned int) AT91C_PA31_NPCS1 ) |
((unsigned int) AT91C_PA12_MISO ) |
((unsigned int) AT91C_PA14_SPCK ), // Peripheral A
// ((unsigned int) AT91C_PA9_NPCS1 ) |
// ((unsigned int) AT91C_PA30_NPCS2 ) |
// ((unsigned int) AT91C_PA10_NPCS2 ) |
// ((unsigned int) AT91C_PA22_NPCS3 ) |
// ((unsigned int) AT91C_PA3_NPCS3 ) |
// ((unsigned int) AT91C_PA5_NPCS3 )
0); // Peripheral B
}
这是速度或spi模式配置
// SPCK active high + Data sampled on the falling edge of SPCK +
// CS inactive at the end of the transfer + cpt_bits to send + min baud rate + dlybct
AT91F_Set_SPI_CSR (AT91C_BASE_SPI, (0 + 0 + 0 + AT91C_SPI_BITS_16 + AT91C_SPI_SCBR), CSR0);
关于这些寄存器的具体细节,请参考共享中的at91sam7s的硬件手册。
以后实现的功能:
1.数据回读,速度和写入相同,8M 显存,可以当作数据空间用。
2.单独扫描起始指针,随时更新数据,不受扫描起始位置的影响。
3.显示特效,1)多层画面,2)遮挡效果,3)显示窗口
硬件的设计关键是sdram和显示时序的控制,得精确的安排时间。
现在能做到320ns写入16bit数据,大约25屏/s的刷新速度,不需要
busy信号!远远大于很多单片机甚至arm9的io速度。
这是现在的程序/线路图,源码
用的candence15.2,有原图,pdf图,bom清单。
这是给mini2440配套的vga板子,这块正在做。
单片机控制部分已经完成,现在想把这部分,单独拿出来,搞活动。
毕竟,可以用60-100元,搞定单片机和vga真彩显示器,如果
加上ps2的鼠标和键盘,可以当小电脑用了。
玩俄罗斯方块或者贪吃蛇这类游戏是怎么问题的。
vga可以考虑320,240 甚至1920*1200分辨率。显存够用8M
多余的显存,可以当存储用。
单片机我想用stc 20 pin的51。
都是我自己完成的,不是公司项目
没有版权问题。所有的版权都属于我自己。所以,不会被公司整。
使用工具:gerbertool,cadence,pdf阅读器,keil c 51
这些,自己去网上搜索。
现在这个vga控制板的功能只有两个:
setcursor(x,y) 设光标
spi_write(). 写点
目前占用逻辑单元63%,还有不少空余。
后期可增加硬件2d,3d功能,当然,都是比较简单的功能。
成本限制,不可能做很复杂。
本来想做个开源的cpld开发板,cpld的代码也想开放部分,
但是,cpld的烧写器没搞定,usb烧写器厂家卖500元,
不可能要求每个人都买,所以就算了。
如果谁能搞定烧写器,这部分也可以部分开放,当cpld学习版了。
回复 8楼 wangkj 的帖子
大家来看看 有啥建议?
建议先弄个最小系统出来,VGA显示,我以前没接触过,所以不发表技术意见
做这个开发板非常有意义
我对VGA显示也觉得很神秘,很想参加,就是时间不允许,给私企打工每天的时间都很紧。:L
但是我要表明我的态度是:坚决支持!
*我的EMAIL: sunke9@qq.com
*我的博客http://blog.ednchina.com/sunke9/
*我网店:https://sunke9.taobao.com/
承接:电子、自动控制产品设计开发;单片机、ARM编程。
回复 11楼 SUNKE9 的帖子
可以思考下,就功能上提提自己的建议啊~~
没有做过VGA方面的,小谈一下
我只大概知道VGA显示有专用的数模芯片,也有通过接上下拉电阻实现的,还有VGA的信号源的选择,是选择电脑输出还是自已做前端CCD/CMOS采集输出?
我说一下VGA接口吧
主是两个同步脉冲信号,三个色元模拟信号.
同步脉冲信号,好似是0与3.3V的电平吧. 色元模拟信号电平我不记得了(大约也是0-3.3V),不过不会太大(通信距离近啊).这样用FPGA可以直接控制脉冲同步信号,用FPGA的开关和电阻阵也可产生位数不多的彩色VGA信号,当然用ADC,和专用的VGA芯片就更好了,做为学习就不这么多了.
没有做过,只希望把规划跟进程发布一下。让我们不懂的学习学习。
ls 几个,把附近下载下来看看
里面有参考设计,这个参考设计也是我做的。
用单片机直接写数据,用电阻网络实现的rgb 565 16 bit真彩色。
今天,下午跑到现在才回公司。
如果是大家都不太明白,咱就做个最简单的:
单片机+a3p060(cpld)+8M sdram 。
预留 剩余的单片机管脚和cpld管脚。到时候自己增加电路,随意修改程序。
回复 楼主 soso 的帖子
没接触,不了解啊。。。。。
能够支持显示的图像的像素是大小事关键。。。
我的邮箱gaoxiaoan123@163.com!回帖是一种美德!互相帮助,共同进步!
口头禅:生活在于创造机会,把握机会!
做个最简单的:
单片机+a3p060(cpld)+8M sdram 。
预留 剩余的单片机管脚和cpld管脚。
很好。。。有意思!