51

Re: управление драйвером жк lc75823

Надо разделить разряды по 8 бит или по 16 , не знаю как лучше

52

Re: управление драйвером жк lc75823

Сколько всего сегментов в индикаторе

53

Re: управление драйвером жк lc75823

сегментов всего 142

54

Re: управление драйвером жк lc75823

Вот пример

Я изменил функцию, теперь она содержит еще два параметра, это данные 2 байтов по 8 бит

Если не заработает, то я ошибся в подсчете битов, должно быть отправлено точно 156

write_byte(0x41,     0b11110000, 0b1010000,     0b0000);

В середине два числа это данные двух байтов

Но, Вы можете для удобства делать байты по 8-32 бит.

Бат сейчас инверсный

#define CE  9
#define CL  8
#define DI  7

int w;

void setup() {
  Serial.begin(9600);
  pinMode(CE, OUTPUT);
  pinMode(CL, OUTPUT);
  pinMode(DI, OUTPUT);
  digitalWrite(CE,LOW);
  digitalWrite(CL,LOW);
  delay(200);
  write_byte(0x41,     0b11110000, 0b1010000,     0b0000);

}

void loop() {
  // put your main code here, to run repeatedly:

}

void write_byte(byte addr, byte b0, byte b1,   byte contr){
  /// addr 8 bit
     digitalWrite(CE,LOW);
   for(int i = 0; i <= 7; i++){
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (addr >> i) & 1); 
     //Serial.print((addr >> i) & 1); 
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(CE,HIGH);
 
// data 156 bit

     for(int i = 0;i <= 7; i++){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b0 >> i) & 1);
     Serial.print((b0 >> i) & 1); 
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 

     for(int i = 0;i <= 7; i++){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b1 >> i) & 1);
     Serial.print((b1 >> i) & 1); 
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 

     for(int i = 0;i <= 139; i++){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (1 >> i) & 1);
    // Serial.print((1 >> i) & 1); 
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 

     
     
// control data 4 bit     
for(int i = 3; i >= 0; i--){
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (contr >> i) & 1);
  //   Serial.print((contr >> i) & 1); 
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 
     digitalWrite(CE,LOW);
     digitalWrite(CL,LOW);
     delay(10);
  }  

55

Re: управление драйвером жк lc75823

http://forum.rcl-radio.ru/uploads/images/2024/03/a02547910975100d1c83be9e4dd24ab8.png

Вы можете сгрупировать элементы, в них может быть разное кол-во бит.

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

56

Re: управление драйвером жк lc75823

http://forum.rcl-radio.ru/uploads/images/2024/03/88228f74d28fc456b9ce1cd6447180b4.jpeg
То что отправили вы последний код, загорелись вот эти

57

Re: управление драйвером жк lc75823

Быдо отправлено вот это

0b11110000, 0b1010000

58

Re: управление драйвером жк lc75823

Можете объяснить за что именно отвечают эти 2 числа в середине , я не очень понял

59

Re: управление драйвером жк lc75823

Это байты данных, они зажигают сегменты

У Вас будет не два байта а намного больше, для всех сегментов.

Как я понял первый байт управляет правыми значками, второй левыми, а все остальное это цифры(символы ) в середине.

Вам надо разделить 142 сегмента так, чтобы каждый байт отвечал за свое знакоместо, например цифра-символ у Вас 15 сегментов, под нее лучше создать байт 15 бит.

60 (2024-03-19 00:32:42 отредактировано vladbuharkin20)

Re: управление драйвером жк lc75823

Можно пример как правильно их записать, именно уже сигменты которые я определил чтобы потом шрифт сделать

61

Re: управление драйвером жк lc75823

Вот пример 2 байта по 8 бит, и три по 15 бит

#define CE  9
#define CL  8
#define DI  7

int w;

void setup() {
  Serial.begin(9600);
  pinMode(CE, OUTPUT);
  pinMode(CL, OUTPUT);
  pinMode(DI, OUTPUT);
  digitalWrite(CE,LOW);
  digitalWrite(CL,LOW);
  delay(200);
  write_byte(0x41,     0b11111111,0b11111111,0b111111111111111,0b111111111111111,0b111111111111111,     0b0000);

}

void loop() {
  // put your main code here, to run repeatedly:

}

void write_byte(byte addr, byte b0, byte b1, int b2, int b3, int b4,  byte contr){
  /// addr 8 bit
     digitalWrite(CE,LOW);
   for(int i = 0; i <= 7; i++){
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (addr >> i) & 1); 
     //Serial.print((addr >> i) & 1); 
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(CE,HIGH);
 
// data 156 bit

     for(int i = 0;i <= 7; i++){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b0 >> i) & 1);
   //  Serial.print((b0 >> i) & 1); 
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 

     for(int i = 0;i <= 7; i++){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b1 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 

     for(int i = 0;i <= 14; i++){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b2 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 

     for(int i = 0;i <= 14; i++){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b3 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 

     for(int i = 0;i <= 14; i++){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b4 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 

     for(int i = 0;i <= 111; i++){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (0 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 

     
     
// control data 4 bit     
for(int i = 3; i >= 0; i--){
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (contr >> i) & 1);
  //   Serial.print((contr >> i) & 1); 
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 
     digitalWrite(CE,LOW);
     digitalWrite(CL,LOW);
     delay(10);
  }  

62

Re: управление драйвером жк lc75823

Можно пример как правильно их записать, именно уже сигменты которые я определил чтобы потом шрифт сделать

Это позже, сначала надо разделить байты по группам сегментов, одна цифра-символ === один байт

63

Re: управление драйвером жк lc75823

Вместо байтов
0b11111111,0b11111111,0b111111111111111,0b111111111111111,0b111111111111111
у Вас будут отдельные переменные

например

int seg1 = 0b1111111;
int seg2 = 0b111110000000111;

64 (2024-03-19 00:40:45 отредактировано vladbuharkin20)

Re: управление драйвером жк lc75823

Не я имел в виду как грамотно записать уже определенные сегменты, чтобы в дальнейшем создать шрифт

65

Re: управление драйвером жк lc75823

Давайте все перенесем на завтра, а то у меня уже ночь наступила.

66

Re: управление драйвером жк lc75823

Не я имел в виду как грамотно записать уже определенные сегменты, чтобы в дальнейшем создать шрифт

Это достаточно просто, создаем новую функцию-дешифратор

int segm(int cif){
  int data_out;
  switch(cif){
    case 0: data_out=0b00000000111111;break;//0
    case 1: data_out=0b00010000000110;break;//1
    case 10: data_out=0000000011110111;break;//A
    }
    return data_out;
  }

например если в segm() поместить 1, то она выдаст число 0b00010000000110

Вот пример

#define CE  9
#define CL  8
#define DI  7

int w;

void setup() {
  Serial.begin(9600);
  pinMode(CE, OUTPUT);
  pinMode(CL, OUTPUT);
  pinMode(DI, OUTPUT);
  digitalWrite(CE,LOW);
  digitalWrite(CL,LOW);
  delay(200);
  write_byte(0x41,     0b11111111,0b11111111, 1 ,0b111111111111111,0b111111111111111,     0b0000);

}

void loop() {
  // put your main code here, to run repeatedly:

}

void write_byte(byte addr, byte b0, byte b1, int b2, int b3, int b4,  byte contr){
  /// addr 8 bit
     digitalWrite(CE,LOW);
   for(int i = 0; i <= 7; i++){
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (addr >> i) & 1); 
     //Serial.print((addr >> i) & 1); 
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(CE,HIGH);
 
// data 156 bit

     for(int i = 0;i <= 7; i++){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b0 >> i) & 1);
   //  Serial.print((b0 >> i) & 1); 
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 

     for(int i = 0;i <= 7; i++){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b1 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 

     for(int i = 0;i <= 14; i++){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (segm(b2) >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 

     for(int i = 0;i <= 14; i++){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b3 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 

     for(int i = 0;i <= 14; i++){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b4 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 

     for(int i = 0;i <= 111; i++){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (0 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 

     
     
// control data 4 bit     
for(int i = 3; i >= 0; i--){
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (contr >> i) & 1);
  //   Serial.print((contr >> i) & 1); 
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 
     digitalWrite(CE,LOW);
     digitalWrite(CL,LOW);
     delay(10);
  }  

int segm(int cif){
  int data_out;
  switch(cif){
    case 0: data_out=0b00000000111111;break;//1
    case 1: data_out=0b00010000000110;break;//2
    case 10: data_out=0000000011110111;break;//A
    }
    return data_out;
  }

67

Re: управление драйвером жк lc75823

Вот в этой строке

digitalWrite(DI, (segm(b2) >> i) & 1);

я вместо b2 указал  segm(b2)

А в строке

write_byte(0x41,     0b11111111,0b11111111, 1 ,0b111111111111111,0b111111111111111,     0b0000);

указал 1, но не как код, а просто цифру 1, которая будет преобразована в код цифры

68

Re: управление драйвером жк lc75823

 for(int i = 0;i <= 111; i++){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (0 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 

Объясните пожалуйста за что отвечает этот кусок кода , а именно цифра 111(поскольку я ее меня и сегменты светились в другом месте

69

Re: управление драйвером жк lc75823

Это код отправки основных данных в сегменты, это остаток сегментов которые не распределены.

70

Re: управление драйвером жк lc75823

Нужно точно распределить сектора сегментов, например сколько сегментов в секторе 1 и 2

http://forum.rcl-radio.ru/uploads/images/2024/03/a02547910975100d1c83be9e4dd24ab8.png

71

Re: управление драйвером жк lc75823

Как будет выглядеть функция отправки данных:

write_byte(0x41,    сектор_1, сектор_2 , цифра_1,цифра_2,цифра_3,цифра_4,цифра_5,цифра_6,цифра_7,цифра_8,     0b0000);

сектор_1 - это все что слева от цифр
сектор_2 - это все что справа от цифр

так же могут быть еще переменные под двоеточие, кавычки и точки между цифрами.

Мне надо знать точно какой бит 156 битного байта за какой сегмент отвечает.

72 (2024-03-19 13:28:13 отредактировано vladbuharkin20)

Re: управление драйвером жк lc75823

Я составлял схему какой из 156 байтов отвечает за какой сегмент. Могу скинуть фото листа со схемой

73

Re: управление драйвером жк lc75823

Опубликуйте на форуме, только в виде архива, а то форум сильно сжимает картинку.

74

Re: управление драйвером жк lc75823

Данный контент доступен только зарегистрированным пользователям.
там 2 изображения, поскольку на одну страницу не влезло. Я записывал так: каждый сегмент я подписывал его числом( от 1 до 156). на 2 изображении есть строчка в котой я записал пустые байты.

75

Re: управление драйвером жк lc75823

понятно подписанно, или что то объяснить?