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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

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

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

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

P.S.
Все файлы для дисплея прилагаю.
Вложения
LCD1602-data.zip
(532.1 КБ) 1349 скачиваний
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Контактная информация:
Реклама
Вымогатель припоя
Сообщения: 547
Зарегистрирован: Вт фев 09, 2010 17:52:26

Сообщение codenamehawk »

Код: Выделить всё

	Write_Command(0x38);
	delay(50);
	Write_Command(0x38);
	Write_Command(0x38);
	Write_Command(0x06);
	Write_Command(0x0c);	
эти вроде стандартные


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

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

Пример то хоть работает?
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

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

Код: Выделить всё

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);

}
Все выводы дисплея подключены на один порт.
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Контактная информация:
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

Сообщение nirq »

КАШАК писал(а):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 мкс на обработку команды дисплеем

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

http://radiokot.ru/forum/viewtopic.php?f=20&t=584, давай уже как-то дальше самостоятельно учись жить или смысл процесса
Последний раз редактировалось nirq Сб фев 23, 2013 01:57:24, всего редактировалось 1 раз.
Реклама
Эиком - электронные компоненты и радиодетали
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

Это все понятно, такие команды я уже отправлял, только он все равно не заработал. Вот теперь вопрос, мой код отправки вообще работоспособен? А то что-то терзают смутные сомнения...
Да, и зачем переключаться в 8 битный режим, если дисплей подключен по 4 битному?
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Контактная информация:
Реклама
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

Сообщение nirq »

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

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

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

1. лично ты: забываешь про "коды отправок"; читаешь всё полностью, а не только удобные слова, не только в (своём, персональном) топике и вообще не только в "топиках"; умеешь пользоваться не только онлайн компьютером, но и оффлайн бумагой, карандашом или авторучкой...
2. лично я: больше не участвую в этом чате ни о чём, как и в других обсуждениях а-ля "из скольких сантиметров состоит метр".
Последний раз редактировалось nirq Сб фев 23, 2013 02:23:53, всего редактировалось 1 раз.
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

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

Сообщение Vov123 »

Да,"тыкать" незнакомым людям,да ещё в грубой форме,довольно не прилично.И время присутствия на форуме здесь не причём.
По делу-лично я библу для WH писал на CVAVR,а потом переделывал её и на WinAVR,и для PIC-ов,и для 8051,и даже для LPC.
Посмотрите книгу Шпака 1-издание,стр.172-173.Там как раз инициализация дисплея,она отличается от Вашей.
Друг Кота
Аватара пользователя
Сообщения: 16545
Зарегистрирован: Вт сен 07, 2010 03:01:06
Откуда: Moscow-Izmaylovo

Сообщение m.ix »

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

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

Вот и у меня чинайский вылизал.
Лечу лечить WWWашу покалеченную технику.
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Сообщение shads »

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

Изображение

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

На выводе контрастности у меня примерно 1в от переменника идет, если переменник в крайних положенях - вообще ничего на дисплее не видно.
Вложения
DSC039932.jpg
(87.65 КБ) 9770 скачиваний
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

Питание правильно подал. Контрастность регулируется. Пременник стоит крайними лапами на питании, а средним на контрастности. Подключал его к МК с прошивкой для Winstar, но он и с ней не запустился. :dont_know: Сегодня еще раз все перепроверю. А то вчера меня все дисплеи невзлюбили, дисплей от NOKIA3310 тоже отказался нормально работать :))) Не реагирует на установку координат вывода строки, а выводит все в куче, хотя до этого работал нормально. А тут поставил его в устройство и он взбесился :)))
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Контактная информация:
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

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

Изображение
Вложения
C360_2013-02-23-12-01-43.jpg
(64.68 КБ) 9283 скачивания
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Контактная информация:
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1590
Зарегистрирован: Вс июн 24, 2012 16:07:00
Откуда: Лен.Обл.

Сообщение da-nie »

А этот даташит разве не подходит?
WH1602D-YYK-CTK.rar
(221.37 КБ) 628 скачиваний
И вот ещё статья:
LCD.rar
(367.47 КБ) 602 скачивания
Я для этого делал так (там и перекодировка сделана русских букв):
Спойлер
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//массив перекодировки русских букв
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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);//шина данных на вход
}

Про шину данных - не обращайте внимание. Настраивайте сразу на выход. Просто у меня в конструкции она разделяется с другими устройствами.
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Контактная информация:
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

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

Изображение

Какой-то фигни туда напихали. Теперь либо пользоваться английским, либо выводить буквы как пользовательские символы. Жаль, что перепрошить его нельзя...
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Контактная информация:
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Сообщение Vov123 »

А попробуйте загрузить вот эту абру-кадабру - Ёpёіeї!!!
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Сообщение shads »

А смысл просить его печатать кириллицей? Если ее там нет.
КАШАК писал(а):судя по даташиту на мой дисплей, таблицу русских букв в него записать забыли
Вариант один - через пользовательские символы.
Последний раз редактировалось shads Сб фев 23, 2013 13:44:43, всего редактировалось 2 раза.
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Сообщение Vov123 »

Del
Вымогатель припоя
Сообщения: 547
Зарегистрирован: Вт фев 09, 2010 17:52:26

Сообщение codenamehawk »

КАШАК писал(а):

Код: Выделить всё

	LCD_PORT |= (d << 0);
Это что за изврат?

Код: Выделить всё

	LCD_PORT |= d;
Так проще, про временные задержки вам уже писали.
Последний раз редактировалось codenamehawk Сб фев 23, 2013 20:01:10, всего редактировалось 1 раз.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

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

Вернуться в «Периферия»