Скетч управления ЖК экраном

Я это перенесу из коммерческого раздела в Программирование? Никто не против?
Даже в Аппаратные. Так вернее

1 лайк

в самом начале я говорю голосом что и где, в обоих видео

Звук был отключен …

1 лайк
  1. Вот эта китайская библиотека будет работать после небольшой коррекции.
    (нужно изменить метод update() и возможно charToSegBits() ).
    :wink:
  2. Лучше использовать ЖК через контроллер, а не напрямую. Хотя это и был бы ценный опыт.
  3. И нет это не SPI интерфейс. Синхронный, последовательный, но не SPI.

“Таки Фима, вы будете смеяться!” Именно эту библиотеку я и пробовал когда писал выше про эксперимент…
Плохо только то, что если во вчерашних твоих словах я ещё что то понимал, то править библиотеку я точно не смогу…

Ничего ты не понимал!

Ты выдал на ЖК 6 полупериодов каких?
Нужно по одному каналу на низкой частоте, то есть, если 6, то три 0 потом три 1. А по остальным каналам 0, 1, 0, 1, 0, 1 - то есть на высокой частоте.
Например выбираем канал Com0, и строим пересечение с Seg3, тогда выдаем -

segMask = 0b00001000; 
//***************
 PORTB =   0b0000;
 PORTD =   segMask;
 delayMicroseconds(500);
 PORTB =   0b1110;
 PORTD =   segMask;
 delayMicroseconds(500);
 PORTB =   0b0000;
 PORTD =   segMask;
 delayMicroseconds(500);
 PORTB =   0b1111;
 PORTD =   ~segMask;
 delayMicroseconds(500);
 PORTB =   0b0001;
 PORTD =   ~segMask;
 delayMicroseconds(500);
 PORTB =   0b1111;
 PORTD =   ~segMask;
 delayMicroseconds(500);

и всего таких блоков должно быть 4. Для каждого КОМа по одному. В каждом ты строишь пересечения с теми Сегментами. которые тебе нужны.

например для цифры 5 на первой позиции нужно сделать по блокам
com0 - 0b01
com1 - 0b01
com2 - 0b11
com3 - 0b10


добавлю, что 6 - плохой выбор. Нужно чтобы на 4 делилось - то есть 4 или 8 полупериодов.

но повторю - лучше поправить библиотеку. Это точно проще. На порядок.

Вот нет в тебе совести! Старого человека заставляет сидеть за паяльником… :slight_smile:
перепаял обратно на контроллер, подключил к Nano, залил такой скетч

#include <HT1621.h>
#define LCD_CS_PIN 13
#define LCD_WR_PIN 12
#define LCD_DATA_PIN 8

// #define HT1621_DEBUG

HT1621 lcd;
void setup() {
  lcd.begin(LCD_CS_PIN, LCD_WR_PIN, LCD_DATA_PIN);
  lcd.clear();
}

void loop(){
  lcd.print("1111");
  delay(1000);
  lcd.clear();
  lcd.print("2222");
  delay(1000);
  lcd.clear();
  lcd.print("3333");
  delay(1000);
  lcd.clear();
  lcd.print("4444");
  delay(1000);
  lcd.clear();
  lcd.print("5555");  
  delay(1000);
  lcd.clear();
  lcd.print("0000");  
  delay(1000);  
}

результат? вроде работает, но понятное дело всё криво…

вот

Спойлер

VID_20230603_152554

выведи не по 4 а по 5 цифирок.

я вместо
lcd.print(“8888”);
написал
lcd.print((long)8888);

теперь я вижу подобие цифр во всех разрядах

Спойлер

VID_20230603_154501

остановимся на такой записи или попробовать 5 цифр под кавычки?

Для начала надо:
void wrone(unsigned char addr, unsigned char sdata);
перенести в public
Насколько я вижу - там шрифт под стандарт знакоместа/сегменты
А тут не так и надо шрифт менять.
Потом пробуем:

void loop() {
lcd.wrone(0,0xff);
lcd.wrone(2,0xff);
lcd.wrone(4,0xff);
lcd.wrone(6,0xff);
lcd.wrone(8,0xff);
}

стыдно быть бестолковым, но я даже не понимаю о чём речь…

p.s. из неприятного, по мимо кракозябров, идут какие то паразитные засветки, без контроллера, на прямую от ардуино с кодом Командира всё в разы чётче!

Открываем файл HT1621.h и переносим строку …

после переноса и компиляции твоего кода вижу засветку всех сегментов

А если 0x00 везде ?

Если обведенное верно, то надо два шрифта…

Командир! У меня гости, Шаббат, самогон и все эти вещию :wink: Ты уж дальше сам - как нить.
1… нужно update() поменять. так как цифры у нас не на местах 0,2,4,6,8, 10 а на 0, 2, 5, 7, если я правильно помню “наскальную живопись”
2. ну и дешифратор символа в битмаску у нас несколько иной. так как ком элкектроды не одинаковы на всех знакоместах. Его нужно внимательно переделать.

тёмный экран, ничего не светится

Так и должно быть !