Работа с ЖКИ на контроллере HD44780 и его аналогах
-
T0lik
- Открыл глаза
- Сообщения: 44
- Зарегистрирован: Сб авг 07, 2010 18:38:37
- Откуда: Таганрог
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Модераторы удалите предыдущее сообщение, вопрос снят, проблема была в задержке в вместо nop нужно было хотябы поставить 2uS
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
T0lik писал(а):Модераторы удалите предыдущее сообщение, вопрос снят, проблема была в задержке в вместо nop нужно было хотябы поставить 2uS
Сам бы взял, да удалил.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Программиуемые символы
Всем привет. Индикатор PM1551A DISPLAYTECH
Вопрос вот в чём:
В нём нет русского знакогенератора. Сделал свой на восьми
"символах, программируемых пользователем".
Коды $00 - $07.
1 Вывожу на экран слово. По русски
2 Программирую эти символы для другого слова, чтобы написать это другое слово.
После действия 2 первое нарисованное слово меняется на символы,
зашитые в 2. Второе слово ещё не писал!
Т.е. контроллер выводит на экран не один раз и "навсегда" до вык. питания,
а постоянно обновляет изображение из знакогенератора?
Получается невозможно нарисовать ОДНОВРЕМЕННО более 8ми своих символов?
Вопрос вот в чём:
В нём нет русского знакогенератора. Сделал свой на восьми
"символах, программируемых пользователем".
Коды $00 - $07.
1 Вывожу на экран слово. По русски
2 Программирую эти символы для другого слова, чтобы написать это другое слово.
После действия 2 первое нарисованное слово меняется на символы,
зашитые в 2. Второе слово ещё не писал!
Т.е. контроллер выводит на экран не один раз и "навсегда" до вык. питания,
а постоянно обновляет изображение из знакогенератора?
Получается невозможно нарисовать ОДНОВРЕМЕННО более 8ми своих символов?
- Old Grumble
- Открыл глаза
- Сообщения: 53
- Зарегистрирован: Вс июн 14, 2009 21:36:46
- Откуда: Кап.Яр-1 Астраханская обл.
Re: Программиуемые символы
PANYTA писал(а):Всем привет. Индикатор PM1551A DISPLAYTECH
Вопрос вот в чём:
В нём нет русского знакогенератора. Сделал свой на восьми
"символах, программируемых пользователем".
Коды $00 - $07.
1 Вывожу на экран слово. По русски :)
2 Программирую эти символы для другого слова, чтобы написать это другое слово.
После действия 2 первое нарисованное слово меняется на символы,
зашитые в 2. Второе слово ещё не писал!
Т.е. контроллер выводит на экран не один раз и "навсегда" до вык. питания,
а постоянно обновляет изображение из знакогенератора?
Получается невозможно нарисовать ОДНОВРЕМЕННО более 8ми своих символов?
При определении собственных символов перепрошивается ОЗУ знакогенератора. Естественно, символы, чьи коды находятся в ОЗУ дисплея изменят начертание. Сам ответил на свой вопрос - ДА не более 8 одновременно.
«Просите, и дано будет вам; ищите, и найдете; стучите, и отворят вам; ибо всякий просящий получает, и ищущий находит, и стучащему отворят». Матф.гл. 7, ст. 7—8
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Коты такой вопрос, сильно не пинайте новичок, есть индикатор WH1602D-TFH-CT (вернее могу купить), а надо (по схеме) HD44780, вопрос совместимы ли они, т.е. взаимозаменяемые ли они, могу я вместо HD44780 поставить WH1602D если AVR зашит под 1602...
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
NSL писал(а):Коты такой вопрос, сильно не пинайте новичок, есть индикатор WH1602D-TFH-CT (вернее могу купить), а надо (по схеме) HD44780, вопрос совместимы ли они, т.е. взаимозаменяемые ли они, могу я вместо HD44780 поставить WH1602D если AVR зашит под 1602...
HD44780 - тип контроллера дисплея, WH1602D-TFH-CT - это тип самого дисплея , в нем контроллер KS0066, если перечитать эту ветку с первой страницы, то про их совместимость много чего.
Re:
sema писал(а):KS0066 полностью аналогичен HD44780, из кодевижена библа подходит. на дисплее видна первая строка? (темные квадраты)
я так понимаю что вместо HD44780 запросто могу поставить KS0066 без переделки схемы и программы, да?
- Old Grumble
- Открыл глаза
- Сообщения: 53
- Зарегистрирован: Вс июн 14, 2009 21:36:46
- Откуда: Кап.Яр-1 Астраханская обл.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
http://www.entrance-el.ru/products/char ... 02d_tfh_ct
подсветка - белая,
знакогенератор - рус/лат (стандартный)
ВПЕРЕД!!!
подсветка - белая,
знакогенератор - рус/лат (стандартный)
ВПЕРЕД!!!
«Просите, и дано будет вам; ищите, и найдете; стучите, и отворят вам; ибо всякий просящий получает, и ищущий находит, и стучащему отворят». Матф.гл. 7, ст. 7—8
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
подозреваю что ошибка в документе, при 8 разрядном обмене такого нет, при 4х разрядном есть при инициализации, но работает и без отправки данных двух кодов команд - не описанных в спецификации.
http://i14.fastpic.ru/big/2010/1222/d6/ ... 70f2d6.jpg
http://i14.fastpic.ru/big/2010/1222/d6/ ... 70f2d6.jpg
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Народ! Куда надо подключать вывод Vo (контрастность) у индикатора WH0802, чтоб без подстроечника? К плюсу или к земле?
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
aam писал(а):Куда надо подключать вывод Vo (контрастность) у индикатора WH0802, чтоб без подстроечника? К плюсу или к земле?
Цель? Просто куда-нить подключить или всё-таки увидеть что выводится на дисплей?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
А что при таком подключении я на нем ничего не увижу? Я думал, что чем больше контрастность, тем лучше.
- Old Grumble
- Открыл глаза
- Сообщения: 53
- Зарегистрирован: Вс июн 14, 2009 21:36:46
- Откуда: Кап.Яр-1 Астраханская обл.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
aam писал(а):А что при таком подключении я на нем ничего не увижу? Я думал, что чем больше контрастность, тем лучше.
если контраст максимальный ты увидишь ВСЕ засвеченные точки во ВСЕХ знакоместах!
Резистивный делитель по любому. Напряжение 0,2-0,5В
«Просите, и дано будет вам; ищите, и найдете; стучите, и отворят вам; ибо всякий просящий получает, и ищущий находит, и стучащему отворят». Матф.гл. 7, ст. 7—8
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Понятно. Значит впаяю подстроечник на 20 кОм
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
.include "m8def.inc" ; Микроконтроллер Atmega8
.cseg
.org 0
rjmp reset
.org OVF0addr
rjmp timer_0
;********************************************************************
reset:
ldi r16, low (RAMEND) ; Загрузим в рабочий регистр младший байт значения
out SPL, r16
ldi r16, high (RAMEND) ; Загрузим в рабочий регистр старший байт значнеия
out SPH, r16
ldi r16, 0b111 ; Настройка порта
out ddrd, r16
ldi r16, 0b1111 ; Настройка порта
out ddrc, r16
;****************Прерывания от таймеров/счетчиков********************
ldi r16, 0b0 ; Настройка прерывания от переполнения T0
out TIMSK, r16
;****************Настройка предделителей таймеров/счетчиков**********
ldi r16, 0b1 ; Cброс предделителя
out SFIOR, r16
ldi r16, 0b000 ; "Таймер/счетчик T0 остановлен"
out TCCR0, r16
;****************Инициализация LCD***********************************
ldi r16, 0b000 ; Загрузим в РОН "RS=0, RW=0, E=0"
out portd, r16
rcall delay_20000us
rcall init_8bit
rcall delay_4100us
rcall init_8bit
rcall delay_100us
rcall init_8bit
rcall init_IR
;********************************************************************
delay_20000us:
cli ; I=0 (SREG)
ldi r16, 0b1 ; Разрешили прерывание по переполнению
out TIMSK, r16
ldi r16, 0b10110010 ; Заносим в TCNT0 178
out TCNT0, r16
ldi r16, 0b100 ; TCCR0 предделитель 256
out TCCR0, r16 ; Поехали!!!
A:
in r16, TIFR
sbrs r16, 0 ; Пропустить, если TOV0=1
rjmp A ; Переход A
sei ; I=1 (SREG)
ret
;********************************************************************
delay_4100us:
cli ; I=0 (SREG)
ldi r16, 0b1 ; Разрешили прерывание по переполнению
out TIMSK, r16
ldi r16, 0b11000000 ; Заносим в TCNT0 192
out TCNT0, r16
ldi r16, 0b011 ; TCCR0 предделитель 64
out TCCR0, r16 ; Поехали!!!
B:
in r16, TIFR
sbrs r16, 0 ; Пропустить, если TOV0=1
rjmp B ; Переход B
sei ; I=1 (SREG)
ret
;********************************************************************
delay_100us:
cli ; I=0 (SREG)
ldi r16, 0b1 ; Разрешили прерывание по переполнению
out TIMSK, r16
ldi r16, 0b10011100 ; Заносим в TCNT0 156
out TCNT0, r16
ldi r16, 0b001 ; TCCR0 предделитель отсутсвтует (работа от clk0)
out TCCR0, r16 ; Поехали!!!
C:
in r16, TIFR
sbrs r16, 0 ; Пропустить, если TOV0=1
rjmp C ; Переход C
sei ; I=1 (SREG)
ret
;********************************************************************
timer_0:
cli ; I=0 (SREG)
ldi r16, 0b000 ; Остановим таймер
out TCCR0, r16
ldi r16, 0b0 ; Запретили прерывание по переполнению
out TIMSK, r16
reti
;********************************************************************
init_IR:
ldi r18, 0b0010 ; Выбираем разрядность парралельной шины данных 4 бит
rcall write_lcd8 ; Запись в lcd
ldi r18, 0b0000 ; Старший байт
ldi r19, 0b1000 ; Изображение выключено, курсоров нет
rcall write_lcd4 ; Запись в lcd
ldi r18, 0b0010 ; Старший байт
ldi r19, 0b1000 ; Младший байт
rcall write_lcd4
ldi r18, 0b0000 ; Старший байт
ldi r19, 0b0110 ; Младший байт
rcall write_lcd4
ldi r18, 0b0000 ; Старший байт
ldi r19, 0b0001 ; Младший байт
rcall write_lcd4
ret
;********************************************************************
init_8bit:
ldi r16, 0b00 ; Загрузим в РОН "RS=0, RW=0"
out portd, r16
ldi r16, 0b0011 ; Загрузим в РОН "Установка 8-бит режима"
out portc, r16
ldi r16, 0b100 ; Загрузим в РОН "E=1"
out portd, r16
clr r16 ; "E=0" ; Стробирование
out portd, r16
ldi r16, 0b000 ; Data line Hi-Z
out portd, r16
ret
;********************************************************************
write_lcd8:
rcall test_BF
ldi r17, 0b00 ; "RS=0, RW=0"
out portd, r17
out portc, r18 ; Разрядность шины данных 4 бит
ldi r17, 0b100 ; + "E=1"
out portd, r17
ldi r17, 0b000 ; "E=0"
out portd, r17
ldi r17, 0b000 ; Data line Hi-Z
out portd, r17
ret
;********************************************************************
write_lcd4:
rcall test_BF
ldi r17, 0b00 ; "RS=0, RW=0"
out portd, r17
out portc, r18 ; Запись старшего байта
ldi r17, 0b100 ; + "E=1"
out portd, r17
ldi r17, 0b000 ; "E=0"
out portd, r17
out portd, r19 ; Запись младшего байта
ldi r17, 0b100 ; + "E=1"
out portd, r17
ldi r17, 0b000 ; "E=0"
out portd, r17
ldi r17, 0b000 ; Data line Hi-Z
out portd, r17
ret
;********************************************************************
test_BF:
ldi r16, 0b10 ; "RS=0, RW=1"
out portd, r16
ldi r16, 0b110 ; + "E=1"
out portd, r16
in r16, pind ; Пересылка PIND=> r16
ldi r17, 0b010 ; "E=0"
out portd, r17
sbrs r16, 7 ; Пропустить, если BF=1
ret
rjmp test_BF
;********************************************************************
Эта программа ничего не выводит на экран, всего лишь делает N=1 (режим отображения 2 строки)
Но код в железе нифига не работает...
Странно, ведь все сделал правильно.
Не умеешь - не берись, но не взявшись не научишься...
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Программа и не должна ничего выводить. Вот то, что получилось на скорую руку.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Хотелось бы узнать.
Можно ли делать некоторые операции с МК в промежутках между вот этими операциями, кроме
E=1, E=0
т.е. после занесения старшей тетрады, или младшей...
Просто у меня еще выдержка есть между п. 4 и п. 5
Далее, между 4 и 5 у меня находится команда RS=0, RW=0, E=0 - этозначит, что DB0-DB7 - Hi-Z.
Можно ли так?)
Можно ли делать некоторые операции с МК в промежутках между вот этими операциями, кроме
E=1, E=0
т.е. после занесения старшей тетрады, или младшей...
Просто у меня еще выдержка есть между п. 4 и п. 5
Далее, между 4 и 5 у меня находится команда RS=0, RW=0, E=0 - этозначит, что DB0-DB7 - Hi-Z.
Можно ли так?)
- Вложения
-
- Безымянный.JPG
- (31.79 КБ) 456 скачиваний
Не умеешь - не берись, но не взявшись не научишься...
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
напишите пожалуйста словами последовательность вывода символа на дисплей.
дисплей уже проинициализирован.
ведь правильно?:
1) D=1
2) RS=1, вывести данные, кодирующие символ.
дисплей уже проинициализирован.
ведь правильно?:
1) D=1
2) RS=1, вывести данные, кодирующие символ.
Не умеешь - не берись, но не взявшись не научишься...
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
.include "m8def.inc" ; Микроконтроллер Atmega8
.cseg
.org 0
rjmp reset
.org OVF0addr
rjmp timer_0
;********************************************************************
reset:
ldi r16, low (RAMEND) ; L байт стека
out SPL, r16
ldi r16, high (RAMEND) ; H байт стека
out SPH, r16
rcall init_m8_lcd ; Инициализация LCD
ldi r16, 0b11100000
ldi r19, 0b00000000 ; должен загореться курсор....
rcall lcd_text
t:
rjmp t
init_m8_lcd:
rcall init_port_m8_enable
;****************Прерывания от таймеров/счетчиков********************
ldi r16, 0b00000001 ; Разрешить прерывание по переполнению T0
out TIMSK, r16
;****************Инициализация LCD***********************************
ldi r16, 0b00000011 ; Выбор режима 8 бит
ldi r18, 0b10110010 ; TCNT0=178
ldi r19, 0b00000000 ; RS=0, RW=0, E=0 (Data line Hi-Z)
ldi r20, 0b00000100 ; Предделитель 256
rcall delay_n ; Пауза перед включением 20мс
ldi r18, 0b11000000 ; TCNT0=192
ldi r20, 0b00000011 ; Предделитель 64
rcall delay_n ; Пауза 4,1мс
ldi r18, 0b01000010 ; TCNT0=66
ldi r20, 0b00000001 ; Предделитель 1
rcall delay_n ; Пауза 100мкс
rcall init_IR ; Настройка параметров lcd
rcall init_port_m8_disable ; Восстановление портов ВВ C, D
ret
;********************************************************************
delay_n:
out TCNT0, r18
out TCCR0, r20 ; Запуск T0
test_TIFR:
in r18, TIFR ; Считывание данных в r18
sbrs r18, 0 ; Проверка TOV0
rjmp test_TIFR ; Переход, если TOV0=0
sei ; I=1
nop ; 1 такт для обнаружения прерывания
cli ; I=0
rcall init_8bit_4bit
ret
;********************************************************************
timer_0:
out TCCR0, r17 ; Останов T0
reti
;********************************************************************
init_8bit_4bit:
out portd, r19 ; RS=(0, 1), RW=0, E=0
write_lcd:
out portc, r16 ; Запись в lcd
sbi portd, 2 ; E=1
cbi portd, 2 ; E=0
out portd, r17 ; Data line Hi-Z
ret
;********************************************************************
init_IR:
ldi r16, 0b00000010 ; Выбор режима 4 бит
rcall init_8bit_4bit
ldi r16, 0b10000010 ; Выбор режима 4 бит, N=1, F=0
rcall write_4bit ; Отправка байта
ldi r16, 0b10000000 ; D=0, C=0, B=0
rcall write_4bit ; Отправка байта
ldi r16, 0b00010000 ; Очистка дисплея, AC=0
rcall write_4bit ; Отправка байта
ldi r16, 0b01100000 ; I/D=1, S=0
rcall write_4bit ; Отправка байта
ret
;********************************************************************
write_4bit:
rcall test_BF ; Проверка готовности
rcall init_8bit_4bit ; Запись ниббла
swap r16 ; Перестановка тетрад
rcall write_lcd ; Запись ниббла
ret
;********************************************************************
test_BF:
out ddrc, r17 ; Настройка порта C
sbi portd, 1 ; RW=1
A:
rcall read_BF
mov r0, r18 ; Копирование данных r18 в r0
rcall read_BF
cbi portd, 1 ; RW=0
sbrc r0, 3 ; Проверка BF
rjmp A ; Переход, если BF=1
ldi r18, 0b00001111 ; Настройка порта C
out ddrc, r18
ret
;********************************************************************
read_BF:
sbi portd, 2 ; E=1
in r18, pinc ; Считывание данных в r18
cbi portd, 2 ; E=0
ret
;********************************************************************
init_port_m8_enable:
ldi r18, 0b00000101 ; PUD=1, сброс предделителеля T0
out SFIOR, r18
ldi r18, 0b00000111 ; Настройка порта D
out ddrd, r18
ldi r18, 0b00001111 ; Настройка порта C
out ddrc, r18
ldi r17, 0b00000000 ; RS=0, RW=0, E=0 (Data line Hi-Z)
ret
;********************************************************************
lcd_text:
rcall init_port_m8_enable
rcall write_4bit ; Отправка байта
init_port_m8_disable:
out ddrc, r17 ; Настройка порта C
out portc, r17 ; RES=0, Hi-Z
out ddrd, r17 ; Настройка порта D
out portd, r17 ; RES=0, Hi-Z
out SFIOR, r17 ; PUD=0
ret
этот код всего лишь инициализирует лцд.
выводит всего 2 строки и все.
а символы не хочет
как видно, я хотел зажечь в основной программе курсор в виде подчерка - ничего не горит...
Не умеешь - не берись, но не взявшись не научишься...
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Здравствуйте. ИМХО, стало гораздо лучше,но... Работая с реальными устройствами, нужно учитывать их ограниченное быстродействие. В программе поставил небольшие задержки. Посмотрите этот документ. http://radioded.ru/component/option,com ... Itemid,34/