Перейти к содержанию
    

Как запустить T6963C

Имею индикатор LM240128TCC производства Topway. Собираюсь использовать его для вот этого прибора: http://electronix.ru/forum/index.php?showtopic=62661 в качестве дисплея. Подключил я этот индикатор к плате BIGAVR2 (atmega128) и загрузил пример с диска платы (паскалевского компилятора). Включаю - на индикаторе вместо фигур из примера одна горизонтальная линия. Читаю внимательно даташит индикатора и вижу пометку: Logical Display Size in not equal Physical Display Size и указание вместо размера 240х128 инициализировать его как 320х64. Странно - ведь 320*64 меньше, чем 240*128! Часть точек не будет показываться.

Но на 320 точек этот "микропаскаль" не может инициализировать индикатор - у него размер в процедуре инициализации T6963C_init имеет тип byte, т.е. до 255 точек.

---

procedure T6963C_init(width, height, fntW : byte);

width: width of the GLCD panel

height: height of the GLCD panel

fntW: font width

---

Кто-нибудь сталкивался с таким индикатором? Как его запускали - как 240х128 или как 320х64? Что посоветуете мне сделать?

Исходник для MicroPascal 1.25 прилагаю. Кварц 10 МГц.

Спасибо!

post-48875-1242848002_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в настоящее время ковыряю wg240128b с контроллером T6963C

самый внятный документ http://cst.mi.fu-berlin.de/projects/Scatte...ld/T6963C_2.pdf

пока все строго работает по написаному

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

самый внятный документ...

Не понять Вам проблем паскалистов в их поисках "компонентов" :(. Он-же не документ спрашивал...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо! Я отложил пока этот индикатор, сначала сделаю с тем, с которым все получается (128х64), отлажу управление LMX2326. Синтезаторы и смесители уже пришли, делаю общую плату - но эта тема для другой ветки, RF. А потом уже буду запускать LM240128TCC. И делать по "документу" все равно придется :-) И не пользоваться ни той библиотекой, ни функцией T6963C_init.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И не пользоваться ни той библиотекой, ни функцией T6963C_init.

Я так понял, что микропаскаль продолжает отжигать. Интересно, а в легальной версии самописные программы с плавучкой нормально собираются?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

wg240128b с контроллером T6963C

контроллер mega88

внутренний RC генератор

у меня устойчиво работает при тактовой частоте контроллера 2 МГц и ниже

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Некоторое время :-) спустя опять дошли руки до этого индикатора.

Взял я этот "самый внятный документ" и проделал все описанные в нем действия:

ресетнул индикатор;

проверил статус, и проверял далее - два последних бита всегда были =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.

 

Что мне следует проверить и каким образом?

"Обширные исходники" прилагаю.

Спасибо!

 

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проверил разводку проводов - не ошибся!

Скажите, а можно как-нибудь ещё этот индикатор проверить? Скажем, модуль на KS0066 можно подключить к порту LPT компьютера и, запустив специальную программу, что-нибудь вывести. А для графических индикаторов есть такое?

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В руководстве написано: если вы выполнили шаги, указанные выше, вы должны видеть дисплей, полный мусора. Мусор не вижу :-( Вижу чистый экран.

Мусор, помнится, уже будет, если только reset снять.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очень жаль, значит, индикатор - в морг :-(

Или,разобраться с подключением медленно и печально. Питание, снятие reset, что подавать для регулировки контрастности...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сей дисплей можно запустить только програмно!

Читайте внимательно даташит.

Обратите внимание на первоначальную загрузку регистров.

Вы должны САМИ расчитать некоторые величины для загрузки, именно для этого приведен пример в даташите!

Там-же есть пример программы.

Пока Вы не сделаете ПРАВИЛЬНУЮ ИНИЦИАЛИЗАЦИЮ Вы никакого изображения на дисплее не получите!!!!

Причем ни в графической моде ни в текстовой.

 

Небольшое обьяснение

_______________________PG24064.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, изучу и этот документ и ещё раз проверю подключение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...