Помогите пожалусто разобратся с дисплеем

alexey3
Offline
Зарегистрирован: 25.11.2017

Евгений Петрович помогите пожалусто разобратся с дисплеем

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Алексей, даже не знаю что Вам сказать. Вы не сказали, что за дисплей, но если у меня нет такого дисплея, то как я могу помочь?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

alexey3 пишет:

Евгений Петрович помогите пожалусто разобратся с дисплеем

Как разобраться то? Стекло разбить? Провода выдернуть? И вообще, что он Вам плохого сделал, что бы с ним так жестоко?

alexey3
Offline
Зарегистрирован: 25.11.2017

Кое что я выяснил и фото выкладывал а вот как на него вывести разумную информацию ?

то что выведено я вывел левым скетчем забив максимум хаотичными данными

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Так если он реагирует на твои действия, то какие у тебя проблемы? Возьми "правый" скетч и начни выводить аккуратно, сначала нолики, потом одну единичку и внимательно смотри, что меняется, записывай. Так и исследуешь.

alexey3
Offline
Зарегистрирован: 25.11.2017

Именно так я и начал делать не вышло попробовал забить полностью данными вышло но не то, В общем не получается чтото

b707
Offline
Зарегистрирован: 26.05.2017

alexey3 пишет:

Именно так я и начал делать не вышло попробовал забить полностью данными вышло но не то, В общем не получается чтото

ну а кто ж за вас это может сделать, если у нас таких дисплеев нет?

Вы в том коде. что показывали - хотя бы размеры массивов поправьте...

alexey3
Offline
Зарегистрирован: 25.11.2017

А как выяснить каких размеров должны быть массивы ?

b707
Offline
Зарегистрирован: 26.05.2017

alexey3 пишет:

А как выяснить каких размеров должны быть массивы ?

Какие должны быть для дисплея - я не знаю.

Я имел в виду лишь то, что если вы описали массив длиной 19 элементов, не надо в него запихивать 23 значения :)

alexey3
Offline
Зарегистрирован: 25.11.2017

Ну хотябы подтолкните как попытатся понять сколько байт пишется в дисплей ?

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Чтобы смысл имели ваши просьбы - нужно какому-нить помошнику дисплей этот дать в руки.

alexey3
Offline
Зарегистрирован: 25.11.2017

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

b707
Offline
Зарегистрирован: 26.05.2017

alexey3 пишет:

максимум что можно сделать ето попробовать в онлайн режиме по видеосвязи

нереально, имхо.

Вам надо искать помощника в своем регионе

alexey3
Offline
Зарегистрирован: 25.11.2017

А вы можете сказать какой именно ето дисплей ? надписи которые есть загораются целиком изменить можно только цифры

b707
Offline
Зарегистрирован: 26.05.2017

alexey3 пишет:

надписи которые есть загораются целиком изменить можно только цифры

это я догадался :) Маловероятно. что послав в дисплей 19 байт 0xFF - вы вдруг зажгли слова "Тара" и "цена" :)

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

Насколько я понимаю. это дисплей от электронных рыночных весов. Если вы знаете, из каких высов он вытащен - можно попробовать поискать информацию по марке весов. а не дисплея

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Вам писали, что с либой ликвидкристалл вы его не сможете использовать. А от зажечь чо-то там - пользы немного.

Если вам накладно разбираться с дисплеем - забудьте про него и делу конец.

sadman41
Онлайн
Зарегистрирован: 19.10.2016

b707 пишет:

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

Я думаю, что слова вообще отлиты целиком и ничего там измениить нет возможности вовсе. Только вкл/выкл.

alexey3
Offline
Зарегистрирован: 25.11.2017

уже знаю "METTLER TOLEDO" но это всё что я о них знаю, по поводу изменения самих надписей Желательно поподробней так как там стоят микросхемы pcf8576ct разве они ещё и прошиваются, программатором например ??? сильно не ругайте запутался я чутка, и ещё ето драйвера дисплея их стоит 3 штуки

alexey3
Offline
Зарегистрирован: 25.11.2017

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

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:

Я думаю, что слова вообще отлиты целиком и ничего там измениить нет возможности вовсе. Только вкл/выкл.

если ты серьезно - я так не думаю. ИМХО, там есть как минимум настройки языка, ибо если делать весы только под один язык - логичнее чтобы это был английский :) А раз есть русский - наверняка это настраивается.

alexey3
Offline
Зарегистрирован: 25.11.2017

Если про него забыть то тогда зачем было вообще покупать ардуину и наборы к ней чтобы не осваивать ???Получается вообще бросить ардуиностроение (((( А хочется освоить

alexey3
Offline
Зарегистрирован: 25.11.2017

b707 пишет:

sadman41 пишет:

Я думаю, что слова вообще отлиты целиком и ничего там измениить нет возможности вовсе. Только вкл/выкл.

если ты серьезно - я так не думаю. ИМХО, там есть как минимум настройки языка, ибо если делать весы только под один язык - логичнее чтобы это был английский :) А раз есть русский - наверняка это настраивается.

И вот тут интересно как настраивается? если я их зажёг хаотичным сигналом

sadman41
Онлайн
Зарегистрирован: 19.10.2016

b707 пишет:

если ты серьезно - я так не думаю. ИМХО, там есть как минимум настройки языка, ибо если делать весы только под один язык - логичнее чтобы это был английский :) А раз есть русский - наверняка это настраивается.

Вполне серьёзно. Вспомни часы "Электроника" с ЖК-экраном, дисплей любой метеостанции рассмотри. Те, элементы, вид которых которые менять не надо - все отлиты внутри одним блоком. 

На этом дисплее функционально требуется только замена цифр - вот они отлиты сегментами. Остальное формировать смысла вообще нет, так как это увеличивает стоимость решения. А дисплей нишевый - только для весов.

b707
Offline
Зарегистрирован: 26.05.2017

alexey3 пишет:

И вот тут интересно как настраивается? если я их зажёг хаотичным сигналом

хаотичный сигнал тут не при чем. У вас там в коде перед посылкой "вашего сигнала" отсылается команда из трех байт - вероятно она просто включает дисплей. А надписи на нем показываеются всегда. чтобы они зажглись - никаких отдельных команд не нужно.

Вам надо тщательно изучить тот источник, откуда вы взяли этот скетч. Буквально каждую букву... может там есть указания, откуда люди взяли эту комбинацию байт?

sadman41
Онлайн
Зарегистрирован: 19.10.2016

alexey3 пишет:

Получается вообще бросить ардуиностроение (((( А хочется освоить

Можно бросить этот дисплей. Взять 1602. Лет через пять с прокачанным скиллом вернуться к дисплею от весов.

В конце-концов это вы хотите оседлать ардуину и дисплей, а заставляете всех нас.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

А Клапа все Хрустальные Шары перебил. 

alexey3
Offline
Зарегистрирован: 25.11.2017

вот скетчь который щас вписан горит часть только и извините не пойму какой строкой отправляется 3 байта?

#define I2C_ADDR 0x39
#define I2C_SEND_BUFFER_SIZE 17//17 кОЛИЧЕСТВО СИМВОЛОВ 

#include <Wire.h>

void setup() {
delay(5000);
//Serial.begin(115200);//
  Wire.begin();

  initLCD();
/*
  Wire.beginTransmission(I2C_ADDR);
  uint8_t dataArray3[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 0, 0, 0, 0, 0, 169, 99, 1, 20, 96, 161, 0, 0, 0 }; 
//  uint8_t dataArray3[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0 }; 
  Wire.write(dataArray3, I2C_SEND_BUFFER_SIZE);
  Wire.endTransmission();
*/
  unsigned char data[19];//19 было 14
  data[0] = 0xFF;//00 
  data[1] = 0xFF;//00
  data[2] = 0xFF;//00
  data[3] = 0xFF;//00 
  data[4] = 0xFF;//00
  data[5] = 0xFF;//A9
  data[6] = 0xFF;//63 
  data[7] = 0xFF;//01
  data[8] = 0xFF;//14
  data[9] = 0xFF;//60 
  data[10] = 0xFF;//A1
  data[11] = 0xFF;//00
  data[12] = 0xFF;//00 
  data[13] = 0xFF;//00
  data[14] = 0xFF;//00
  data[15] = 0xFF;//00
  data[16] = 0xFF;//00
  data[17] = 0xFF;//00
  data[18] = 0xFF;//00
  sendDataToLCD(data);  
/*
  Wire.beginTransmission(I2C_ADDR);
  uint8_t dataArray4[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 2, 0, 0, 0, 21, 108, 224, 98, 12, 20, 96, 0, 0, 0 };
  //uint8_t dataArray4[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  Wire.write(dataArray4, I2C_SEND_BUFFER_SIZE);
  Wire.endTransmission();
*/  

  unsigned char data2[19];// Позиции на дисплее
  data2[0] = 0xFF;//01 
  data2[1] = 0xFF;//00
  data2[2] = 0xFF;//00
  data2[3] = 0xFF;//00 
  data2[4] = 0xFF;//15
  data2[5] = 0xFF;//6C
  data2[6] = 0xFF;//E0 
  data2[7] = 0xFF;//62
  data2[8] = 0xFF;//0C
  data2[9] = 0xFF;//14 
  data2[10] = 0xFF;//60
  data2[11] = 0xFF;//00 зажигает zero со значением 01,net 02
  data2[12] = 0xFF;//00 
  data2[13] = 0xFF;//00
  data2[14] = 0xFF;//00
  data2[15] = 0x01;//00
  data2[16] = 0x01;//00
  data2[17] = 0x01;//00
  sendDataToLCD(data2);  
}

void loop() { 
}

void sendDataToLCD(unsigned char *data) {
  unsigned char buffer[I2C_SEND_BUFFER_SIZE];
  byte i = 0;

  buffer[0] = 0xE0;
  buffer[1] = 0xCB;
  buffer[2] = 0xF0;
  
  for (i = 3; i < I2C_SEND_BUFFER_SIZE; i ++) {
     buffer[i] = data[i - 3]; 
  }  
  
  Wire.beginTransmission(I2C_ADDR);
  Wire.write(buffer, I2C_SEND_BUFFER_SIZE);
  Wire.endTransmission();
}

void initLCD() {
    /* init
   E0CBF000000000000000 
   E0CBF020000000000000 
   E0CBF000000000000000 
   E0CBF020000000000000  
   */
  
  /*
  Wire.beginTransmission(I2C_ADDR);
  uint8_t dataArray[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; 
  Wire.write(dataArray, I2C_SEND_BUFFER_SIZE);
  Serial.print(Wire.endTransmission()); 

  Wire.beginTransmission(I2C_ADDR);
  uint8_t dataArray2[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; 
  Wire.write(dataArray2, I2C_SEND_BUFFER_SIZE);
  Serial.print(Wire.endTransmission()); 
*/
   
  unsigned char data[19];// 19 было 14
  byte i = 0;

  for (i = 0; i <= 22; i++) {//19 было 14
    data[i] = 0xFF; 
  }  

  sendDataToLCD(data); 
  
  data[0] = 0x1024;

  sendDataToLCD(data); 
}

 

b707
Offline
Зарегистрирован: 26.05.2017

alexey3 пишет:

Если про него забыть то тогда зачем было вообще покупать ардуину и наборы к ней чтобы не осваивать ???П

ИМХО, "осваивать ардуину" - это не только прикрутить к ней найденный на помойке дисплей. Вам и без дисплея явно есть осваивать, прокачайте для начала навыки программирования, чтобы не писать такой жути, как сейчас в вашем коде :)

alexey3
Offline
Зарегистрирован: 25.11.2017

#define I2C_SEND_BUFFER_SIZE 18//17 кОЛИЧЕСТВО СИМВОЛОВ

Подскажите откуда ета строка берёт данные в том скетче что я дал ?

 

из етого цикла ?

  for (i = 3; i < I2C_SEND_BUFFER_SIZE; i ++) {
     buffer[i] = data[i - 3];

 

b707
Offline
Зарегистрирован: 26.05.2017

alexey3 пишет:

вот скетчь который щас вписан горит часть только и извините не пойму какой строкой отправляется 3 байта?

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

Вы понимаете, что выход за границу массива - это верный путь к глюкам и зависанию программы? Какой нафик дисплей, если у вас код из одних ошибок?

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

b707
Offline
Зарегистрирован: 26.05.2017

alexey3 пишет:

#define I2C_SEND_BUFFER_SIZE 18//17 кОЛИЧЕСТВО СИМВОЛОВ

 

эта строка ниоткуда никаких данных не берет. Это настройка размера буфера, не более.

alexey3
Offline
Зарегистрирован: 25.11.2017

Для чего нужен размер буфера ? Или ето тоже самое как в семисегментниках количество разово отправляемых бит ?

b707
Offline
Зарегистрирован: 26.05.2017

alexey3 пишет:

размер буфера  = количество разово отправляемых бит

каких еще БИТ?  - БАЙТ!

alexey3
Offline
Зарегистрирован: 25.11.2017

и вот тут начинается 1 байт 8 бит в семисегментниках со сдвиговым регистром использовались биты )))

b707
Offline
Зарегистрирован: 26.05.2017

alexey3 пишет:

и вот тут начинается 1 байт 8 бит в семисегментниках со сдвиговым регистром использовались биты )))

у вас в комментарии - "количество символов", а не "количество сегментов"

alexey3
Offline
Зарегистрирован: 25.11.2017

Это я для себя примерно помечал так как прибавив 1 у меня прибавился 1 знак (а не сегмент) в нижней строке

alexey3
Offline
Зарегистрирован: 25.11.2017

и вы не сказали какая строка записывает 3 байта ?

mixail844
Offline
Зарегистрирован: 30.04.2012

оффтоп : почитав ветку , она напоминает одну из вариаций Теста Тьюринга : есть alexey3 - который не знает "языка" но может описать что видит и делает.Есть сообщество , которое наводящими вопросами пытаеться силами alexey3 запустить дисплей. И вот нужно заключить alexey3 робот с хорошим ИИ или человек ? :D

b707
Offline
Зарегистрирован: 26.05.2017

alexey3 пишет:

и вы не сказали какая строка записывает 3 байта ?

что так и не осилили сами найти? - строки 77-79

b707
Offline
Зарегистрирован: 26.05.2017

mixail844 пишет:

alexey3 - робот с хорошим ИИ или человек ? :D

я как-то не смотрел на ситуацию с этой точки зрения :) Действительно, может я зря наезжаю - для робота у него отличный уровень :)

alexey3
Offline
Зарегистрирован: 25.11.2017

изменив их на нули я получил другое изображение

alexey3
Offline
Зарегистрирован: 25.11.2017

Автобот тогдауж

mixail844
Offline
Зарегистрирован: 30.04.2012

давайте работать более методично ,для начала предлагаю начальный код : 

#define I2C_ADDR 0x39
#define I2C_SEND_BUFFER_SIZE 17//17 кОЛИЧЕСТВО СИМВОЛОВ 

#include <Wire.h>

void setup() {
//Serial.begin(115200);//
  Wire.begin();
  initLCD();
}

void loop() { 
}

void initLCD() {
    /* init
   E0CBF000000000000000 
   E0CBF020000000000000 
   E0CBF000000000000000 
   E0CBF020000000000000  
   */
  
 
  Wire.beginTransmission(I2C_ADDR);
  uint8_t dataArray[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; 
  Wire.write(dataArray, I2C_SEND_BUFFER_SIZE);
  Wire.endTransmission(); 

  Wire.beginTransmission(I2C_ADDR);
  uint8_t dataArray2[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; 
  Wire.write(dataArray2, I2C_SEND_BUFFER_SIZE);
  Wire.endTransmission();
}

что выводиться на дисплее в данном случае ? 

alexey3
Offline
Зарегистрирован: 25.11.2017

Вот что выводится

Прошил ещё раз КГ исчезло и больше не появляется

sadman41
Онлайн
Зарегистрирован: 19.10.2016
Так пооптимальней:
uint8_t dataArray2[] = { 0xE0, 0xCB, 0xF0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };
Wire.write(dataArray2, sizeof(dataArray2));

 

 

alexey3
Offline
Зарегистрирован: 25.11.2017

Поясните что убрать? куда вписать ваши строки ? Вместо 30-31 строк ?

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Никуда. Это Михаилу облегчение работы, а не вам.

alexey3
Offline
Зарегистрирован: 25.11.2017

Понял не мешаю

mixail844
Offline
Зарегистрирован: 30.04.2012

прежде чем пытаться вывести что то полезное,предлагаю осмыслить "тарабарщину" : 0xE0 , 0xCB,0xF0 , [0x20 | 0x00] 

что выводиться вот так :

#define I2C_ADDR 0x39
#define I2C_SEND_BUFFER_SIZE 17//17 кОЛИЧЕСТВО СИМВОЛОВ 

#include <Wire.h>

void setup() {
//Serial.begin(115200);//
  Wire.begin();

  initLCD();
}

void loop() { 
}

void initLCD() {
    /* init
   E0CBF000000000000000 
   E0CBF020000000000000 
   E0CBF000000000000000 
   E0CBF020000000000000  
// поскольку выше  данные строчки написаны 2 раза ,то инициализационная последовательность тоже должна вызываться 2 раза ?
   */
  
  Wire.beginTransmission(I2C_ADDR);
  uint8_t dataArray[] = { 0xE0, 0xCB, 0xF0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };  // сократил до 10 , так как выше 10 пар.
  Wire.write(dataArray, sizeof(dataArray));
  Wire.endTransmission(); 

  Wire.beginTransmission(I2C_ADDR);
  uint8_t dataArray2[] = { 0xE0, 0xCB, 0xF0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; 
  Wire.write(dataArray2, sizeof(dataArray2));
  Wire.endTransmission();

// здесь спецом пауза - посмотреть будет ли разница после первого цикла инизиализации и после вотрого, так как количество байт инициализации изменилось до 10
delay(1500);

  Wire.beginTransmission(I2C_ADDR);
  Wire.write(dataArray, sizeof(dataArray));
  Wire.endTransmission(); 

  Wire.beginTransmission(I2C_ADDR);
  Wire.write(dataArray2, sizeof(dataArray2));
  Wire.endTransmission();
 
}

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

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

DetSimen пишет:

А Клапа все Хрустальные Шары перебил. 

Наверняка, после дегустации Вашего среццтва?

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Ахренеть, чё творицца :)