Некоторое время :-) спустя опять дошли руки до этого индикатора.
Взял я этот "самый внятный документ" и проделал все описанные в нем действия:
ресетнул индикатор;
проверил статус, и проверял далее - два последних бита всегда были =1! т.е. STA0 и STA1 =1, готов к получению новых данных и команд;
послал graphics home address = 0800h;
послал graphics area set = 1eh;
послал text home adress = 0;
послал text area set = 1eh;
послал mode set = 81h (XOR);
послал display mode = 9f (все, включая blink, включено).
В руководстве написано: если вы выполнили шаги, указанные выше, вы должны видеть дисплей, полный мусора. Мусор не вижу :-( Вижу чистый экран.
Наконец, послал Address pointer =0, записал в память командой c4h байт 21h и попробовал считать его обратно командой c5h.
На линии данных вижу не 21h, а c5h! С ума сойти! :-)
Что я делаю не так?
В программе повставлял вывод статуса на дисплей, имеющийся в отладочной плате, и добавлял (вернее, раскомментировал) процедуры отправки данных по одной. Статус выдается "хороший" - STA0 и STA1 =1, после посылки команд с4h и STA3 =1, после c5h STA2 = 1.
Что мне следует проверить и каким образом?
"Обширные исходники" прилагаю.
Спасибо!
CODE
program t240x128test;
{ Declarations section }
uses __Lib_T6963C_Consts, __Lib_T6963C;
// T6963C module connections
var T6963C_ctrlPort : byte at PORTE; // CONTROL port
var T6963C_dataPort : byte at PORTD; // DATA port
var T6963C_ctrlPort_Direction : byte at DDRE; // CONTROL direction register
var T6963C_dataPort_Direction : byte at DDRD; // DATA direction register
var T6963C_ctrlwr : sbit at PORTE.B0; // WR write signal
var T6963C_ctrlrd : sbit at PORTE.B1; // RD read signal
var T6963C_ctrlcd : sbit at PORTE.B3; // CD command/data signal
var T6963C_ctrlrst : sbit at PORTE.B4; // RST reset signal
var T6963C_ctrlwr_Direction : sbit at DDRE.B0; // WR write signal direction
var T6963C_ctrlrd_Direction : sbit at DDRE.B1; // RD read signal direction
var T6963C_ctrlcd_Direction : sbit at DDRE.B3; // CD command/data signal direction
var T6963C_ctrlrst_Direction : sbit at DDRE.B4; // RST reset signal direction
// Signals not used by library, they are set in main function
var T6963C_ctrlce : sbit at PORTE.B2; // CE signal
var T6963C_ctrlfs : sbit at PORTE.B5; // FS signal
var T6963C_ctrlmd : sbit at PORTE.B6; // MD signal
var T6963C_ctrlce_Direction : sbit at DDRE.B2; // CE signal direction
var T6963C_ctrlfs_Direction : sbit at DDRE.B5; // FS signal direction
var T6963C_ctrlmd_Direction : sbit at DDRE.B6; // MD signal direction
// End T6963C module connections
var LCD_RS : sbit at PORTC.B2;
var LCD_EN : sbit at PORTC.B3;
var LCD_D4 : sbit at PORTC.B4;
var LCD_D5 : sbit at PORTC.B5;
var LCD_D6 : sbit at PORTC.B6;
var LCD_D7 : sbit at PORTC.B7;
var LCD_RS_Direction : sbit at DDRC.B2;
var LCD_EN_Direction : sbit at DDRC.B3;
var LCD_D4_Direction : sbit at DDRC.B4;
var LCD_D5_Direction : sbit at DDRC.B5;
var LCD_D6_Direction : sbit at DDRC.B6;
var LCD_D7_Direction : sbit at DDRC.B7;
Procedure Status(var txtx:string[15]);
var ttt:byte; txt:string[7];
begin
//читаем статус и пишем его на дисплей
T6963C_dataPort_Direction:=0;
T6963C_ctrlwr:=1;
T6963C_ctrlcd:=1;
T6963C_ctrlrd:=0;
T6963C_ctrlce:=0;
delay_us(1);
lcd_out(1,1,txtx);
ttt:=PIND;
inttostr(ttt,txt);
//процiдурка для разгребания статусных бит
if(ttt and 1) then lcd_out(2,8,'1') else lcd_out(2,8,'0');
if(ttt and 2) then lcd_out(2,7,'1') else lcd_out(2,7,'0');
if(ttt and 4) then lcd_out(2,6,'1') else lcd_out(2,6,'0');
if(ttt and 8) then lcd_out(2,5,'1') else lcd_out(2,5,'0');
if(ttt and 16) then lcd_out(2,4,'1') else lcd_out(2,4,'0');
if(ttt and 32) then lcd_out(2,3,'1') else lcd_out(2,3,'0');
if(ttt and 64) then lcd_out(2,2,'1') else lcd_out(2,2,'0');
if(ttt and 128) then lcd_out(2,1,'1') else lcd_out(2,1,'0');
lcd_out(2,9,txt);
T6963C_ctrlce:=1;
end;
Procedure WriteData(Datas:byte);
begin
T6963C_dataPort_Direction:=255;
T6963C_dataPort:=Datas;
T6963C_ctrlcd:=0;
T6963C_ctrlrd:=1;
T6963C_ctrlwr:=0;
delay_us(1);
T6963C_ctrlce:=0;
delay_us(1);
T6963C_ctrlce:=1;
T6963C_dataPort_Direction:=0;
end;
Procedure WriteCommand(Datas:byte);
begin
T6963C_dataPort_Direction:=255;
T6963C_dataPort:=Datas;
T6963C_ctrlcd:=1;
T6963C_ctrlrd:=1;
T6963C_ctrlwr:=0;
delay_us(1);
T6963C_ctrlce:=0;
delay_us(1);
T6963C_ctrlce:=1;
T6963C_dataPort_Direction:=0;
end;
Function ReadData():byte;
begin
T6963C_dataPort_Direction:=0;
T6963C_ctrlcd:=0;
T6963C_ctrlwr:=1;
T6963C_ctrlrd:=0;
T6963C_ctrlce:=0;
delay_us(1);
ReadData:=T6963C_dataPort;
T6963C_ctrlce:=1;
end;
Procedure Init();
begin
//по-своему
//ресетим контроллер
T6963C_ctrlrst:=0;
delay_us(10);
T6963C_ctrlrst:=1;
delay_us(10);
T6963C_ctrlce:=1;
Status('s');
//теперь шлем graphics home address
//data
WriteData(0);
//статус
Status('s gha 1');
WriteData(0x08);
Status('s gha 2');
WriteCommand(0x42);
// проверяем...
Status('s ');
//теперь шлем graphics area set
//data
WriteData(0x1e);
//статус
Status('s gas 1');
WriteData(0);
Status('s gas 2');
WriteCommand(0x43);
// проверяем...
Status('s ');
//теперь шлем text home adress
//data
WriteData(0x00);
//статус
Status('s tha 1');
WriteData(0x00);
Status('s tha 2');
WriteCommand(0x40);
// проверяем...
Status('s ');
//теперь шлем text area set
//data
WriteData(0x1e);
//статус
Status('s tas 1');
WriteData(0x00);
Status('s tas 2');
WriteCommand(0x41);
// проверяем...
Status('s ');
//теперь шлем mode set
WriteCommand(0x81); //xor
// проверяем...
Status('s ms ');
//теперь шлем display mode
WriteCommand(0x9f); //все включено
// проверяем...
Status('s dm ');
end;
var {panel : byte; // current panel
i : word; // general purpose register
curs : byte; // cursor visibility
cposx,
cposy : word; // cursor x-y position
txtcols : byte; // number of text coloms }
txt, txt1 : string[16];
ttt:byte;
begin
Lcd_Init(); // Initialize LCD
Lcd_Cmd(LCD_CLEAR); // Clear display
Lcd_Cmd(LCD_CURSOR_OFF); // Cursor off
T6963C_ctrlce_Direction := 1;
T6963C_ctrlce := 0; // Enable T6963C
T6963C_ctrlfs_Direction := 1;
T6963C_ctrlfs := 0; // Font Select 8x8
T6963C_ctrlmd_Direction := 1;
T6963C_ctrlmd := 0; // Column number select
T6963C_ctrlcd_Direction := 1;
T6963C_ctrlcd := 0; // Cd
T6963C_ctrlrst_Direction := 1;
T6963C_ctrlrst := 0; // reset
T6963C_ctrlwr_Direction:=1;
T6963C_ctrlrd_Direction:=1;
//начнем
Init();
//теперь шлем address pointer
//data
WriteData(0x0);
//статус
Status('s tap 1');
WriteData(0x00);
Status('s tap 2');
WriteCommand(0x24);
// проверяем...
Status('s ');
WriteData(0x21);
Status('s 21 ');
WriteCommand(0xc4); //записали
Status('s c4 '); //считываем то, что записали
WriteCommand(0xc5);
Status('s c5 ');
ByteToStr(ReadData,txt);
lcd_out(2,1,txt);
repeat
lcd_out(1,16,'x'); //признак конца
until false;
end.