Работа с ЖКИ на контроллере HD44780 и его аналогах

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт сен 07, 2007 22:13:42
Откуда: Мариуполь

Сообщение Vrungel »

Vrungel писал(а):
uk8amk писал(а): В реальной схеме заработало?
Да заработало.
Обнаружился неприятный момент. При выполнении кода подобного такому:

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

lcd_putsf("first label");
delay_ms(1000);
lcd_clear();
lcd_putsf("second label");
delay_ms(1000);
lcd_clear();
lcd_putsf("third label");
delay_ms(1000);
lcd_clear();
lcd_putsf("fourth label");
на экран по идее должны выводиться последовательно четыре сообщения с позиции 0:0.
На самом деле надписи искажаются.
Например вместо second label выводиться
secon
d label

вместо third label
ehird lab
И такие "сбои" возникают в самые разные моменты и имеют разный "вид".

Уважаемый uk8amk, посмотрите пожалуйста свой драйвер.
С "родным" драйвером от кодевижена таких проблем нет.
Но ваш несомненно удобнее.

Проблемы как в "железе" так и в протеусе одинаковые.
Реклама
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт сен 07, 2007 22:13:42
Откуда: Мариуполь

Сообщение Vrungel »

Проблема решается добавлением строки

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

lcd_gotoxy(0,0);
в процедуру lcd_clear.
Но подозреваю что такое решение не совсем верное.
Реклама
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Vrungel писал(а):Но подозреваю что такое решение не совсем верное.
Отчего же неверное?
Да, в моем случае lcd_clear() сам не сбрасывает указатель знакоместа, зато это делает lcd_gotoxy();
Юзайте их в паре и ничего не бойтесь:)

ЗЫ. Сенкс за баг репорт.
Мявтор!
Аватара пользователя
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск
Re:

Сообщение dt_andrew »

Igor_67 писал(а):Мяу всем!
Вопрос к знатокам LCD: Собирая проект Андрея Дойникова "FM тюнер...и т.д....", столкнулся с такой проблемой: подключил индикатор 16х1 (Powertip PC1601B). Показывает только половину индикатора - первые 8 символов (с 1 по 8 ). Остальная половина (с 9 по 16) молчит. Почему такое может быть? Индикатор 100% рабочий. Пробовал другой такой же - то же самое!
Написал отдельно тестовую программу для LCD, проверил на ней - та же фигня. Уже не знаю, что и делать. Может у этого индикатора какой-то замудренный алгоритм управления, хотя по даташиту стоит контроллер KS0066, ну или его аналог.... Может кто с подобным сталкивался? как его заставить показывать все 16 символов в строке?
если не разобрался еще то вот

индикатор хоть и 16х1 а внутри он на самом деле 8х2
первая строка начальный адрес 0х80 а второй 0хС0
тоесть если расматривать его как однострочный то первые 8 символов будут иметь адреса с 0х80 по 0х87
а вторые 8 с 0хС0 по 0хС7

когда я писал прогу для тюнера пришлось немного доработать проверенную библу для индикатора
у меня все делается автоматом

пришлось ввести еще одну функцию и использовать вместо стандартной lcd_com() lcd_col()
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 6
Зарегистрирован: Вт апр 13, 2010 18:28:44
Откуда: Запорожье

Сообщение harchenko_pavel »

Библиотека для работы с символьными дисплеями на базе контроллеров HD44780 и KS0073 с Хмега под Winavr, за основу была взята библиотека для atmega от Peter Fleury. Реализована поддержка контроллеров Xmega в 4-х битном режиме, добавлен символ уровня заряда батареи (lcd_putc(batn) n=0-5) и массив для автоматической перекодировки символов кириллицы.

Пример работы с библиотекой:

#include <avr/io.h>
#include <util/delay.h>
#include "clksys_driver.h"
#include "lcd.h"

int main(void)
{

CLKSYS_PLL_Config( OSC_PLLSRC_RC2M_gc, 16 );
CLKSYS_Enable( OSC_PLLEN_bm );
do {} while ( CLKSYS_IsReady( OSC_PLLRDY_bm ) == 0 ); /* Wait for PLL to be ready */
CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_PLL_gc ); /* Switch main clock PLL */
CLKSYS_AutoCalibration_Disable( DFLLRC2M );

lcd_init(LCD_DISP_ON);
lcd_clrscr();
lcd_puts("Привет мир");
lcd_putc(bat0);
lcd_putc(bat1);
lcd_putc(bat2);
lcd_putc(bat3);
lcd_putc(bat4);
lcd_putc(bat5);


PORTD.DIRSET=PIN2_bm;

while (1)
{
PORTD.OUTTGL=PIN2_bm;
_delay_ms(100);
}
}
hd44780 xmega lib.zip
(6.1 КБ) 684 скачивания
Пользуйтесь на здоровье :))
Реклама
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

ох... тут спрошу.
Не затерялась ли у кого русскоязычный вариант вот этой таблички:
?
http://www.winstar.com.tw/products_deta ... 98&lang=ru
Не умеешь - не берись, но не взявшись не научишься...
Реклама
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

О! спасибо большое!
Не умеешь - не берись, но не взявшись не научишься...
Встал на лапы
Аватара пользователя
Сообщения: 123
Зарегистрирован: Вс дек 13, 2009 01:04:42

Сообщение goodspeedmen »

вот нарыл в недрах старинного принтера ЖКИ но его марки нет подскажите на контроллере HD44780 распиновка одинакова для всех или нет?

Изображение
Изображение
Изображение
Вложения
20042010310.gif
(153.86 КБ) 9032 скачивания
20042010309.gif
(145.35 КБ) 8713 скачиваний
20042010308.gif
(138.64 КБ) 8665 скачиваний
Голосовой чат.
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 123
Зарегистрирован: Вс дек 13, 2009 01:04:42
Re:

Сообщение goodspeedmen »

_noise писал(а):Распиновка у микросхемы одинаковая.
А модуль, частью которого микросхема является - может сделать кто угодно и как угодно, и не обязан он договариваться с другими делателями модулей и/или покупателями.
А если тебе кто-то сейчас напишет что-нибудь пообещает "я думаю что наверное вот так нормально будет точно!", а ты включишь по написанному, а оно задымится и сгорит - и?

--

Документацию на микросхему смотри, от её ног пляши, сам узнаешь всё. Заодно поймёшь, как работает и почему именно так сделано.
мяу
да я вроде определился по даташиташ посмотрел питание микросхем и получилось что первый минус второй плюс, да и к томуже это подтверждает что 1 это копус буду пробывать. :idea:
Голосовой чат.
Контактная информация:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 20
Зарегистрирован: Вт апр 27, 2010 06:11:37

Сообщение levibyte »

Люди добрые , помогите пожалуйста =[
У меня atemga16 и LCD TS1620A-20A/Y ( lcdstar )
Подключение по 4 битной сxеме.

(
RS - PORTC.5
R/W - земля
EN - PORD.7
DB0 - PORTC.0
DB1 - PORTC.1
DB2 - PORTC.2
DB3 - PORTC.3
)

Уже 4 дня мучаюсь , использовал и библиоетеки codevision и microPascal
и другие примеры из инета. Ничего не работает.
И jtagen отключил , и кварц поставил...ничего.

Потом просто увеличил делай-и и тeперь команды нормално выпалнаются , ( типа стереть экран , переместить курсор..итд )
но вместо букв показывает всякую абракадабру
типа ( ||| ||-| |): Уже не знаю в чем проблема.
Программатор у меня самый простой под lpt, прошываю avrdude-ом.

Да и еще , я прочитал , что во время 4битной сxемы для отобрежения букв нужно два раза посылать data .
но у меня не так. Задаю что нибудь в порте c , и даю en=1 а потом en=0 и команда срабатывает.
Вложения
asd.c
исxодник codevision
(4.32 КБ) 465 скачиваний
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

levibyte писал(а):Подключение по 4 битной сxеме.
А ничего что в исходнике в самом начале говорится про 8-битную шину?

Встроенная либа из CVAVR работает с другим расположением выводов(см хелп). И к тому же 4-битному режиму требуется не младшая, а старшая тетрада бит(7:4), по вашему описанию все наоборот.
Есть встроенная либа и на 8 бит, но там используются контроллеры с поддержко внешней памяти:

LCD Functions for displays connected in 8 bit memory mapped mode
These functions can be used only with AVR chips that allow using external memory devices.
Чего нельзя сказать про ATmega8535.
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 20
Зарегистрирован: Вт апр 27, 2010 06:11:37

Сообщение levibyte »

поменял lcd на winstar ( WH1620c ) заработало ( 8 битный вариант ) =]
Родился
Сообщения: 6
Зарегистрирован: Вт апр 13, 2010 18:28:44
Откуда: Запорожье

Сообщение harchenko_pavel »

Почитай внимательно даташит и правильно расставь задержки перед коммандами и будет счастье, сам не однократно сталкивался с проблемой когда на 8МГц все работает на ура, а на 16МГц начинается свистопляска :)))
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 20
Зарегистрирован: Вт апр 27, 2010 06:11:37

Сообщение levibyte »

И еще.
Чтоб использовать библиотеку кодвижн , все выxоды LCD должны идти на один порт ( по дефолту C ).
А у меня контролные ножки на порте D. а дата - на порте C.
Возможно ли именно так изменить порты в кодвижне?
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

>Возможно ли именно так изменить порты в кодвижне?

Нет, встроенная библиотека этого не позволяет. Но можно использовать отдельную либу, которую вы найдете на 19-й и 20-й страницах этой ветки.
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 20
Зарегистрирован: Вт апр 27, 2010 06:11:37

Сообщение levibyte »

Да , спасибо , я так и сделал.
Работает нормально =]
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 20
Зарегистрирован: Вс сен 06, 2009 20:17:20

Сообщение Freerider »

Сделал небольшой видеоурок основных команд библиотеки lcd.h в cvavre для HD44780 добавил 2 статьи инициализация hd44780 и ходовые команды для lcd в cvavre.Можете скачать отсюда http://turbobit.net/g462zsk2oc93.html
или http://depositfiles.com/ru/files/iu3uj3vps
Родился
Аватара пользователя
Сообщения: 16
Зарегистрирован: Чт ноя 05, 2009 05:31:38

Сообщение radioman »

Всем доброго времени, нашел LCD от принтера, на нем есть пару опознавательных знаков, а именно P1620B и WHX1620(на наклейке контроллера).Написал программку для создания велокомпьютера в CAVR и протестировал в Proteus. Но при физической реализации устройства, экран не подает признаков жизни. Как я понял из форума у меня проблемы с инициализацией LCD. Может кто поможет советом или делом...
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1138
Зарегистрирован: Сб апр 03, 2010 08:57:35

Сообщение Modest »

А сообщения _noise в этой теме это что то вроде разделителя между постами, да?? :))
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Ответить

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