А чем регистр не расширитель портов работающий только на выход?
Ну так-то да. Просто с той же PCF8574 - это именно расширитель шины I2C, и можно использовать аппаратные возможности МК. Записал данные в регистр - и не паришься о задержках, управлении регистром и прочим.
PCF8574 и иже с ними удобны именно двунаправленностью. Хотя в случае "полноценного", с чтением статуса, управления дисплеем в 4бит режиме их использовать не получится, т.к. при чтении нужно разное направление для RS/RW/E и входов данных. Придётся, как минимум, выносить эти 3 управляющие линии отдельно, а уже расширителем управлять только линией данных - и тогда уж лучше в 8-бит режиме.
В случае с регистром, аппаратные возможности тоже можно использовать. SPI-интерфейс, к примеру. По прерыванию окончания передачи - дергать защелку. Записал в регистр передачи SPI и не паришься - все произойдет без дальнейшего вмешательства.
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
че это? А как там подсветка сделана? А что за дисплей такой? А что имееется ввиду по "Переназначить" кодовую таблицу? И какую кодовую? Которая прошита в ЖКИ?
че это? А как там подсветка сделана? А что за дисплей такой? А что имееется ввиду по "Переназначить" кодовую таблицу? И какую кодовую? Которая прошита в ЖКИ?
это дисплей из ограниченной партии бытовой техники, которые ко мне попадают в некотором количестве, грех не использовать
В дисплее зашита таблица символов, отличная от стандартной таблицы (так захотел разработчик). К примеру символ "_" в обычной таблице имеет код 0xF6, но в этом дисплее под кодом 0xF6 находится символ " " ".
В случае hd44780 таблица символов зашивается на производстве в ПЗУ маской (грубо говоря, транзистор в ячейке памяти либо физически есть, либо физически его нет) и не могут быть изменены в принципе. Потому у существуют разные кодировки дисплеев - с иероглифами, русскими буквами, расширенной латиницей и т.д.
Как сделано там в этом дисплее - это нужно смотреть даташит.
P.S. Похоже, так же.
Цитата:
Character Generator ROM (CGROM) The character generator ROM generates 5 x 8 dot character patterns from 8-bit character codes. It can generate 240/250/248/256 5 x 8 dot character patterns(select by OPR1/2 ITO pin). User-defined character patterns are also available by mask-programmed ROM.
Character Generator RAM (CGRAM) In the character generator RAM, the user can rewrite character patterns by program. For 5 x 8 dots, eight character patterns can be written.
В случае hd44780 таблица символов зашивается на производстве в ПЗУ маской (грубо говоря, транзистор в ячейке памяти либо физически есть, либо физически его нет) и не могут быть изменены в принципе. Потому у существуют разные кодировки дисплеев - с иероглифами, русскими буквами, расширенной латиницей и т.д.
Как сделано там в этом дисплее - это нужно смотреть даташит.
я плохо выразил мысль, конечно таблицу изменить нельзя. Но.
write_string("_ST7036_display_1x20"); так я вывожу сообщение в первую строку. на дисплей выводится строка "ST7036"display"1x20 Очевидно, что прописывать каждый раз код символа вместо символа мягко говоря напряжно. Задача - возможна ли подмена символов при выводе на жк? Ну типа в строке к выводу написал символ _, а на экран вывелся другой код. Так вроде русские буквы выводят, немогу статью найти (коды взял произвольные, главное смысл)
Можно ли сделать так, #define "_" 0x33; #define ";" 0x34;
Это сгодится для вывода отдельных символов, но не строк. А чтобы строки правильно переводились - надо перехватывать вывод индивидуального символа и преобразовывать код по таблице, либо составлять заранее инклуд чисто с константами-строками в уже нужной кодировке и "компилировать" его каким-либо скриптом или внешней программой из исходных строк когда там что-либо меняется.
Продолжу я и свои вопросы понемногу. ) Вот я хочу прочитать флаг БФ (занятости дисплея) и читаю его. Обязательно ли читать по 4 битной шине обе тетрады? Он же мне первым выдает старший байт, и мне достаточно, чтобы узнать стоит флаг или нет прочитать только ОДИН бит в этой тетраде. А остальные проигнорировать... Если я пропущу младшую тетраду и строб на нее не подам он на меня сильно обидится?
_________________ Станислав
Последний раз редактировалось СКАЗОЧНИК Вс янв 11, 2015 11:38:04, всего редактировалось 1 раз.
Понятно... Хотелось код ужать просто. ))) Вот до чего я додумался в плане оптимизации как по скорости (хотя для дисплея не особо важно), так и по памяти. Сэкономил 16 Байт. Было так: Спойлер
Код:
DB_LINE:
lsr R17 ; Сдвигаем вправо, крайний вывалится в С brcc Pusto1 ; Если С=0, то переходим по метке sbi DB4port, DB4pin ; Иначе, выставляем бит в 1 rjmp Next1 ; Идем проверять следующий Pusto1: cbi DB4port, DB4pin ; Выставляем бит в 0
Next1: lsr R17 ; Сдвигаем вправо, крайний вывалится в С brcc Pusto2 ; Если С=0, то переходим по метке sbi DB5port, DB5pin ; Иначе, выставляем бит в 1 rjmp Next2 ; Идем проверять следующий Pusto2: cbi DB5port, DB5pin ; Выставляем бит в 0
Next2: lsr R17 ; Сдвигаем вправо, крайний вывалится в С brcc Pusto3 ; Если С=0, то переходим по метке sbi DB6port, DB6pin ; Иначе, выставляем бит в 1 rjmp Next3 ; Идем проверять следующий Pusto3: cbi DB6port, DB6pin ; Выставляем бит в 0
Next3: lsr R17 ; Сдвигаем вправо, крайний вывалится в С brcc Pusto4 ; Если С=0, то переходим по метке sbi DB7port, DB7pin ; Иначе, выставляем бит в 1 ret ; Pusto4: cbi DB7port, DB7pin ; Выставляем бит в 0
Текст написаный в макросах, при трансляции программы, вставляется в текст программы везде, где в программе есть название макроса. Посмотрите Disassembly Listing (у вас он может по-другому называться).
_________________ С Уважением, Альберт (Albert_V).
Все. Понял. Но с ними удобно. ))) Просто пишу АДРЕС Х, У и у меня курсор уже в нужном месте... Короче, смысл в макросах только для удобства и лучше, если он применяется в программе один раз...
Просто, в конце текста макроса вместо .ENDM поставьте RET, уберите .MACRO и там, где ссылки на макросы подпишите rcall. Работы на несколько минут, а код ужмётся существенно. P.S. А если макрос используется один раз, тогда какой в нём смысл?
_________________ С Уважением, Альберт (Albert_V).
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения