国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

電子工程網(wǎng)

標題: 顯卡的最新進展 [打印本頁]

作者: wangkj    時間: 2009-9-4 18:39
標題: 顯卡的最新進展
一會上貼圖,下午搞好了,基本能出效果了,沒帶手機數(shù)據(jù)線,無法上傳。
弄個qq郵箱,stmp又出問題了。
作者: f.luo    時間: 2009-9-4 18:44
恭喜會計,又有了新的進展!!!
作者: 原野之狼    時間: 2009-9-4 18:55
恭喜恭喜呀,趕緊傳來看看。。。
作者: wangkj    時間: 2009-9-4 19:09
標題: 不用fifo,用寄存器做的緩沖,pll到130Mhz
缺點是邏輯單元占用較多,1024*768本來點頻是65M,需要兩倍的頻率,
如果是1280*1024需要160M,1920*1200需要400M,器件跑不動。
這是epm570做通了,測試用的。

這個是7.16完成的,沒有貼出來,測試硬件功能和actel cpld(fpga)方案可行性的。

照片001.jpg (45.58 KB)

不用fifo,用寄存器做的緩沖,pll到130Mhz

不用fifo,用寄存器做的緩沖,pll到130Mhz

作者: wangkj    時間: 2009-9-4 19:12
標題: 錯一個字母的圖片
本帖最后由 wangkj 于 2009-9-4 19:25 編輯

驗證了一個問題:刷屏沒錯,錯在數(shù)據(jù)寫入。多虧了以前的那個測試程序。
這個是2009,9,04上午的測試圖。(就是今天!!!)
只有1/4的出現(xiàn)花屏,其他3/4數(shù)據(jù)不動!沒有寫入。

照片002.jpg (54.03 KB)

照片002.jpg

作者: wangkj    時間: 2009-9-4 19:17
正式下午修正之后的圖片,為了找這個錯誤的字母,折騰了我3周。
最下面的幾行是:數(shù)據(jù)輸入、數(shù)據(jù)輸出,刷屏指針,3原色測試。這些是cpld邏輯做出來的,上面的才是mcu輸入的數(shù)據(jù)。

照片003.jpg (131.36 KB)

照片003.jpg

照片004.jpg (136.27 KB)

照片004.jpg

照片005.jpg (122.47 KB)

照片005.jpg

作者: wangkj    時間: 2009-9-4 19:20
標題: 原理圖、配件清單
本帖最后由 wangkj 于 2009-9-4 19:21 編輯

pdf 格式

mini2440_20090518.pdf

164.97 KB, 下載積分: 積分 -1

MINI2440_20090521_xcl.pdf

6.68 KB, 下載積分: 積分 -1


作者: wangkj    時間: 2009-9-4 19:22
標題: mcu 程序
/*******************************************
單片機顯卡測試程序
硬件規(guī)格:
stc51單片機主控,cpld+sdram實現(xiàn)顯卡硬件,
這是stc51的主控程序。

by
wangkj@yahoo.com
qq:1248780
群:630571
create 2009-07-10
version 0.1
STC5205AD
*******************************************/


//#include "REG51F.H"
//#include
#include
#include
#include

sbit MCU_IR_PWM    = P3^7;
sbit _CS = P1^4;            // SPI總線的片選信號線
sbit SPCK= P1^7;            // SPI總線的鐘信號線
sbit MOSI= P1^5;            // SPI總線的串行數(shù)據(jù)輸出線
sbit EA0 = P1^6;            // 地址/數(shù)據(jù)選擇

#define        TRUE        1
#define        FALSE        0
#define     WIDTH       1024
#define     HIGH        768
//#define     nop()  _nop_

volatile unsigned  int data TimerCounter=0;

/********************************************/
/*          定時器 0 中斷服務               */
/* 說明:  100us 中斷一次, 優(yōu)先級最高        */
/********************************************/

void  Timer0_Int(void) interrupt 1 using 1 //自動reload方式,10us
{
   
    TimerCounter++;
}

//延時1ms

void nop()
{
   unsigned char data i;
   for (i=0;i<1;i++)
   {
   }
//   _nop_ ;
}

void udelay(void)
{
   unsigned char data i;
   for (i=0;i<10;i++);
}

void delay1ms(void)
{
   unsigned  int data OldTimerCounter;
   OldTimerCounter = TimerCounter;
   while((TimerCounter-OldTimerCounter)<100)//
   { //如果調(diào)試,請把1換成不同到值,1是延時1ms,誤差很小
    MCU_IR_PWM=~MCU_IR_PWM;
   }
   
}
/*從SPI總線上讀入一個字節(jié)
unsigned int spi_read16(void)
{
    unsigned int data inData;
    unsigned char data i;
    for(i=0; i<8; i++)    // 移8次
    {   
        SCK = 0;        // 拉低時鐘線
        inData <<= 1;   
        inData |= MO;    // 從SPI總線的數(shù)據(jù)輸出線SO上讀入一位
        SCK = 1;        // 拉高時鐘線
    }
    return(inData);
} */    // python:  for i in range(1,15): hex(i*1024+i)
/*輸出一個字節(jié)到SPI總線上*/
void spi_write8(unsigned char data outData)
{
   char i,j;
   for(i=0; i<8; i++)
   {
        
        SPCK = 0;        
        if ((outData & 0x80)==0)
          MOSI=0;
        else
          MOSI=1;
        //delay1ms();  
        for(j=0;j<3;j++);   
        SPCK = 1;
        for(j=0;j<3;j++);
        //delay1ms();
           outData <<= 1;
        
/*        outData <<= 1;        
        SPCK = 1;  
        MOSI = CY;
        SPCK = 0;     */  
   }
   SPCK = 0;
/*  for(i=0; i<8; i++)        // 移8次
    {
//        outData <<= 1;
//        MOSI = CY;        
        SPCK = 1;        
        if ((outData & (0x80>>i))==0)
          MOSI=0;
        else
          MOSI=1;         
   
            // 移出一位,送出至SPI總線的數(shù)據(jù)輸出MOSI上
        SPCK = 0;   
    } */
}/*讀SPI器件的狀態(tài)*/
void spi_write16(unsigned int  outData)
{
   union
   {
      unsigned int  Data16;
      unsigned char Data8[2];
   } spi8;
   spi8.Data16=outData;
   spi_write8(spi8.Data8[0]);     //high
   spi_write8(spi8.Data8[1]);   //low
}
void cursor(unsigned int x,y)  //設置顯存地址 8M 尋址空間。
{
   //int i;
   union
   {
      unsigned long int addr;
      unsigned int addr_HL[2];
   } addr_union;
   addr_union.addr=1L*(long)y*WIDTH+(long)x;
   EA0=1;//set cmd status
   //addr=272*y+x;
   spi_write16(addr_union.addr_HL[0]);    //high
   spi_write16(addr_union.addr_HL[1]);    //low

   EA0=0;//set data status        PutCmd(0);//reset display ram pointer to 0
}
void clr_scr(void)
{
   unsigned char i,j,k;  

   cursor(0,0);   
   //addr= 1L*WIDTH*HIGH*8*2;  
   MOSI=0;
   for(i=0;i<97*2;i++)
     for(j=0;j<255;j++)
       for(k=0;k<255;k++)   
         {SPCK=1;SPCK=0;}
}
//主程序
void main(void)
{
                  
unsigned  int  i,j,k;//OldTimerCounter;
unsigned long int x,y;
// unsigned char ch;//    cmd,
// unsigned int j;

P1M0=0x00;       //準雙向口
P1M1=0x00;      
// AUXR = 0x40;  //可能不能位尋址以及OR,AND 操作,待驗證
//AUXR=0x20;//6x UART  速度
AUXR=0x40|0x80; //T0,T1 12X
// AUXR=0x40;
//T0 正常 T1/1 12倍速, UART正常 ,禁用ADC,SPI,低壓中斷。
/***********************************************
AUXR 地址8EH 復位值=xxxx xx00B

7     6     5         4     3    2     1      0
T0x12 T1x12 UART_M0x6 EADCI ESPI ELVDI            - - 0000,00xx
定時器0 和定時器1:
STC12C5410AD 和STC12C2052AD 系列是 1T 的8051 單片機,為了兼容傳統(tǒng)8051,定時器0 和定時器1 復
位后是傳統(tǒng)8051 的速度,即12 分頻,這是為了兼容傳統(tǒng)8051。但也可不進行12 分頻,實現(xiàn)真正的1T。
T0x12: 0, 定時器0 是傳統(tǒng)8051 速度,12 分頻;1, 定時器0 的速度是傳統(tǒng)8051 的12 倍,不分頻
T1x12: 0, 定時器1 是傳統(tǒng)8051 速度,12 分頻;1, 定時器1 的速度是傳統(tǒng)8051 的12 倍,不分頻
如果UART 串口用定時器1 做波特率發(fā)生器,T1x12 位就可以控制UART 串口是12T 還是1T 了。
UART 串口的模式0:
STC12C5410AD 和STC12C2052AD 系列是 1T 的8051 單片機,為了兼容傳統(tǒng)8051,UART 串口復位后是兼容
傳統(tǒng)8051 的。
UART_M0x6: 0, UART 串口的模式0 是傳統(tǒng)12T 的8051 速度,12 分頻;
1, UART 串口的模式0 的速度是傳統(tǒng)12T 的8051 的6 倍,2 分頻
如果用定時器T1做波特率發(fā)生器時,UART串口的速度由T1的溢出率決定
EADCI: 0, 禁止A/D 中斷; 1,允許A/D 中斷
ESPI: 0, 禁止SPI 中斷; 1,允許SPI 中斷
ELVDI: 0, 禁止低壓中斷; 1,允許低壓中斷
5V 單片機,3.7V 以下為低壓,3V 單片機,2.4V 以下為低壓,
如ELVDI=1(允許低壓中斷),則會產(chǎn)生低壓中斷,現(xiàn)版本無低壓檢測中斷,是低壓復位。
STC12C5410AD 系列無低壓檢測中斷,只有STC12C2052AD 系列單片機才有低壓檢測中斷。
*************************************************/
// 28.636晶振,bps 2400 誤差 0.21% STC5410可以12倍速T1,
// T0 標準51方式,做 1ms 基準時間用

  PCON=0x80;  //12倍T1 *  2 倍 bps 2400*12*2=57600
//  PCON=0x00; //正常操作,沒有倍速
/***********************************************
7    6     5    4   3   2   1  0
SMOD SMOD0 LVDF POF GF1 GF0 PD IDL
POF:上電復位標志位,單片機停電后,上電復位標志位為1 ,可由軟件清0 。
    實際應用:要判斷是上電復位(冷啟動),還是外部復位腳輸入復位信號產(chǎn)生的復位,還是內(nèi)部看門狗復位
P D: 將其置1 時,進入Power Down 模式,可由外部中斷低電平觸發(fā)或下降沿觸發(fā)中斷模式喚醒。
    進入掉電模式時,外部時鐘停振,CPU、定時器、串行口全部停止工作,只有外部中斷繼續(xù)工作。
IDL:將其置1,進入IDLE 模式(空閑),除CPU 不工作外,其余仍繼續(xù)工作,可由任何一個中斷喚醒。
    現(xiàn)C 版本開始大量供貨,C 版本IDLE 模式可正常使用(原A 版本和B 版本建議不要用IDLE 模式)。
GF1,GF0: 兩個通用工作標志位,用戶可以任意使用。
SMOD: 波特率倍速位,置1,串口通訊波特率快一倍
***********************************************/
// SMOD=1;
  IE=0x00;  //disable all interrupt   
/************************************************
IE(0A8H)
7  6   5  4  3   2   1   0
EA EC ET2 ES ET1 EX1 ET0 EX0
使能位=1 使能中斷
使能位=0 禁止中斷
位標號功能
IE.7 EA 全局禁止位如果EA=0 禁止所有中斷如果EA=1 通過置
位或清除使能位對應的每個中斷被使能或禁止
IE.6 EC PCA中斷使能位
IE.5 ET2 定時器2 中斷使能位
IE.4 ES 串行口中斷使能位
IE.3 ET1 定時器1 中斷使能位
IE.2 EX1 外部中斷1 使能位
IE.1 ET0 定時器0 中斷使能位
IE.0 EX0 外部中斷0 使能位
*************************************************/
  IP=0x02;  //Timer0 is first level of interrupt
/**********************************************  
IP(0B8H) 7 6 5 4 3 2 1 0
PT2 PS PT1 PX1 PT0 PX0
中斷優(yōu)先級控制位=1 定義為高優(yōu)先級中斷
中斷優(yōu)先級控制位=0 定義為低優(yōu)先級中斷
IP.6 PPC PCA中斷優(yōu)先級控制位
IP.5 PT2 定時器2 中斷優(yōu)先級控制位
IP.4 PS 串行口中斷優(yōu)先級控制位
IP.3 PT1 定時器1 中斷優(yōu)先級控制位
IP.2 PX1 外部中斷1 中斷優(yōu)先級控制位
IP.1 PT0 定時器0 中斷優(yōu)先級控制位
IP.0 PX0 外部中斷0 中斷優(yōu)先級控制位
************************************************/
  TMOD=0x22; //T0,T1 8 bit Reload
            
/***********************************************
TMOD 地址:89H 不可位尋址 復位值:00H
7    6   5  4  3    2   1  0
GATE C/T M1 M0 GATE C/T M1 M0
定時器1 定時器0
位符號 功能
TMOD.7/ GATE TMOD.7 控制定時器1,置1 時只有在INT1 腳為高及TR1 控制位置1 時才可打開定時器/ 計數(shù)器1。
TMOD.3/ GATE TMOD.3 控制定時器0,置1 時只有在INT0 腳為高及TR0 控制位置1 時才可打開定時器/ 計數(shù)器0。
TMOD.6/ C/T TMOD.6  控制定時器1 用作定時器或計數(shù)器,清零則用作定時器(從內(nèi)部系統(tǒng)時鐘輸入),
                    置1 用作計數(shù)器(從T1/P3.5 腳輸入)
TMOD.2/ C/T TMOD.2  控制定時器0 用作定時器或計數(shù)器,清零則用作定時器(從內(nèi)部系統(tǒng)時鐘輸入),置1
                    用作計數(shù)器(從T0/P3.4 腳輸入)
                    
TMOD.5/TMOD.4 M1、M0 定時器定時器/計數(shù)器1模式選擇
0 0   13位定時器/ 計數(shù)器,兼容8048 定時器模式,TL1 只用低5 位參與分頻,TH1 整個8 位全用。
0 1   16位定時器/ 計數(shù)器,TL1、TH1 全用
1 0   8 位自動重裝載定時器,當溢出時將TH1 存放的值自動重裝入TL1。
1 1   定時器/ 計數(shù)器1 此時無效(停止計數(shù))。
TMOD.1/TMOD.0 M1、M0 定時器/ 計數(shù)器0 模式選擇
0 0   13位定時器/ 計數(shù)器,兼容8048 定時器模式,TL0 只用低5 位參與分頻,TH0 整個8 位全用。
0 1   16位定時器/ 計數(shù)器,TL0、TH0 全用
1 0   8位自動重裝載定時器,當溢出時將TH0 存放的值自動重裝入TL0。
1 1   定時器0 此時作為雙8 位定時器/ 計數(shù)器。TL0 作為一個8 位定時器/ 計數(shù)器,通過標準定時器0
      的控制位控制。TH0 僅作為一個8 位定時器,由定時器1 的控制位控制。


***********************************************/
  TH1=BAUD_2400;                 //設置串口的波特率為2400 for OSC 28.636Mhz//19200 for 29.08M
  TL1=BAUD_2400;                 //It Will be 2400*12*2 = 57600              //19200*6-115200 6x UART模式
/**********************************************
  串行口在方式1和方式3的波特率可變,與定時器T1或T2的溢出速率有關。51子系列
’常用定時器T1作為波待率發(fā)生器,這時方式1和方式3的波特率由定時器Tl的溢出率
確定
***********************************************/

  SCON=0x42;  //8bit variable,無多機通訊,REN=0,disable receive and set TI to generate serial send interupt
              //else the serial interupt will not work.
/**********************************************
  sc0N是一個可位尋址的專用寄存器,用來設定串行口的工作方式、控制串行口的接收
’發(fā)送以及狀態(tài)標志。SCON的字節(jié)地址為98H,位地址為98H一9FH。其格式如下:
    D7  D6  D5  D4  D3  D2  Dl  D9
    SM0 SM1 SM2 REN TB8 RB8 TI  RI
各位的定義說明如下
SMO SCON.7  Serial Port mode specifier.(NOTE 1).
SM1 SCON.6  Serial Port mode specifier.(NOTE 1).
SMO SM1 Mode Description baud Rate
0   0   0    SHIFT REGISTER FOSC/12
0   1   1    8-BitUART      Variable
1   0   2    9-BitUART      Fosc/64 or Fosc/32
1   1   3    9-BitUART      Variable
SM2 SCON.5  
  在工作方式2和方式3中允許多機通信控制位。若SM 2置1,則允許多機通
信。當串行口以方式2或方式3接收時,若SM2=1,且接收到的第9位數(shù)據(jù)(RB8)為l,則
接收到的前8位數(shù)據(jù)送入SBUF,并置位RI產(chǎn)生中斷請求;否則,RI=o,接收到的前8位數(shù)
據(jù)丟失。而當sM2=o時,則不管RB8是o還是1,都將前8位數(shù)據(jù)裝入SBUF中,并產(chǎn)生中
斷請求。
  在方式1中,若SM2=1,則只有接收到有效的停止位時,RI才置1,否則RI 0
在方式o中,SM2必須為o。
REN SCON.4  允許串行接收位。該位由軟件置位或清除。REN=1時,允許接收;REN=o時,禁止接收
TB8 SCON.3  
在工作方式2或方式3時,該位為發(fā)送的第9位數(shù)據(jù),可按需要由軟件置位或
清零。在許多通信協(xié)議中,該位常作為奇偶校驗位。在Mc5—5l多機通信中,TB8的狀態(tài)用
來表示發(fā)送的是地址幀還是數(shù)據(jù)幀,TB8=o時,為地址幀,TB8=1時,為數(shù)據(jù)幀。
RB8 SCON.2
在工作方式2或方式3時,存放接收到的第9位數(shù)據(jù),代表著接收效據(jù)的某種
特征。例如,可能是奇偶位,或為多機通信中的地址/數(shù)據(jù)標識位。在方式o中,RB8未用;在
方式1中,若SM2=o,RB8是已接收到的停止位。
TI SCON.1     
發(fā)送中斷標志。方式0中,串行發(fā)送完第8位數(shù)據(jù)后,由硬件置位;在其它方
式中,在發(fā)送停止位開始時,由硬件置位。TI=1時,表示幀發(fā)送結(jié)束,其狀態(tài)既可供軟件查
詢使用,也可申請中斷。在任何方式中,TI都必須由軟件清0。
RI SCON.O
接收中斷標志。在方式o中,接收完第8位數(shù)據(jù)后,由硬件置位;在其它方式中,
在接收到停止位的中間時由硬件置位。RI=1時,表示幀接收結(jié)束,其狀態(tài)既可供軟件查詢
使用,也可申請中斷。RI也必須靠軟件清o。
when reset ,SCON=0;
***********************************************/
  REN=1;      //enable serial receive

  TH0=256-111; //1000000/(11.0592*1000*1000/111)=10.04 us
  TL0=256-111;                 
  TR0=1;
  TR1=1; //TCON=0x50;//0B01010000;  //Timer1 enable    Timer0 enable,No external INT
  ET0=1; //enable Timer0 interupt
//  ET1=1; //enable Timer1 interupt
  ES=1;  //enable serial interupt
  EA=1;  //enable  interupt
/*************************************************
    TCON作為定時器/汁數(shù)器的技制寄存器,其功能是控制定時器T0或T1的運行或停
止,標志定時器的溢出和中斷情況。
TCON: TIMER/COUNTER CONTROL REGISTER. BIT ADDRESSABLE.
        TFl TR1  TFO  TRO  IE1  IT1  IEO  ITO
位地址  8FH  8xH  8DH  8CH  8BH  8AH  89H  88H
    (1)TF1(TCON.7):定時器T1溢出標志。TI溢出時,由硬件自動使置1,并向
CPU申請中斷。當進入個斷服務程序時,硬件自動將TFl清0。TFl也可以用軟件清0。
    (2)TR1(TCON.6);定時器T1運行控制1位。由軟件來置1或清0。 1啟動工作,0停止。
    (3)TF0(TCON.5):定時器T0溢出標志。
    (4)TR0(TCON.4):定時器T0控制位
    (5)IE1(TCON.3):外部中斷1(INT1)請求標志。
    (6)IT1(TCON.2):外部中斷1觸發(fā)方式選擇位。
    (7)1E0(TCON .l):外部中斷0(INT0)請求標志。
    (8)IT0(TCON.0):外部中斷0觸發(fā)方式選擇位。當ITo=o時,為電平觸發(fā)方式當ITo=1時,為邊沿觸發(fā)方式
       檢測到由高到低的負跳變,,則置IEo標志為1,表示外部中斷o正在向CPU申請中斷必須保證外部中斷源輸人的高電平
       和低電平的持續(xù)時間在12個時鐘周期以上
    TCON中的低四位(1E1、ITl、IE0,IT0)與中斷有關
TCON.7 Timer 1 overflow flag. Set by hardware when the Timer/Counter 1 overlows.Cleared by hardware
processer vectors to the interrupt service routine.
TCON.6 Timer 1 run control bit. Set/cleared by software to turn Timer/Counter 1 ON/OFF.
TCON.5 Timer O overflow flag. Set by hardware when the Timer/CounterO overflows.Cleared by hsrdware
proceaser vectors to the service routine.
TCON.4 Timer O run control bit. Set/cleared by software to turn Timer/Counter O ON/OFF.
TCON.3 External Interrupt 1 edge flag. Set by hardware when External Interrupt edge is detected.
Cleared by hardware when interrupt is processed.
TCON.2 Interrupt 1 type control bit. Set/cleared by sotlwsre to specify falling edge flow level triggered
External Interrupt.
TCON. 1 External Interrupt O edge flag.Setby hardware when External Interrupt edge deteeted.Cleared
by hardware when interrupt is proeeased.
TCGN.O Interrupt O type control bit. Set/cleared by sotlwsre to specify fsfling edge/low level triggered
External Interrupt.
**************************************************/
  char_init();
/*  i=0;
    for(i=0;i<100;i++)//延時1s,等待所有的機器都啟動
{       send_char(i);
       Delay1ms();
}
*/

  SPCK=0;
  while(1)
  {
//   if ((char_can_read()>=1))
   if ((1))
         {
//      cmd=get_char();
//        if (cmd==0x0a) //pc發(fā)送不同的命令字,可以執(zhí)行不同的操作
//        if (cmd=='a') //pc發(fā)送不同的命令字,可以執(zhí)行不同的操作
        //for(j=0;j<10000;j++)  delay1ms();
        //EA0=0;
        //delay1ms();
        //EA0=1;   
        //spi_write16(0);
        for(j=0;j<1000;j++)   //delay
           delay1ms();         
        EA0=1;
        spi_write16(0);
        spi_write16(0xffff);spi_write16(0xffff);spi_write16(0xffff);spi_write16(0xffff);//reset command
        spi_write16(0);
        EA0=0;        
        delay1ms();
        //去掉這行,verilog 接收會出錯,開始部分正常(<3000)
/*        for(j=0;j<15000;j++)   //delay
           delay1ms();

        clr_scr();
        for (x=0;x<1024L*1024L;x++)
        {
          //EA0=1; //
          //EA0=!EA0;
          if ((x %5 )==0)
            spi_write16(0x07e0);//green//spi_write16(j);   
          else if  ((x % 5)==1)
            spi_write16(0xf800);//blue//spi_write16(j);   
          else if  ((x % 5)==2)
            spi_write16(0x001f);//red//spi_write16(j);   
          else if  ((x % 5)==3)
            spi_write16(0x0000);//black//spi_write16(j);   
          else if  ((x % 5)==4)
            spi_write16(0xffff);//white//spi_write16(j);  
          if (x<160*1024L)
            spi_write16(0x07e0);//green
          else
          if (x<2*160*1024L)
            spi_write16(0xf800); //blue/
          else
          if (x<3*160*1024L)
            spi_write16(0);
          else
          if (x<4*160*1024L)
            spi_write16(0xffff);
          else
            spi_write16(0x001f); //red/        
          //spi_write16(x>>16);
          for(y=0;y<1;y++)
          {
  
             // delay1ms();     
          }   
          //send_char('.');//    send_char(0xd);send_char(0xa);
          //clr_scr();
        }
        spi_write16(0xffff);
           for(j=0;j<20000;j++)  
          delay1ms();
        //////////////////////////////////   
        //for(i=0;i<1024;i++)
        while (1)
        {
         for(i=0;i<768;i++)
          {
            cursor(i,i);
            delay1ms();
            spi_write16(0xffff);         
          }
          cursor(0,750);
          for (j=0;j<5000;j++) {delay1ms();    spi_write16(0xff);}
          cursor(0,0);
          for(i=0;i<768;i++)
             for (j=0;j<1024;j++)
                if (i==j)
                  spi_write16(0);   //for(n=0;n<1;n++);清屏 延時用2足夠了,如果硬件規(guī)格高,可以省略。
                else
                  spi_write16(0xffff);  //delay1ms();
          cursor(0,760);
          for (j=0;j<5000;j++) {delay1ms();    spi_write16(0xff00);}
        }
        for(i=0;i<768;i++)
          {
            cursor(i,0);
            spi_write16(0xffff);
          }
        for(i=0;i<768;i++)
          {
            cursor(i,767);
            spi_write16(0xffff);
          }
        for(i=0;i<768;i++)
          {
            cursor(0,i);
            spi_write16(0xffff);
          }
        for(i=0;i<768;i++)
          {
            cursor(767,i);   
            spi_write16(0xffff);
          }     
        for(i=0;i<768;i++)
          {
            cursor(797,i);
            spi_write16(0xffff);
          }         */
        clr_scr();
        for(k=5;k<20;k++)
        {
          cursor(0,0);//clear screen
          for(i=0;i<768;i++)
             for (j=0;j<1024;j++)
                if ((i==j)||(i==j+k*5)||(i%k==0)||(j%k==0)||(i==0)||(j==0)||(j==1023)||(i==767))
                  spi_write16(0xffff);   //for(n=0;n<1;n++);清屏 延時用2足夠了,如果硬件規(guī)格高,可以省略。
                else
                  //spi_write16(0x0);  //delay1ms();
                {
                  if (i<150)
                    spi_write16(0x07e0);//green
                  else
                  if (i<2*150)
                    spi_write16(0xf800); //blue/
                  else
                  if (i<3*150)
                    spi_write16(0);
                  else
                  if (i<4*150)
                    spi_write16(0xf800|0x07e0);
                  else
                    spi_write16(0x001f); //red/        

                }
          send_char('*');send_char(0xd);send_char(0xa);
        }  

      }
  }
//  for(i=0;i<1000;i++)//延時1s,等待所有的機器都啟動
//    Delay1ms();
//   OldTimerCounter = TimerCounter;
//   while((TimerCounter-OldTimerCounter)<=20000)//無符號數(shù)減法
//   {
//   }
  
}

src.rar

53.58 KB, 下載積分: 積分 -1


作者: wangkj    時間: 2009-9-4 19:23
那個壓縮文件是工程文件,可以直接燒程序。
作者: f.luo    時間: 2009-9-4 19:25
這個是不是該加個精啊?
作者: @︻$▅▆▇◤    時間: 2009-9-5 13:22
果然是大師級人物。我頂!
作者: wangkj    時間: 2009-9-9 16:57
for(i=0;i<768;i++)
                  {
                    cursor(i,i);
                        //for(j=0;j<5000;j++)
                         //  delay1ms();
                        spi_write16(0xffff);                
                        //for(j=0;j<5000;j++)
                        //   delay1ms();
                  }

        for(j=600;j<768;j++)
                 for(i=0;i<1024;i++)
                  {
                    cursor(i,j);
                        //for(j=0;j<5000;j++)
                         //  delay1ms();
                        spi_write16(0);                
                        //for(j=0;j<5000;j++)
                        //   delay1ms();
                  }
作者: wangkj    時間: 2009-9-9 16:58
標題: 顯示效果

照片184.jpg (50.17 KB)

照片184.jpg

照片184.jpg (50.17 KB)

照片184.jpg

作者: wangkj    時間: 2009-9-9 16:59
本帖最后由 wangkj 于 2009-9-10 16:47 編輯

本來想顯示白線,成彩色的了。寫成數(shù)據(jù)0,也是彩線。但是,如果連續(xù)寫0,能完成清屏。
可能fifo的數(shù)據(jù)輸入控制還是有點問題呀。
作者: wangkj    時間: 2009-9-9 17:00
標題: 拍照效果在室內(nèi)不好,來一張室外的對比一下。
拍照效果在室內(nèi)不好,來一張室外的對比一下。
同樣的手機拍的。轉(zhuǎn)換到640*480,原圖太大,
上不來。

照片179.jpg (127.95 KB)

照片179.jpg

作者: wangkj    時間: 2009-9-9 17:01
標題: 排的白紙也很清楚,不知道為啥拍顯示器不行。
顏色也全花了,本來是各種顏色的,結(jié)果,全白了。(底部的指示行)

照片182.jpg (37.15 KB)

照片182.jpg

作者: wangkj    時間: 2009-9-10 08:35
這個效果較好,拍不同位置,有不同的曝光量。向下一點,不是外界光線影響就成。

照片187.jpg (41.59 KB)

照片187.jpg

作者: @︻$▅▆▇◤    時間: 2009-9-10 08:58
什么時候開賣?價格是多少?
作者: wangkj    時間: 2009-9-10 09:48
還沒計劃,不過,我肯定是必須完成的。這版本,有兩個布線設計錯誤,得改版。
原計劃,本來包括一個actel的燒寫器,但不好用,只好去掉了。原來可以半成品就可以出,
到時候,自己升級就行。現(xiàn)在看來,只能我自己燒程序了。我是買的現(xiàn)成的燒寫器,500多,
每個人買一個不現(xiàn)實。所以,只能調(diào)試的沒有bug了,就可以出了。

另外,如果那位兄弟著急,想玩硬件,可以幫我用protel重新設計一下硬件,
就是一個單片機+a3p060,我原來用allegro做的。設計基本照抄這個原理圖就行。

原理圖和單片機的程序是完全開放的,也希望大家當單片機學習。
我正在考慮是不是開放一部分verilog代碼,不包括sdram控制,而是用內(nèi)置的
作者: wangkj    時間: 2009-9-10 09:50
4K ram實現(xiàn) 160×120的顯示器顯示方案,這樣,玩俄羅斯方塊之類的游戲是完全沒問題的。
這樣,這就是一個 單片機和 cpld/fpga的學習板子,如果可能內(nèi)置basic(arm版本),就是早期的8086 pc機了。

想想,不知道該不該。早期的pc也就是64K內(nèi)存,640K軟驅(qū)而已。
作者: @︻$▅▆▇◤    時間: 2009-9-10 10:23
頂一個。
作者: wangkj    時間: 2009-9-10 16:45
標題: 今天又有點進展--發(fā)現(xiàn)寫入數(shù)據(jù)錯誤的原因了
sdram clk 上升沿之前,數(shù)據(jù)必須準備好,
而不是上升沿時,同時準備數(shù)據(jù)。
這個是測試代碼,所以,只有1/4的數(shù)據(jù)是正確的。
        for(j=0;j<768;j++)
         for(i=0;i<1024;i++)
          {
            cursor(i,j);
            delay1ms();
            spi_write16(0);
          }

本來是全黑數(shù)據(jù),結(jié)果,只有1/4的是全黑的。也就是1/4是正確的。
明天得改變整個程序的結(jié)構(gòu)。
用fifo就是繁瑣,為了性能,俺忍了。繼續(xù)努力。

照片195.jpg (66.92 KB)

照片195.jpg

作者: wangkj    時間: 2009-9-10 16:47
for(j=0;j<768;j++)
                  {
                    cursor(j+20,j);
                        delay1ms();
                    spi_write16(0x3f<<5);
                  }
        for(j=0;j<768;j++)
                  {
                    cursor(j+30,j);
                        delay1ms();
                    spi_write16(0xf800);
                  }
        for(j=0;j<768;j++)
                  {
                    cursor(j+40,j);
                        delay1ms();
                    spi_write16(0xffff);
                  }
這幾條彩線,位置都對,顏色部分對。比昨天好多了,昨天是全錯。
作者: 一朝成名    時間: 2009-9-10 17:15

作者: @︻$▅▆▇◤    時間: 2009-9-11 09:00
狂頂!
作者: wangkj    時間: 2009-9-15 16:45
標題: 這次,刷新對了,但是寫入數(shù)據(jù)不對
數(shù)據(jù)沒有寫入,明天檢查,這是090904改版以來,頭一次刷新正常。
這次結(jié)構(gòu)做了很大調(diào)整。

估計是某個變量沒控制好。明天好好檢查。

照片196.jpg (80.15 KB)

照片196.jpg

作者: wangkj    時間: 2009-9-15 16:48
顯示的數(shù)據(jù)是090904的程序?qū)懭氲模?br /> sdram其實幾分鐘不刷新數(shù)據(jù)都不會丟失。只是可能有幾個錯誤數(shù)據(jù),大部分是沒問題的。
如果真的想sdram數(shù)據(jù)消失的話,只能等一天。這時候,讀出來的就是混亂數(shù)據(jù)了。

讀取的數(shù)據(jù),和讀取方式還有關系,不同的讀取方式,讀取是的亂碼非常不同。

但是,如果是正常數(shù)據(jù),不同的操作方式,回讀的就是正常的了。

估計是sdram中的電荷電壓處于臨界態(tài),不同讀取方式,電壓不同,比較結(jié)果不同所致。
作者: ecgui.com    時間: 2009-9-16 12:10
很不錯!加油!
作者: wangkj    時間: 2009-9-16 13:32
原來的采用epm570的已經(jīng)完全成功驅(qū)動1024*768,無等待狀態(tài)輸入。
epm240沒有實際焊接,但支持480*272的編譯結(jié)果是93%邏輯占用,應該可以用。
如果采用epm240和busy信號,應該支持640*480 25Mhz點頻應該沒問題,
這應該是最低成本方案,可采用stc1052 3元的單片機,采用25M晶體,從
作者: wangkj    時間: 2009-9-16 13:35
單片機的clk_out輸出的震蕩信號同時驅(qū)動8元的epm240,外加2元的sdram,總共成本應該能控制到15-20元。

如果誰有大量需要,咱可以考慮,這個低成本方案,我實在想不出來必要性。
否則,還是考慮新能更好的a3p060方案吧,這個更通用。性價比更好。這個得等一段時間。我正在努力調(diào)試中。
有時候,成本不是最主要的,主要的是有錢賺。
作者: wangkj    時間: 2009-9-16 13:37
我放棄epm570是因為只想支持一種cpld,不想同時支持幾種,1024×768性能沒有差異。
但更高分辨率,或者做更復雜的事情,epm570就不夠了。
現(xiàn)在,同樣價格的a3p060我才用到了50%的資源,哪怕支持到1920*1200也不會增加幾個單元。
剩下的單元,可以做更多的事情。
作者: @︻$▅▆▇◤    時間: 2009-9-17 08:53

作者: wangkj    時間: 2009-9-18 17:17
這是最新結(jié)果,寫數(shù)據(jù)不閃屏了,寫入的第二個數(shù)據(jù)是對的。第一個可能是色彩數(shù)據(jù)可能和光標位置相同。寫的數(shù)據(jù)好像少了幾個。
快速刷屏,屏幕非常穩(wěn)定,上午是狂閃。剛剛修正的這個bug.
希望下周能完成調(diào)試。

照片199.jpg (126.9 KB)

照片199.jpg

照片200.jpg (140.32 KB)

照片200.jpg

照片201.jpg (142.92 KB)

照片201.jpg

照片202.jpg (136.39 KB)

照片202.jpg

作者: wangkj    時間: 2009-9-21 11:11
標題: 單色連續(xù)數(shù)據(jù)寫入已經(jīng)正常
斜線如果成白色,如果單色色塊不多那么幾個像素,就完全正常了。
繼續(xù)調(diào)試,周末雖然沒干活,但一直再思考。今天這是剛剛改進的控制程序。

3.JPG (57.46 KB)

3.JPG

作者: wangkj    時間: 2009-9-21 15:54
標題: 漢字測試
有些糊,但是大致還算正確。

照片255.JPG (259.44 KB)

照片255.JPG

1.jpg (1.8 KB)

1.jpg

作者: wangkj    時間: 2009-9-23 09:48
這次,寫入位置和顏色完全正確了,只是多了些拖尾,這是sdram寫入信號沒處理好。

照片258.JPG (95.35 KB)

照片258.JPG

作者: wangkj    時間: 2009-9-23 14:41
更進一步的改進,效果更好了。繼續(xù)改進中。

照片259.JPG (135.55 KB)

照片259.JPG

照片260.JPG (125.08 KB)

照片260.JPG

作者: wangkj    時間: 2009-9-23 14:42
for(y=500;y<768;y+=24)
           for(i=0;i<24;i++)
           {
             cursor(100+y,y+i);
                for (j=0;j<88/8;j++)  
           for (k=0;k<8;k++)
            {
              if (((pic[i*(88/8)+j]<<(k)&0x80)==0x80))
                 spi_write16(0xffff);//0xffff;
              else
                 spi_write16(0x0);               
            }
            }                   
        for (j=0;j<768;j++)
                {
                                  cursor(514,j);
                                  spi_write16(0x1f);   //for(n=0;n<1;n++);清屏 延時用2足夠了,如果硬件規(guī)格高,可以省略。
                                }
        for (j=0;j<768;j++)
                {
                                  cursor(1,j);
                                  spi_write16(0x1f);   //for(n=0;n<1;n++);清屏 延時用2足夠了,如果硬件規(guī)格高,可以省略。
                                }
        for (j=0;j<768;j++)
                {
                                  cursor(1018,j);
                                  spi_write16(0x1f);   //for(n=0;n<1;n++);清屏 延時用2足夠了,如果硬件規(guī)格高,可以省略。
                                }

                for(k=0;k<100;k+=5)
                {
                  for (j=0;j<768;j++)
                {
                                  cursor(j,j+k);       
                                  if (k<5)
                                        spi_write16(0x07e0);//green
                                  else
                                  if (k<5*2)
                                        {
                                          spi_write16(0xf800); //blue
                                          spi_write16(0xf800); //blue
                                          spi_write16(0xf800); //blue
                                        }
                                  else
                                  if (k<5*3)
                                        spi_write16(0x1f); //red
                                  else
                                  if (k<5*4)
                                        spi_write16(0x0821); //灰
                                  else
                                  if (k<5*5)
                                        spi_write16(0xffff);//白               
                                  else
                                        spi_write16(0xff);//黃色               
                                }
                }


            cursor(0,645);       
        for (j=0;j<1024;j++)
                {
                                  spi_write16(0x1f);   //for(n=0;n<1;n++);清屏 延時用2足夠了,如果硬件規(guī)格高,可以省略。
                                }
            cursor(0,648);       
        for (j=0;j<1024;j++)
                {
                                  spi_write16(0x821);   //for(n=0;n<1;n++);清屏 延時用2足夠了,如果硬件規(guī)格高,可以省略。
                                }
        for (i=0;i<100;i++)
            {
                 cursor(462,334+i);       
         for (j=0;j<100;j++)
                {
                                  spi_write16(0x0ffff);   //for(n=0;n<1;n++);清屏 延時用2足夠了,如果硬件規(guī)格高,可以省略。
                                }
                }
                for (j=0;j<25000;j++) {delay1ms();}
                for (j=0;j<25000;j++) {delay1ms();}
                cursor(0,0);
                for(i=0;i<768;i++)
                for (j=0;j<1024;j++)
                   spi_write16(0);   //for(n=0;n<1;n++);清屏 延時用2足夠了,如果硬件規(guī)格高,可以省略。

                for (j=0;j<25000;j++) {delay1ms();}
   
                       
                for(k=5;k<6;k++)
                {
                  cursor(0,0);//clear screen
                  for(i=0;i<768;i++)
                for (j=0;j<1024;j++)
                if ((i==j)||(i==j+k*5)||(i%k==0)||(j%k==0)||(i==0)||(j==0)||(j==1023)||(i==767))
                  spi_write16(0xffff);   //for(n=0;n<1;n++);清屏 延時用2足夠了,如果硬件規(guī)格高,可以省略。
                else
/*                  spi_write16(0x0);  //delay1ms(); */
                                {
                                  if (i<150)
                                        spi_write16(0x07e0);//green
                                  else
                                  if (i<2*150)
                                        spi_write16(0xf800); //blue/
                                  else
                                  if (i<3*150)
                                        spi_write16(0);
                                  else
                                  if (i<4*150)
                                        spi_write16(0xf800|0x07e0);
                                  else
                                        spi_write16(0x001f); //red/               

                                }
  
                  send_char('*');send_char(0xd);send_char(0xa);
        }  

      }
  }
作者: wangkj    時間: 2009-9-23 14:42
這是測試源碼。
作者: wangkj    時間: 2009-9-24 17:29
又一點進展

照片280.jpg (41.38 KB)

照片280.jpg

作者: 一朝成名    時間: 2009-9-24 19:28
我有個屏保程序,老王應該弄上去,你這個走的太難看了~~
作者: wangkj    時間: 2009-9-25 11:27
兄弟,把你的屏保程序給我,我試試看,不過,不能超過5K,我的單片機,只有5k空間。

這次,還差一點點,左邊多了2個像素,偶爾會寫錯數(shù)據(jù)。本來是很正規(guī)的方格,多來些線條干擾。估計是那個條件沒控制好。不過,數(shù)據(jù)fifo的輸入數(shù)量,和讀取數(shù)量已經(jīng)正確了。

照片280.jpg (89.32 KB)

照片280.jpg

照片283.jpg (158.97 KB)

照片283.jpg

照片284.jpg (159.93 KB)

照片284.jpg

照片285.jpg (150.15 KB)

照片285.jpg

照片286.jpg (142.85 KB)

照片286.jpg

作者: wangkj    時間: 2009-9-25 11:28
那些多余的小橫線,就是bug,查找中。
作者: 一朝成名    時間: 2009-9-25 12:37
一段時間想在機頂盒里加一個簡單的屏保程序,想起來win下有一個小球在畫面上彈來彈去的屏保……
于是就想些一個這樣的屏保程序,在網(wǎng)上搜了一把也沒找到,就自己寫了,開始的思路是寫一個通用的y=k*x的函數(shù),這個小logo就按照函數(shù)彈,但是那一個麻煩阿,后來的思路轉(zhuǎn)變寫成了下面的模樣…事實證明開始的時候是自己把問題復雜化。
函數(shù)不包含圖片的刷新函數(shù),這個可以根據(jù)自己的環(huán)境寫,修改x,y的步進調(diào)整線的斜率,修改初始坐標,也可以隨即化,主要是寫的屏保的小算法……

俺小蝦米班門弄斧了哈哈…………
很多電視機也有這樣的屏保,因為是盒子里面的程序不能模擬就不能傳圖片了……

大家有什么好的算法上傳倆,這玩意這費了我N多腦細胞…………暈


目標:實現(xiàn)一個logo在桌面內(nèi)隨機直線行走碰見邊緣反彈

#define     LOGO_DIAPLMENT                     64      //每次位移的像素
#define     SCREENSAVE_WIDTH                640    //大屏幕的寬、高
#define     SCREENSAVE_HIGH                   480
#define     LOGO_WIDTH                           190     //logo的寬、高
#define     LOGO_HIGH                              80

void screensave (){

       static  int pos_count_x = pos_count_y = 0;

       static  int x_last_state = y_last_state = 1;//初始狀態(tài)      

         if (pos_count_x < LOGO_DIAPLMENT)
                x_last_state = 1;
         else if (pos_count_x >= SCREENSAVE_WIDTH - LOGO_WIDTH - LOGO_DIAPLMENT)
                x_last_state = 2;

        if (pos_count_y < LOGO_DIAPLMENT)
                y_last_state = 1;
         else if (pos_count_y >= SCREENSAVE_HIGH - LOGO_HIGH - LOGO_DIAPLMENT)
                y_last_state = 2;
      


            if (y_last_state == 1)
                pos_count_y += LOGO_DIAPLMENT;
            else
                pos_count_y -= LOGO_DIAPLMENT;

           if (x_last_state == 1)
                pos_count_x += LOGO_DIAPLMENT;
            else
                pos_count_x -= LOGO_DIAPLMENT;

}
作者: 一朝成名    時間: 2009-9-25 12:40
一共才幾行程序把你那個“中文測試”模塊鑲嵌進去。只要把寫圖片和擦圖片的函數(shù)加進去就行
就會出現(xiàn)一個彈來彈去的程序。。。。肯定比較好看

主要算法,4行
作者: wangkj    時間: 2009-9-25 13:15
你這里好多中文字符,咋搞的?
直接貼過來就亂碼了。
作者: wangkj    時間: 2009-9-25 13:24
void screensave(void){

       static  int pos_count_x =0 , pos_count_y=0;

       static  int x_last_state =1,  y_last_state = 1;//初始狀態(tài)      

         if (pos_count_x < LOGO_DIAPLMENT)
                x_last_state = 1;
         else if (pos_count_x >= SCREENSAVE_WIDTH - LOGO_WIDTH - LOGO_DIAPLMENT)
                x_last_state = 2;

        if (pos_count_y < LOGO_DIAPLMENT)
                y_last_state = 1;
         else if (pos_count_y >= SCREENSAVE_HIGH - LOGO_HIGH - LOGO_DIAPLMENT)
                y_last_state = 2;
      


            if (y_last_state == 1)
                pos_count_y += LOGO_DIAPLMENT;
            else
                pos_count_y -= LOGO_DIAPLMENT;

           if (x_last_state == 1)
                pos_count_x += LOGO_DIAPLMENT;
            else
                pos_count_x -= LOGO_DIAPLMENT;


                      for(y=500;y<768;y+=24)
           for(i=0;i<24;i++)                 //顯示圖片,漢字測試
           {
             cursor(100+y,y+i);                 //光標移動一次,連續(xù)輸入數(shù)據(jù),速度較快
                for (j=0;j<88/8;j++)  
           for (k=0;k<8;k++)
            {
              if (((pic[i*(88/8)+j]<<(k)&0x80)==0x80))
                 { spi_write16(0xffff); }
              else
                 { spi_write16(0x0);    }            
            }
            }


}
作者: wangkj    時間: 2009-9-25 13:24
改了一半,算了,不想了,還是找俺自己的bug吧。
作者: 一朝成名    時間: 2009-9-25 15:43
你就用個坐標就完事~
先把舊圖片擦掉,新坐標畫圖~~~~
作者: wangkj    時間: 2009-9-25 16:17
等俺有空了,改改試試看。
作者: wangkj    時間: 2009-9-25 17:25
今天調(diào)整的不錯,剩下很少的錯誤了。這是調(diào)整后的真實拍攝圖片,只有少量幾個錯誤的小點。橫線方向貌似不連續(xù)的線,是數(shù)碼相機和電腦分辨率差造成的。實際上是非常連續(xù)的。只有偶爾出現(xiàn)的幾個紅色點上錯誤的,照片上幾乎看不出來。另外一個問題,就是寫圖像時,屏幕抖動。

照片287.jpg (213.07 KB)

照片287.jpg

照片289.jpg (178.33 KB)

照片289.jpg

照片290.jpg (189.63 KB)

照片290.jpg

作者: wangkj    時間: 2009-10-12 13:08
最新的現(xiàn)實效果,還是有些花點,屏基本不閃,算法改動很大。

照片324.jpg (90.41 KB)

照片324.jpg

作者: wangkj    時間: 2009-10-12 13:10
紅色數(shù)字的含義:一行紅色,表示的是像素位置,對齊的黃色豎線距離50點,藍色20點,紅色10點。右下的數(shù)字,表示方格線的間距,單位是像素數(shù)。這個是間距23的方格。
作者: Netjob    時間: 2009-10-12 14:46
其實這個項目就是個RAM DAC,  沒有2D/3D/SSE,OPGL等功能
也就是最簡單的顯卡了。區(qū)別是RGB與VGA輸出的不同。
顯卡的緩存至少有2M,4M的SDRAM/DDRAM上真彩的基本條件。

沒有好的,寬帶硬件RAM DAC,失真應該比較嚴重,估計。

最后 還是很佩服樓主的精神的。從無到有,從設計的意念。。。。
作者: wangkj    時間: 2009-10-12 15:39
我這個是8M的顯存,才2-3元的sdram,難度也就是因為這個。
fifo模式讀寫,無等待周期,只用很少的宏單元,這就是難度。
有難度,不容易被仿制才是好產(chǎn)品。
sdram搞定了,fifo搞定了,vga搞定。
加起來,就是這個結(jié)果,還差一點,但基本能用了。如果誰想?yún)⑴c,可以幫我設計pcb先。
俺相信也能搞定。
其實,%1電阻,用RGB 565格式,誤差是6%,3%,6%完全在精度范圍內(nèi),就是這幾個電阻的選值
一直不知道該選多少,目前是:0.5k,1k,2k,4k,8k。
作者: Netjob    時間: 2009-10-13 09:54
其實網(wǎng)上介紹這個CPLD VGA的資料也很多的~~
作者: wangkj    時間: 2009-10-14 09:32
現(xiàn)在有個非常猶豫的事情,這可能是我自己決策錯誤,
本來以為,換actel的這個cpld用兩個月就能搞定,現(xiàn)在三個月過去了,
事情還不圓滿,有些問題還是不是很清楚,部分代碼還得重新寫。
不知道何時能完成,或許一周,或許2-3個月。最多肯定不會到年底。

如果用epm240,也可以搞定640*480 真彩模式,用
作者: wangkj    時間: 2009-10-14 09:40
STC的單片機,本身可以產(chǎn)生晶振信號,VGA 640x480@60 Hz Industry standard (pixel clock 25.175 MHz),用這個頻點的兩腿晶振,就很容易,低成本做出來,但缺點是需要等待,必須用busy信號在回掃區(qū)寫入數(shù)據(jù)。優(yōu)點是及其便宜。
本身stc單片機就幾塊錢,epm240都是爛大街的片子,非好便宜也非常好買。這個應該很快可以做出來。這種帶等待周期的模式,對于我而言,非常容易。

如果回到3個月之前,我肯定會選擇后面放方法,但是,研發(fā)就是這樣,很多問題,只有做了才能發(fā)現(xiàn),這種現(xiàn)象也很正常。

現(xiàn)在做的這個方案,是給mini2440配套用的,當然,也可以支持任意的其他arm(硬件略微修改),分辨率可以做到1920*1200,當然,verilog程序也非常精巧,因為精巧,時序也非常不好安排,總是出現(xiàn)一些小問題。而且epm240的方案,非常簡單,程序復雜程度比這個小很多很多。用a3p060的方案,這么難搞,是當初無法估計的--這個片子從來沒用過。
作者: 李冬發(fā)    時間: 2009-10-16 12:27
幫你頂一個,不錯的東西。
作者: wangkj    時間: 2009-10-20 11:17
基本好啦,左邊多一條線。
沒有花點,不閃屏,非常好。有的漢字是寫圖片,有的漢字是寫點。所以有的漢字上面多點東西,那是以前寫屏留下的痕跡。
另外,顯示器不太干凈,看這挺好,拍出來多了幾個白點。

照片332.jpg (232 KB)

照片332.jpg

照片333.jpg (157.37 KB)

照片333.jpg

照片336.jpg (150.61 KB)

照片336.jpg

作者: wangkj    時間: 2009-10-20 11:18
清理代碼,檢查多余的那條線。進展不錯。另外,股票大漲俺的股票+1100多啦。
作者: 老郭    時間: 2009-10-20 11:49
不錯。搞完了是不是應該慶祝一下?
作者: wangkj    時間: 2009-10-20 11:58
還沒最終完成,還得修正最后那條多余的線,另外,得重新做一版pcb,考慮一下推廣問題。
作者: wangkj    時間: 2009-10-20 12:56
原理圖/程序/pcb圖,bom表。verilog這個不能公開,不要給我要。更多資料在qq群:630571

mini2440_open.rar

1.21 MB, 下載積分: 積分 -1


作者: terrysun    時間: 2009-10-20 16:32
欣賞一下!
作者: wangkj    時間: 2009-10-20 18:24
把測試語句去掉,有些點錯位了。明天把所有的調(diào)試語句去掉,然后再修正。
基本就是sdram和fifo的讀寫時機問題。挨個測試沒辦法,不好仿真啊。
作者: wangkj    時間: 2009-10-22 10:17
顯示不錯位了,nnd,原來是a3p060的fifo使用和手冊不一致。
手冊說是10ns出數(shù)據(jù),實際上,錯后來兩個周期(65M時鐘)。

另外發(fā)現(xiàn)一個問題,寫入第一個數(shù)據(jù),不顯示,寫入第二個數(shù)據(jù)第一才出來。
也就是,cpld保持這一個數(shù)據(jù),這可能和第一個一個問題。
我是按照手冊編程的,這個可能得修正。
作者: wangkj    時間: 2009-10-22 10:18
圖片

照片343.jpg (35.75 KB)

照片343.jpg

作者: 原野之狼    時間: 2009-10-22 10:46
王會計做的東西不錯。
話說找出了數(shù)據(jù)手冊的錯誤是否可以向原廠申請獎勵呢,呵呵~
作者: wangkj    時間: 2009-10-22 10:54
另外,就是其fifo的clk,手冊上說可以輸入輸出不同步,實際上,這樣會出錯。
只能用同樣的時鐘。 這個肯定是bug。
上面提到的那個,也可能是我的布線時間過長,
但也不至于用兩個周期啊。懶得檢查了。
好用就行。
作者: wangkj    時間: 2009-10-22 14:14
for (j=0;j<40;j++)                    //recentage
         for (i=1024/2-20;i<1024/2+20;i++)            
          {
            cursor(i,768/2-20+j);
            spi_write16(0xffff);
          }
        for (i=1024/2-20;i<1024/2+20;i++) //mid line
          {
            cursor(i,768/2);
            spi_write16(0);
          }
應該是一個白色的填充方框,被中間的黑線完全隔開,少了一個點。
如果增加一個spi_write指令或者cursor指令,這個點就出現(xiàn)了。
不是少刷新了一個數(shù)據(jù),就是fifo有個數(shù)據(jù)沒寫入sdram。
這是用那的手機拍攝的,效果自我感覺不錯。也算是對這個DIY項目的一個投入吧。
很多眼睛看不清的,就用這個手機的微距功能拍攝,放大來看。

1.jpg (35.39 KB)

1.jpg

照片346.jpg (34.95 KB)

照片346.jpg

作者: 一朝成名    時間: 2009-10-22 15:12
把數(shù)據(jù)算好了寫死,雖說cpu很快,但是一直計算,也是浪費時間的
特別對你這個要求性能的東西~
作者: wangkj    時間: 2009-10-22 15:43
那些數(shù)據(jù)會自動優(yōu)化掉的。這個放心。
作者: wangkj    時間: 2009-10-23 19:03
今天去cypress展會,沒調(diào)試,不過,一直再考慮,
基本考慮明白了,就是數(shù)據(jù)從fifo讀取寫入sdram的時候,少了一個周期!
按照actel的手冊,一個周期足夠,實際上必須兩個周期,下周試試看。
改起來,比較麻煩,數(shù)據(jù)流有點亂了。得重新規(guī)劃。
作者: 一朝成名    時間: 2009-10-23 20:37
恭喜會計收工了。。。。。
作者: wangkj    時間: 2009-10-27 10:35
離收工遠的呢,得重新做pcb,增加硬件2d/3d能力,還得調(diào)試mini2440兼容部分。
不知道后面咋運作。商業(yè)化俺確實不懂。
作者: wangkj    時間: 2009-10-27 10:50
這回完全正常了,多的那一個點也搞定了。跟我的猜測相同,改起來花了不少功夫。
新的芯片,不要相信他的手冊和宣傳,只能作為參考,一切,還得自己去驗證。
所以,在新的項目中,不到不得已,不要采用新元件。
也就是說,新的元件,必須有一組人馬做小白鼠,做一些可有可無,甚至驗證性的項目。

照片386.jpg (139.73 KB)

照片386.jpg

照片385.jpg (66.39 KB)

照片385.jpg

作者: @︻$▅▆▇◤    時間: 2009-10-27 12:01

作者: 一朝成名    時間: 2009-10-27 12:20
商家一般不會承認自己的芯片有bug的。。。。。。。。。。。
作者: wangkj    時間: 2009-11-6 09:33
DIY顯存8M的單片機顯卡(基于stm32,allegro)專區(qū)
http://bbs.eeworld.com.cn/forum-97-1.html

自己一個人干非常累,好在幾個群友幫我弄了個專區(qū)。大家一起做

rp老弟,幫我們搞定allegro16.2安裝吧,確定用allegro了。我現(xiàn)在用的15.5

這里可以同步轉(zhuǎn)播 ,或者 rp 弄個allegro專區(qū)。
作者: alpha321    時間: 2009-11-12 20:45
樓主好精神,終于做出來了!
作者: wangkj    時間: 2009-12-2 09:18
http://bbs.eeworld.com.cn/thread-90402-1-1.html
這是原始鏈接,
感謝小天同學的努力,原理圖差不多完成了,應該開始布線了。

20091201_0cfbd2e7ab0d93414dd6dcG6ZNpLNOE4.jpg.thumb.jpg (30.89 KB)

20091201_0cfbd2e7ab0d93414dd6dcG6ZNpLNOE4.jpg.thumb.jpg

20091201_2b4caea9495a07bcc855pq4GxrMcXvPJ.jpg.thumb.jpg (50.16 KB)

20091201_2b4caea9495a07bcc855pq4GxrMcXvPJ.jpg.thumb.jpg

20091201_7ec9801b8d7ccb266426ZenKhipUOLaN.jpg.thumb.jpg (42.63 KB)

20091201_7ec9801b8d7ccb266426ZenKhipUOLaN.jpg.thumb.jpg

20091201_8bd78994be2e4f0a46c6nrqgI47jYu3R.jpg.thumb.jpg (88.68 KB)

20091201_8bd78994be2e4f0a46c6nrqgI47jYu3R.jpg.thumb.jpg

20091201_17eab8179d030f93a6fbwTXpc5qmfdUJ.jpg.thumb.jpg (47.91 KB)

20091201_17eab8179d030f93a6fbwTXpc5qmfdUJ.jpg.thumb.jpg

20091201_53ae9d5fc3e8729c76fas87ln50sDbI8.jpg.thumb.jpg (62.12 KB)

20091201_53ae9d5fc3e8729c76fas87ln50sDbI8.jpg.thumb.jpg

20091201_55be081a73ad565844a7m0xPBZA90B3X.jpg.thumb.jpg (58.07 KB)

20091201_55be081a73ad565844a7m0xPBZA90B3X.jpg.thumb.jpg

20091201_3912bd41fc3128d33dbbMCgNLSJsBVaP.jpg.thumb.jpg (39.68 KB)

20091201_3912bd41fc3128d33dbbMCgNLSJsBVaP.jpg.thumb.jpg

20091201_5122f496909bfb70fd11E0bvTSa5hbmP.jpg.thumb.jpg (37.53 KB)

20091201_5122f496909bfb70fd11E0bvTSa5hbmP.jpg.thumb.jpg

20091201_610645e32e60633178ddAir8bmo08w5h.jpg.thumb.jpg (61.15 KB)

20091201_610645e32e60633178ddAir8bmo08w5h.jpg.thumb.jpg

20091201_bce00dc1e25c770e9648BaSVZ2L5uCKr.jpg.thumb.jpg (43.87 KB)

20091201_bce00dc1e25c770e9648BaSVZ2L5uCKr.jpg.thumb.jpg

20091201_c1d68063bc4a552d2d40rPGrfAkUiaZp.jpg.thumb.jpg (56.97 KB)

20091201_c1d68063bc4a552d2d40rPGrfAkUiaZp.jpg.thumb.jpg

20091201_cfdbfcf41c9136fcdd631sEm4JekVNaS.jpg.thumb.jpg (49 KB)

20091201_cfdbfcf41c9136fcdd631sEm4JekVNaS.jpg.thumb.jpg

作者: wangkj    時間: 2010-1-5 15:30
冒雪周一取得板子,去的時候,打車。
回來的時候,只能做地鐵倒347,根本沒空車。

照片424.jpg (39.73 KB)

照片424.jpg

照片427.jpg (2.2 MB)

照片427.jpg

照片428.jpg (604.36 KB)

照片428.jpg

照片429.jpg (574.89 KB)

照片429.jpg

照片430.jpg (571.15 KB)

照片430.jpg

照片431.jpg (616.64 KB)

照片431.jpg

作者: 匿名    時間: 2010-2-6 11:16
太好了
作者: 長話短說    時間: 2010-6-1 10:21
漂過。
作者: lfy129977    時間: 2010-6-2 11:45
不錯!
作者: amender    時間: 2010-6-17 15:46
很需要這個,先留個印子再看
作者: yespiao    時間: 2010-6-24 22:20
看看
作者: Findlife    時間: 2010-8-8 23:00
牛人!!!膜拜然后樹立榜樣
作者: center123    時間: 2010-8-14 10:24
現(xiàn)在的顯卡技術開始使用GPGPU
作者: yespiao    時間: 2010-8-26 21:36
看看
作者: dong_abc    時間: 2010-8-29 13:55
瞧瞧
作者: noescape    時間: 2010-9-17 22:31
效果怎么樣....
作者: wangkj    時間: 2010-11-5 17:08
成品
wangkj.taobao.com
作者: wbsh    時間: 2010-12-8 16:20

作者: arnoldlai    時間: 2013-8-12 00:04
真是太棒了。





歡迎光臨 電子工程網(wǎng) (http://m.qingdxww.cn/) Powered by Discuz! X3.4
主站蜘蛛池模板: www亚洲欲色成人久久精品 | 羞羞视频网站 | 国产精品成人不卡在线观看 | 黄色免费网站大全 | 二区在线观看 | 牛牛精品国内免费一区 | 91天堂素人精品系列全集亚洲 | 贵州美女一级纯黄大片 | 国产五月天在线 | 日韩影片在线观看 | 亚洲蜜芽在线精品一区 | 日韩欧美一区二区三区中文精品 | 最新综艺 | 99国产精品视频免费观看 | 香蕉视频在线免费播放 | 牛牛影视成人午夜影视 | 中文字幕一区精品 | 不卡视频免费在线观看 | 四虎精品 | 久久久久久国产精品mv | 四虎永久在线精品视频免费观看 | 国产五月天在线 | 天堂网在线观看在线观看精品 | 天天视频免费入口 | 女人张开腿让男人桶免费最新 | 麻豆中文字幕在线观看 | 欧美另类视频在线观看 | 国产免费私人影院永久免费 | 成年网站在线观看 | 青青草手机视频在线观看 | 日韩在线视精品在亚洲 | 激情五月婷婷开心 | 高清视频一区二区三区 | 国产成人久久精品区一区二区 | 久久精品免费视频观看 | 222aaa天堂| 精品国产高清不卡毛片 | 麻豆婷婷 | 免费手机黄色网站 | 国产一区二区高清视频 | 六月婷婷在线观看 |