Работа с ЖКИ на контроллере HD44780 и его аналогах
- Сообщения: 8
- Зарегистрирован: Вс мар 20, 2011 00:53:11
Схема макетной платы. Всего того, что я к ней подключал там нет. Дисплей, естественно, подключается по даташыту. На счет задержки я пробовал, только уже не уверен, достаточное ли было время задержки. Попробую этот вариант, но что-то мне кажется, это не поможет.
- Реклама
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Попробуйте в инициализации вставить перед командой 0х28 еще команду 0х20.
А после команды 0х01 надо подождать 1.5-2мс.
А после команды 0х01 надо подождать 1.5-2мс.
- Сообщения: 680
- Зарегистрирован: Ср фев 24, 2010 19:16:07
задача:
подключить дисплей 44780 16x2 используя не более 3-4 линий от меги...
дисплей сейчас трудиться в 4х битном режиме (7 сигналов), но реально я смогу выделить только 3, максимум 4 линии для управления им...
Кто нить озадачивался подключением дисплея (стандартный 44780 16x2) подобным минимальным количеством сигналов..
например при помощи сдвигового регистра (я так думаю)..?
p.s. вариант со второй мегой не рассматриваю (нет такой возможности)
подключить дисплей 44780 16x2 используя не более 3-4 линий от меги...
дисплей сейчас трудиться в 4х битном режиме (7 сигналов), но реально я смогу выделить только 3, максимум 4 линии для управления им...
Кто нить озадачивался подключением дисплея (стандартный 44780 16x2) подобным минимальным количеством сигналов..
например при помощи сдвигового регистра (я так думаю)..?
p.s. вариант со второй мегой не рассматриваю (нет такой возможности)
2 ноги на SPI + строб Е. Использовать регистры.ВитГо писал(а):p.s. вариант со второй мегой не рассматриваю (нет такой возможности)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Сообщения: 680
- Зарегистрирован: Ср фев 24, 2010 19:16:07
я думаю что нужно будет использовать регистры и линии обычного порта
в проекте будет мега8 с занятыми ADC линиями поэтому SPI я так понимаю отпадает (они на том же порту сидят)
в проекте будет мега8 с занятыми ADC линиями поэтому SPI я так понимаю отпадает (они на том же порту сидят)
- Реклама
Значит, реализовать программно, не такой уж и сложный протокол.ВитГо писал(а):SPI я так понимаю отпадает (они на том же порту сидят)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Сообщения: 680
- Зарегистрирован: Ср фев 24, 2010 19:16:07
если кто озадачиться подключением дисплея минимальным количеством линий - то смотреть на easyelectronics - там в итоге пришли к 2ум проводам... всего к двум.. плюсу и минусу
) меньше точно не получиться (иначе экран останется без питания)
- Сообщения: 46
- Зарегистрирован: Сб дек 17, 2011 11:02:00
это моя самая первая работа!!! 5-6 летней давности... когда я лежал с радикулитом и изучал пики... нацарапал драйверок...
дисплей работает по 4х битной схеме.. подключен 6ю проводами к процу... сперва это было написано пол пик 628й...
потом перенёс на авр...
поясню немного по тексту...
******************************************************
; 80-1 сторока, C0-2 сторока, 90-3 сторока, D0-4 сторока,
OutMes:
ldi Select,(0<<RS) ; RS=0 выбираем регистр команд дисплея
ldi Temp,0x84 ; 8= 1 сторока, 4= 5 место
rcall Send ; заносим в LCD
ldi Select,(1<<RS) ; RS=1 выбираем регистр данных
ldi Temp,'N' ;
rcall Send ; заносим в LCD
итд...
----------------------------------------------------------------------------
вся память всех жисплеев представляет одну сплошную цепочку байт...
начиная с адреса 80н!!!
80-1 сторока, C0-2 сторока, 90-3 сторока, D0-4 сторока,
тоесть реально дисплеи могут быть 4 строки по 64 символа
надо токо попасть в нудный адрес!!! и это обязательно покажится на дисплее!!!
адреса меняются в строке
ldi Temp,0x84 ; 8= 1 сторока, 4= 5 место
тоесть 80н +04н
не обязательно на дисплее менять все символы сразу.. всмысле кадром... можно поменять несколько в нужном месте!!
это типа для быстродействия проги...
ldi Temp,'N' ;
rcall Send ; заносим в LCD
в регистр Temp заноситя нужный нам символ ...
rcall Send
и этои ПП выводится в дисплей... и так можно вывести все строки за раз начиная с адреса 80
потом заносим следущий символ .. выводим.. итд.. адрес вывода сам увеличивается на 1
кароче очень маленькая!!!! хорошо работающая!!!! прога
и не важно какого размера у вас дисплей!!! подходит под все!!!!
оперируйте адресом!!!
дисплей работает по 4х битной схеме.. подключен 6ю проводами к процу... сперва это было написано пол пик 628й...
потом перенёс на авр...
поясню немного по тексту...
******************************************************
; 80-1 сторока, C0-2 сторока, 90-3 сторока, D0-4 сторока,
OutMes:
ldi Select,(0<<RS) ; RS=0 выбираем регистр команд дисплея
ldi Temp,0x84 ; 8= 1 сторока, 4= 5 место
rcall Send ; заносим в LCD
ldi Select,(1<<RS) ; RS=1 выбираем регистр данных
ldi Temp,'N' ;
rcall Send ; заносим в LCD
итд...
----------------------------------------------------------------------------
вся память всех жисплеев представляет одну сплошную цепочку байт...
начиная с адреса 80н!!!
80-1 сторока, C0-2 сторока, 90-3 сторока, D0-4 сторока,
тоесть реально дисплеи могут быть 4 строки по 64 символа
надо токо попасть в нудный адрес!!! и это обязательно покажится на дисплее!!!
адреса меняются в строке
ldi Temp,0x84 ; 8= 1 сторока, 4= 5 место
тоесть 80н +04н
не обязательно на дисплее менять все символы сразу.. всмысле кадром... можно поменять несколько в нужном месте!!
это типа для быстродействия проги...
ldi Temp,'N' ;
rcall Send ; заносим в LCD
в регистр Temp заноситя нужный нам символ ...
rcall Send
и этои ПП выводится в дисплей... и так можно вывести все строки за раз начиная с адреса 80
потом заносим следущий символ .. выводим.. итд.. адрес вывода сам увеличивается на 1
кароче очень маленькая!!!! хорошо работающая!!!! прога
и не важно какого размера у вас дисплей!!! подходит под все!!!!
оперируйте адресом!!!
- Вложения
-
- 16x2.zip
- (16.57 КБ) 273 скачивания
действительно нуДный адресBarisych писал(а):надо токо попасть в нудный адрес!!!
Быстро, Качественно, Недорого.
Выбрать можно только 2 варианта.
Выбрать можно только 2 варианта.
ребята, если кто-нибудь ткнет меня, процедуркой проверки статуса, на этом HD44780 буду при много благодарен, второй день ковыряю а до пиреть никак не могу.
- Сообщения: 3
- Зарегистрирован: Ср фев 24, 2010 12:07:13
кто имел дело с Gdm1602e?
собираю я такой бп http://avr.ru/ready/contr/power/power
при запуске чуда не произошло.подсветка работает и верхняя строка показывает квадратики,
пробовал менять мк,и прошивки один черт ни чего не меняется.
подскажите возможные причины при условии что собранно всё правильно.
еще интересут вопрос-как можно поверить работоспособность жк.
собираю я такой бп http://avr.ru/ready/contr/power/power
при запуске чуда не произошло.подсветка работает и верхняя строка показывает квадратики,
пробовал менять мк,и прошивки один черт ни чего не меняется.
подскажите возможные причины при условии что собранно всё правильно.
еще интересут вопрос-как можно поверить работоспособность жк.
- Сообщения: 680
- Зарегистрирован: Ср фев 24, 2010 19:16:07
а контроллер запустился?ludvigtrasher писал(а):кто имел дело с Gdm1602e?
собираю я такой бп http://avr.ru/ready/contr/power/power
при запуске чуда не произошло.подсветка работает и верхняя строка показывает квадратики,
пробовал менять мк,и прошивки один черт ни чего не меняется.
подскажите возможные причины при условии что собранно всё правильно.
еще интересут вопрос-как можно поверить работоспособность жк.
если да я бы предложил еще раз проверить подключение дисплея.. от ножки до ножки.. - все таки и дисплей как из статьи, и прошивка... - причина где то наверху !
- Сообщения: 3
- Зарегистрирован: Ср фев 24, 2010 12:07:13
осцыла у меня нет,ноя подключал светодиод к портам атмеги которые выводят инфу на жк.светодиод реагировал на вращение экодера и нажатия кнопки изменяя яркость и чистоту мерцания.получается мк работает,подключение сто раз проверил .
всетаки может кто знает как проверить работоспособность жки.
всетаки может кто знает как проверить работоспособность жки.
От компа можно, если LPT есть - такой программой или другой подобной...ludvigtrasher писал(а):всетаки может кто знает как проверить работоспособность жки.
scio me nihil scire...
_______________________
<= Жалобная кнопка в правом нижнем углу... )
_______________________
- Сообщения: 58
- Зарегистрирован: Сб янв 07, 2012 11:41:25
здравствуйте!
Выкладываю на общее обозрение процедурку рисования горизонтальных прогрессбаров ( до 5-ти штук) с внутренним нормированием сигналов
первая процедура рисует в памяти экрана три системных символа - полностью закрашенный квадратик, полностью незакрашенный квадратик и концовку прогрессбара
вторая функция получает параметры
x - x координата первого кубика прогрессбара
y - у координата первого кубика прогрессбара
Num - порядковый номер прогрессбара (1...5)
Param - Собственно отображаемая величина
min - значение величины при которой на прогресбаре минимальный уровень
max - значение величины при которой прогрессбар полностью заполнен
Kubiks - кол-во знакомест в длину прогрессбара
Выкладываю на общее обозрение процедурку рисования горизонтальных прогрессбаров ( до 5-ти штук) с внутренним нормированием сигналов
Код: Выделить всё
void lcd_fill()
{
char a1;
unsigned char tg[8];
// рисуем закрашенный квадратик
for(a1=0;a1<8;a1++)
{
if(a1==1||a1==6)
tg[a1]=0;
else
tg[a1]=0xff;
}
define_char(tg, 0);
// рисуем две полоски вверху и внизу
for(a1=0;a1<8;a1++)
{
if(a1==0||a1==7)
tg[a1]=0xff;
else
tg[a1]=0x00;
}
define_char(tg, 1);
// рисуем ]
for(a1=0;a1<8;a1++)
{
if(a1==0||a1==7)
tg[a1]=0xff;
else
tg[a1]=0x00;
tg[a1]|=1;
}
define_char(tg, 2);
}
//#pragma optsize-
void dr_bar(char x, char y, char Num, unsigned int Param, unsigned int min, unsigned int max, unsigned char Kubiks)
{
unsigned char a1;
char b;
unsigned char Points;
unsigned int t1;
unsigned int t2;
unsigned char t3;
unsigned char tg[8];
unsigned int Param1;
// нормируем входной синал
Param1=Param;
Points = Kubiks*5;
Points-=2;
// если значение меньше минимального - пишем ноль
if(Param1<=min)
Param=0;
else
{
// если больше - считаем
// отнимем минимум
Param=Param1-min;
// поделим на полный размах и умножим на выходной размах
if(Param1>max)
Param=Points;
else
Param=(Param*Points)/(max-min);
}
// считаем кол-во полных квадратов и кол-во пикселей последнего
t1=Param+1;
a1=t1;
t2=a1/5;
t3=a1-(t2*5);
// рисуем переменный кубик
for(b=0;b<8;b++)
{
tg[b]=0;
if(b==0||b==7)
tg[b]=0xff;
if(b==1||b==6)
tg[b]=0;
else
{
for(a1=0;a1<t3;a1++)
tg[b]|=1<<(4-a1);
}
if(t2==Kubiks-1)
tg[b]|=1;
}
define_char(tg, Num+2);
// стаём в точку вывода первого кубика
lcd_gotoxy(x, y);
for(a1=0;a1<Kubiks;a1++)
{
if(a1<t2)
lcd_putchar(0);
else if(a1==t2)
lcd_putchar(Num+2);
else if(a1<Kubiks-1)
lcd_putchar(1);
else
lcd_putchar(2);
}
}
вторая функция получает параметры
x - x координата первого кубика прогрессбара
y - у координата первого кубика прогрессбара
Num - порядковый номер прогрессбара (1...5)
Param - Собственно отображаемая величина
min - значение величины при которой на прогресбаре минимальный уровень
max - значение величины при которой прогрессбар полностью заполнен
Kubiks - кол-во знакомест в длину прогрессбара
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
- Сообщения: 680
- Зарегистрирован: Ср фев 24, 2010 19:16:07
я тоже самое делал на асме... правда у меня 6 шкал по 4 символа.. тоже попиксельный вывод ширины... (20 делений)
если кому интересно могу вырезать из кода
если кому интересно могу вырезать из кода
Результат выглядит вот так

только в протеусе нет нижней строчки (8-го байта столбика) в реальности он выводится
кстати эти 5 графиков рисуются за 1 миллисекунду на меге 103@9.6 мегагерц

только в протеусе нет нижней строчки (8-го байта столбика) в реальности он выводится
кстати эти 5 графиков рисуются за 1 миллисекунду на меге 103@9.6 мегагерц
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
clawham писал(а):только в протеусе нет нижней строчки (8-го байта столбика) в реальности он выводится
кстати эти 5 графиков рисуются за 1 миллисекунду на меге 103@9.6 мегагерц
- Сообщения: 680
- Зарегистрирован: Ср фев 24, 2010 19:16:07
это чуть больше 1000 тактов...shurikss123 писал(а):clawham писал(а):только в протеусе нет нижней строчки (8-го байта столбика) в реальности он выводится
кстати эти 5 графиков рисуются за 1 миллисекунду на меге 103@9.6 мегагерц1 миллисекунду, мне кажеться что это много или???
думаю при 4х битном подключении дисплея это не много...
да и математика какая-никакая там тоже есть (рассчитать цену деления, количество делений)



