5-сегментный LCD

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Winand, 2 ноя 2015.

  1. Winand

    Winand Нуб

    Коллега заказал комплект для сборки радио и там есть такой дисплейчик
    IMG_20151102_161115_cr.jpg
    На нём контур батарейки+4 сегмента = 5. Из спортивного интереса хотел подключить к ардуино. Человек я - не особо опытный. Долго гуглил, в итоге понял, что сегменты дисплея нужно питать переменным током, ибо они есть конденсаторы (?). Как это сделать с помощью Матрёшки?

    Ссылки:
    http://www.instructables.com/answers/Seven-Segment-LCDs/
    http://electronics.stackexchange.com/questions/10897/powering-an-old-alarm-clock-lcd-need-to-invert-dc-to-3-v-ac
     
  2. ANV

    ANV Гуру

    Недавно про ЖК спрашивали, поищите на форуме. Если там только изображение батарейки, то можно обойтись без специальных драйверов
     
  3. Winand

    Winand Нуб

    Вы об этой теме? Из неё мне всё ещё не понятно как подключить дисплей. Надо менять полярность питания каждого сегмента. Но как.
     
  4. ANV

    ANV Гуру

    Есть сегменты и подложка.
    Чтобы сегмент был виден надо чтобы на нем было напряжение, те состояние на на подложке не равно состоянию на сегменте. Чтобы не виден - равно.

    Пример: сегмент 1_виден, сегмент_2 не виден, повторять в loop()
    подложка = LOW
    сегмент_1 = HIGH
    сегмент_2 = LOW
    delay(5)
    подложка = HIGH
    сегмент_1 = LOW
    сегмент_2 = HIGH
    delay(5)
     
    Winand нравится это.
  5. Winand

    Winand Нуб

    Спасибо. А как выбирается задержка (5мс) между обновлениями?
    upd. Экспериментально: 40мс мерцает, 20 - нормально
    Код (C++):
    int yes = HIGH, no = LOW;
    #define GND 8
    #define CONTOUR 9
    #define PCT_25 13
    #define PCT_50 12
    #define PCT_75 11
    #define PCT_100 10
    bool vc=true, p[4] = {false, false, false, false};
    int v = 0, counter=0;

    void setup() {
      // put your setup code here, to run once:
      pinMode(GND, OUTPUT);
      pinMode(CONTOUR, OUTPUT);
      pinMode(PCT_100, OUTPUT);
      pinMode(PCT_75, OUTPUT);
      pinMode(PCT_50, OUTPUT);
      pinMode(PCT_25, OUTPUT);
    }

    void update() {
      digitalWrite(GND, no);
      digitalWrite(CONTOUR, vc? yes: no);
      digitalWrite(PCT_25, p[0]? yes: no);
      digitalWrite(PCT_50, p[1]? yes: no);
      digitalWrite(PCT_75, p[2]? yes: no);
      digitalWrite(PCT_100, p[3]? yes: no);
      int t = yes;
      yes = no;
      no = t;
    }

    bool every10() {
      if(counter<10) counter++;
      else counter=0;
      return counter==10;
    }

    void loop() {
      if(every10()) {
        for(int i=0; i<4; i++)
          p[i] = i<v?true:false;
        if(v<4) {
          v++;
        } else v=0;
      }
      update();
      delay(20);
    }
    00.jpg 01.jpg 02.jpg
     
    Последнее редактирование: 3 ноя 2015
  6. ANV

    ANV Гуру

    100Гц ( 1/(5мс+5мс) ) - это по памяти из старых советских журналов.
    В подтверждение слов сейчас нашел: http://www.goldenviewdisplay.com/driving_LCD_display.html
    Drive frequencies for direct drive displays are typically between 30Hz and 100Hz. Depending on the display size and design, displays can be operated at higher frequencies, but this will result in increased power consumption. LCDs portray a capacitive load, which reduces the load impedance as frequency increases. However, operation below 30Hz typically results in display flicker
     
  7. Unixon

    Unixon Оракул Модератор

    Некоторые можно до 240Hz эксплуатировать, хотя это и не имеет особого смысла.
    Для сегментных индикаторов есть такие драйверы как MC14489B или PCF8577CT.