ЖКИ без контроллера
- Войдите на сайт для отправки комментариев
Доброго времени суток! В рамках наработки опыта решил попробовать запустить ЖКИ (4 разряда) без контроллера с помощью ардуины. Почитал информацию по основам управления. Выглядит просто - на СОМ выводы подается меандр заданной частоты, а на сегменты которые должны зажечься - противофазный меандр. Соответственно синфазный для не активных сегментов. В рамках опыта собрал на макетке схему для одного разряда и решил попробовать переключать значения. В голову пришла идея просто выводить через сдвиговый регистр значения нужной цифры и переключать на инвертированные в зависимости от уровня СОМ сигнала. Для начала решил что 50 Гц это то, с чем без проблем справится контроллер. Но код упорно отказывается работать. А сигнал данных на сдвиговом регистре упорно рассинхронизируется с сигналом СОМ. Даже попытка просто вывести одно заданное число не увенчалась успехом. Код прилагаю ниже. Буду благодарен за помощь и указание на ошибки.
//Пин подключен к ST_CP входу 74HC595 int Latch = 10; //Пин подключен к SH_CP входу 74HC595 int Clock = 9; //Пин подключен к DS входу 74HC595 int Data = 12; //Пин D2 подключен к COM входу ЖКИ int COMpin = 13; // Переменная отсчета секунд unsigned int sec0 = 0; unsigned int sec = 0; unsigned long t1,t2 = 0; unsigned int n = 0; int val = 0; byte flag1,flag2 = 0; // Цифры 0 1 2 3 4 5 6 7 8 9 volatile byte numbSerial[10] = {0b11111100, 0b01100000, 0b11011010, 0b11110010, 0b01100110, 0b10110110, 0b10111110, 0b11100000, 0b11111110, 0b11110110}; volatile byte numbReverse[10]= {0b00000011, 0b10011111, 0b00100101, 0b00001101, 0b10011001, 0b01001001, 0b01000001, 0b00011111, 0b00000001, 0b00001001}; void setup() { //устанавливаем режим OUTPUT pinMode(Latch, OUTPUT); pinMode(Clock, OUTPUT); pinMode(Data, OUTPUT); pinMode(COMpin, OUTPUT); } void loop() { // Меандр 50Гц на выходе COMpin digitalWrite (COMpin, LOW); while(1) { t2=micros(); if ((t2-t1)>=20000) { digitalWrite (COMpin, LOW); t1=t2; } else { if ((t2-t1)>=10000) { digitalWrite (COMpin, HIGH); } } val = digitalRead(COMpin); if (val==HIGH) { flag2 = 0; if (!flag1) { digitalWrite(Latch, LOW); //Записываем значение из массива numbReverse shiftOut(Data, Clock, LSBFIRST, numbReverse[1]); digitalWrite(Latch, HIGH); flag1 = 1; digitalWrite (2, LOW); } } else { flag1 = 0; if (!flag2) { digitalWrite(Latch, LOW); //Записываем значение из массива numbSerial shiftOut(Data, Clock, LSBFIRST, numbSerial[1]); digitalWrite(Latch, HIGH); flag2 = 1; digitalWrite (2, HIGH); } } //защелкнуть данные, установить пин Latch digitalWrite(Latch, HIGH); } }
меандр то зачем? Если вы можете подавать на разные сегменты разные сигналы - просто подавайте на активные HIGH, а на неактивные LOW
А вообще - почитайте в гугле, что такое "динамическая индикация"
меандр то зачем? Если вы можете подавать на разные сегменты разные сигналы - просто подавайте на активные HIGH, а на неактивные LOW
Очередной случай "нифига не знаю, но кидаюсь советовать".
Как раз в этом выражается особенность управления ЖКИ. При подаче постоянного прямого напряжения сегменты деградируют и тухнут. поэтому необходимо менять направление протекания тока. Это связано с физикой процесса. Точнее не скажу, но знаю что жидкие кристаллы работают так.
Как раз в этом выражается особенность управления ЖКИ. При подаче постоянного прямого напряжения сегменты деградируют и тухнут
ок, тогда значит фигню сморозил, извиняйте
Если делаешь через регистр, то делай уж все пины, включая COM.
Хорошая идея, спасибо! Просто воткнул СОМ дисплея к выходу сдвигового регистра. Стало намного лучше. Какие-то помехи проскакивают, но это могут быть ошибки кода который я нее менял вовсе или ненадежный контакт. Буду разбираться дальше.
Проблема решилась. Спасибо всем участникам за помощь. Оказалось, что в китайской макетке перемычка по которой передавались данные держалась слабо что и приводило к невнятным результатам на дисплее.
Не нашел в интернете примеров работы с ЖКИ без контроллера под Ардуино так что приложу ниже код который работает. Выводит на разряде числа от 0 до 9 каждую секунду. Может кому-то поможет.
Проблема решилась. Спасибо всем участникам за помощь. Оказалось, что в китайской макетке перемычка по которой передавались данные держалась слабо что и приводило к невнятным результатам на дисплее.
Истину говорят древние - все проблемы решаются с помощью паяльника и синей изоленты. А если они не решаются, то или мало изоленты или паяльник не включен в розетку.