Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Нужна помощь в запуске китайского символьного дисплея

Пт фев 22, 2013 21:33:24

Заказал я тут на ebay дисплейчик QAPASS 1602A, недавно получил. Выглядит он вот так:

ИзображениеИзображение

Но мои попытки запустить его не увенчались успехом. С командами для Winstar он судя по всему не совместим. Самое интересно то, что команды инициализации из даташита не совпадают с командами из примера кода. Может кто-то сталкивался с таким дисплеем?

P.S.
Все файлы для дисплея прилагаю.
Вложения
LCD1602-data.zip
(532.1 KiB) Скачиваний: 1302

Re: Нужна помощь в запуске китайского символьного дисплея

Пт фев 22, 2013 22:45:48

Код:
   Write_Command(0x38);
   delay(50);
   Write_Command(0x38);
   Write_Command(0x38);
   Write_Command(0x06);
   Write_Command(0x0c);   

эти вроде стандартные


Write_Command(0x08); устанавливается режим отображения
Write_Command(0x01); очистка экрана

все по описанию для HD44780

Пример то хоть работает?

Re: Нужна помощь в запуске китайского символьного дисплея

Пт фев 22, 2013 22:49:42

Нет, вообще никак не хочет запускаться. Передачу данных делаю вот так:

Код:
void write_com(unsigned char d){

   LCD_PORT &= ~_BV(RS_PIN);
   LCD_PORT &= ~_BV(EN_PIN);

   LCD_PORT |= (d << 0);

   LCD_PORT |= _BV(EN_PIN);
   _delay_ms(2);
   LCD_PORT &= ~_BV(EN_PIN);

}


Все выводы дисплея подключены на один порт.

Re: Нужна помощь в запуске китайского символьного дисплея

Сб фев 23, 2013 00:50:11

КАШАК писал(а):QAPASS
Quality Assurance Passed. Место для отметки "ПРОВЕРЕНО". http://www.qapass.com/en/default.asp.
мои попытки запустить его не увенчались успехом. С командами для Winstar он судя по всему не совместим
Логично!
Мало ли чё там пишут в документе вообще и на 9 странице в частности. Практика - критерий истины, а бумажкой подтереться. Да и зачем вообще нужны какие-то там бумажки, когда есть РАДИО КОТ!

Контора Винстар не сама изобрела контроллер, просто одна из наиболее известных собиральщиков дисплейных модулей. То есть выражение "команды для винстара" тоже, как бы это не чтоб обидно...

команды инициализации из даташита не совпадают с командами из примера кода
power-on delay >15 миллисек: самому дисплею внутри себя просраться-инициализироваться (с запасом пусть будет например 65536 мкс, нечего тут экономить)
0x38 8 бит, 2 строки, шрифт 5х7 точек: старшей тетрадой переключаемся в 8 битный режим, если случайно были в 4битном; младшая тетрада не важна
delay >50 мкс (время обработки команды) >4.1 миллисек для переключения с 4 на 8 бит, если случайно были в 4битном (с запасом пусть будет например 65536 мкс, нечего тут экономить)
0x38 повтор: если дисплей был в 4 битном режиме, то вот ему младшая тетрада для комплекта
delay>50 мкс (время обработки команды) >4.1 миллисек для переключения с 4 на 8 бит (но и здесь можно сделать запас, чтоб не напрягаться головой без необходимости)
0x38: вот теперь мы уже полюбому в 8битном режиме, дисплей правильно поймёт и младшую тетраду "2 строки, шрифт 5х7 точек"
>40 мкс на обработку команды дисплеем
0x38: "на всякий случай"?
>40 мкс на обработку команды дисплеем
0x08: выкл изображение, выкл курсор-подчерк, выкл курсор-квадрат
>40 мкс на обработку команды дисплеем
0x01: очистка экрана, установка на 0 позицию
>1.64 миллисек на обработку команды дисплеем
0x06: после вывода символа счётчик будет увеличиваться на 1, то есть устанавливаться в следующую позицию; без сдвига всего изображения
>40 мкс на обработку команды дисплеем
0x0C: вкл изображение, выкл курсор-подчерк, выкл курсор-квадрат
>40 мкс на обработку команды дисплеем

В цифровых микросхемах всё происходит очень-преочень быстро, то есть практически мгновенно... но не совсем мгновенно.
Или каждую микросекунду внимательно (с)читаем и понимаем, или завтра опять получится "Нужна помощь в запуске китайского ХХХ".
Хинт: задержки можно увеличивать. Хоть целую минуту или даже неделю держать предыдущее состояние, потом не спеша переключаться в следующее.

viewtopic.php?f=20&t=584, давай уже как-то дальше самостоятельно учись жить или смысл процесса
Последний раз редактировалось nirq Сб фев 23, 2013 01:57:24, всего редактировалось 1 раз.

Re: Нужна помощь в запуске китайского символьного дисплея

Сб фев 23, 2013 01:06:22

Это все понятно, такие команды я уже отправлял, только он все равно не заработал. Вот теперь вопрос, мой код отправки вообще работоспособен? А то что-то терзают смутные сомнения...
Да, и зачем переключаться в 8 битный режим, если дисплей подключен по 4 битному?

Re: Нужна помощь в запуске китайского символьного дисплея

Сб фев 23, 2013 02:04:53

Модуль может находиться в разных режимах. Не только в том, которого тебе хочется.
команды инициализации из даташита не совпадают с командами из примера кода

Ты сначала определяешься с способом подключения, потом работаешь в нём как положено. Я расписал подробно то и только то, что было в одном из файлов приложенного архива.

Если ты сравнивал этот файл с четырёхбитным режимом, то сапоги всмятку.
Если всё-таки хочешь 4 бита - тогда не забудь понять разницу между посылкой 4 бит и посылкой 8 бит. На уровне кодов отправки кодов отправки кодов от да не "кодов", а электричества в проводах.

Давай договоримся.

1. лично ты: забываешь про "коды отправок"; читаешь всё полностью, а не только удобные слова, не только в (своём, персональном) топике и вообще не только в "топиках"; умеешь пользоваться не только онлайн компьютером, но и оффлайн бумагой, карандашом или авторучкой...
2. лично я: больше не участвую в этом чате ни о чём, как и в других обсуждениях а-ля "из скольких сантиметров состоит метр".
Последний раз редактировалось nirq Сб фев 23, 2013 02:23:53, всего редактировалось 1 раз.

Re: Нужна помощь в запуске китайского символьного дисплея

Сб фев 23, 2013 02:18:18

Вот вы совсем недавно на форуме, а возомнили о себе невесть что. Я то прочту, мне не сложно, и разберусь. Просто в данный момент нет времени читать 60 страниц форума, ради поиска пары строчек кода. Я думал, что кто-нибудь уже запускал такой дисплей и немного поможет. А вы вместо того, чтобы объяснить по человечески, решили показать какой вы "умный". Непонятно заем вы вообще здесь появились, сидели бы и гордились свои умом в гордом одиночестве. Судя по манере вести диалог, ваши знания стремятся к нулю и никаких стоящих проектов вы никогда не делали. Ваш стиль общения: обосрать человека, выставить себя самым умным и послать читать миллион страниц форумов, вместо того, чтобы написать 2 строчки кода, а дальше человек уже сам разберется.

Re: Нужна помощь в запуске китайского символьного дисплея

Сб фев 23, 2013 03:01:31

Да,"тыкать" незнакомым людям,да ещё в грубой форме,довольно не прилично.И время присутствия на форуме здесь не причём.
По делу-лично я библу для WH писал на CVAVR,а потом переделывал её и на WinAVR,и для PIC-ов,и для 8051,и даже для LPC.
Посмотрите книгу Шпака 1-издание,стр.172-173.Там как раз инициализация дисплея,она отличается от Вашей.

Re: Нужна помощь в запуске китайского символьного дисплея

Сб фев 23, 2013 03:47:55

Ламерский от ламера вопрос
Детский но больной
Питание правильно было подано?
Питание контрастности на месте?
А как он работает на том что где то уже стоит такой 1602 же индикатор?

МОжет у тебя в дэвайсе прописан руссишь а ты ему впариваешь аглицкий

Вот и у меня чинайский вылизал.

Re: Нужна помощь в запуске китайского символьного дисплея

Сб фев 23, 2013 10:05:03

КАШАК писал(а):Заказал я тут на ebay дисплейчик. Но мои попытки запустить его не увенчались успехом.
Проверяй все еще.....
У меня точно такой же, все шуршит.

Изображение

Посмотри как я сделал тут http://asis-kbr.ru/forum/viewtopic.php?f=13&t=139 может чего прояснится.....
Кстати эта библиотечка, позволяет печатать русскими буквами на нерусских дисплеях.....

На выводе контрастности у меня примерно 1в от переменника идет, если переменник в крайних положенях - вообще ничего на дисплее не видно.
Вложения
DSC039932.jpg
(87.65 KiB) Скачиваний: 9471

Re: Нужна помощь в запуске китайского символьного дисплея

Сб фев 23, 2013 10:17:39

Питание правильно подал. Контрастность регулируется. Пременник стоит крайними лапами на питании, а средним на контрастности. Подключал его к МК с прошивкой для Winstar, но он и с ней не запустился. :dont_know: Сегодня еще раз все перепроверю. А то вчера меня все дисплеи невзлюбили, дисплей от NOKIA3310 тоже отказался нормально работать :))) Не реагирует на установку координат вывода строки, а выводит все в куче, хотя до этого работал нормально. А тут поставил его в устройство и он взбесился :)))

Re: Нужна помощь в запуске китайского символьного дисплея

Сб фев 23, 2013 10:49:30

Ха, а он взял и заработал, причем с библиотекой для Winstar :))) Причина была очень простой, дисплей я подключил на PORC Mega16, а на ней почему-то был включен JTAG. Правда с русским у него небольшие проблемы, нормально работают только те буквы, которые совпадают с латиницей. Ну ничего, это уже решаемо :)

Изображение
Вложения
C360_2013-02-23-12-01-43.jpg
(64.68 KiB) Скачиваний: 9016

Re: Нужна помощь в запуске китайского символьного дисплея

Сб фев 23, 2013 11:10:43

А этот даташит разве не подходит?

WH1602D-YYK-CTK.rar
(221.37 KiB) Скачиваний: 587


И вот ещё статья:

LCD.rar
(367.47 KiB) Скачиваний: 557


Я для этого делал так (там и перекодировка сделана русских букв):
Спойлер
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//массив перекодировки русских букв
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
unsigned char RusCodeTable[66][2] PROGMEM=
{
{'А','A'},
{'Б',0b10100000},
{'В','B'},
{'Г',0b10100001},
{'Д',0b11100000},
{'Е','E'},
{'Ё',0b10100010},
{'Ж',0b10100011},
{'З',0b10100100},
{'И',0b10100101},
{'Й',0b10100110},
{'К','K'},
{'Л',0b10100111},
{'М','M'},
{'Н','H'},
{'О','O'},
{'П',0b10101000},
{'Р','P'},
{'С','C'},
{'Т','T'},
{'У',0b10101001},
{'Ф',0b10101010},
{'Х','X'},
{'Ц',0b11100001},
{'Ч',0b10101011},
{'Ш',0b10101100},
{'Щ',0b11100010},
{'Ъ',0b10101101},
{'Ы',0b10101110},
{'Ь','b'},
{'Э',0b10101111},
{'Ю',0b10110000},
{'Я',0b10110001},

{'а','a'},
{'б',0b10110010},
{'в',0b10110011},
{'г',0b10110100},
{'д',0b11100011},
{'е','e'},
{'ё',0b10110101},
{'ж',0b10110110},
{'з',0b10110111},
{'и',0b10111000},
{'й',0b10111001},
{'к',0b10111010},
{'л',0b10111011},
{'м',0b10111100},
{'н',0b10111101},
{'о','o'},
{'п',0b10111110},
{'р','p'},
{'с','c'},
{'т',0b10111111},
{'у','y'},
{'ф',0b11100100},
{'х','x'},
{'ц',0b11100101},
{'ч',0b11000000},
{'ш',0b11000001},
{'щ',0b11100110},
{'ъ',0b11000010},
{'ы',0b11000011},
{'ь',0b11000100},
{'э',0b11000101},
{'ю',0b11000110},
{'я',0b11000111}
};

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//настройки дисплея
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define LCD_PORT PORTC
#define LCD_PORT_DATA PORTA
#define LCD_E (1<<7)
#define LCD_RW (1<<6)
#define LCD_RS (1<<5)

void LCD_Init(void);//инициализация дисплея
void LCD_SendData(unsigned char byte);//послать данные или команду LCD
void LCD_SetTextUpLine(char *text);//записать текст в верхнюю строчку экрана
void LCD_SetTextDownLine(char *text);//записать текст в нижнюю строчку экрана

//----------
//инициализация дисплея
//----------
void LCD_Init(void)
{
LCD_PORT&=~LCD_E;
LCD_PORT&=~LCD_RW;
LCD_PORT&=~LCD_RS;
DDRA=(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);//шина данных на выход
_delay_ms(20);//ждём включения экрана
LCD_PORT&=~LCD_RS;//режим передачи команд
//даём несколько раз команду включения
LCD_SendData(0b00110000);//команда включения
_delay_ms(5);
LCD_SendData(0b00110000);//команда включения
_delay_us(100);
LCD_SendData(0b00110000);//команда включения

//указываем режим 8 бит, 2 линии, символы 5x11
LCD_SendData(0b00111100);
_delay_ms(1);
//включаем экран
LCD_SendData(0b00001100);
_delay_ms(1);
//очищаем экран
LCD_SendData(0b00000001);
_delay_ms(1);
//устанавливаем режим ввода данных с инкрементом ячейки памяти
LCD_SendData(0b00000110);
_delay_ms(1);
//отключаем индикатор
LCD_PORT&=~LCD_E;
LCD_PORT&=~LCD_RW;
LCD_PORT&=~LCD_RS;
DDRA=(0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);//шина данных на вход
}
//----------
//послать данные или команду LCD
//----------
void LCD_SendData(unsigned char byte)
{
LCD_PORT_DATA=byte;
LCD_PORT|=LCD_E;
_delay_ms(1);
LCD_PORT&=~LCD_E;
}
//----------
//записать текст в верхнюю строчку экрана
//----------
void LCD_SetTextUpLine(char *text)
{
//отключаем индикатор
LCD_PORT&=~LCD_E;
LCD_PORT&=~LCD_RW;
LCD_PORT&=~LCD_RS;
DDRA=(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);//шина данных на выход
LCD_PORT&=~LCD_RS;//режим передачи команд
//даём команду позиционирования
LCD_SendData(0b10000000);//установить адрес видеопамяти в 0
_delay_ms(1);
LCD_PORT|=LCD_RS;//режим передачи данных
//преобразуем русские буквы
unsigned char n;
unsigned char out_text[16];
for(n=0;n<16;n++)
{
unsigned char b=text[n];
out_text[n]=b;
for(unsigned char m=0;m<66;m++)
{
unsigned char t=pgm_read_byte(&(RusCodeTable[m][0]));
if (t==b)
{
out_text[n]=pgm_read_byte(&(RusCodeTable[m][1]));
break;
}
}
}
for(n=0;n<16;n++)
{
if (text[n]==0) break;
LCD_SendData(out_text[n]);
}
for(;n<16;n++) LCD_SendData(32);//заполняем пробелами
LCD_PORT&=~LCD_RS;//режим передачи команд
//отключаем индикатор
LCD_PORT&=~LCD_E;
LCD_PORT&=~LCD_RW;
LCD_PORT&=~LCD_RS;
DDRA=(0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);//шина данных на вход

}
//----------
//записать текст в нижнюю строчку экрана
//----------
void LCD_SetTextDownLine(char *text)
{
//отключаем индикатор
LCD_PORT&=~LCD_E;
LCD_PORT&=~LCD_RW;
LCD_PORT&=~LCD_RS;
DDRA=(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);//шина данных на выход
LCD_PORT&=~LCD_RS;//режим передачи команд
//даём команду позиционирования
LCD_SendData(0b10101000);//установить адрес видеопамяти в 40
_delay_ms(1);
LCD_PORT|=LCD_RS;//режим передачи данных
//преобразуем русские буквы
unsigned char n;
unsigned char out_text[16];
for(n=0;n<16;n++)
{
unsigned char b=text[n];
out_text[n]=b;
for(unsigned char m=0;m<66;m++)
{
unsigned char t=pgm_read_byte(&(RusCodeTable[m][0]));
if (t==b)
{
out_text[n]=pgm_read_byte(&(RusCodeTable[m][1]));
break;
}
}
}
for(n=0;n<16;n++)
{
if (text[n]==0) break;
LCD_SendData(out_text[n]);
}
for(;n<16;n++) LCD_SendData(32);//заполняем пробелами
LCD_PORT&=~LCD_RS;//режим передачи команд
//отключаем индикатор
LCD_PORT&=~LCD_E;
LCD_PORT&=~LCD_RW;
LCD_PORT&=~LCD_RS;
DDRA=(0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);//шина данных на вход
}

Про шину данных - не обращайте внимание. Настраивайте сразу на выход. Просто у меня в конструкции она разделяется с другими устройствами.

Re: Нужна помощь в запуске китайского символьного дисплея

Сб фев 23, 2013 11:18:45

Да, судя по даташиту на мой дисплей, таблицу русских букв в него записать забыли:

Изображение

Какой-то фигни туда напихали. Теперь либо пользоваться английским, либо выводить буквы как пользовательские символы. Жаль, что перепрошить его нельзя...

Re: Нужна помощь в запуске китайского символьного дисплея

Сб фев 23, 2013 11:42:24

А попробуйте загрузить вот эту абру-кадабру - Ёpёіeї!!!

Re: Нужна помощь в запуске китайского символьного дисплея

Сб фев 23, 2013 12:31:43

А смысл просить его печатать кириллицей? Если ее там нет.
КАШАК писал(а):судя по даташиту на мой дисплей, таблицу русских букв в него записать забыли

Вариант один - через пользовательские символы.
Последний раз редактировалось shads Сб фев 23, 2013 13:44:43, всего редактировалось 2 раз(а).

Re: Нужна помощь в запуске китайского символьного дисплея

Сб фев 23, 2013 12:34:16

Del

Re: Нужна помощь в запуске китайского символьного дисплея

Сб фев 23, 2013 19:58:47

КАШАК писал(а):
Код:
   LCD_PORT |= (d << 0);


Это что за изврат?
Код:
   LCD_PORT |= d;

Так проще, про временные задержки вам уже писали.
Последний раз редактировалось codenamehawk Сб фев 23, 2013 20:01:10, всего редактировалось 1 раз.

Re: Нужна помощь в запуске китайского символьного дисплея

Сб фев 23, 2013 20:00:28

Да это я сонный был (даже JTAG выключить забыл), уже все работает. :)
Ответить