В любом проекте необходима индикация. Это могут быть просто светодиоды или знакосинтезирующий ЖКИ с драйвером. Светодиоды потребляют довольно большой ток и малоинформативны, а знакосинтезирующий ЖКИ дорог и тоже ест не мало. Если нам не нужна избыточная информативность знакосинтезирующего или графического дисплея, то можно воспользоваться сегментным ЖКИ.
Достоинства: низкая стоимость, хорошая информативность, очень низкое потребление тока, менее 1 мкА.
Недостатки: плохой контраст и угол обзора по сравнению с LED и OLED, тормозит переключение сегментов на низких температурах.
Попался мне в руки брелок от шерифа, на борту у него pic16 с аппаратным драйвером ЖКИ. Решил попробовать зажечь этот дисплей, хоть я и не любитель пиков 🙂
Прежде всего немного теории. Подробнее что такое сегментный ЖКИ и что такое поляризация света, а так же теорию корпускулярного дуализма можно найти в интернете, заострять на это внимание не будем.
Дисплей управляется магнитным полем, которое ориентирует кристаллы, которые в свою очередь поляризуют проходящий через них свет.
Проходя через поляризаторы (в нашем случае плёнка на дисплее — два одинаковых поляризатора) свет беспрепятственно проходит, мы видим прозрачный дисплей. Чтобы «зажечь» сегмент, свет нужно повернуть на 90 градусов, и мы увидим чёрное пятно сегмента. Тут как раз и применяют кристаллы, между двумя поляризаторами. Подаём ток, кристаллы ориентируются так, что поляризованный свет проходя через них, меняет угол, и задерживается вторым поляризатором.
Теперь как этим добром управлять. Сегмент — это по сути конденсатор, на него нужно подать ток, ток создаст электромагнитное поле ориентирующее кристаллы. Но просто к ноге контроллера его подключить нельзя, так как это конденсатор, то зарядившись сопротивление станет бесконечным и ток перестанет течь, а значит электромагнитное поле исчезнет и сегмент потухнет. Значит ток нужен переменный. Частотой можно контролировать контраст. Вроде без проблем можно сделать, если сегментов мало. А если их 20-30-60, ног контроллера не хватит. Для этого сегменты SEG стали объединять группами, с общим проводом COM.
В общем, так как в нашу задачу входит зажечь готовый дисплей, то останавливаться на мультиплексировании сегментов не будем. Что удалось обнаружить в этом брелоке:
четыре общих входа: com0-com3, восемь сегментных входов: seg1-seg5, seg21-seg23.
Для работы с аппаратным драйвером есть в CCS подпрограмма
lcd_symbol (symbol, bx_addr[, by_addr]);
в интернете вразумительного описания я честно говоря не нашел, но методом тыка сколхозил следующий код:
lcd_symbol(0xFF,COM1+1,COM1+2,COM1+3,COM1+4,COM1+5,COM1+21,COM1+22, COM1+23);
symbol — это по сути флаги сегментов: 1 — зажечь, 0 — потушить. Младший бит слева!
bx_addr — это указатель на физический порт к которому подключен сегмент. Все сегменты отсчитываются от общего провода COM.
Берём провод скажем COM0, и чтобы зажечь первый сегмент:
lcd_symbol(0x80,COM0+1);
Видим что первый сегмент на COM0 -это волны антенны, второй — будет сама антенна. И так далее.
Обсуждение на форуме: http://forum.phreakerclub.com/showthread.php?p=5
Там же выложен CCS проект под pic16f914 зажигающий весь дисплей. Может сделаю демку кодграббера на этом брелоке 🙂
(C) exchange
www.phreakerclub.com