HT1621B не запускается

И снова прошу помощи, так как самостоятельно не получается разобраться.
На данный момент уже в программировании.
Подключил библиотеку. там в примере есть прогон по всем ячейкам. у меня какая-то шляпа выводится.
Упростил донельзя, что бы понимать что и как.
в даташит указано как это все работает. а именно такая табличка


32 адреса и 4 кома. получается 32*4 = 128 разных пикселей.
Решил я перебрать все пиксели и посмотреть где что куда соответствует.
запускаю в loop такую строчку:

ht.write(8,0b0001);

т.е. seg8 и com0 и у меня нифига не работает.
а если ввожу так:

ht.write(8,0b0001);
ht.write(8,0b0000);

то у меня загорается 4 !!! пикселя. как так то?

А откуда у вас уверенность, что этот “ноунейм экран” должен работать с этой микросхемой?

а почему нет? у него 21 ножка идет напрямую в “стекло”. там сегменты. всего 68 сегментов.
из 21 ножки 4 штуки прям “выделенны”. т.е. предполагаю, что 17 SEG и 4 COM. как раз получается 68 сегментов.
Никаких встроенных микросхем у стеклышка нет.
при штатной работе этого экрана на ослике вижу на 4 ногах меандр и а на остальных вот такую картину:


Очень похоже все это на мультиплекс.
Управляется все это каким-то китайским GS16LF601. хз что такое. не нашел даташит.
а какие еще варианты могут быть?

И там же написано:

при отсутствии напряжения смещения у вас непременно будет гореть целая куча сегментов.

COM и SEG так же как в статье написано определяли?

Берём дисплей двумя пальцами за края и проводим по его контактам проводом от этого БП. Второй провод никуда подключать не надо. Как можно будет заметить, наводок будет более чем достаточно, чтобы сегменты начали светиться. Теперь по очереди касаемся каждого вывода ЖКИ и смотрим, что горит. Если загорелся длинный горизонтальный (ну, или вертикальный. Мало ли какой у вас будет индикатор) ряд из сегментов, это, скорее всего, COM. Если же горит это небольшая кучка сегментов, то это, вероятно, SEG.

Кстати, для зажигания сегмента по адресу в статье используется функция void lcdAddress(uint8_t addr, uint8_t data1).

да. именно так и делал. одним проводом с блока питания докасался до пинов жки. на 4х пинах у меня загоралось сразу куча элементов, а на всех остальных только сегменты.
плюс к этому - именно эти 4 пина у ЖКИ выведены с “подложки”. ну по крайне мере они так под лупой видны, что выходят с другой стороны “стеклышка”.

это точно такая же функция. сначала отправляем 101, потом 6 бит адреса, потом 4 бита COM.

А если запустить что-то подобное

void loop() {
  uint8_t addr = 0;
  uint8_t cnt = 32;
  static uint8_t data = 0;
  ht.write_c(addr, data, cnt);
  data++;
  if(data > 3)
  data = 0;
  delay(3000);  
}

Строчка ниже, 0b0001 - это вы 4 бита так отправляете?

Так ведь библиотека сама отправит 4 младших бита

Загораются все сегменты и потом в течении 3х секунд гаснут горизонтальные линии.


я вообще перестал понимать как он работает.
и почему при наличии только одной строчки в цикле ht.write(8,0b0001); не работает, а при двух строчках
ht.write(8,0b0001);
ht.write(8,0b0000);
показывает 4 сегмента.

есть более странная фигня какая-то.
Если я отправляю:

ht.write(8,0b0001);
ht.write(8,0b0000);

то я вижу 4 заженных сегмента.
но если в строчке ht.write(8,0b0001); 2, 3 и 4 бит ставить 1 в любой комбинации, то все равно я вижу только то, что загорается при 1 в младшем бите.
Если самый младший бит 0, то неважно какие биты - все равно ничего нет.
Такое чувство, то работает только COM0

А если запустить не только COM0 с выводом чего либо, НО и COM1/2/3 с гашением их сегментов одновременно?

я ж говорю, что все что бы я не передавал с com1/2/3 просто игнорируется и не работает. только если com0 стоит 1, то что-то показывает.

Я, как бы , другое писал, ну и ладно.

1 лайк

вы про то, что я писал в 51 сообщении?

Сейчас зажег все сегменты строчками:

ht.write_c(0, 0b1111, 32);
ht.write_c(0, 0b0000, 32);

и посмотрел осликом, что происходит.
На COM0 и COM2 я вижу 4,5 вольта постоянка
На COM1 и COM3 1,5 вольта постоянка
на всех SEG выходах меандр с амплитудой 3 вольта, частотой 41 Гц и скважностью 53%
никаких таких крутых картинок, как в сообщении 43 нет.

Я про

Ну, так может драйвер до сих пор и не заработал? Или он для других LСD. Используйте готовый пример из готовой библиотеки и там уже гляньте осциллографом.

О, так это уже что то! Можно в библиотеке попробовать добавить делей, и смотреть, как , по очереди идёт отрисовка.

void HT1621::writeBits(uint8_t data, uint8_t cnt)
{
  for (register uint8_t i = 0; i < cnt; i++, data <<= 1)
  {
    pinMode(_DATA_pin, OUTPUT);

    digitalWrite(_RW_pin, LOW);
    delayMicroseconds(20);

    switch (cnt)
    {
      case 4:
        digitalWrite(_DATA_pin, data & 0x8 ? HIGH : LOW);
        break;
      case 5:
        digitalWrite(_DATA_pin, data & 0x10 ? HIGH : LOW);
        break;
      case 8:
        digitalWrite(_DATA_pin, data & 0x80 ? HIGH : LOW);
        break;
    }
    delayMicroseconds(20);

    digitalWrite(_RW_pin, HIGH);
    delayMicroseconds(20);
	delay(2000);//<=======ЗДЕСЬ ДОБАВИТЬ , НЕ ЗАБЫТЬ УБРАТЬ!
  }
}

Барри Ален? :slightly_smiling_face:

1 лайк

Не знаком, увы))