Обычно я стараюсь не использовать символ с кодом 00, вместо него использую 08
1)А чем может быть чревато использование символа 00?
2)т.е. если я хочу например в 07 символ записать рисунок вертикальной палочки справа, в качестве команды передаю адрес CGRAM 0x78 затем в режиме данных (RS=1) значение этой ячейки 0х01, повторяю этот шаг увеличивая на 1 адрес CGRAM до восьми раз, и посылаю команду 0х80 для вывода символа в первое место верхней строки, и вызвать сам символ послав данные 0x07 ?
1)А чем может быть чревато использование символа 00?
Сложностями использования нормальных строк, которые оканчиваются нулём. Не все пишут 50 раз подряд lcdwrite('a'), бывают и более сложные программные реализации, в которых хочется по-возможности использовать более "объектный" подход.
ksardas_90 писал(а):
2)в качестве команды передаю адрес CGRAM 0x78 затем в режиме данных (RS=1) значение этой ячейки 0х01,
Всё верно, только адрес всё же 0х38, поскольку в самом адресе 6 бит, но передаётся на этом этапе 0х78, поскольку бит7=0 и бит6=1 означает запись адреса CGRAM Привыкайте использовать правильные названия и понятия.
CyberVad писал(а):
И хоть символ 5х7, а передать надо 8 байтов: 7 байтов значащих (первый описывает верхнюю строку, седьмой нижнюю), а восьмой произвольный.
Большинство современных индикаторов восьмую строку отображают. Поэтому если она не нужна записывайте туда 0.
Здравствуйте, прошу помощи. Купил седня WH1602B-YYK-CTK# как я думал, но оторвав наклейку увидел надпись 1602F. ПОсмотрел датники на WH1602 нескольких серий, у всех 1,2 ножка это +, -, но меняются местами в зависимости от серии. Раз наклейка не соответствует надписи на плате, то может по факту это ваще другая серия где 1 ножка это не GND, а +5В(Как раз первая ножка идет на кондер которого нет, но есть знак + около пяточка). У моего индикатора как я понял LED подсветка, то есть чтобы что-то увидеть на нем, нужно запитать подсветку через резистор 40-150Ом и настроить контрастность? Может у кого такое же чудо было уже? Не хочу просто на ветер 400р выкинуть
Вот фото этого чуда Спойлер1: 2:
_________________ Нельзя всё знать, достаточно понимать.
Подсветка не мешает увидеть изображение. Просто прозвони питание в режиме прозвонки диодов - в таких схемах имеется обратный диод по питанию, если подключишь щупы тестера не так как надо - питание индикатора будет звониться как диод.
Подсветка не мешает увидеть изображение. Просто прозвони питание в режиме прозвонки диодов - в таких схемах имеется обратный диод по питанию, если подключишь щупы тестера не так как надо - питание индикатора будет звониться как диод.
про диод - не слыхал о таком часть приборов при 2.5В потребляют ток, что при прозвонке тестером будет определенно как ток через диод - обратный тому, что вы сказали
Спасите. ))) Подключил ЖКИ, мк АтМега8. Алгоритм по ДИ-ХАЛТУ, только урезал его, потом что мне чтение не надо. Однако Дисплей не инициализируется. Проверил вольтметром, на всех ногах DB0-DB7 у дисплея присутствует 5 вольт. Подключил по 4 битной шине.
Ничего не понимаю. Мега прошивается. Порт рабочий только что проверял. Все в идеале. ))) А на дисплее че DB подтянуты к плюсу? Так и должно быть?
Такс... еще лишние DB0-DB3 посадил на землю, чтобы не болтались.... Не знаю на сколько это правильно. Однако, ничего не изменилось.
Еще одну хрень понял... Это все из-за временных задержек. Если на выводы кварца положить палец, то начинает дисплей мерцать и можно даже разглядеть символ, который я на него отправил...
Поправил еще фьюзы СКОРТ. Теперь пальцем прижимать не реагирует, амплитуда на кварце стала больше. Проверял осциллографом. Но и запускаться дисплей теперь отказывается.
Такс... Не выдержал и полностью все переписал по своему.. Теперь можно подключать дисплей вообще на любые пины любых портов, хоть все на разные по 4 битной шине (6 проводов). И даже инициализация проходит (разбирался с кучей всяких даташитов). Загораются обе строки белыми квадратами. Контраст регулируется. Остался такой вопрос. Я уже туплю... Вывод данных как делать? Просто указывать, что сейчас идут данные и пихать их? Или надо еще адрес где-то поставить сначала, а потом пихать? А то у меня не выводит ничего... И курсор не мигает...
Загорание двух строк вовсе не означает удачную инициализацию. Для надёжной инициализации в 4битном режиме вывода на дисплей нужно:
A) 1. Выставить на D7-D4 режиме INIT_DATA (0x3) 2. Перевести RS/RW в режим записи команды. 3. Задержка 20мс 4. Строб по E 5. Задержка 5мс 6. Строб по E 7. Задержка 120мкс 8. Строб по E
B) 1. Передать в 8битном режиме (1 строб) KS0066_FUNCTION | KS0066_4BIT (0x20 | 0x00) 2. Уже находясь в 4битном режиме (два строба на команду) инициализировать двухстрочный режим KS0066_FUNCTION | KS0066_4BIT | KS0066_2LINES (0x20 | 0x00 | 0x08) 3. Включить экран KS0066_DISPLAY | KS0066_DISPAY_ON (0x08 | 0x04) 4. Очистить экран командой KS0066_CLEAR (0x01) с задержкой после неё 2 мс 5. Включить режим автоинкремента адреса KS0066_SET_MODE | KS0066_INC_ADDR (0x04 | 0x00)
После этого можно задавать командой адрес KS0066_SET_DDRAM + addr (0x80 + addr) и писать уже данные, каждый новый байт данных будет писаться в следующую ячейку (автоинкремент).
Последний раз редактировалось WiseLord Чт янв 08, 2015 09:06:52, всего редактировалось 1 раз.
Кажется не так малость сделал... ))) Мне все интересны эти стробы. В одном ДШ написано, что надо Три раза вывести старшую тетраду команды установки в 8 битный режим с паузами между ними в 40 мкс. А уже четвертой командой вывести старшую тетраду команды установки в 4 битную линию, а дальше без особых задержек уже можно снова пихать уже полностью 8 битные команды (разбивая вперед старшей). Сейчас перестал две строк и включать... По моему в МЭЛТовских так написано... Только не понятно про строб. 40 мкс давать когда строб наверху и 40 мкс, когда строб внизу? Или 40 мкс делить на один строб, т.е. по 20? Вот мой проект. Там два файла с комментариями. LCD4_macro.inc и LCD4.asm. В первом макросы и инициализация с большими задержками. Во втором объявление портов вначале и формирование выводимых данных на порте(ах) с задержками.
В одном ДШ написано, что надо Три раза вывести старшую тетраду команды установки в 8 битный режим с паузами между ними в 40 мкс.
Команда установки в 8бит режим - это KS0066_FUNCTION | KS0066_8BIT (0x20 | 0x10). Это то же самое, что я выше и говорил - устанавливаем на D7-D4 число 0x3 (на всём порту получается 0x30, но D3-D0 не подключены, так что всё равно) и три раза делаем строб. Потом уже переводим (8-битной командой - по стробу на команду) в 4-битный режим, а дальше добиваем инициализацию уже 4-хбитными командами (по два строба на команду).
P.S. Посмотрел на код - вроде никакого особо криминала не видно, должно бы работать. Можете глянуть на мой код (на C) - он-то точно работает, может какие-то идеи появятся. Комментариев по коду нет, но там вроде бы всё понятно должно быть. Задержки те же поменять, например. https://github.com/WiseLord/boardcomput ... s0066.h#L7 https://github.com/WiseLord/boardcomput ... 0066.c#L65 У меня несколько иначе стробирование сделано - сначала выставляются данные, а потом идёт строб (задержка - поднять E - задержка - опустить E), но можно как и у Вас - поднять E, выставить данные - задержка - опустить строб - задержка.
Похоже, что в правильном. Правда я принципиально мучаюсь с ассемблером и поэтому Си начал уже забывать. У вас только задержек не хватает между и после строба (Е). И еще направления (RS) на выдачу команды или данных. И еще. КодеВижн со своим синтаксисом - зло.
А я уже думаю надо чтение организовывать. Что-то надоело биться уже с этими задержками.
Ну... вообще-то я и сам с ними сейчас мучаюсь... Вот лежат у меня распечатки с разными таблицами из даташитов... Уже на кучу индикаторов. Все даташиты (почти все) скачал в этой теме. И уже дочитал ее почти всю до конца... По одной таблице я сделал... Но у меня не работает. надо увеличивать, думаю.
А вообще написано "поднять строб", подождать более 230 нсек. потом "Сбросить строб" и еще столько же подождать. Общая длинна периода строба будет равна 500 нсек. так и в таблице нарисовано. В момент, когда строб переходит с высокого в низкий происходит запись в индикатор. Типа того. Там даже есть табличка, а в ней написано "Период сигнала Е" минимум 500 нсек.
З.Ы. и еще.. Если у вас на порт А подключено еще что-нибудь, то лучше было читать весь порт в переменную, а потом по маске младшую тетраду переделывать, а старшую оставлять без изменений. А то иначе на других пинах порта будет выводить всякую всячину еще... )))))
nibble = data & 0x0F; PORTA |= nibble; PORTB.1=1; PORTB.1=0;
Такой код будет работать неправильно. Нужно ещё, как минимум, перед PORTA |= nibble добавить PORTA &= 0xF0, для очистки полубайта в порту, иначе рано или поздно там скопятся 4 единичных бита и по факту в дисплей будут всегда уходить данные 0xFF.
Последний раз редактировалось WiseLord Чт янв 08, 2015 20:03:37, всего редактировалось 1 раз.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения