| Пн, 06.02.2017, 19:50 | Сообщение # 1
|
globusvrn1974
Постов: 92
Друзья |
Что-то странное происходит на экране дисплея, когда я управляю им с МК: все циферки четкие, подсветов ненужных сегментов нет, а когда я пытаюсь изменить содержимое экрана, новый сегмент появляется мгновенно, а вот ненужный исчезает не мгновенно, а плавно! С чем это может быть связано? В двух словах о схеме: С МК по трехпроводной шине данные записываются в сдвиговый регистр 74HC595 и при заполнении мгновенно передаются на сегменты индикатора, подключенного к выходам регистров. Общий COM индикатора управляется непосредственно от процессора. Когда на нем 1, на сегменты подаются инверсные варианты символов и наоборот: когда там 0, на выходах регистров присутствуют нули. По логике работы с дисплеем все правильно. Но что не так - не пойму. Может, надо поставить гасящий резистор с выхода МК, который идет на COM индикатора?
Добавлено (05.02.2017, 22:54) --------------------------------------------- Чуть погодя выявил причину методом научного тыка и экспериментального тестинга Дело оказалось в том, что надо было переводить подложку дисплея в нужный уровень сразу же ЗА посылом байтов информации и защелкиванием их в регистрах. Но никак не ПЕРЕД ними. Т.е. программа постоянно, в бесконечном цикле то засветит сегменты, то потушит их. И когда я поместил строку с изменением состояния подложки напрямую в процедуры вывода информации, в самый их конец, все стало идеальным. И тут же я понял, что на такой индикатор придется отдельно повесить 8-ми ножку 12f629, что бы разгрузить основной проц.
Всем! Если кому интересен этот проект, готов накидать схемку в СПлане и предоставить код на ПИК-бейсике. Если нет, прошу модераторов через пару дней снести тему как неважную. Спасибо за понимание!
Добавлено (06.02.2017, 20:50) --------------------------------------------- Выдержки из кода ....определяем ножки управления регистрами Symbol scl = PORTA.1 - строб импульс Symbol sda = PORTA.0 - данные Symbol ssh = PORTA.7 - защелка регистров Symbol scom = PORTA.6 - подложка дисплея ....посылка одного символа Proc send1lcd(ax As Byte) ll = ax scl = 0 sda = 0 WaitUs 5 If ll.0 Then sda = 1 WaitUs 4 Endif scl = 1 WaitUs 2 For j = 1 To 7 ll = ShiftRight(ll, 1) scl = 0 sda = 0 WaitUs 5 If ll.0 Then sda = 1 WaitUs 4 Endif scl = 1 WaitUs 2 Next j End Proc .... посылка всех 4 байт Proc sendfulllcd() For i = 0 To 3 Call send1lcd(lcd(i)) Next i sda = 0 scl = 0 WaitUs 5 ssh = 1 WaitUs 10 ssh = 0 scom = 1 End Proc ....Очистка дисплея Proc sendfulclr() For i = 0 To 3 Call send1lcd(0) Next i sda = 0 scl = 0 WaitUs 5 ssh = 1 WaitUs 10 ssh = 0 scom = 0 End Proc
Две последние процедуры сменяют друг друга в основном теле программы в бесконечном цикле .... loop: ... Call sendfulclr() WaitMs 20 Call sendfulllcd() WaitMs 5 ... Goto loop
Как менять контрастность я пока не понял. Переменный резистор на вывод COM индикатора? И - да! Что бы высветить точку, надо добавить этот бит к байту символа. Как-то так: A=A And %01111111
|
|
| Сб, 11.02.2017, 12:47 | Сообщение # 2
|
доц
Постов: 146
Друзья |
если можно схему в студию.
|
|
| Вс, 12.02.2017, 23:03 | Сообщение # 3
|
globusvrn1974
Постов: 92
Друзья |
Из-за того, что основной процессор сильно перегружен необходимостью обновлять данные на ЖК (а дел и без того хватает), было принято решение выделить для этой работы отдельный небольшой процессор. Для этих целей хватило восьминожки 12F629. Четыре линии управляют ЖК, оставшиеся две образуют линию I2C с основным процессором. Но суть работы с индикатором от этого не меняется На рисунке показана часть микросхем 74HC595 (всего их 4).
|
|
| Вс, 12.02.2017, 23:14 | Сообщение # 4
|
globusvrn1974
Постов: 92
Друзья |
Плата индикатора и добавленная позже платка с восьминожкой
|
|