Пост N: 153
Info: Среднее
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг:
0
Фото:
Отправлено: 27.01.07 19:28. Заголовок: Индикатор на основе HD44780
Ребята, что-то я начал парить по черному. Объясните мне вкратце каким образом общаться с данным индикатором при 4х проводном интерфейсе? Что-то я начал путаться совсем. В самоучителе при инициализации модуля даются совершенно другие команды. Да вот еще что, я запутался как же выставить в 4х проводном интерфейсе бит выбора страницы, он кажется 1й. Когда разбирался с 8ми проводным все было ясно как день и команды соответствовали даташитовским, а тут... короче заааапутался.
Пост N: 909
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг:
3
Награды:
Отправлено: 17.05.08 16:19. Заголовок: Пётр пишет: Соедени..
Пётр пишет:
цитата:
Соеденил вывод "E" индикатора с RA3 ПИКа.
в твоём случае так нельзя, так у тебя регистр с защёлкой. Я использовал CD4094, хотя он тоже был с защёлкой, но там при подаче "1" на вывод защёлки данные на выходе менялись по ходу поступления тактовых импульсов. А в случае 595-ой я чего-то понять не могу. Даташит как будто не "русскими" составлен. Надо проверить на железе. Сейчас пойду куплю его. К вечеру должны быть результаты (нюхом чую ).
Пост N: 704
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
2
Отправлено: 17.05.08 17:51. Заголовок: Alberto пишет: в тв..
Alberto пишет:
цитата:
в твоём случае так нельзя, так у тебя регистр с защёлкой.
А при чём тут регистр? Ведь я не отсоединял от него выводы ПИКа а всего лишь задействовал для управления выводом "E" индикатора свобоный вывод контроллера.
Пост N: 383
Зарегистрирован: 26.12.06
Откуда: Украина, Одесса
Рейтинг:
0
Отправлено: 17.05.08 19:53. Заголовок: Петр, я могу предло..
Петр, я могу предложить осцилограмки временнЫх интервалов инициализации и вывода данных ЖКИ на HD44780, (4.17 обмена). Может быть тогда будет проще разобраться.
Большое спасибо за наводку. Уж незнаю что конкретно было в проге, но когда адаптировал инициализацию под свой исходник, всё заработало. Предполагаю что проблема была либо в глючной ПП задержки или в некорректной передаче команды 00101000 Раньше она отправлялась полностью (сначала 0010, а потом 1000), а теперь только первая часть. Счас разбиратся буду где конкретно "грабли" были.
Сейчас всё Ок.
PS. Я же говорил что проблема где-то в инициализации.
Пост N: 387
Зарегистрирован: 26.12.06
Откуда: Украина, Одесса
Рейтинг:
0
Отправлено: 17.05.08 23:25. Заголовок: Вот, правда все не у..
Вот, правда все не успел разрисовать, теперь уже не актуально Тут видно, сначала передается 4бита b'0010', а потом установка 4х битного режима, команда b'00101000'.
DISPLAY ;------------------------------------------- ; Вывод надписи в 1-ю строку. ;-------------------------------------------
clrf PCLATH movlw .128 ; Выбор ячейки DD RAM с адресом 46h, что соответствует ; установке курсора в третье слева знакоместо 2-й строки. call ENTER_BF ; "Плавающая" задержка со стробом под команду 11000010.
movlw .16 ; Запись числа .16 (количества выводимых в строку movwf COUNT ; символов) в регистр Count. WR_1 movf COUNT,W ; Копирование содержимого регистра Count в W. sublw .16 ; .16-Count=... (результат записывается в W). call STR_1 ; Условный переход в ПП EEPR. bsf PORTA,RS ; Установка на линии RS "1" (режим записи данных). movwf FSR movfw INDF addlw 30h call ENTER_BF ; "Плавающая" задержка со стробом под вывод ; данных на индикацию. decfsz COUNT,F ; Подготовка к выводу на индикацию ; следующего символа таблицы. goto WR_1 ; Если результат декремента не=0, то переход в ПП WR_1. ; Если результат декремента =0, то программа ; исполняется далее. goto STROKA_2
;============================================================================================= ; Вывод результатов измерения во 2-ю строку. ;=============================================================================================
STROKA_2 movlw .192 ; Выбор ячейки DD RAM с адресом 46h, что соответствует ; установке курсора в третье слева знакоместо 2-й строки. call ENTER_BF ; "Плавающая" задержка со стробом под команду 11000010.
movlw .16 ; Запись числа .16 (количества выводимых в строку movwf COUNT ; символов) в регистр Count. WR_2 movf COUNT,W ; Копирование содержимого регистра Count в W. sublw .16 ; .16-Count=... (результат записывается в W). call STR_2 ; Условный переход в ПП EEPR. bsf PORTA,RS ; Установка на линии RS "1" (режим записи данных). movwf FSR movfw INDF addlw 30h call ENTER_BF ; "Плавающая" задержка со стробом под вывод ; данных на индикацию. decfsz COUNT,F ; Подготовка к выводу на индикацию ; следующего символа таблицы. goto WR_2 ; Если результат декремента не=0, то переход в ПП WR_1. ; Если результат декремента =0, то программа ; исполняется далее. return ; GOTO INIDS
Где то обещал выложить исходник, как работать с двумя строками. Все сделано на основе информации из самоучителя. Здесь извлечение данных из нужных регистров происходит через косвенную адресацию одновременно с преобразованием цифр к аски коду, поэтому для вывода статичных надписей возникают некоторые проблемы, необходимо отнимать от кода символа 30h чтобы в результате получить правильные данные на индикаторе. Регистры в названии которых нет цифр, это буквы. Лучшего ничего не придумал, так как необходимо было выводить показания трех термометров ДС по пять разрядов для каждого и еще 4 разряда. всего 19 разрядов постоянно изменяются. Пока есть задумка сделать универсальную подпрограмму для работы с любым символьным индикаторам на HD44780 и не плодить для каждой строки свою процедуру. сделать одну для работы с любым количеством строк.
Алексей, хорошая задумка, но похоже она выльется в большой объем программы, половину символов надо анализировать и выставлять соответствующий код таблицы знакогенераторов. Всегда, как выясняется, говоря о применении знакогенераторов нужно оговариваться, с каким и под какой ЖКИ вы работали, приводя выдержку из программы. Получается: по таблице составь свою таблицу. Поясню ....."необходимо отнимать от кода символа 30h чтобы в результате получить правильные данные на индикаторе." ЖКИ Winstar WH1602A.. одна таблица знакогегнератора, что касается латинских символов идет один к одному и без какой либо коррекции выводиться на дисплей. Что касается кирилицы тут сплошная утопия (хотел сходу составить подпрограмму преобразований кодов...), во -первых, какие буквы совпадают с латиницей (A,P,H,...) те должны браться оттуда, 22 буквы символа кирилицы имеют разницу про которую вы говорите 30h, другие по разному (21h., 2eh,...) усидчивости не хватило проработать до конца. То есть отдельные программы по фирмам, это более реально. Что касается МЭЛТ (МТ-10S1), можно сказать, что в этом плане молодцы, у них две таблицы знакогенератора, "0" совпадает с Winstar, а вот в "1" кирилица совпадает с кодами выставляемые таблицей компа, можно писать тексты соответствующими символами кирилицы, не задумываясь о кодах (но опять надо прыгать со страницы на страницу). Спрашивается, почему не поместить в "0" таблицу, чтобы и латиница и кирилица были в одном месте - непонятно(я работаю в MPLAB, другие программы могут иметь и другие знакогенераторы). А почему не оттолкнуться от отработанной таблицы ASCII, мне лично не понятно, какие сложности в этом процессе...
Смутно припоминаю про что идет речь, согласен, программа не без недостатков... nik_nik пишет:
цитата:
но похоже она выльется в большой объем программы
извините, но одна универсальная программа выльется в десятки раз больший объем кода. Данная программа предназначена для вывода статичных надписей и символов, для которых в любом конкретном случае нужно будет составлять таблицу, а отнять вручную 30h от кода символа во время написания программы не составляет большого труда. А также для вывода изменяющихся цифровых данных, в данном случае вывод значений тепмератур с трех различных DS18B20, при чем считывание с каждого датчика проиходит одновременно, следовательно и значения на индикаторе желательно бы менять одновременно, в результате цикл индикации занимает не 3 с., а чуть меньше 1 секунды. Показания на индикаторе от любого датчика фиксируются и отображаются одновременно с периодом чуть меньше 1 секунды. Т.е. прога предназначена в основном для вывода на индикацию изменяющихся цифровых данных, при этом, как Вы уже заметили нет необходимости преобразовывать в коды символов аски, программа это делает самостоятельно. nik_nik пишет:
цитата:
Алексей, хорошая задумка
Рад, что Вы разобрались с программой... Косвенная адресация великая вещь, если хорошенько с ней разобраться, можно наворотить такого... Было дело нужно было измерять в прерывании один сигнал, спустя время уже два, а потом вообще четыре. для одного сигнала прерывание получилось примерно в десять команд, для двух примено в два раза больше, для четырех этот способ оказался слишком сложным и пришлось придумывать чтото новое, пришла на помощь косвенная адресация и прерывание получилось чуть больше чем для одного сигнала, хотя измерялись все четыре, правда все они разнесены по фазе что и дало возможность такое сделать.
Пост N: 41
Зарегистрирован: 27.08.07
Откуда: Россия, Москва
Рейтинг:
0
Отправлено: 03.07.08 06:20. Заголовок: Алексей, я вообще то..
Алексей, я вообще то про твою фразу:"Пока есть задумка сделать универсальную подпрограмму для работы с любым символьным индикаторам на HD44780", и мое сообщение про коды, а не про программу, видимо я вас не совсем понял, а вы меня. Я сейчас как раз на индикаторах топчусь. Вопрос: есть ли какие ограничения использования (F84A) RB регитсра как под данные (RB4-7)? так и под управление (RB0-3) (HD44780). А то с использованием RA проходит(RS, RW,E) , а перехожу на RB не хочет работать, вроде при организации записи не изменяю младший бит использую наработку Самоучителя ПП ENTER № 49, 43), а все равно не хочет выводить?
Пост N: 477
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг:
1
Фото:
Отправлено: 03.07.08 07:24. Заголовок: Нет, ограничений нет..
Нет, ограничений нет, только обязательно надо позаботиться о неизменном состоянии RS, RW,E при установке данных. Мне кажется у тебя именно эта проблемка, изменяется какой либо из этих сигналов при установке данных. Это делается при помощи двух или трех логических операций. Плюс ко всему уже необходимо тщательно следить за регистром трис.
Спасибо Алексей, проблема оказалась банальной, при пайке перепутал RS с RW? проводки попутал на индикатор, все пошло. Можно было и програмно переопределить, ну ...а паяльник уже нагрелся.
Пост N: 14
Зарегистрирован: 29.07.08
Откуда: Россия, Саратов
Рейтинг:
0
Фото:
Отправлено: 28.08.08 10:27. Заголовок: HD44780 + PortA и прочие вкусности
Целиком демо-проект с сырцами + схема подключения в разноброд на любые (!) лини портов, в любом порядке. Кириллица, латиница, любое количество строк, анимация через дорисовку и покадровая.
Использована 4х проводная шина + 2 управляющих + 2 питание т.е. всего 8 проводов. Делайте рисунки своих плат более простыми и удобными.
Здравствуйте форумчане. У меня такая проблема возникла: LCD DataVision. Если интерфейс 8-и проводной всё ОК. Если же 4-х проводной, не работает автоинкремент. Прописываю при инициализаци, но ЖК выдаёт только первй символ и всё. Если для каждого знака указывать знакоместо и не прописывать автоинкремент- тоже всё ОК. Помогите советом.
Означает ли данная фраза, что программа пробовалась с другими индикаторами? Если нет, то, скорее всего, как Игорь сказал, программа. В противном случае, индикатор.
igor пишет:
цитата:
Очень помог бы отладчик ICD2.
Почему именно он? Мне, например, здорово Протеус помогает.
Пост N: 1184
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг:
3
Награды:
Отправлено: 14.02.09 23:29. Заголовок: Есть еще индикаторы ..
Есть еще индикаторы фирмы Fordata, в них применяются контроллеры SPLC780D не совместимые с HD44780 по каким-то параметрам именно в 4-х битном интерфейсе, т.е. если просто воткнуть такой ЖКИ вместо, например, Winstar'овского, то он работать не будет. Надо исправлять программу. Хотя и стоят они раза вполтора дешевле чем "нормальные" ЖКИ, но иметь несколько несовместимых ЖКИ как-то не сильно охота.
Здравствуйте. Подскажите, почему при включении двух строк ЖКИ контрасность хуже чем при включении только одной. Подстройка сопротивлением не решает проблемы. Задержки везде с опросом флага BF. Ещё иногда не высвечивается строчка по горизонтали в первой строке.
Пост N: 10
Зарегистрирован: 14.02.09
Откуда: РФ, Белгород
Рейтинг:
0
Отправлено: 28.02.09 22:01. Заголовок: Да кстати, думаю пре..
Да кстати, думаю представить для всеобщего обозрения прогу. У меня она работает с клавиатурой из 4 кнопок, ЖК и шаговым мотором. На ЖК положение мотора(верхняя строка), и задаёшь смещение(нижняя). Работает в железке. Вот только прогу красиво оформлю.
Пост N: 708
Зарегистрирован: 06.05.07
Откуда: Россия, Липецк
Рейтинг:
4
Отправлено: 28.02.09 22:17. Заголовок: Если после вывода ..
Если после вывода данных в обе строки и goto $, контрастность строк разная, то ЖКИ можно выбросить. Если нормальная, то ошибка в программе. Вернее всего, она связана с коротким циклом (кристаллы не успевают повернуться на "нужный" угол).
Друзья! Прочитал весь пост и пришёл к выводу: "...я отстал от поезда!..." Последнее сообщение аж в марте 2009 года! Неужели HD44780 капитулировал на наших условиях? ... Начиная с первых строк "Самоучителя" про HD44780, меня не оставляла мысль о том, чтобы прицепить индикатор целиком на один порт (в моём случае, PortB PIC16F628A), 4х-проводный интерфейс и по максимуму задействовать флаг BF. Ибо, по моему скромному мнению, задействование флага BF позволяет писать наиболее гибкие программы, а посему, хотелось бы с оным дружить! Но толи по невнимательности, или отсутствии систематических занятий или какой ещё причине, не удалось мне воплотить мою идею в жизнь. А главное, нет ясности, возможно ли это в принципе? Используя материалы "Самоучителя" и коллег, мне удалось составить программу которая прилежно работала в MPLab'е, но отказывалась работать в "железе". По поведению дисплея предполагю, что програма останавливается при первом обращении к ПП Enter BF. Я не прошу готовых решений, но если это не возможно (один Port*, 4х-проводный интерфейс + флаг BF), так может я зря трачу время? Не хотелось бы. Ведь всё-таки мечта.
Пост N: 885
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг:
1
Фото:
Отправлено: 03.09.09 18:33. Заголовок: Да, прекрасно работа..
Да, прекрасно работает на одном порту. Только необходимо разделять сигналы управления и данные. Т.е. в порт нужно выдавать полубайт данных, не изменяя состояния второго полубайта на порту. Это реализуется при помощи трех логических операций над данными в порту и выдавемыми данными в порт. Посказка, одна из команад будет ANDLW или ANDWF 11110000 или 00001111 в зависимости от того куда подключена шина данных индикатора...
Все даты в формате GMT
3 час. Хитов сегодня: 8
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет