Работа с ЖКИ на контроллере HD44780 и его аналогах
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Здравствуйте. только начал осваивать МК. возникла проблема с Atmega8 + hd4780 на WinAVR+ lcd_lib.
пример брал отсюда http://winavr.scienceprog.com/example-a ... brary.html
с исходными ногами data в протеусе все работает нормально, а если изменить схему и определение ног в lcd_lib.h, то выходят косяки, то протеус ругается, Attepmet to read after witing a single nibble, то при несколько другом расположении ног, просто крякозябры выходят.
прилагаю проекты в протеусе и WinAVR
пример брал отсюда http://winavr.scienceprog.com/example-a ... brary.html
с исходными ногами data в протеусе все работает нормально, а если изменить схему и определение ног в lcd_lib.h, то выходят косяки, то протеус ругается, Attepmet to read after witing a single nibble, то при несколько другом расположении ног, просто крякозябры выходят.
прилагаю проекты в протеусе и WinAVR
- Вложения
-
- HD4780.rar
- (57.29 КБ) 399 скачиваний
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Немного промазал, извините
Доброго времени суток!
Занялся освоением контроллеров и решил сделать термометор на TINY2313 и WH0802A. Написал програмулину и работает, но кривовато отображение. При работе заголовок выводится в 2-х строках в дальнейшем все отображение только в верхней строке (lcd_goto(0,1)-не работает). Также заметил, что если между выводом между 1 и 2 строкой вставить любую строку с кодом, то вывод второй строки будет в первой. Фьюзы-заводские. Пробовал с WH1202A тоже... Програмирую Pony prog.
Вот часть кода на Си:
/****Вывод заставки о производителе****/
lcd_gotoxy(0,0);
lcd_putsf("Thermo");
lcd_gotoxy(0,1);
lcd_putsf("Alex");
delay_ms(1500);
lcd_clear();
if(ds1820_devices==0)
{
lcd_putsf("Nosensor");
delay_ms(1000);
}
else
{
/**Выводим информацию о найденных датчиках**/
lcd_gotoxy(0,0);
lcd_putsf("Find:");
show(ds1820_devices);
delay_ms(1000);
lcd_gotoxy(0,1);
lcd_putsf("Devices");
delay_ms(1000);
lcd_clear();
Заставка-Ок! А вот вывод кол-во датчиков и далее, только в верхней строке Если закоментить строки:
show(ds1820_devices);
delay_ms(1000);
то выводятся 2 строки С Любой из этих строк вывод накладывается в первой строке.
Ваше мнение в чем проблемма?
Занялся освоением контроллеров и решил сделать термометор на TINY2313 и WH0802A. Написал програмулину и работает, но кривовато отображение. При работе заголовок выводится в 2-х строках в дальнейшем все отображение только в верхней строке (lcd_goto(0,1)-не работает). Также заметил, что если между выводом между 1 и 2 строкой вставить любую строку с кодом, то вывод второй строки будет в первой. Фьюзы-заводские. Пробовал с WH1202A тоже... Програмирую Pony prog.
Вот часть кода на Си:
/****Вывод заставки о производителе****/
lcd_gotoxy(0,0);
lcd_putsf("Thermo");
lcd_gotoxy(0,1);
lcd_putsf("Alex");
delay_ms(1500);
lcd_clear();
if(ds1820_devices==0)
{
lcd_putsf("Nosensor");
delay_ms(1000);
}
else
{
/**Выводим информацию о найденных датчиках**/
lcd_gotoxy(0,0);
lcd_putsf("Find:");
show(ds1820_devices);
delay_ms(1000);
lcd_gotoxy(0,1);
lcd_putsf("Devices");
delay_ms(1000);
lcd_clear();
Заставка-Ок! А вот вывод кол-во датчиков и далее, только в верхней строке Если закоментить строки:
show(ds1820_devices);
delay_ms(1000);
то выводятся 2 строки С Любой из этих строк вывод накладывается в первой строке.
Ваше мнение в чем проблемма?
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Уважаемые радиокоты
Который день мучаюсь с МЭЛТ MT-16S2H-2YLG. Ну не хочет она инициализироваться в 4-х битном режиме.
Что здесь не так

Инициализация по датишу, а на выходе - ничего. Проект в CV.
Который день мучаюсь с МЭЛТ MT-16S2H-2YLG. Ну не хочет она инициализироваться в 4-х битном режиме.
Что здесь не так

Инициализация по датишу, а на выходе - ничего. Проект в CV.
- Вложения
-
- LCD.rar
- (27.17 КБ) 374 скачивания
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
МЭЛТ MT-16S2H-2YLG - весчь практически не убиваемая, работает даже после подачи 12В, если не работает ищи косяки в программе. Если все правильно - прекрасно работает и в 4-х битном и в 8-и.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
про инициализацию ЖКИ читайте мой пост и ниже.
Ставим плюсы: )
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Просмотрел документацию на ЖКИ MT-16S2S. Там описана возможность работы по 3-х и 4-х проводном последовательном интерфейсе. Пробовал ли кто-нибудь работать с этими интерфейсами?
- Old Grumble
- Открыл глаза
- Сообщения: 53
- Зарегистрирован: Вс июн 14, 2009 21:36:46
- Откуда: Кап.Яр-1 Астраханская обл.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
fenakit писал(а):Просмотрел документацию на ЖКИ MT-16S2S. Там описана возможность работы по 3-х и 4-х проводном последовательном интерфейсе. Пробовал ли кто-нибудь работать с этими интерфейсами?
М.ПРЕДКО Справочник по PIC микроконтроллерам с.250-258 приведена схема и программа двухпроводного интерфейса от МК до ЖКИ с использованием промежуточного сдвигового регистра...
«Просите, и дано будет вам; ищите, и найдете; стучите, и отворят вам; ибо всякий просящий получает, и ищущий находит, и стучащему отворят». Матф.гл. 7, ст. 7—8
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Я не об этом. Вот страничка из документации. Пишут, что есть встроенный последовательный интерфейс.
- Вложения
-
- Снимок1.jpg
- (42.38 КБ) 895 скачиваний
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
сам не пробовал. думаю должно завестись с первого раза. Посмотрев на инициализацию 3-х и 4-х проводного интерфейса понял, что это бесполезная вещь. При инициализации используются 6 ног индикатора (DB0... DB5), а для управления индикатором уже из последовательного режима используется 3 ноги, но не те что были при инициализации, а DB5...DB7!!!
ппц бред... "МЭЛТ - Хотели как лучше, получилось как всегда!"
Ставим плюсы: )
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
У меня проблема с выводом кириллических символов, но не обычная. Компилирую winavr2010 в среде Code::Blocks. LCD рабочий, кириллические символы выводит если выводить их через код, а если напрямую, то не получается. Причем некоторые чисто кириллические символы выводит верно. Ну вот пример:
в данном случае на экран выдаст 'ю'
А если так
на экран выдаст пробел
В библиотеке имеется функция
Так вот если бы Code::Blocks/Winavr видел при компиляции кириллицу, то и выводил бы верно. Пробова в родном блокноте Winavr, выдавал просто каракули вместо пробелов.
В общем как я понимаю - проблема в том, что не воспринимаются некоторые символы кириллицы именно при компиляции, а некоторые воспринимаются. сама библиотека вроде рабочая и с английскими буквами проблем нет. Менял в Code::Blocks во вкладке settings -> editor опцию encoding на KOI-8R и UTF8, не помогло.
Код: Выделить всё
lcd_putc(0xc6);в данном случае на экран выдаст 'ю'
А если так
Код: Выделить всё
lcd_putc('ю');на экран выдаст пробел
В библиотеке имеется функция
Код: Выделить всё
unsigned char CharToCode(char C)
{
switch(C)
{
case 'А' : return (0x41);
case 'Б' : return (0xa0);
case 'В' : return (0x42);
case 'Г' : return (0xa1);
..................
..................
..................
..................
case 'ш' : return (0xc1);
case 'щ' : return (0xe6);
case 'ъ' : return (0xc2);
case 'ы' : return (0xc3);
case 'ь' : return (0xc4);
case 'э' : return (0xc5);
case 'ю' : return (0xc6);
case 'я' : return (0xc7);
}
return ( 0x80 );
}Так вот если бы Code::Blocks/Winavr видел при компиляции кириллицу, то и выводил бы верно. Пробова в родном блокноте Winavr, выдавал просто каракули вместо пробелов.
В общем как я понимаю - проблема в том, что не воспринимаются некоторые символы кириллицы именно при компиляции, а некоторые воспринимаются. сама библиотека вроде рабочая и с английскими буквами проблем нет. Менял в Code::Blocks во вкладке settings -> editor опцию encoding на KOI-8R и UTF8, не помогло.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
а нельзя воспользоваться этой функцией напрямую? т.е. примерно так?
это только мое предположение, С не знаю, поэтому за правильность синтаксиса не могу отвечать
Код: Выделить всё
char simv
simv:="ю";
x:=CharToCode(simv);
lsd_putc(x);это только мое предположение, С не знаю, поэтому за правильность синтаксиса не могу отвечать
Ставим плюсы: )
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Bobrik
Кодировка символов для матричных индикаторов отличается от кодировок ASCII, ANSI и др. принятых в компьютерах. Поэтому если писать напрямую, то на экран будет выводится всякий бред(т.к. номера символов не совпадут). Или у вас сам редактор не понимает русский язык?
Насчет функции CharToCode(char C). Написана она крайне не оптимально и будет кушать много лишнего кода. Лучше ее записать в виде массива, т.е.:
CharToCode[256]={0,1,2,....,0x41,0xa0...};
А потом выводить символы:
lcd_putc(CharToCode['ю']);
Можно записать функцию, выводящую строки с перекодировкой:
void lcd_putsf(char flash *str)
{
char k;
while (k=*str++)
lcd_putc(CharToCode[k]);
}
И обращаться к ней так:
lcd_putsf("Здравствуй мир!");
Кодировка символов для матричных индикаторов отличается от кодировок ASCII, ANSI и др. принятых в компьютерах. Поэтому если писать напрямую, то на экран будет выводится всякий бред(т.к. номера символов не совпадут). Или у вас сам редактор не понимает русский язык?
Насчет функции CharToCode(char C). Написана она крайне не оптимально и будет кушать много лишнего кода. Лучше ее записать в виде массива, т.е.:
CharToCode[256]={0,1,2,....,0x41,0xa0...};
А потом выводить символы:
lcd_putc(CharToCode['ю']);
Можно записать функцию, выводящую строки с перекодировкой:
void lcd_putsf(char flash *str)
{
char k;
while (k=*str++)
lcd_putc(CharToCode[k]);
}
И обращаться к ней так:
lcd_putsf("Здравствуй мир!");
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Насчет функции CharToCode(char C). Написана она крайне не оптимально и будет кушать много лишнего кода. Лучше ее записать в виде массива
Я согласен, просто сейчас не вижу смысла оптимизировать код, который еще не работает как надо или настройки не те.
Можно записать функцию, выводящую строки с перекодировкой
Подобные функции то же есть. Опять же нужно решить проблему в корне.
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Купил индикатор Winstar WH1602D-YGH-CTK#, он со светодиодной подсветкой. До этого работал с ЖКИ без подсветок. Смотрел документацию, но мне так и не стало ясно как правильно включать подсветку: напрямую подавать 5V на анод-катод или через гасящий резистор?
- Int_13h
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Пт сен 10, 2010 14:40:40
- Откуда: Красноярск
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
..а даташит почитать? да резюк ставить обезательно.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Товарисчи, скажите у кого-нибудь работает модель ЖКИ в Proteus 7.7 по 4-х битной шине? А то уж какой день мучаюсь, и подозреваю, что с моделью что-то не то.
По 8-ми битной шине все нормально.
По 8-ми битной шине все нормально.- SarCity
- Прорезались зубы
- Сообщения: 215
- Зарегистрирован: Вт июн 10, 2008 09:17:06
- Откуда: г. Саратов
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Кто-нибудь пытался управлять контрастом дисплея посредством ШИМ контроллера?
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Если поставить интегрирующую цепочку на выход ШИМ, то получим напряжение, а не импульсы - а это то что нужно для управления контрастностью. Сам не пробовал, но мысли тоже были по этому поводу. Думаю скоро попробовать. 
Ставим плюсы: )
- Roman Venom
- Сверлит текстолит когтями
- Сообщения: 1135
- Зарегистрирован: Сб июл 11, 2009 18:42:21
- Откуда: Украина, г.Николаев
первый раз общаюсь с ЖКИ
короче такие дела. Контроллер ПИК18Ф4550. ЖКИ - 2х16 на ks0066u.
Вот прога... Писал битовыми командами, т.к. мне так понятнее. Писал по даташиту. Иначе запутался бы. 4-х битный интерфейс.
Прошиваю этой инициализацией и ничего... На ЖКИ как были квадратики так и остались. Задержка перед каждой пачком команд 4мс. Проверял в стопвотче.
В общем, мож кто подскажет где я протупил... Зараннее благодарю тех, кто будет читать мой ламерский код
Вот прога... Писал битовыми командами, т.к. мне так понятнее. Писал по даташиту. Иначе запутался бы. 4-х битный интерфейс.
Прошиваю этой инициализацией и ничего... На ЖКИ как были квадратики так и остались. Задержка перед каждой пачком команд 4мс. Проверял в стопвотче.
В общем, мож кто подскажет где я протупил... Зараннее благодарю тех, кто будет читать мой ламерский код
list p=18f4550
#include "p18f4550.inc"
__CONFIG _CONFIG1H, _IESO_OFF_1H & _FOSC_HS_1H
__CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
__CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_OFF_2L
__CONFIG _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _DEBUG_ON_4L & _XINST_OFF_4L & _ICPRT_OFF_4L
;********************************
lcd_D equ PORTD; *
DB3 equ RD3; *
DB2 equ RD2; *(см. схему подключения)
DB7_busy_flag equ RD0; *присваиваем битам порта D
DB6 equ RD1; *имена ножек ЖКИ
RS equ RD5; *
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*
lcd_C equ PORTC; *
E equ RC7; *
RW equ RC6; *(см. схему подключения)
DB1 equ RC5; *присваиваем битам порта С
DB0 equ RC4; *имена ножек ЖКИ
DB5 equ RC1; *
DB4 equ RC2; *
save_flag_RS equ 21; *для сохранения начального
; *состояния RS
count1 equ 22; *
count2 equ 23; *
count3 equ 24;
;********************************\
org 0x00
movlw B'00000000'
movwf TRISD
movwf TRISC
goto initialization_LCD
delay_4ms
movlw D'250'
movwf count1
del_1
nop
nop
decfsz count1,1
goto del_1
call delay_1001us
return
delay_1001us
movlw D'250'
movwf count2
del_2
nop
nop
nop
nop
decfsz count2,1
goto del_2
return
;*********************************
initialization_LCD;(см. даташит на КS0066U, стр.26)
movlw D'200'
movwf count3
dec
nop
nop
decfsz count3,1
goto dec
call delay_4ms; *power on delay
;Function set
bcf lcd_D,RS; *bit set
bcf lcd_C,RW; *bit set
bsf lcd_D,DB7_busy_flag; *2-line mode
bcf lcd_D,DB6; *LCD off
movlw D'200'
movwf count3
dec1
nop
nop
decfsz count3,1
goto dec1
call delay_4ms;wait, т.к. ЖКИ тормознутая падла
;Display ON/OFF control
bcf lcd_D,RS; *bit set
bcf lcd_C,RW; *bit set
bsf lcd_D,DB7_busy_flag; *bit set
bsf lcd_D,DB6; *LCD on
bsf lcd_C,DB5; *cursor on
bsf lcd_C,DB4; *blink on
movlw D'200'
movwf count3
dec2
nop
nop
decfsz count3,1
goto dec2
call delay_4ms;wait
;Display clear
bcf lcd_D,RS; *bit set
bcf lcd_C,RW; *bit set
bcf lcd_D,DB7_busy_flag; *bit set
bcf lcd_D,DB6; *bit set
bcf lcd_C,DB5; *bit set
bcf lcd_C,DB4; *bit set
movlw D'200'
movwf count3
dec3
nop
nop
decfsz count3,1
goto dec3
call delay_4ms;wait
;Entry Mode Set
bcf lcd_D,RS; *bit set
bcf lcd_C,RW; *bit set
bcf lcd_D,DB7_busy_flag; *bit set
bcf lcd_D,DB6; *bit set
bsf lcd_C,DB5; *increment mode
bcf lcd_C,DB4; *entire shift on
;Initialization end
end
- Вложения
-
- Untitled-1.jpg
- (191.18 КБ) 747 скачиваний
-
- Untitled.asm
- прога
- (2.53 КБ) 317 скачиваний
Успех - императив!
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: первый раз общаюсь с ЖКИ
Roman Venom писал(а):В общем, мож кто подскажет где я протупил... Зараннее благодарю тех, кто будет читать мой ламерский код
Мля, это пипец а не код. Где хотя бы комменты?
Могу посоветовать давать самую первую команду на инициализацию два раза (с паузой, естессно). Мне помогло.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
