Помогите запустить LCD
- Войдите на сайт для отправки комментариев
Ср, 10/02/2016 - 01:01
Подарили мне дисплейчик,информации по нем никакой не нашел,даже не знаю графический он или символьный,на плате три микрухи PCF8576CT управляются по I2C шине.
В наличии ардуино UNO.
Я начинающий юзер ардуино,прошу помощи в запуске этого дисплейчика:
![]()
![]()
ну как получилось запустить ?
Это metler toledo дисплей от весов
я его запустил
я его запустил
"запустил" - в смысле три непонятных символа вывели? Или все-таки справились?
Тогда напишите отчет здесь или в Проектах. чтобы другим после вас было проще.
докладываю запустил с выводом изо но не всего не пойму почему фото и скетчь прилагаю
и вот скетчь
#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); }Алексей, простите... но не верю. Код, который вы выложили - полный бред. Он даже компилироваться не должен.
Вы посылаете на дисплей три массива, забитых 0xFF - причем все три неверного размера - и получаете красивую картинку?
Не говоря уж о том, что в функции Init вы вылезаете в неразмеченную память.
А фото я зачем приложил могу нули везде поставить и 1 еденицу наугад будет гореть 1 сегмент
А фото я зачем приложил могу нули везде поставить и 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. которое явно в этой размерности не поместится
И это я только десяток строчек разобрал.
Вы утверждаете, что это работает? :)))
я забивал значениями 255 всё что мог для того чтобы зажечь все сегменты, про длинну понятно я тут намудрил, но я хотябы зажёг сегменты мне тут писали что я вообще не смогу его зажечь
я забивал значениями 255 всё что мог для того чтобы зажечь все сегменты, про длинну понятно я тут намудрил, но я хотябы зажёг сегменты мне тут писали что я вообще не смогу его зажечь
давайте проверим.
Зажгите в первых трех знакоместах каждой строки "707" ?
проверить не можем так как я не разобрался какие значения за что отвечают но изменить общее изображение могу , методом тыка так сказать
И мне бы ещё понять какого типа ето дисплей и как ссчитать знакоместо ))))
может это состояние (хаотичное) после подачи питания ?
процедура сброса/инициализации должна быть.
ЭЭЭхххх нету Евгения Петровича , он бы махом мне обьяснил как ето работает