Помогите запустить LCD

revlerik
Offline
Зарегистрирован: 26.12.2015

Подарили мне дисплейчик,информации по нем никакой не нашел,даже не знаю графический он или символьный,на плате три микрухи PCF8576CT управляются по I2C шине.

В наличии ардуино UNO.

Я начинающий юзер ардуино,прошу помощи в запуске этого дисплейчика:

 

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

ну как получилось запустить ?

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

Это metler toledo дисплей от весов

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

я его запустил

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

alexey3 пишет:

я его запустил

"запустил" - в смысле три непонятных символа вывели? Или все-таки справились?

Тогда напишите отчет здесь или в Проектах. чтобы другим после вас было проще.

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

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

и вот скетчь

#define I2C_ADDR 0x39
#define I2C_SEND_BUFFER_SIZE 31//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

Алексей, простите... но не верю. Код, который вы выложили - полный бред. Он даже компилироваться не должен.

Вы посылаете на дисплей три массива, забитых  0xFF - причем все три неверного размера - и получаете красивую картинку?

Не говоря уж о том, что в функции Init вы вылезаете в неразмеченную память.

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

А фото я зачем приложил могу нули везде поставить и 1 еденицу наугад будет гореть 1 сегмент

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

alexey3 пишет:

А фото я зачем приложил могу нули везде поставить и 1 еденицу наугад будет гореть 1 сегмент

хм... ну давайте по порядку

начем с начала - процедуры InitLCD

1. в строке 110 вы обьявляете массив char data[19] длиной 19 байт

2. В строках 113-115 вы присваете массиву 23 значения 0xFF - а массив то длиной 19!

3. В строке 117 вы вызываете процедуру sendDataToLCD и передаете ей 19 байт из присвоенных 23х. В процедуре добавляете к массиву еще три байта спереди и отправляете полученные 22 байта уже как буфер длиной 31 байт, причем недостающие 8 байт читаете из неразмеченной памяти позади массива

4. далее в строке 119 вы присваиваете нулевому элементу массива data (размерность элемента - char) значение 0x1024. которое явно в этой размерности не поместится

 

И это я только десяток строчек разобрал.

Вы утверждаете, что это работает? :)))

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

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

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

alexey3 пишет:

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

давайте проверим.

Зажгите в первых трех знакоместах каждой строки "707" ?

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

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

И мне бы ещё понять какого типа ето дисплей и как ссчитать знакоместо ))))

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

может это состояние (хаотичное) после подачи питания ?

процедура сброса/инициализации должна быть.

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

ЭЭЭхххх нету Евгения Петровича , он бы махом мне обьяснил как ето работает