ARM7(LPC2104)模拟TFT-LCD(PSP)时序看见图片了【恢复】
最近有块ARM7板子玩弄,刚好有块480*272的PSP屏,可以试试.ARM7没有LCD Driver,只好GPIO模拟时序了,勉强可以显示Flash中的图片.
电路是上次飞的面包板,http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=831940&bbs_page_no=1&search_mode=3&search_text=Oliver&bbs_id=9999
LPC2104内部PLL倍频到100MHZ,ARM的IO操作能力比较弱,因此智能刷频25HZ.
先上两张图.
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_447690.JPG
(原文件名:DSC00141.JPG)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_447691.JPG
(原文件名:DSC00143.JPG) 新进度,互链一下:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=2199636&bbs_page_no=1&bbs_id=9999 路过,帮顶! 非常谢谢!!!! 3 floors 【19楼】 Oliver
抱歉,我正在修改.因为昨晚只是个测试R5G6B5的程序,之后会传上来.不过是VB的,需要安装.
图片大了取模会变得非常慢,如果你急请用我之前上传的.
-----------------------------------------------------
Oliver给个地址吧,我没找到啊 【33楼】 wgxrc:我也很想帮你看看,可最近我很多事物要处理,并且比较急,对不住了哈.
你可以初步计算一下,如果可行就先写个程序试试看.
如果你的控制器输出TFT时序同时还比较空闲的话就没问题.
对了,普通的DMA可对付不了TFT,必须同时得具备同步和时钟等信号的配合输出.
CPLD呢要能通问题不大,可要做稳定,精,形成产品的话还是好好磨练几年吧,几分种学会CPLD的是逗小孩的. PIC32有DMA,速度是80MHZ,1.5DMIPS/MHZ,你看一下行不? 我的CPLD板还是去年问ppa2001要的,嘿嘿,惭愧啊...
你可以咨询一下他还有无空板.
普通MCU的话还是放弃吧,我这块ARM都够呛,只能做到20HZ,标准60HZ的(ARM主频100MHZ).
PIC32估计也快不到哪里去的.放弃吧...必须得有硬件的DMA来完成. Oliver 你现在用的CPLD做个通用控制器板有没有多的,能不能卖我一块. NXP 的LPC2478,带LCD驱动,正好能用到480*272没有任何问题 9260啊?是不是少有的非BGA封装ARM,我是刚好有没用的EasyARM2104,所以试试,实际上CPU已经做不了任何事情了.
ARM9就简单多了,内部带硬件驱动器.
对了.如果有可能尽量用18位以上颜色.16位偏少.
有个问题就是存储器的分配...
用调色板转16位到18/24位明显也是不可行的.
还是把显存按24位分好. TO Oliver
最近开始做AT9260.不过不怎么会~还的看看资料~英语难哈~
用LPC24XX驱动这屏效果不错,速度也不错的
用2410驱动过PSP,16位的,但颜色效果不好,后发现转接的排线有很大影响~
那种0.5mm间距的塑料排线明显比那种线排线颜色效果要好,
后发现别人的东西上,液晶排线上都套有磁环~看来排线的影响还是满大的~
本贴被 ppa2001 编辑过,最后修改时间:2008-10-12,03:14:27. 视频:
点击此处下载 ourdev_448930.rar(文件大小:9.88M) (原文件名:MOV00145.rar)
【7楼】 155107149:
TAOBAO上买的,150左右,480*272,24位色的,
ARM9无所谓驱动不驱动那,因为本身带LCD控制器,
就是设置一下而已,可以直接享受成果了. 强~
psp的屏哪来的?我想买块二手的屏(笔记本的不知道行不行,或者山寨机的),我有2410正打算学一下驱动lcd ppa2001是看见我短信专门来捧场的?最近看你很少来活动,忙什么项目?
等会上段视频上来 厉害哈,哈哈~ 自己顶,嘿嘿 GetBmpDataourdev_447850.rar(文件大小:181K) (原文件名:pay500_78197.rar)
彩色取模软件,我选择8位输出(R3G2B3),最后再用转换菜单把BMP数据转换成C格式.
这里有个问题,转化出来的数据多个h.
如0xff,0xcc,...变成0xffh,0xcch.
C编译器不认识,这时候用替换功能把"h,"替换成","就可以了.
本贴被 Oliver 编辑过,最后修改时间:2008-10-11,13:55:40. 简单程序
----------------------------------------
/*
lcd.h
*/
#ifndef __LCD_H__
#define __LCD_H__
//p0.0~p0.7
//p0.2-r
//p0.3-g
//p0.4-b
#define RGB_OUT IODIR |= 0x000000ff;
#define RGB_DATA(x) {IOCLR = 0x000000ff;\
IOSET = x<<4;}
#define VS_OUT IODIR |= 0x00000400 //p0.10
#define VS_1 IOSET = 0x00000400
#define VS_0 IOCLR = 0x00000400
#define HS_OUT IODIR |= 0x00000800 //p0.11
#define HS_1 IOSET = 0x00000800
#define HS_0 IOCLR = 0x00000800
#define CK_OUT IODIR |= 0x00001000 //p0.12
#define CK_1 IOSET = 0x00001000
#define CK_0 IOCLR = 0x00001000
#define DISP_OUT IODIR |= 0x00002000 //p0.13
#define DISP_1 IOSET = 0x00002000
#define DISP_0 IOCLR = 0x00002000
#define VDD_EN_OUT IODIR |= 0x00000100 //p0.8
#define VDD_EN_1 IOSET = 0x00000100
#define VDD_EN_0 IOCLR = 0x00000100
#define CK_10 {CK_1; CK_0; CK_1; CK_0; CK_1; CK_0; CK_1; CK_0; CK_1; CK_0;\
CK_1; CK_0; CK_1; CK_0; CK_1; CK_0; CK_1; CK_0; CK_1; CK_0;}
#define CK_100 {CK_10; CK_10; CK_10; CK_10; CK_10; CK_10; CK_10; CK_10; CK_10; CK_10;}
#define NO_DIS_DATA 0x00
//x=0-479, y=0-271
extern void Dis(unsigned int x, unsigned int y, unsigned int x_wide, unsigned int y_hight, const unsigned char *p);
extern void Lcd_Init(void);
#endif
----------------------------------------------------------
/*
lcd.c
*/
#include "NXP/iolpc210x.h" /* Defines Special function registers */
#include "intrinsics.h"
#include "lcd.h"
#include "EasyARM2104.h"
void Delay(void){
unsigned long i;
for(i=0; i<10000; i++){
;//_NOP();
}
}
unsigned char dis_buf;
void Lcd_Line(void){
unsigned int i;
//hsync
HS_0;
//41 ck
CK_10; CK_10; CK_10; CK_10;
CK_1; CK_0;
HS_1;
//2 ck
CK_1; CK_0;
CK_1; CK_0;
//480 ck
for(i=0; i<480; i++){
CK_0;
RGB_DATA(dis_buf);
CK_1;
}
CK_0;
//2 ck
CK_1; CK_0;
CK_1; CK_0;
}
//x=0-479, y=0-271
void Dis(unsigned int x, unsigned int y, unsigned int x_wide, unsigned int y_hight, const unsigned char *p){
unsigned int i;
unsigned int j;
unsigned char k;
//vsync
VS_0;
//10 line
Lcd_Line(); Lcd_Line();
Lcd_Line(); Lcd_Line();
Lcd_Line(); Lcd_Line();
Lcd_Line(); Lcd_Line();
Lcd_Line(); Lcd_Line();
VS_1;
//2 line
Lcd_Line();
Lcd_Line();
//272 line
for(j=0; j<272; j++){
if((j>=y) && (j<(y+y_hight))){
//480dot
for(i=0; i<480; i++){
if((i>=x) && (i<(x+x_wide ))){
k = *p++; //r
//R3G2B3->R1G1B1
dis_buf = 0;
if((k & 0x07)>= 0x04) //B3
dis_buf = 0x04;
if((k & 0x18)>= 0x10) //G2
dis_buf |= 0x02;
if((k & 0xe0)>= 0x80)
dis_buf |= 0x01; //R3
}
else
dis_buf = NO_DIS_DATA;
}
}
else{
for(i=0; i<480; i++)
dis_buf = NO_DIS_DATA;
}
Lcd_Line();
}
//2 line
Lcd_Line();
Lcd_Line();
//disp
DISP_1;
}
void Lcd_Init(void){
VDD_EN_OUT;
VDD_EN_0;
DISP_OUT;
DISP_0;
RGB_OUT;
RGB_DATA(0x00);
VS_OUT;
VS_0;
HS_OUT;
HS_0;
CK_OUT;
CK_0;
VDD_EN_1;
Delay();
Delay();
Delay();//>50ms
}
---------------------------------------
/*
main.c
*/
#include "NXP/iolpc210x.h" /* Defines Special function registers */
#include "intrinsics.h"
#include "bmp.h"
#include "lcd.h"
#include "EasyARM2104.h"
void Init(void){
__disable_interrupt();
PINSEL0 = 0x00000000;
PINSEL1 = 0x00000000;
//ports
KEY1_IN;
KEY2_IN;
KEY3_IN;
KEY4_IN;
KEY5_IN;
KEY6_IN;
Lcd_Init();
//PLL
//1.set
// PLLCFG = 0x60; //0 11 00000 = *1,*16
// PLLCFG = 0x41; //0 10 00001 = *2,*8
// PLLCFG = 0x42; //0 10 00010 = *3,*8
// PLLCFG = 0x43; //0 01 00011 = *4,*4
// PLLCFG = 0x44; //0 01 00100 = *5,*4
// PLLCFG = 0x45; //0 01 00101 = *6,*4
// PLLCFG = 0x06; //0 00 00110 = *7,*2
// PLLCFG = 0x07; //0 00 00110 = *8,*2
PLLCFG = 0x08; //0 00 00110 = *9,*2
// PLLCFG = 0x09; //0 00 01001 = *10,*2
PLLFEED = 0xaa; PLLFEED = 0x55;
//2.en
PLLCON = 0x01; //PLL使能
PLLFEED = 0xaa; PLLFEED = 0x55;
//3.lock?
while((PLLSTAT & 0x00000400) == 0x00000000); //bit10(PLL LOCK)
//4.con
PLLCON |= 0x02; //PLL连接
PLLFEED = 0xaa; PLLFEED = 0x55;
//system
MAMCR = 0x00; //MAM控制寄存器
//MAMTIM = 0x09; //MAM时序寄存器
MAMTIM = 3/*2*/;
MAMCR = 0x02;
MEMMAP = 0x01; //存储器映射控制寄存器
//MEMMAP = 0x02;
PCON = 0x00; //功率控制寄存器(睡眠)
PCONP = 0x00000000; //外设功率控制寄存器(模块关闭)
// VPBDIV = 0x00; //VPB分频器寄存器1/4
VPBDIV = 0x01; //1:1
// VPBDIV = 0x02; // 1/2
EXTINT = 0x00; //外部中断标志寄存器
EXTWAKE = 0x00; //外部中断唤醒寄存器
}
void main(void){
unsigned char i;
unsigned char j=20;
Init();
while(1){
if(KEY1_STATE == 0)
j=50;
if(KEY2_STATE == 0)
j=80;
if(i <= j)
Dis(10, 10, 122, 96, &(I_F_U));
else if(i <= j*2)
Dis(150, 150, 121, 96, &(shazhu));
if(++i>= j*3)
i=0;
}
} 忘了说了,因为面包板把R0-R7,G0-G7,B0-B7全部汇总成3根线了,因此只能显示RGB的8种颜色.
黑,红,绿,蓝,黄,紫,青,白.
如果硬件支持可以显示真彩,不过内存没这么大,图片数据现在是R3G2B3.256色的 我就只要工业控制用就可以了. 那请Oliver 推荐个带TFT控制器的ARM,以前没有接触过ARM,这次只能硬上了 抱歉,这个我也不是很清楚,一般通用控制器都是8色或者256色的,侧重点是应用于工业上.
很少看见真彩的.TFT控制器芯片好象有,但我没用过,如果你是用ARM的话或许简单些. 那麻烦 Oliver 给我推荐个LCD driver的控制器,我想驱动一下这个TFT屏,样品已经过来了.呵呵 【22楼】 wgxrc :
抱歉我没用过PIC,如果没有LCD driver的控制器驱动TFT很困难的,即便是输出时序了,MCU也无暇干别的事情了.
我现在是中间用CPLD做个通用控制器,MCU通过总线操作SRAM. 请问Oliver
如果我用PIC32能不能驱动这个屏? 【20楼】 tangfree:谢谢指点.
在好些资料上没看见这个备注,说明什么的.
AVR等若干带IIC的MCU没这个"BUG".IO就是IO,就算OC也是由程序选择或者烧程序时选择.
AVR没有这么高指令速度,存储器也没这么大,LPC2104和M128接近,可M128好象贵多了. 即便IIC被关了,工作在GPIO下,我告诉你它还是OC的。因为它的IO内部根本没有任何上拉,想用作IO,必须加上拉电阻。 【17楼】 robinyuan:抱歉,我正在修改.因为昨晚只是个测试R5G6B5的程序,之后会传上来.不过是VB的,需要安装.
图片大了取模会变得非常慢,如果你急请用我之前上传的.
【18楼】 hn_ny_dxs 夏风 :到现在为止也不知道是啥原因... 可怜的ARM脑子转得挺快,腿脚却不灵活。 嘿嘿,楼主杰作哦
24位取模软件能分享一下吗? 【15楼】 tangfree,当然...
我现在已经关闭所有第二地三功能了,通通工作在GPIO下,连SPI,IIC,TIMER.....的电源也关了.
这时候应该工作到推挽方式了...感觉莫名其妙的,有时不得不觉得AVR顺手. 所有的IIC都是OC的,不可能是推挽输出。 我要对24位bmp取出16位数据(B5G6R5)......之前的软件一打开24位就自动关了.并且只能打开BMP
我现在用picture.point取出X,Y像素的RGB值,转换16位输出到.txt文件 24位BMP不用取模 之前的图片为256色取模,找不到能打开24位BMP的取模软件,只能转成256色后取.
没办法自己写了个取模软件...
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_450450.JPG
(原文件名:DSC00151.JPG)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_450451.JPG
(原文件名:未命名.JPG) 手上有ppa2001上次送的CPLD驱动PSP板,于是写了段CPLD程序把LCD的FPC端口映射到DIP,增加了颜色.
16位色图片:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_450190.JPG
(原文件名:DSC00147.JPG)
PPA2001的PSP板到EASYARM2104的转接板:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_450191.JPG
(原文件名:DSC00148.JPG)
全家福:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_450192.JPG
(原文件名:DSC00149.JPG)
说来奇怪,LPC2104的P0.2,P0.3是IIC/PWM等的复用口,做GPIO的时候应该是推挽输出啊,结果是OC输出(没看见任何资料提到OC输出).
搞了一下午都没出线性红色,结果无意中把EEPROM的IIC跳线插上就好了.
晕,白忙活一下午...ARM的应用,资料比AVR/51什么的少多了. 2104能到100M?!还真没试过 顶~~ 顶 挖到好货,可惜全部乱码
页:
[1]