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

Добрый день, имеется панелька от магнитолы с жк драйвером lc75823. Хотелось бы создать на его остове-дисплей для вывода на него информации. В интернете есть пример управления(от автора Jose Luis Monteiro. Ссылку прикреплю ниже). Я уже определил расположение каждого сегмента на моем жк, и записал их. Основываясь на этих знания хотелось бы создать скетч или же библиотеку для управления и написания текста на дисплей.

пример Jose Luis Monteiro

мой тестовый скетчДанный контент доступен только зарегистрированным пользователям.

сегменты определял и подписывал по этой схемеhttp://forum.rcl-radio.ru/uploads/images/2024/03/c55ff2a153cd278f90a323469c1f79c5.png

2

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

Вот управление
http://forum.rcl-radio.ru/uploads/images/2024/03/4b005e5da56d0ea5862dd94dd7201bdc.png

3

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

Вот код, если все верно все сегменты должны загореться

#define CE  2
#define CL  3
#define DI  4


void setup() {
  write_byte(0b10000010, 0b0110);

}

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

}

void write_byte(byte addr, byte contr){
  /// addr 8 bit
     digitalWrite(CE,LOW);
   for(int i = 0; i <= 7; i++){
     digitalWrite(CL,LOW);
     digitalWrite(DI, (addr >> i) & 1);
     digitalWrite(CL,HIGH);
     }  
     digitalWrite(CE,HIGH);
// data 156 bit
     digitalWrite(CL,HIGH);
     for(int i = 0; i <= 155; i++){
     digitalWrite(CL,LOW);
     digitalWrite(DI, (1 >> i) & 1);
     digitalWrite(CL,HIGH);
     }  
// control data 4 bit     
for(int i = 0; i <= 4; i++){
     digitalWrite(CL,LOW);
     digitalWrite(DI, (contr >> i) & 1);
     digitalWrite(CL,HIGH);
     }  
     digitalWrite(CE,LOW);
     
  }  

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

тишина, ничего не происходит

5

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

Немного поправил, CE CL DI подключены верно?

#define CE  2
#define CL  3
#define DI  4


void setup() {
  pinMode(CE, OUTPUT);
  pinMode(CL, OUTPUT);
  pinMode(DI, OUTPUT);
  write_byte(0b10000010, 0b0110);

}

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

}

void write_byte(byte addr, byte contr){
  /// addr 8 bit
     digitalWrite(CE,LOW);
   for(int i = 0; i <= 7; i++){
     digitalWrite(CL,LOW);
     digitalWrite(DI, (addr >> i) & 1);
     digitalWrite(CL,HIGH);
     digitalWrite(CL,LOW);
     digitalWrite(CE,HIGH);
     digitalWrite(CL,LOW);
     }  
// data 156 bit
     digitalWrite(CL,HIGH);
     for(int i = 0; i <= 155; i++){
     digitalWrite(CL,LOW);
     digitalWrite(DI, (1 >> i) & 1);
     digitalWrite(CL,HIGH);
     }  
// control data 4 bit     
for(int i = 0; i <= 4; i++){
     digitalWrite(CL,LOW);
     digitalWrite(DI, (contr >> i) & 1);
     digitalWrite(CL,HIGH);
     }  
     digitalWrite(CE,LOW);
     delay(10);
  }  

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

тишина

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

#define VFD_in 7  // This is the pin number 7 on Arduino UNO
#define VFD_clk 8 // This is the pin number 8 on Arduino UNO
#define VFD_ce 9 // This is the pin number 9 on Arduino UNO

//ATT: On the Uno and other ATMEGA based boards, unsigned ints (unsigned integers) are the same as ints in that they store a 2 byte value.
//Long variables are extended size variables for number storage, and store 32 bits (4 bytes), from -2,147,483,648 to 2,147,483,647.

//*************************************************//
void setup() {
  pinMode(VFD_clk, OUTPUT);
  pinMode(VFD_in, OUTPUT);
  pinMode(VFD_ce, OUTPUT);
 
  pinMode(13, OUTPUT);
  Serial.begin(9600); // only to debug
}
void send_char(unsigned char a)
{
 //
 unsigned char transmit = 15; //define our transmit pin
 unsigned char data = 170; //value to transmit, binary 10101010
 unsigned char mask = 1; //our bitmask
  data=a;
  // the validation of data happen when clk go from LOW to HIGH.
  digitalWrite(VFD_ce, LOW); // When strobe is low, all output is enable. If high, all output will be set to low.
  delayMicroseconds(5);
  digitalWrite(VFD_clk,LOW);// need invert the signal to allow 8 bits is is low only send 7 bits
  delayMicroseconds(5);
  for (mask = 0b00000001; mask>0; mask <<= 1) { //iterate through bit mask
  digitalWrite(VFD_clk,LOW);// need invert the signal to allow 8 bits is is low only send 7 bits
  delayMicroseconds(5);
    if (data & mask){ // if bitwise AND resolves to true
      digitalWrite(VFD_in, HIGH);
      //Serial.print(1);
    }
    else{ //if bitwise and resolves to false
      digitalWrite(VFD_in, LOW);
      //Serial.print(0);
    }
    digitalWrite(VFD_clk,HIGH);// need invert the signal to allow 8 bits is is low only send 7 bits
    delayMicroseconds(5);
    //
    digitalWrite(VFD_ce, HIGH); // When strobe is low, all output is enable. If high, all output will be set to low.
  delayMicroseconds(5);
  }
}
/*********************************************************************/
// I h've created 3 functions to send bit's, one with strobe, other without strobe and one with first byte with strobe followed by remaing bits.
void send_char_without(unsigned char a)
{
 unsigned char transmit = 15; //define our transmit pin
 unsigned char data = 170; //value to transmit, binary 10101010
 unsigned char mask = 1; //our bitmask
  data=a;
  for (mask = 0b00000001; mask>0; mask <<= 1) { //iterate through bit mask
  digitalWrite(VFD_clk, LOW);
  delayMicroseconds(5);
    if (data & mask){ // if bitwise AND resolves to true
      digitalWrite(VFD_in, HIGH);
      //Serial.print(1);
    }
    else{ //if bitwise and resolves to false
      digitalWrite(VFD_in, LOW);
      //Serial.print(0);
    }
    digitalWrite(VFD_clk,HIGH);// need invert the signal to allow 8 bits is is low only send 7 bits
    delayMicroseconds(5);
  }
}
/*********************************************************************/
void send_char_8bit_stb(unsigned char a)
{
 unsigned char transmit = 15; //define our transmit pin
 unsigned char data = 170; //value to transmit, binary 10101010
 unsigned char mask = 1; //our bitmask
 int i = -1;
  data=a;
  for (mask = 0b00000001; mask>0; mask <<= 1) { //iterate through bit mask
   i++;
   digitalWrite(VFD_clk, LOW);
  delayMicroseconds(5);
    if (data & mask){ // if bitwise AND resolves to true
      digitalWrite(VFD_in, HIGH);
      //Serial.print(1);
    }
    else{ //if bitwise and resolves to false
      digitalWrite(VFD_in, LOW);
      //Serial.print(0);
    }
    digitalWrite(VFD_clk,HIGH);// 
    delayMicroseconds(1);
    if (i==7){
    Serial.println(i);
    digitalWrite(VFD_ce, HIGH);
    delayMicroseconds(1);
    }  
  }
}
/*******************************************************************/
void allON_LC75823(){
unsigned char group=0;
//send total of 56 bits (7Bytes), the 4 last 14 bits belongs to controls
//The p0, p1, p2 & p3 at 0, means all pins from s1 to s12 will belongs to segments, other's settings tell will px is a port general purpose!
      for(int i=0; i<3;i++){   // Dx until 164 bits
            group=i;
      digitalWrite(VFD_ce, LOW); //
      delayMicroseconds(1);
      // Position of bit(..76543210)
      send_char_8bit_stb(0B01000001); //(0x41) firts 8 bits is address, every fixed as (0B01000001), see if clk finish LOW or HIGH Very important!
      delayMicroseconds(1);
      // On the 75878 the message have first 16*8 bits more 8 times to performe 128 bits(last byte is control: 0BXXX00000)
          
          send_char_without(0B11111111);  send_char_without(0B11111111); //   1:8     -9:16// 
          send_char_without(0B11111111);  send_char_without(0B11111111); //  17:24    -25:32// 
          send_char_without(0B11111111);  send_char_without(0B11111111); //  33:40    -41:48//
          send_char_without(0B11111111);  send_char_without(0B11111111); //  49:56    -57:64//
          send_char_without(0B11111111);  send_char_without(0B11111111); //  65:72    -73:80//
          send_char_without(0B11111111);  send_char_without(0B11111111); //  81:88    -89:96//
          send_char_without(0B11111111);  send_char_without(0B11111111); //  97:104   -105:112//
          send_char_without(0B11111111);  send_char_without(0B11111111); // 113:120   -121:128// 
          send_char_without(0B11111111);  send_char_without(0B11111111); // 120:136   -137:144// 
          send_char_without(0B11111111);  send_char_without(0B00011111); // 145:152   -153:160//
          
      delayMicroseconds(1);
      digitalWrite(VFD_ce, LOW); // 
      delayMicroseconds(1);
      }
}

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

с этим кодом загораются все сегменты

9

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

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


void setup() {
  pinMode(CE, OUTPUT);
  pinMode(CL, OUTPUT);
  pinMode(DI, OUTPUT);
  write_byte(0x41, 0b0110);

}

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

}

void write_byte(byte addr, byte contr){
  /// addr 8 bit
     digitalWrite(CE,LOW);delayMicroseconds(5);
   for(int i = 7; i >= 0; i--){
     digitalWrite(CL,LOW);delayMicroseconds(5);
     digitalWrite(DI, (addr >> i) & 1);
     digitalWrite(CL,HIGH);
     digitalWrite(CL,LOW);delayMicroseconds(5);
     digitalWrite(CE,HIGH);delayMicroseconds(5);
     digitalWrite(CL,LOW);
     }  
// data 156 bit
     digitalWrite(CL,HIGH);delayMicroseconds(5);
     for(int i = 155; i >= 0; i--){
     digitalWrite(CL,LOW);delayMicroseconds(5);
     digitalWrite(DI, (1 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(5);
     }  
// control data 4 bit     
for(int i = 4; i >= 0; i--){
     digitalWrite(CL,LOW);delayMicroseconds(5);
     digitalWrite(DI, (contr >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(5);
     }  
     digitalWrite(CE,LOW);
     delay(10);
  }  

10 (2024-03-18 22:16:48 отредактировано vladbuharkin20)

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

write_byte(byte addr, byte contr); получается отправлять что либо данной командой? если да, дайте пример вывода(что писать в скобках)

11

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

Я поправил скетч

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


void setup() {
  pinMode(CE, OUTPUT);
  pinMode(CL, OUTPUT);
  pinMode(DI, OUTPUT);
  write_byte(0x41, 0b0110);

}

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

}

void write_byte(byte addr, byte contr){
  /// addr 8 bit
     digitalWrite(CE,LOW);delayMicroseconds(5);
   for(int i = 7; i >= 0; i--){
     digitalWrite(CL,LOW);delayMicroseconds(5);
     digitalWrite(DI, (addr >> i) & 1);
     digitalWrite(CL,HIGH);
     digitalWrite(CL,LOW);delayMicroseconds(5);
     digitalWrite(CE,HIGH);delayMicroseconds(5);
     digitalWrite(CL,LOW);
     }  
// data 156 bit
     digitalWrite(CL,HIGH);delayMicroseconds(5);
     for(int i = 155; i >= 0; i--){
     digitalWrite(CL,LOW);delayMicroseconds(5);
     digitalWrite(DI, (1 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(5);
     }  
// control data 4 bit     
for(int i = 4; i >= 0; i--){
     digitalWrite(CL,LOW);delayMicroseconds(5);
     digitalWrite(DI, (contr >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(5);
     }  
     digitalWrite(CE,LOW);
     delay(10);
  }  

12

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

напишите пожалуйста пример отправки данных командой write_byte(byte addr, byte contr)

13

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

Это команда просто указывает адрес и биты контроля, а все данные сегментов забивает единицами.
Надо просто чтобы заработало.

14

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

просто скопировать скетч и запустить ?

15

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

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

Отправляю адрес 0х41 далее 156 единиц и 4 бита в конце

16

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

просто скопировать скетч и запустить ?

да

17

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

ничего не происходит, тишина

18

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

Пины эти используете

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

19

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

пины я поменял сразу под свои. DI- это data?

20

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

да

21

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

По коду вроде все верно, но не пойму пока почему не работает

#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);
  delay(200);
  write_byte(0x41, 0b0110);

}

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

}

void write_byte(byte addr, byte contr){
  /// addr 8 bit
     digitalWrite(CE,LOW);delayMicroseconds(5);
   for(int i = 7; i >= 0; i--){
     digitalWrite(CL,LOW);delayMicroseconds(5);
     digitalWrite(DI, (addr >> i) & 1);  
     digitalWrite(CL,HIGH);
     digitalWrite(CL,LOW);delayMicroseconds(5);
     digitalWrite(CE,HIGH);
     digitalWrite(CL,LOW);delayMicroseconds(5);
     }  
// data 156 bit
     digitalWrite(CL,HIGH);delayMicroseconds(5);
     for(int i = 155; i >= 0; i--){
     digitalWrite(CL,LOW);delayMicroseconds(5);
     digitalWrite(DI, (1 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(5);
     } 
// control data 4 bit     
for(int i = 3; i >= 0; i--){
     digitalWrite(CL,LOW);delayMicroseconds(5);
     digitalWrite(DI, (contr >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(5);
     }  Serial.println();
     digitalWrite(CE,LOW);
     delay(10);
  }  

22

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

все по прежнему

23

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

#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, 0b0110);

}

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

}

void write_byte(byte addr, byte contr){
  /// addr 8 bit
     digitalWrite(CE,LOW);
   for(int i = 7; i >= 0; i--){
     digitalWrite(CL,LOW);
     digitalWrite(DI, (addr >> i) & 1);  
     digitalWrite(CL,HIGH);
     } 
     digitalWrite(CL,LOW);
     digitalWrite(CE,HIGH);
 
// data 156 bit
     for(int i = 155; i >= 0; i--){
     digitalWrite(CL,LOW);
     digitalWrite(DI, (1 >> i) & 1);
     digitalWrite(CL,HIGH);
     } 
     
// control data 4 bit     
for(int i = 3; i >= 0; i--){
     digitalWrite(CL,LOW);
     digitalWrite(DI, (contr >> i) & 1);
     digitalWrite(CL,HIGH);
     } 
     digitalWrite(CE,LOW);
     delay(10);
  }  

24

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

неа(

25

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

#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, 0b1010);

}

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

}

void write_byte(byte addr, byte contr){
  /// addr 8 bit
     digitalWrite(CE,LOW);
   for(int i = 7; i >= 0; i--){
     digitalWrite(CL,LOW);
     digitalWrite(DI, (addr >> i) & 1);  
     digitalWrite(CL,HIGH);
     } 
     digitalWrite(CL,LOW);
     digitalWrite(CE,HIGH);
 
// data 156 bit
     for(int i = 155; i >= 0; i--){
     digitalWrite(CL,LOW);
     digitalWrite(DI, (1 >> i) & 1);
     digitalWrite(CL,HIGH);
     } 
     
// control data 4 bit     
for(int i = 3; i >= 0; i--){
     digitalWrite(CL,LOW);
     digitalWrite(DI, (contr >> i) & 1);
     digitalWrite(CL,HIGH);
     } 
     digitalWrite(CE,LOW);
     delay(10);
  }