上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top
なんとかLCD表示ができるようになりました。


最初バックライト表示だけで何もでてこなかったのであせりました。そこでAnalogDiscoveryのロジアナモードを初めて使ってみたところ、RS信号がWR中に切れていることが分かりました。

CSとWRはPMP制御ですがRSはIOポートとしてソフト制御でした。PMPにデータを書いてからRSを動かしていたのですが、それだとPMPのFIFOによるタイムラグで実際のライトが行われる前に切れてしまうのですね。PMPステータスをみてライトが完了してからRSを変えるようにしたら表示が出るようになりました。

折角使ってみたのでロジアナモード画面を。この波形はタイミング改善後です。




「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">


ソースは以下の通りです。
LCDの設定については同じLCDCを使っているAITENDOLCDのリンク先に有ります「松浦光洋さんの研究開発ページ」のカラ―バーコードを参考にさせていただきました。

/*
* File: main.c
*
* PIC32MX250F128B PMP TEST
* Created on 2015/05/23, 14:40
*/

#include
#include
#include

//********** CONFIG **********************

#pragma config PMDL1WAY = OFF
#pragma config IOL1WAY = OFF
#pragma config FUSBIDIO = OFF
#pragma config FVBUSONIO = OFF
#pragma config FPLLIDIV = DIV_1
#pragma config FPLLMUL = MUL_15
#pragma config FPLLODIV = DIV_1
#pragma config FNOSC = FRCPLL
#pragma config FSOSCEN = OFF
#pragma config IESO = OFF
#pragma config POSCMOD = OFF
#pragma config OSCIOFNC = OFF
#pragma config FPBDIV = DIV_1
#pragma config FCKSM = CSDCMD
#pragma config WDTPS = PS1
#pragma config WINDIS = OFF
#pragma config FWDTEN = OFF
#pragma config FWDTWINSZ = WINSZ_50
#pragma config DEBUG = OFF
#pragma config JTAGEN = OFF
#pragma config ICESEL = RESERVED
#pragma config PWP = OFF
#pragma config BWP = OFF
#pragma config CP = OFF

//************ PROTOTYPES ******************

void ILI9325_INDEX(unsigned short);
void ILI9325_SET(unsigned short, unsigned short);
void ILI9325_DATA_WRITE(unsigned short);
void ILI9325_Initial(void);
void delay_ms(int);
void ILI9325_SETPIXEL(short, short, short);
void ILI9325_BOXFILL(short, short,short, short, short);
void ILI9325_BOX(short, short,short, short, short);

//************ DEFINE ****************
#define LCD_RST LATBbits.LATB14
#define LCD_RS LATBbits.LATB5

//************ MAIN ******************

int main() {
int i,j;

ANSELB = 0;
TRISB = 0x0000000;
OSCCON = 0;

IEC1CLR = 0x0004; // Disable PMP interrupt
PMCON = 0x0780;// Configure the addressing and polarities?
PMMODE = 0x0251; // Configure the mode and timing
PMADDR = 0x4000; // CS1-2 ENABLE
PMAEN = 0x4000; // EnablChip Select lines
PMCON = 0x8780; // Stop PMP module and clear control register


ILI9325_Initial();

for (i=0;i<50;i++) {
ILI9325_BOXFILL(i,i,239-i,319-i,i*100) ;
}

ILI9325_BOXFILL(100,100,120,120,0xf800) ;
ILI9325_BOXFILL(120,120,140,140,0x07e0) ;
ILI9325_BOXFILL(140,140,160,160,0x001f) ;
while(1) {
}
}

//************* ROUTINES *********************

void ILI9325_BOXFILL(short x0, short y0,short x1, short y1, short rgb)
{
short x,y;
for (y=y0;y<=y1;y++){
ILI9325_SETPIXEL(x0,y,rgb);
for (x=x0+1;x<=x1;x++){
ILI9325_SETPIXEL(-1,0,rgb);
}
}
}
void ILI9325_BOX(short x0, short y0,short x1, short y1, short rgb)
{
short x,y;
ILI9325_SETPIXEL(x0,y0,rgb);
for (x=x0+1;x<=x1;x++){
ILI9325_SETPIXEL(-1,0,rgb);
}
ILI9325_SETPIXEL(x0,y1,rgb);
for (x=x0+1;x<=x1;x++){
ILI9325_SETPIXEL(-1,0,rgb);
}
for (y=y0;y<=y1;y++){
for (x=x0;x<=x1;x++){
ILI9325_SETPIXEL(x,y0,rgb);
ILI9325_SETPIXEL(x,y1,rgb);
}
}
}

void ILI9325_SETPIXEL(short x, short y, short rgb)
{
if (x>=0) {
ILI9325_SET(0x0020,x);
ILI9325_SET(0x0021,y);
ILI9325_INDEX(0x0022);
}
ILI9325_DATA_WRITE(rgb);
}

void ILI9325_INDEX(unsigned short index)
{
while((PMSTAT & 0x8000)!=0){};LCD_RS = 0;PMDIN = (unsigned char)(index >> 8);
while((PMSTAT & 0x8000)!=0){};PMDIN = (unsigned char)(index & 0x00ff);
}

void ILI9325_SET(unsigned short index, unsigned short data)
{
while((PMSTAT & 0x8000)!=0){};LCD_RS = 0;PMDIN = (unsigned char)(index >> 8);
while((PMSTAT & 0x8000)!=0){};PMDIN = (unsigned char)(index & 0x00ff);
while((PMSTAT & 0x8000)!=0){};LCD_RS = 1;PMDIN = (unsigned char)(data >> 8);
while((PMSTAT & 0x8000)!=0){};PMDIN = (unsigned char)(data & 0x00ff);
}

void ILI9325_DATA_WRITE(unsigned short data)
{
while((PMSTAT & 0x8000)!=0){};LCD_RS = 1;PMDIN = (unsigned char)(data >> 8);
while((PMSTAT & 0x8000)!=0){};PMDIN = (unsigned char)(data & 0x00ff);
}

void ILI9325_Initial(void)
{
LCD_RS = 1;
LCD_RST = 0; // **** LCD RESET **********
delay_ms(200);
LCD_RST = 1;

//******* SET REGISTERS **********
ILI9325_SET(0x0001,0x0100);
ILI9325_SET(0x0002,0x0700);
ILI9325_SET(0x0003,0x1030);
ILI9325_SET(0x0004,0x0000);
ILI9325_SET(0x0008,0x0207);
ILI9325_SET(0x0009,0x0000);
ILI9325_SET(0x000a,0x0000);
ILI9325_SET(0x000c,0x0000);
ILI9325_SET(0x000d,0x0000);
ILI9325_SET(0x000f,0x0000);

ILI9325_SET(0x0010,0x0000);
ILI9325_SET(0x0011,0x0000);
ILI9325_SET(0x0012,0x0000);
ILI9325_SET(0x0013,0x0000);
delay_ms(200);
ILI9325_SET(0x0010,0x1490);
ILI9325_SET(0x0011,0x0227);
delay_ms(200);
ILI9325_SET(0x0012,0x001a);
delay_ms(200);
ILI9325_SET(0x0013,0x1400);
ILI9325_SET(0x0029,0x0019);
ILI9325_SET(0x002b,0x000b);
delay_ms(200);
ILI9325_SET(0x0020,0x0000);
ILI9325_SET(0x0021,0x0000);
ILI9325_SET(0x0030,0x0000);
ILI9325_SET(0x0031,0x0607);
ILI9325_SET(0x0032,0x0305);
ILI9325_SET(0x0035,0x0000);
ILI9325_SET(0x0036,0x1604);
ILI9325_SET(0x0037,0x0204);
ILI9325_SET(0x0038,0x0001);
ILI9325_SET(0x0039,0x0707);
ILI9325_SET(0x003c,0x0000);
ILI9325_SET(0x003d,0x000f);
ILI9325_SET(0x0050,0x0000);
ILI9325_SET(0x0051,0x00ef);
ILI9325_SET(0x0052,0x0000);
ILI9325_SET(0x0053,0x013f);
ILI9325_SET(0x0060,0xa700);
ILI9325_SET(0x0061,0x0001);
ILI9325_SET(0x006a,0x0000);
ILI9325_SET(0x0080,0x0000);
ILI9325_SET(0x0081,0x0000);
ILI9325_SET(0x0082,0x0000);
ILI9325_SET(0x0083,0x0000);
ILI9325_SET(0x0084,0x0000);
ILI9325_SET(0x0085,0x0000);
ILI9325_SET(0x0090,0x0010);
ILI9325_SET(0x0092,0x0600);
ILI9325_SET(0x0093,0x0003);
ILI9325_SET(0x0095,0x0110);
ILI9325_SET(0x0097,0x0000);
ILI9325_SET(0x0098,0x0000);
ILI9325_SET(0x0007,0x0133);
}

void delay_ms(int tim)
{
int t,t1;
for (t=0;t for (t1=0;t1<5000;t1++) {
}
}
}


次はいよいよichigojam出力のキャプチャーにいってみます。

2015.05.24 Sun l ICHIGOJAM l コメント (0) l top

コメント

コメントの投稿












上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。