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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Kondor775
Родился
Сообщения: 6
Зарегистрирован: Вс апр 04, 2010 07:19:40

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

Сообщение Kondor775 »

Здравствуйте. только начал осваивать МК. возникла проблема с 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
Вложения
HD4780.rar
(57.29 КБ) 399 скачиваний
men17
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Пн июл 19, 2010 16:19:24

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

Сообщение men17 »

Немного промазал, извините :? Доброго времени суток!
Занялся освоением контроллеров и решил сделать термометор на 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 строки С Любой из этих строк вывод накладывается в первой строке.
Ваше мнение в чем проблемма?
Igor_L
Родился
Сообщения: 10
Зарегистрирован: Пт июл 23, 2010 10:42:25

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

Сообщение Igor_L »

Уважаемые радиокоты :)
Который день мучаюсь с МЭЛТ MT-16S2H-2YLG. Ну не хочет она инициализироваться в 4-х битном режиме.
Что здесь не так :dont_know: :dont_know:
Инициализация по датишу, а на выходе - ничего. Проект в CV.
Вложения
LCD.rar
(27.17 КБ) 374 скачивания
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

МЭЛТ MT-16S2H-2YLG - весчь практически не убиваемая, работает даже после подачи 12В, если не работает ищи косяки в программе. Если все правильно - прекрасно работает и в 4-х битном и в 8-и.
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

про инициализацию ЖКИ читайте мой пост и ниже.
Ставим плюсы: )
fenakit
Родился
Сообщения: 12
Зарегистрирован: Пн мар 29, 2010 23:13:24

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

Сообщение fenakit »

Просмотрел документацию на ЖКИ MT-16S2S. Там описана возможность работы по 3-х и 4-х проводном последовательном интерфейсе. Пробовал ли кто-нибудь работать с этими интерфейсами?
Аватара пользователя
Old Grumble
Открыл глаза
Сообщения: 53
Зарегистрирован: Вс июн 14, 2009 21:36:46
Откуда: Кап.Яр-1 Астраханская обл.

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

Сообщение Old Grumble »

fenakit писал(а):Просмотрел документацию на ЖКИ MT-16S2S. Там описана возможность работы по 3-х и 4-х проводном последовательном интерфейсе. Пробовал ли кто-нибудь работать с этими интерфейсами?

М.ПРЕДКО Справочник по PIC микроконтроллерам с.250-258 приведена схема и программа двухпроводного интерфейса от МК до ЖКИ с использованием промежуточного сдвигового регистра...
«Просите, и дано будет вам; ищите, и найдете; стучите, и отворят вам; ибо всякий просящий получает, и ищущий находит, и стучащему отворят». Матф.гл. 7, ст. 7—8
fenakit
Родился
Сообщения: 12
Зарегистрирован: Пн мар 29, 2010 23:13:24

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

Сообщение fenakit »

Я не об этом. Вот страничка из документации. Пишут, что есть встроенный последовательный интерфейс.
Вложения
Снимок1.jpg
(42.38 КБ) 895 скачиваний
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

сам не пробовал. думаю должно завестись с первого раза. Посмотрев на инициализацию 3-х и 4-х проводного интерфейса понял, что это бесполезная вещь. При инициализации используются 6 ног индикатора (DB0... DB5), а для управления индикатором уже из последовательного режима используется 3 ноги, но не те что были при инициализации, а DB5...DB7!!! :o ппц бред... "МЭЛТ - Хотели как лучше, получилось как всегда!"
Ставим плюсы: )
Bobrik
Родился
Сообщения: 2
Зарегистрирован: Вс сен 05, 2010 08:17:52

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

Сообщение Bobrik »

У меня проблема с выводом кириллических символов, но не обычная. Компилирую winavr2010 в среде Code::Blocks. LCD рабочий, кириллические символы выводит если выводить их через код, а если напрямую, то не получается. Причем некоторые чисто кириллические символы выводит верно. Ну вот пример:

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

    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 и его аналогах

Сообщение ibiza11 »

а нельзя воспользоваться этой функцией напрямую? т.е. примерно так?

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

char simv
simv:="ю";
x:=CharToCode(simv);
lsd_putc(x);

это только мое предположение, С не знаю, поэтому за правильность синтаксиса не могу отвечать
Ставим плюсы: )
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

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("Здравствуй мир!");
Bobrik
Родился
Сообщения: 2
Зарегистрирован: Вс сен 05, 2010 08:17:52

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

Сообщение Bobrik »

Насчет функции CharToCode(char C). Написана она крайне не оптимально и будет кушать много лишнего кода. Лучше ее записать в виде массива

Я согласен, просто сейчас не вижу смысла оптимизировать код, который еще не работает как надо или настройки не те.

Можно записать функцию, выводящую строки с перекодировкой

Подобные функции то же есть. Опять же нужно решить проблему в корне.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

Купил индикатор Winstar WH1602D-YGH-CTK#, он со светодиодной подсветкой. До этого работал с ЖКИ без подсветок. Смотрел документацию, но мне так и не стало ясно как правильно включать подсветку: напрямую подавать 5V на анод-катод или через гасящий резистор?
Аватара пользователя
Int_13h
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Пт сен 10, 2010 14:40:40
Откуда: Красноярск
Контактная информация:

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

Сообщение Int_13h »

..а даташит почитать? да резюк ставить обезательно.
fenakit
Родился
Сообщения: 12
Зарегистрирован: Пн мар 29, 2010 23:13:24

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

Сообщение fenakit »

Товарисчи, скажите у кого-нибудь работает модель ЖКИ в Proteus 7.7 по 4-х битной шине? А то уж какой день мучаюсь, и подозреваю, что с моделью что-то не то. :dont_know: По 8-ми битной шине все нормально.
Аватара пользователя
SarCity
Прорезались зубы
Сообщения: 215
Зарегистрирован: Вт июн 10, 2008 09:17:06
Откуда: г. Саратов
Контактная информация:

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

Сообщение SarCity »

Кто-нибудь пытался управлять контрастом дисплея посредством ШИМ контроллера?
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

Если поставить интегрирующую цепочку на выход ШИМ, то получим напряжение, а не импульсы - а это то что нужно для управления контрастностью. Сам не пробовал, но мысли тоже были по этому поводу. Думаю скоро попробовать. :))
Ставим плюсы: )
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

первый раз общаюсь с ЖКИ

Сообщение Roman Venom »

короче такие дела. Контроллер ПИК18Ф4550. ЖКИ - 2х16 на ks0066u.
Вот прога... Писал битовыми командами, т.к. мне так понятнее. Писал по даташиту. Иначе запутался бы. 4-х битный интерфейс.
Прошиваю этой инициализацией и ничего... На ЖКИ как были квадратики так и остались. Задержка перед каждой пачком команд 4мс. Проверял в стопвотче.
В общем, мож кто подскажет где я протупил... Зараннее благодарю тех, кто будет читать мой ламерский код :shock:

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: первый раз общаюсь с ЖКИ

Сообщение Gudd-Head »

Roman Venom писал(а):В общем, мож кто подскажет где я протупил... Зараннее благодарю тех, кто будет читать мой ламерский код

Мля, это пипец а не код. Где хотя бы комменты?
Могу посоветовать давать самую первую команду на инициализацию два раза (с паузой, естессно). Мне помогло.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

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