Например TDA7294

Форум РадиоКот • Просмотр темы - Работа с ЖКИ на контроллере HD44780 и его аналогах
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вс июл 06, 2025 19:07:27

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 2431 ]     ... , , , 79, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт авг 12, 2014 20:38:49 
Друг Кота

Карма: 28
Рейтинг сообщений: 568
Зарегистрирован: Чт май 05, 2011 21:26:34
Сообщений: 4550
Откуда: Украина, Славутич
Рейтинг сообщения: 0
Ах, вы про это... да просто подчищают биты, чтобы потом на них положить нужные данные командой OR. Ведь если там будет мусор, а он там стопудов будет от предыдущих манипуляций, то данные просто исказятся.
Вообще, код пишут кто как может, поэтому могут встречаться и перлы и хаки... по хорошему так делать нельзя - надо сначала наложить маску на переменную, потом наложить туда данные и только потом это вывести в порт. То как это сделано здесь -съекономили одну ячейку памяти но порт будет постоянно дрыгать внешней ножкой - к примеру там была 1 и надо установить тоже 1 в предоставленном алгоритме порт мы сначала очистим - ножка пойдет в ноль, а потом выставим состояние "1" - ножка пойдет в +5В.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вт авг 12, 2014 21:13:07 
Прорезались зубы

Зарегистрирован: Вс авг 15, 2010 20:42:44
Сообщений: 249
Откуда: Тюмень
Рейтинг сообщения: 0
Спасибо! :) Да, именно об этом))). Теперь примерно понятен алгоритм вывода тетрады в порт - наложить маску на переменную, затем данные, потом выводим в порт. Буду писать свой код исходя из этого алгоритма. Дело в том, что приведенный код мне показался более менее понятным в сравнении с остальными, поэтому копался в нем :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Ср авг 13, 2014 00:18:17 
Прорезались зубы

Зарегистрирован: Вс авг 15, 2010 20:42:44
Сообщений: 249
Откуда: Тюмень
Рейтинг сообщения: 0
Возник еще такой вопрос: мы отправляем сначала один полубайт (старший), затем второй (младший). ЖКД сначала первые переданные ему 4 бита воспринимает как старшие, а вторые - как младшие? Или же перед отправкой мы сообщаем жкд, что вот тебе пошел старший полубайт, а вот к тебе пошел младший? :facepalm: ну или же как? Подскажите пожалуйста)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Ср авг 13, 2014 06:25:35 
Друг Кота

Карма: 28
Рейтинг сообщений: 568
Зарегистрирован: Чт май 05, 2011 21:26:34
Сообщений: 4550
Откуда: Украина, Славутич
Рейтинг сообщения: 0
Именно так, орн сам ведет подсчет когда идет старший когда младший. Сбрасывается этот счетчик по сигналу выбора индикатора.


Вернуться наверх
 
Выбираем индустриальные и медицинские источники питания MEAN WELL в открытом исполнении

Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Ср авг 13, 2014 09:09:12 
Опытный кот

Карма: 4
Рейтинг сообщений: 79
Зарегистрирован: Вс фев 10, 2013 15:26:00
Сообщений: 758
Рейтинг сообщения: 0
sklw35 писал(а):
отображает только по 8 символов в каждой строке дальше непонятные потемнения... два LCD отображают только половину, до этого пару дней назад все ок... Фото0093.jpg
Подчеркнул то, которое как бы намекает.

Если оба "плохих" дисплея показывают одинаковые краказябры - о чём вопрос?
Ищем краказябры в таблице "прошитых" символов, не находим, вспоминаем про "пользовательские" символы.

Если краказябры на разных дисплеях разные, но/и частично совпадают с тем символом, который пытаемся вывести - тогда это резинка между стеклом и платой.
Можно разобрать, собрать, повторить, выбросить. Задача на везение.

А цифра 8 она очень такая характерная цифра, более того - она "круглая". В двоичном смысле.
И вот именно ровно по 8 знакомест сдохло на каждом из двух дисплеев... а остальные ровно 8 работают идеально... на обоих экземплярах... одинаково и ровно по 8 знакомест...

_________________
Кэшбек (возврат обратно покупателю части суммы, уплаченной за покупку): Aliexpress 1%, Ebay 1%, другие магазины по-разному, плюс $5 подарок за регистрацию.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Ср авг 13, 2014 20:52:43 
Прорезались зубы

Зарегистрирован: Вс авг 15, 2010 20:42:44
Сообщений: 249
Откуда: Тюмень
Рейтинг сообщения: 0
Alexeyslav писал(а):
Именно так, орн сам ведет подсчет когда идет старший когда младший. Сбрасывается этот счетчик по сигналу выбора индикатора.


Благодарю. Сегодня ,наконец то, дописал код вывода на информационные выводы адреса символа (где и в какой он строке мне нужен) и код самого символа. Хочу для начала вывести один символ на жкд.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Сб авг 16, 2014 00:07:02 
Прорезались зубы

Зарегистрирован: Вс авг 15, 2010 20:42:44
Сообщений: 249
Откуда: Тюмень
Рейтинг сообщения: 0
Подскажите пожалуйста, не могу разобраться до конца с инициализацией ЖКИ. Действую по следующему алгоритму:

В случае использования 4-битного интерфейса инициализация выполняется аналогичным образом, только данные передаются в два приема по 4 бита, причем первыми идут старшие 4 бита.
Пункты 1...8 аналогичны предыдущему случаю.
9. RS = 0, R/W = 0, DB7 = 0, DB6 = 0, DB5 = 1, DB4 = 0 — выбран 4-битный интерфейс.
10. Пауза 200 мкс.
11.1. RS = 0, R/W = 0, DB7 = 0, DB6 = 0, DB5 = 1, DB4 = 0 — подтверждение выбора 4-битного интерфейса.
11.2. Пауза 200 мкс.
11.3. RS = 0, R/W = 0, DB3 = N, DB2 = F, DB1 = *, DB0 = * — выбор числа строк и размера матрицы символов.
12. Пауза 200 мкс.
13.1. RS = 0, R/W = О, DB7 = О, DB6 = О, DB5 = О, DB4 = 0.
13.2. Пауза 200 мкс.
13.3. RS = О, R/W = О, DB3 = 1, DB2 = О, DB1 = О, DB0 = 0 — дисплей выключен.
14. Пауза 200 мкс.
15.1. RS = О, R/W = О, DB7 = О, DB6 = О, DB5 = О, DB4 = 0.
15.2. Пауза 200 мкс.
15.3. RS = 0, R/W = 0,DB3= 1, DB2 = 1, DB1 =0, DB0 = 0 — дисплей включен.
16. Пауза 200 мкс.
17.1. RS = О, R/W = О, DB7 = О, DB6 = О, DB5 = О, DB4 = 0.
17.2. Пауза 200 мкс.
17.3. RS = О, R/W = О, DB3 = О, DB2 = 1, DB1 = l/D, DB0 = S — установка параметров отображения информации.

С 8ми битной инициализацией все понятно - указал все 8 бит, а вот с 4х - не совсем.
Возьмем 9й пункт:

"9. RS = 0, R/W = 0, DB7 = 0, DB6 = 0, DB5 = 1, DB4 = 0 — выбран 4-битный интерфейс."

Как мне правильно "объяснить" контроллеру, что ты, мол, возьми только 4 старшие бита для инициализации DB7 = 0, DB6 = 0, DB5 = 1, DB4 = 0 и все, остальные не трогай :) . Ведь если я напишу b'0010', то мк воспримет эту запись как 0000 0010. Как мне дать понять, что использовать только 4 бита и что они именно старшие?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Сб авг 16, 2014 05:40:56 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4884
Откуда: Минск
Рейтинг сообщения: 0
Serhio писал(а):
Пункты 1...8 аналогичны предыдущему случаю.
Не нужно никаких пунктов, того что дальше - уже достаточно.

Смотрите. Для установки режима дисплея в него нужно каким-то образом передать команду (0)(0)(1)(DL)(N)(F)(-)(-).

До начала инициализации дисплей находится по умолчанию в 8-битном режиме. Он воспринимает данные на всех 8-ми ножках. Поэтому, учитывая то, что ноги DB3-DB0 "висят" в воздухе, он, фактически, может считать с них любой "мусор". Но самый важный бит, (DL), в воздухе
не висит. Поэтому, самая первая посылка является, фактически, 8-битной. Поэтому, при инициализации 4-битного режима дисплей принимает следующие данные:

(0)(0)(1)(DL=0)(x)(x)(x)(x) - строб (ваш пункт 9).

То есть, дисплей по-любому переходит в 4-хбитный режим после этой команды с одним стробом. Но при этом может выбраться как однострочный, так и двухстрочный режим (N), как 8-битная высота символов, так и 11-битная (F). Из-за того, что младшие биты "висят" в воздухе. Поэтому, для уточнения настройки, команда инициализации повторяется. Но, поскольку дисплей _уже_ находится в 4-битном режиме, она, как и все последующие команды, передаётся уже за два такта:

(0)(0)(1)(DL=0) (x)(x)(x)(x) - строб (ваш пункт 11.1)
(N)(F)(-)(-) (x)(x)(x)(x) - строб (ваш пункт 11.3)

Вот и вся "хитрость". То есть, суть в том, что самая первая команда, по сути, передаётся в 8-битном режиме (с возможным мусором на DB3-DB0), а все остальные дисплей уже будет воспринимать как состоящие из двух полукоманд, с поочерёдно передающимися старшей и младшей тетрадами, с игнорированием состояния на входах DB3-DB0:

1) Команда 00100000 в 8-битном режиме:
DB7 = 0, DB6 = 0, DB5 = 1, DB4 = 0, DB3 = X, DB2 = X, DB1 = X, DB0 = x => строб => выбран 4-битный интерфейс.
2) Команда 00100000 в 4-битном режиме:
DB7 = 0, DB6 = 0, DB5 = 1, DB4 = 0 => строб => DB7 = 0, DB6 = 0, DB5 = 0, DB4 = 0 => строб => выбран 4-битный интерфейс, режим 1 строка высотой 8px.
3) Команда 00001100 в 4-битном режиме:
DB7 = 0, DB6 = 0, DB5 = 0, DB4 = 0 => строб => DB7 = 1, DB6 = 1, DB5 = 0, DB4 = 0 => строб => включили дисплей, выключили курсор и мигание
4) Команда 00000110 в 4-битном режиме:
DB7 = 0, DB6 = 0, DB5 = 0, DB4 = 0 => строб => DB7 = 0, DB6 = 1, DB5 = 1, DB4 = 0 => режим увеличения адреса, не сдвигаем экран.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Сб авг 16, 2014 09:30:20 
Друг Кота

Карма: 28
Рейтинг сообщений: 568
Зарегистрирован: Чт май 05, 2011 21:26:34
Сообщений: 4550
Откуда: Украина, Славутич
Рейтинг сообщения: 0
пауза в 200мкс между передачами половинок байта не нужна, регистр в дисплее аппаратный - половинки можно запихивать в него без задержки, это потом после запихивания второй половинки начинается выполнение команды которое требует времени.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Сб авг 16, 2014 13:27:48 
Родился
Аватар пользователя

Зарегистрирован: Вс дек 01, 2013 12:18:11
Сообщений: 19
Рейтинг сообщения: 0
Извините что не прочитал тему, возможно ответ в ней уже есть, но я все равно спрошу: WH1602 (2013 год) - дисплей с контроллером HD44780?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Сб авг 16, 2014 20:15:59 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4563
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
http://yandex.ru/yandsearch?text=wh1602 ... =9582&lr=2 Или банальная лень ?
Всего 2 слова в поисковике, за место многобуковак на форуме... Не поймёшь некоторых людей... :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вс авг 17, 2014 10:07:13 
Родился
Аватар пользователя

Зарегистрирован: Вс дек 01, 2013 12:18:11
Сообщений: 19
Рейтинг сообщения: 0
Вы меня не поняли. Я вводил этот дисплей, читал разные даташиты, но в них не было даты их составления. Поэтому появились подозрения, как сказано в Википедии (https://ru.wikipedia.org/wiki/HD44780) "Контроллер HD44780 ... Эти контроллеры были фактически монополистами на рынке в 90-е годы. В настоящее время все активнее вытесняются контроллерами с SPI или I2C интерфейсами, а также контроллерами цветных дисплеев...." У меня дисплей 2013 года, есть подозрения что компания Winstar сменила контроллер. Плюс к этому где-то на форуме я нашел что 1 пользователь после составления программы, в которых была инициализация дисплея, говорил, что дисплей у него с инициализацией показывал черные квадраты из точек, ему посоветовали изменить инициализацию, он изменил, дисплей заработал. Пожалуйста, прочтите код на языке С и подскажите что следует изменить.


Вложения:
ИT11.c [3.13 KiB]
Скачиваний: 281
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Вс авг 17, 2014 11:17:25 
Друг Кота

Карма: 28
Рейтинг сообщений: 568
Зарегистрирован: Чт май 05, 2011 21:26:34
Сообщений: 4550
Откуда: Украина, Славутич
Рейтинг сообщения: 0
Ты этот код впервые видишь? там нет ничего что относится к работе дисплея. Это можно было понять даже не зная языка...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Ср авг 20, 2014 21:37:09 
Прорезались зубы

Зарегистрирован: Вс авг 15, 2010 20:42:44
Сообщений: 249
Откуда: Тюмень
Рейтинг сообщения: 0
WiseLord писал(а):
Не нужно никаких пунктов, того что дальше - уже достаточно....
Спасибо большое - ответ очень развернутый))))!!! Но к сожалению не могу победить это в коде на асме. Пытаюсь промоделировать в протеусе 7.7 sp2. - никак не хочет работать.


Последний раз редактировалось ibiza11 Ср авг 27, 2014 10:47:27, всего редактировалось 1 раз.
2.7 Запрещается бездумное вложенное цитирование, цитирование огромных объёмов текста без сокрытия его под спойлер, а так же полное, бессмысленное цитирование предыдущего поста.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Ср авг 20, 2014 21:40:58 
Прорезались зубы

Зарегистрирован: Вс авг 15, 2010 20:42:44
Сообщений: 249
Откуда: Тюмень
Рейтинг сообщения: 0
Если кому не сильно затруднительно, посмотрите пожалуйста какие могут быть явные логические ошибки в коде :(
Как уже только не пробовал проводить инициализацию и вывод символа - в протеусе ни в какую не хочет работать


Спойлер
Код:
;***************************************************************************
;
;   ПРОГРАММА "ИНИЦИАЛИЗАЦИЯ И ВЫВОД СИМВОЛА "А" НА ЭКРАН ДВУХСТРОЧНОГО ЖИДКОКРИСТАЛИЧЕСКОГО ДИСПЛЕЯ (LCD)"
;

;   НАЗНАЧЕНИЕ ВЫВОДОВ МИКРОКОНТРОЛЛЕРА PIC16F876A   
;****************************************************************
;вывод *  использование    *   описание
;****************************************************************
; 1    *  RA2              *
; 2    *  RA3              *
; 3    *  RA4              *
; 4    *  MCLR             * Сброс
; 5    *  Vss              * GND
; 6    *  RB0              * D7 LCD индикатор
; 7    *  RB1              * D6 LCD индикатор
; 8    *  RB2              * D5 LCD индикатор
; 9    *  RB3              * D4 LCD индикатор

; 10   *  RA0              * E  LCD индикатор
; 11   *  RA1              * RS LCD индикатор
; 12   *  RA2 ----         * RW LCD индикатор
; 13   *  RB7              *
; 14   *  Vdd              * +5V
; 15   *  OSC2             * Кварц 4 МГц
; 16   *  OSC1             * Кварц 4 МГц
; 17   *  RA0              *
; 18   *  RA1              *
;****************************************************************

;==========
;   Конфигурация микроконтроллера
;==========
LIST P=16F876A.INC
#Include <P16F876A.inc>
;#Include <Delay.h>

__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _CPD_OFF & _CP_OFF

;E    equ   .4   ;сигнал Е  RA0
;RS    equ   .1   ;сигнал RS RA1
;RW  equ    .7  ;сигнал RW RA7

;==========
;   Макроопределения
;==========
_BANK_0 macro
   BCF STATUS,RP0
   BCF STATUS,RP1
   endm

_BANK_1 macro
   BSF STATUS,RP0
   BCF STATUS,RP1
   endm

_BANK_2 macro
   BCF STATUS,RP0
   BSF STATUS,RP1
   endm

_BANK_3 macro
   BSF STATUS,RP0
   BSF STATUS,RP1
   endm

;list    p = 12f629
; __config 03F30h
;*** Переменные *****************************************
   CBLOCK 0x20   ; Начальный адрес блока пользовательской памяти
    T_ext        ;таймер внешнего цикла
    T_int        ;таймер внутреннего цикла
    T_n          ;таймер начальной задержки
    M_byte       ;байт посылки 7-й бит = DB7, 6-й бит = DB6 и т.д.
    ENDC
;**** Константы / Адреса регистров **********************
Cr1    equ   .50   ;длительность 1-й задержки 50 циклов
Cr2    equ   .25   ;длительность 2-й задержки 25х50 циклов
Cr3    equ   .200  ;длительность 3-й задержки 200х50 циклов
;Status equ   03h   ; выбор банка
;TrisA  equ   05h   ; выбор направления работы выводов порта А
;TrisB  equ   06h   ; выбор направления работы выводов порта В
;PortA  equ   05h   ; управление защелками порта А
;PortB  equ   06h   ; управление защелками порта В
;Cmcon  equ   1Fh   ; вкл/выкл компараторов
;********************************************************
;          org 0
;==========
;НАЧАЛО ПРОГРАММЫ                                          100%
;==========
   org   0x0000
   goto   Start

    org   0x0005
;====================
;*** ИНИЦИАЛИЗАЦИИЯ КОНТРОЛЛЕРА НАЗНАЧЕНИЕ ПОРТОВ********            100%
;====================
Start ;movlw  .7
      ;movwf  Cmcon    ; выключить компараторы
      clrf   PORTA    ; инициализация защелок порта А
      clrf   PORTB    ; инициализация защелок порта В
      bsf    STATUS,5 ; Перейти в 1-й банк
      movlw  .56      ; Записать конфигурацию порта A в аккумулятор.
      movwf  TRISA    ; Скопировать конфигурацию порта А из W в регистр TrisA
      movlw  .0       ; Записать конфигурацию порта В в аккумулятор.
      movwf  TRISB    ; Скопировать конфигурацию порта B из W в регистр TrisB
      bcf    STATUS,5 ; Перейти в 0-й банк


;*** ИНИЦИАЛИЗАЦИЯ ЖКИ **********************************
;*** Пауза более 30 мс + FUNCTION SET *******************
      movlw  b'00100000'  ; DB7-4= 0010 4-битный интерф.
      movwf  M_byte   ; записать это значение в байт сообщения
      call   in_port  ; запись в порт
      bcf    PORTA, 1 ; RS=0
      bcf    PORTA, 2 ; RW=0
      call   pause3
      call   zapis    ; передача в ЖКИ
;*** Пауза более 39 мкс *********************************
      call   pause1

;*** Подтверждение 4-х битного режима *******************
     movlw  b'0010'  ; DB7-4= 0010 4-битный интерф. СТАРШИЙ полубайт
      movwf  M_byte   ; записать это значение в байт сообщения
      call   in_port  ; запись в порт
      bcf    PORTA, 1 ; RS=0
      bcf    PORTA, 2 ; RW=0
      call   pause3
      call   zapis    ; передача в ЖКИ
;*** Пауза более 39 мкс *********************************
      call   pause1

     movlw  b'1000'  ; DB7-4= 1000 4-битный интерф. МЛАДШИЙ полубайт выбрано 2 строки. 5х7 пикселей
      movwf  M_byte   ; записать это значение в байт сообщения
      call   in_port  ; запись в порт
      bcf    PORTA, 1 ; RS=0
      bcf    PORTA, 2 ; RW=0
      call   pause3
      call   zapis    ; передача в ЖКИ
;*** Пауза более 39 мкс *********************************
      call   pause1

;***Включаем дисплей, выключаем курсор и мигание*********
        movlw  b'0000'  ;  СТАРШИЙ полубайт
      movwf  M_byte   ; записать это значение в байт сообщения
      call   in_port  ; запись в порт
      bcf    PORTA, 1 ; RS=0
      bcf    PORTA, 2 ; RW=0
      call   pause3
      call   zapis    ; передача в ЖКИ
;*** Пауза более 39 мкс *********************************
      call   pause1

     movlw  b'1100'  ; МЛАДШИЙ полубайт
      movwf  M_byte   ; записать это значение в байт сообщения
      call   in_port  ; запись в порт
      bcf    PORTA, 1 ; RS=0
      bcf    PORTA, 2 ; RW=0
      call   pause3
      call   zapis    ; передача в ЖКИ
;*** Пауза более 39 мкс *********************************
      call   pause1


;*** Режим увеличения адреса, не сдвигаем экран**********
     movlw  b'0000'  ;  СТАРШИЙ полубайт
      movwf  M_byte   ; записать это значение в байт сообщения
      call   in_port  ; запись в порт
      bcf    PORTA, 1 ; RS=0
      bcf    PORTA, 2 ; RW=0
      call   pause3
      call   zapis    ; передача в ЖКИ
;*** Пауза более 39 мкс *********************************
      call   pause1

     movlw  b'0110'  ; МЛАДШИЙ полубайт
      movwf  M_byte   ; записать это значение в байт сообщения
      call   in_port  ; запись в порт
      bcf    PORTA, 1 ; RS=0
      bcf    PORTA, 2 ; RW=0
      call   pause3
      call   zapis    ; передача в ЖКИ
;*** Пауза более 39 мкс *********************************
      call   pause1


;*** Продолжение инициализации DISPLAY ON/OFF MODE ******
;      movlw  .14      ; DB7-0=00001110 - вкл.дисплей,вкл.курсор,выкл.мерцание
;      movwf  M_byte   ; на RS и R/W уже установл. нужные уровни,т.к. с прошлой
;      call   in_port  ; передачи они не изменились - заново их устан-ть не надо
;      call   zapis    ; передача в ЖКИ
;*** Пауза более 39 мкс *********************************
;      call   pause1


;*** Продолжение инициализации DISPLAY CLEAR ************
      movlw  b'0000'  ;  СТАРШИЙ полубайт
      movwf  M_byte   ; записать это значение в байт сообщения
      call   in_port  ; запись в порт
      bcf    PORTA, 1 ; RS=0
      bcf    PORTA, 2 ; RW=0
      call   pause3
      call   zapis    ; передача в ЖКИ

     movlw  b'0001'  ;  МЛАДШИЙ полубайт
      movwf  M_byte   ; записать это значение в байт сообщения
      call   in_port  ; запись в порт
      bcf    PORTA, 1 ; RS=0
      bcf    PORTA, 2 ; RW=0
      call   pause3
      call   zapis    ; передача в ЖКИ

;*** Продолжение инициализации DISPLAY CLEAR ************
;      movlw  .1       ; DB7...DB0=00000001
 ;     movwf  M_byte   ; записать это значение в байт сообщения
 ;     call   in_port  ; запись в порт
  ;    call   zapis    ; передача в ЖКИ
;*** Пауза более 1,53 мс ********************************
  ;    call   pause2

;*** Продолжение инициализации ENTRY MODE SET ***********
;      movlw  .6       ; DB7-0=00000110 - автосдв. курсора вправо,сдв.диспл.выкл.
;      movwf  M_byte   ; записать это значение в байт сообщения
;      call   in_port  ; запись в порт
;      call   zapis    ; передача в ЖКИ
;*** Пауза более 39 мкс *********************************
;      call   pause1
;*** Инициализация дисплея закончена ******************


;=====================
;*** ВЫВОД СИМВОЛА "А" С АДРЕСОМ 0100 0001****************         100%
;=====================

;*** Set DDRAM ADDRESS 1000 0011 (4-я позиция первой строки ЖКИ)
 bcf   PORTA, 1  ; RS=0
 bcf   PORTA, 2  ; R/W=0
 movlw .8        ; 1000 - старший полубайт
 movwf M_byte
 call  in_port
 call  zapis
 movlw .3        ; 0011 - младший полубайт
 movwf M_byte
 call  in_port
 call  zapis 
;*** Пауза >39 мкс ***
 call  pause1

;*** Вывод символа (для записи в RAM надо установить RS=1, R/W=0)
 
;*** Пишем символ под номером "А" (0100 0001)
 bsf   PORTA,1   ; RS=1, R/W уже сброшен в 0, его не трогаем
 movlw .4        ; 0100
 movwf M_byte
 call  in_port
 call  zapis
 movlw .1        ; 0001
 movwf M_byte
 call  in_port
 call  zapis
;*** Пауза >43 мкс ***
 call  pause1

stop
nop
goto stop
;=====================
;*** ПРОЦЕДУРЫ ******************************************
;=====================
;*** Процедура записи в LCD *****************************         100%
;=====================
zapis bsf    PORTA,0  ; E=1 - запись
      nop             ; 1 мкс - пауза для записи
      nop             ; 1 мкс - пауза для записи
      bcf    PORTA,0  ; E=0 - выключить запись
      return

;=====================
;*** Процедура Паузы 1 (>39 мкс) ************************             100%
;=====================
pause1
      movlw  Cr1
      movwf  T_int    ; загрузить значение таймера для паузы в T_int
cikl1 nop
      nop
      nop
      nop
      nop
      nop
      decfsz T_int,1
      goto   cikl1
      return

;=====================
;*** Процедура Паузы 2 (>1.53 мс) ***********************              100%
;=====================
pause2
      movlw  Cr2
      movwf  T_ext    ; загрузить значение для внешнего цикла
cikl2 movlw  Cr1
      movwf  T_int    ; загрузить значение для внутреннего цикла
cikl3 decfsz T_int,1
      goto   cikl3    ; внутренний цикл
      decfsz T_ext,1
      goto   cikl2    ; внешний цикл
      return

;=====================
;*** Процедура Паузы 3 (>30 мс) *************************                100%
;=====================
pause3
      movlw  Cr3
      movwf  T_n      ; загрузить значение для внешнего цикла
cikl4 movlw  Cr1
      movwf  T_int    ; загрузить значение для внутреннего цикла
cikl5 nop
      decfsz T_int,1
      goto   cikl5    ; внутренний цикл
      decfsz T_n,1
      goto   cikl4    ; внешний цикл
      return

;=====================
;*** Процедура записи байта сообщения в защелки портов **            100%
;=====================
in_port
      btfsc  M_byte,7 ; если 7-й бит посылки = 0, - следующ. команда пропуск-ся
      bsf    PORTB,0  ; DB7=1
      btfss  M_byte,7 ; если 7-й бит посылки =1, - следующ. команда пропуск-ся
      bcf    PORTB,0  ; DB7=0
;----------
      btfsc  M_byte,6 ; если 6-й бит посылки = 0, - следующ. команда пропуск-ся
      bsf    PORTB,1  ; DB6=1
      btfss  M_byte,6 ; если 6-й бит посылки =1, - следующ. команда пропуск-ся
      bcf    PORTB,1  ; DB6=0
;----------
      btfsc  M_byte,5 ; если 5-й бит посылки = 0, - следующ. команда пропуск-ся
      bsf    PORTB,2  ; DB5=1
      btfss  M_byte,5 ; если 5-й бит посылки =1, - следующ. команда пропуск-ся
      bcf    PORTB,2  ; DB5=0
;----------
      btfsc  M_byte,4 ; если 4-й бит посылки = 0, - следующ. команда пропуск-ся
      bsf    PORTB,3  ; DB4=1
      btfss  M_byte,4 ; если 4-й бит посылки =1, - следующ. команда пропуск-ся
      bcf    PORTB,3  ; DB4=0
;----------
      btfsc  M_byte,3 ; если 3-й бит посылки = 0, - следующ. команда пропуск-ся
     bsf    PORTB,3  ; DB3=1
    btfss  M_byte,3 ; если 3-й бит посылки =1, - следующ. команда пропуск-ся
   bcf    PORTB,3  ; DB3=0
;----------
      btfsc  M_byte,2 ; если 2-й бит посылки = 0, - следующ. команда пропуск-ся
      bsf    PORTB,7  ; DB2=1
      btfss  M_byte,2 ; если 2-й бит посылки =1, - следующ. команда пропуск-ся
      bcf    PORTB,7  ; DB2=0
;----------
    btfsc  M_byte,1 ; если 1-й бит посылки = 0, - следующ. команда пропуск-ся
      bsf    PORTA,2  ; DB1=1
      btfss  M_byte,1 ; если 1-й бит посылки =1, - следующ. команда пропуск-ся
      bcf    PORTA,2  ; DB1=0

 
;----------
      btfsc  M_byte,0 ; если 0-й бит посылки = 0, - следующ. команда пропуск-ся
      bsf    PORTA,1  ; DB0=1
      btfss  M_byte,0 ; если 0-й бит посылки =1, - следующ. команда пропуск-ся
      bcf    PORTA,1  ; DB0=0
;----------
      return
end


Последний раз редактировалось ibiza11 Ср авг 27, 2014 10:50:19, всего редактировалось 1 раз.
2.5 Длинные тексты и рисунки следует оформлять в виде приложения к ответу. Длинные тексты необходимо убирать под спойлер, тег - [spoiler] Код обрамляется тегами [code].


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Ср авг 20, 2014 23:29:15 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Пн янв 07, 2008 16:56:28
Сообщений: 302
Откуда: Минск
Рейтинг сообщения: 0
1 - одновременно на экране более 8 пользовательских символов быть не может?

2 - как вывести вертикальный прогресс бар?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Ср авг 20, 2014 23:51:39 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4563
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
1. Нет, не может.
2. Нарисовать его пользовательскими символами :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Чт авг 21, 2014 00:37:19 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Пн янв 07, 2008 16:56:28
Сообщений: 302
Откуда: Минск
Рейтинг сообщения: 0
кэ(п)т :roll:

так я к чему и веду, есть к примеру массив

flash byte char0[48]={
0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b00000,
};

2 символа сохранили. Дисплей 4 строки, того 32 варианта (33 если с нулем).
Поимели int pointa; в котором болтается число 0-32.

рисуем второй массив где болтаются номера символов в знакогенераторе

flash byte digtable[9]={
{0},//0
{111},//1 (если не ошибаюсь)
{1},//2
{2},//3
{3},//4
{4},//5
{5},//6
{6},//7
{255},//8
};

вопрос как это все теперь опрелить в столбик :) ? как вариант перевести pointa в 8х систему. получится красиво 40. А дальше?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Чт авг 21, 2014 01:35:56 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4563
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
levaclaus писал(а):
есть к примеру массив

flash byte char0[48]={
0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b00000,
};

А где ещё 2 строки ? :)
Не стоит жалеть 16 байт флеша, наживая себе геморрой с вычислениями и выдирая уже имеющиеся символы :)

Код:
 flash byte char0[8][8]={
0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000,
0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b00000,
};

flash byte char1[8]={0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111};

Ну а дальше математика. Делим число, которое болтается в переменной, на 8. Целое от деления - кол-во полностью заполненных столбиков (*char1), остаток - строка из массива ( *char0[x] ) - он же символ для следующего (выше) знакоместа. Все последующие выше - пустые.
Вот и вся математика :))

PS: char1 уже можно заменить на имеющийся в дисплее символ. В итоге, на дисплее имеем максимум 1 свой символ, ещё 7 в запасе :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
СообщениеДобавлено: Чт авг 21, 2014 15:54:58 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Пн янв 07, 2008 16:56:28
Сообщений: 302
Откуда: Минск
Рейтинг сообщения: 0
Тогда что-то типо этого, только не на трасянке :)))
Ход мысли верен?
Код:
 flash byte char0[8][8]={
0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000,
0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b00000, 0b00000,
0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b00000,
};

flash byte digtable[8]={
{0},//0
{111},//1 (если не ошибаюсь)
{1},//2
{2},//3
{3},//4
{4},//5
{5},//6
{6},//7

};

(0;0);
если целое от pointa/8 >3,
то символ = 255

если целое от pointa/8 =3,
то символ = остаток от pointa%8,

если целое от pointa/8 <3,
то символ = 0

путчар(символ)

(0;1)
если целое от point/8 >2,
то символ = 255
если целое от pointa/8 =2,
то символ = остаток от pointa%8,
если целое от pointa/8 <2,
то символ = 0

(0;2)
если целое от pointa/8 >1,
то символ = 255
если целое от pointa/8 =1,
то символ = остаток от pointa%8,
если целое от pointa/8 <1
то символ = 0

(0;3)
если целое от pointa/8 <1
то символ = pointa,
иначе символ = 255


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 2431 ]     ... , , , 79, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y