151

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

ничего не изменилось, только потух 146 а вместо него загорелся 134

Я сейчас задаю названия переменным и их расположение в 32 битном байте

152

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

Я так понимаю, остался только один элемент не определенным, это 1 в 123?

153

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

#define CE  10
#define CL  13
#define DI  11

int w;
unsigned long byte_1,byte_2,byte_3,byte_4,byte_5;
unsigned long h1,h2,h3,h4,h5,h6,h7,h8;
unsigned long kav_1=0,dvoetoh=0,toch=0,kav_2=0;
unsigned long vu[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned long scm=1, beat=1, soft=1,pop=1;
unsigned long rnd=0,prt=0,lond=0,xxx=1;

void setup() {
  Serial.begin(9600);
  pinMode(CE, OUTPUT);
  pinMode(CL, OUTPUT);
  pinMode(DI, OUTPUT);
  digitalWrite(CE,LOW);
  digitalWrite(CL,LOW);
  delay(200);
      //  1                             32
//byte_1  00000000000000000000000000000000
      //  33                            64
//byte_2  00000000000000000000000000000000
      //  65                            96
//byte_3  00000000000000000000000000000000
      //  97                           128
//byte_4  00000000000000000000000000000000
      //  129                      156
//byte_5  0000000000000000000000000000



}

void loop() {
  h1 = segm(1); 
  h2 = segm(2); 
  h3 = segm(3);
  h4 = segm(4);
  h5 = segm(5);
  h6 = segm(11);
  h7 = segm(11);
  h8 = segm(11);
  unsigned long vu_code = vu[1]<<24|vu[2]<<23|vu[3]<<22|vu[4]<<21|vu[5]<<20|vu[6]<<19|vu[7]<<18|vu[8]<<17|vu[9]<<16|vu[10]<<15|vu[11]<<14| vu[12]<<11|vu[13]<<8;
  byte_1 = h1>>7 | vu[0]<<25 | vu_code | scm<<13 | beat<<12 |soft<<9 | pop<<10; 
  byte_2 = (h1&0b1111111)<<25 | h2<<10 |kav_1<<12 | dvoetoh<<9 | h3>>5; 
  byte_3 = (h3&0b11111)<<27 | toch<<29 | h4<<12 | kav_2<<14 | h5>>3;
  byte_4 = (h5&0b111)<<29 | h6<<14 | h7>>1 | lond<<1 | xxx<<13;
  byte_5 = (h7&1)<<27 | h8<<12 | rnd<<14|prt<<26| 0b000000000000;
  
  
  write_byte(0x41, byte_1,byte_2,byte_3,byte_4,byte_5,    0b0000);

  delay(100000);
  Serial.println(vu[0]);
  
 

}

void write_byte(byte addr, unsigned long b0, unsigned long b1, unsigned long b2, unsigned long b3, unsigned long 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); 
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(CE,HIGH);

// data 156 bit
  // 1-24 seg
     for(int i = 31;i >= 0; i--){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b0 >> i) & 1);
     Serial.print((b0 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 
     Serial.print(" ");

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

     for(int i = 31;i >= 0; i--){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b2 >> i) & 1);
     Serial.print((b2 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 
     Serial.print(" ");

     for(int i = 31;i >= 0; i--){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b3 >> i) & 1);
     Serial.print((b3 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 
     Serial.print(" ");

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

int segm(int cif){
  unsigned int data_out;
  switch(cif){
    case 0: data_out=0b11000101000011;break;//0
    case 1: data_out=0b00000000000011;break;//1 
    case 2: data_out=0b01010101010010;break;//2
    case 3: data_out=0b00010101010011;break;//3 
    case 4: data_out=0b10010000010011;break;//4  
    case 5: data_out=0b10010101010001;break;//5 
    case 6: data_out=0b11010101010001;break;//6   
    case 7: data_out=0b00000100000011;break;//7   
    case 8: data_out=0b11010101010011;break;//8   
    case 9: data_out=0b10010101010011;break;//9  
   case 10: data_out=0b00000000000000;break;// пусто
   case 11: data_out=0b11111111111011;break;// все
    
    }
    return data_out;
  }  

154

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

http://forum.rcl-radio.ru/uploads/images/2024/03/7823780772cae5930abbb73820881915.jpeg

155

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

Все все элементы определены и имеют управление

kav_1=0,dvoetoh=0,toch=0,kav_2=0;  // кавычка, двоеточие, точка, двойная кавычка
unsigned long vu[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};// все элементы индикатора уровня
unsigned long scm=1, beat=1, soft=1,pop=1; // SCM BEAT SOFT POP
unsigned long rnd=0,prt=0,lond=0,cif_1=1; // RND PRT LOND, цифра 1 в 123
unsigned long el_12,el_11,el_10,el_9,el_8,el_7,el_6,el_5,el_4,el_3,el_2,el_1; // все оставшиеся элементы с права

156

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

При создании новых символов используйте следующий порядок сегментов

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

Байт 11111111111011

Сегментов 13, но байт символа имеет длину 14 бит, как видите в конце байта есть пропуск (указан как 0), учитывайте это при создании новых символов.

про рисунку 1 сегмент это 0B10000000000000, то есть самый старший бит

157 (2024-03-24 17:41:37 отредактировано vladbuharkin20)

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

А возможно вообще сделать одну командe для того чтобы написать что нибудь на дисплее. Допустим lcd.print(что написать, и где написать);

158

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

У Вас для вывода есть только 8 разрядов, ими проще управлять из переменных

  h1 = segm(1);
  h2 = segm(2);
  h3 = segm(3);
  h4 = segm(4);
  h5 = segm(5);
  h6 = segm(11);
  h7 = segm(11);
  h8 = segm(11);

Меняете содержимое переменных - меняются символы.

159

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

можете описать команды для управления анализатором спектра, и значков. С цифрами я разобрался.

160

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

А ни каких команд нет, есть просто переменные, указываете 1 сегмент светиться, 0 - гаснет

kav_1=0,dvoetoh=0,toch=0,kav_2=0;  // кавычка, двоеточие, точка, двойная кавычка
unsigned long vu[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};// все элементы индикатора уровня
unsigned long scm=1, beat=1, soft=1,pop=1; // SCM BEAT SOFT POP
unsigned long rnd=0,prt=0,lond=0,cif_1=1; // RND PRT LOND, цифра 1 в 123
unsigned long el_12,el_11,el_10,el_9,el_8,el_7,el_6,el_5,el_4,el_3,el_2,el_1; // все оставшиеся элементы с права

161

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

еще просьба, необходимо создать буквы(которые отсылаются по такому же принципу как и цифры).

162

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

За что отвечает этот кусок кода?
http://forum.rcl-radio.ru/uploads/images/2024/03/4c190d8aa51290e0ee901ac4e5213300.png

163

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

Код вывода 156 бит, в 5 байтах 32 32 32 32 и 27 бит, в этом коде идет распределение 156 битного байта на разряды и символы, его лучше не менять, а еще лучше убрать в функцию и просто обращаться к ней для вывода информации на дисплей.

Вот пример:

#define CE  10
#define CL  13
#define DI  11

int w;
unsigned long byte_1,byte_2,byte_3,byte_4,byte_5;
unsigned long h1,h2,h3,h4,h5,h6,h7,h8;
unsigned long kav_1=0,dvoetoh=0,toch=0,kav_2=0;
unsigned long vu[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned long scm=1, beat=1, soft=1,pop=1;
unsigned long rnd=0,prt=0,lond=0,cif_1=1;
unsigned long el_12,el_11,el_10,el_9,el_8,el_7,el_6,el_5,el_4,el_3,el_2,el_1;

void setup() {
  Serial.begin(9600);
  pinMode(CE, OUTPUT);
  pinMode(CL, OUTPUT);
  pinMode(DI, OUTPUT);
  digitalWrite(CE,LOW);
  digitalWrite(CL,LOW);
  delay(200);
      //  1                             32
//byte_1  00000000000000000000000000000000
      //  33                            64
//byte_2  00000000000000000000000000000000
      //  65                            96
//byte_3  00000000000000000000000000000000
      //  97                           128
//byte_4  00000000000000000000000000000000
      //  129                      156
//byte_5  0000000000000000000000000000



}

void loop() {
  h1 = segm(1); 
  h2 = segm(2); 
  h3 = segm(3);
  h4 = segm(4);
  h5 = segm(5);
  h6 = segm(11);
  h7 = segm(11);
  h8 = segm(11);

  print_out();

  delay(1000);
  
 

}

void write_byte(byte addr, unsigned long b0, unsigned long b1, unsigned long b2, unsigned long b3, unsigned long 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); 
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(CE,HIGH);

// data 156 bit
  // 1-24 seg
     for(int i = 31;i >= 0; i--){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b0 >> i) & 1);
     Serial.print((b0 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 
     Serial.print(" ");

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

     for(int i = 31;i >= 0; i--){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b2 >> i) & 1);
     Serial.print((b2 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 
     Serial.print(" ");

     for(int i = 31;i >= 0; i--){ 
     digitalWrite(CL,LOW);delayMicroseconds(10);
     digitalWrite(DI, (b3 >> i) & 1);
     Serial.print((b3 >> i) & 1);
     digitalWrite(CL,HIGH);delayMicroseconds(10);
     } 
     Serial.print(" ");

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

int segm(int cif){
  unsigned int data_out;
  switch(cif){
    case 0: data_out=0b11000101000011;break;//0
    case 1: data_out=0b00000000000011;break;//1 
    case 2: data_out=0b01010101010010;break;//2
    case 3: data_out=0b00010101010011;break;//3 
    case 4: data_out=0b10010000010011;break;//4  
    case 5: data_out=0b10010101010001;break;//5 
    case 6: data_out=0b11010101010001;break;//6   
    case 7: data_out=0b00000100000011;break;//7   
    case 8: data_out=0b11010101010011;break;//8   
    case 9: data_out=0b10010101010011;break;//9  
   case 10: data_out=0b00000000000000;break;// пусто
   case 11: data_out=0b11111111111011;break;// все
    
    }
    return data_out;
  }  

void print_out(){
  unsigned long vu_code = vu[1]<<24|vu[2]<<23|vu[3]<<22|vu[4]<<21|vu[5]<<20|vu[6]<<19|vu[7]<<18|vu[8]<<17|vu[9]<<16|vu[10]<<15|vu[11]<<14| vu[12]<<11|vu[13]<<8;
  byte_1 = h1>>7 | vu[0]<<25 | vu_code | scm<<13 | beat<<12 |soft<<9 | pop<<10; 
  byte_2 = (h1&0b1111111)<<25 | h2<<10 |kav_1<<12 | dvoetoh<<9 | h3>>5; 
  byte_3 = (h3&0b11111)<<27 | toch<<29 | h4<<12 | kav_2<<14 | h5>>3;
  byte_4 = (h5&0b111)<<29 | h6<<14 | h7>>1 | lond<<1 | cif_1<<13;
  byte_5 = (h7&1)<<27 | h8<<12 | rnd<<14|prt<<26| el_12<<11|el_11<<10|el_10<<9|el_9<<8|el_8<<7|el_7<<6|el_6<<5|el_5<<4|el_4<<3|el_3<<2|el_2<<1|el_1;
  write_byte(0x41, byte_1,byte_2,byte_3,byte_4,byte_5,    0b0000);
  }  

164

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

http://forum.rcl-radio.ru/uploads/images/2024/03/11db3faf8718d7792b39e7d820ef9f5c.jpeg Код криво выводит

165

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

Все верно, именно это он и должен выводить, ведь в коде

  h1 = segm(1);
  h2 = segm(2);
  h3 = segm(3);
  h4 = segm(4);
  h5 = segm(5);
  h6 = segm(11);
  h7 = segm(11);
  h8 = segm(11);

6 7 8 цифра загораются все сегменты, так как

case 11: data_out=0b11111111111011;break;// все

а так же cif_1=1;scm=1, beat=1, soft=1,pop=1;

166

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

ще просьба, необходимо создать буквы(которые отсылаются по такому же принципу как и цифры).

Это очень кропотливая работа, лучше создавать буквы которые будете использовать.

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

Вот например буква N

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

case 12: data_out=0b11100000001011;break;// N

167

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

case 0: data_out=0b11000101000011;break;//0
    case 1: data_out=0b00000000000011;break;//1
    case 2: data_out=0b01010101010010;break;//2
    case 3: data_out=0b00010101010011;break;//3
    case 4: data_out=0b10010000010011;break;//4 
    case 5: data_out=0b10010101010001;break;//5
    case 6: data_out=0b11010101010001;break;//6   
    case 7: data_out=0b00000100000011;break;//7   
    case 8: data_out=0b11010101010011;break;//8   
    case 9: data_out=0b10010101010011;break;//9 
   case 10: data_out=0b00000000000000;break;// пусто
   case 11: data_out=0b11111111111011;break;// все
  case 12: data_out=0b11100000001011;break;// N

Если например

h1 = segm(12);

то в первом разряде выведется буква N

168

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

а выводить линии анализатора спектра вот этой командой vu[7]; в loop?

169

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

а можно сделать чтобы не h1 = segm(12); выводило букву N, а команда h1 = segm(N);

170

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

Да все верно

vu[7] = 1;

или

vu[7] = 0;

171

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

а как  на этот дисплей вывести допустим секундомер (millis /1000)?

172 (2024-03-24 20:55:07 отредактировано vladbuharkin20)

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

просто я хочу этот дисплей использовать для нашего с вами прошлого проекта с аудио процессором TDA7461

173

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

unsigned long vu_code = vu[1]<<24|vu[2]<<23|vu[3]<<22|vu[4]<<21|vu[5]<<20|vu[6]<<19|vu[7]<<18|vu[8]<<17|vu[9]<<16|vu[10]<<15|vu[11]<<14| vu[12]<<11|vu[13]<<8;

Это строка отвечает за вывод массива анализатора

vu[0]...vu[13] - 14 сегментов.

Использую массив, так как это анализатор уровня и его проще применять как массив и использовать в цикле

for(int i = 0; i<=13;i++){
  vu[i]=analogRead(A0)/20;
} 

Выведет состояние уровня на А0.

174

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

а как  на этот дисплей вывести допустим секундомер (millis /1000)?

 int sec = millis()/1000;

  h1 = segm(sec/10000000%10); 
  h2 = segm(sec/1000000%10); 
  h3 = segm(sec/100000%10);
  h4 = segm(sec/10000%10);
  h5 = segm(sec/1000%10);
  h6 = segm(sec/100%10);
  h7 = segm(sec/10%10);
  h8 = segm(sec%10);

175

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

анализатор спектра постоянно заполнен, даже с подтяжкой A0 к земле