Arduino UNO + Ericsson t28 LCD
- Войдите на сайт для отправки комментариев
Ср, 12/02/2014 - 22:22
Собственно захотелось мне подключить к своей ардуине LCD дисплей, при этом не напрягаясь финансово. Порывшись в шкафу мной был обнаружен старый мобильник ericsson T28(Ну - по большей части :-) - половина частей отсутствует) с которого я и могу свинтить дисплей. Порывшись в сети нашел и вот это:
http://www.module.ro/a1018.html
Вопрос состоит в том, можно ли вообще этот дисплей подцепить к моей ардуине и если да, то поможет ли мне в этом то что я в сети нашел?
Самое ценное по той ссылке, что вы привели - название контроллера, который используется в дисплее: PCF8558
Гуглите дальше по этому названию и, например, "arduino"
P.S. судя по всему - неплохой дисплей (если заведется)
Итак, найден datasheet для этого контроллера
http://www.ddrservice.info/files/Integrated-circuits/P/pcf/pcf8558.pdf
Вероятно теперь требуется писать библиотеку?
Точно.
Это i2c-устройство (т.е. подключается на SDA/SCL).. посмотрите еще как он относится к 5В уровням (если ему "однофигифственно" - то отлично, если хочет 3В-уровни - нужно будет согласователь уровней городить).. ну и разобраться, как этим дисплеем управлять.
С точки зрения подключения к ардуино - очень неплохо (занимаем всего 2 пина).
Если свежо в памяти - нет ли в сети примеров подключения i2c дисплеев к ардуино?
1602 по i2c подключается например
по даташиту офигенный дисплей. 5 строк 101 колонка шириной в пиксель
нормлаьно к 5В относится
выводить конечно проще по строкам. меньше заморочек будет
адреса i2c 7 бит 0111100 и 0111101
для управления вам нужна 9 и 10 страница
общий вид посылки
комманда формируется так
тут задается режим работы дисплея, адрес строки Y
по X отправляется число о 0 до 100, что соотвествует нужному столбцу. незнаю не вчитывался будет ли здесь перенос на следующую строку если строка заполнилась. думаю да
пробуйте
Добрался и я к этому дисплею. Разобрал A1018, привлекло что используется всего 2 пина ардуины, нормально работает от 3 и 5 вольт.
Подключение к ардуино нано и про мини: A4 - Data, A5 - SCL, +5V - pin1 и pin2, GND - pin4
Data и Sclk обязательно к А4 и А5, их использует библиотека Wire.h
Просканировал шину I2C кодом:
#include <Wire.h> void setup(){ Wire.begin(); Serial.begin(9600); while (!Serial); Serial.println("\nI2C Scanner"); } void loop(){ byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 8; address < 127; address++ ){ Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0){ Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); }Дисплей ответил что висит на адресе 0x38.
Загрузил проверочный код (взят на сайте arduino.cc):
#include <Wire.h> #define addr 0x38 void setup(){ Wire.begin(); Serial.begin(9600); clean(); } void clean(){ byte x; for(x = 0; x < 101;x++ ){ // реально по х 0-127 пикс Wire.beginTransmission(addr); Wire.write(B10010001); //delete center line Wire.write(x); Wire.write(0x00); Wire.endTransmission(); Wire.beginTransmission(addr); Wire.write(B00010001); //delete upper rows Wire.write(x); Wire.write(0x00); Wire.endTransmission(); Wire.beginTransmission(addr); Wire.write(B00110001); //delete lower rows Wire.write(x); Wire.write(0x00); Wire.endTransmission(); } } void LCD(int line,int x){ Wire.beginTransmission(addr); Wire.write((line<< 5)+B00010001); Wire.write(x); //x offset Wire.write(0x1f); //I //здесь вывели прямоугольник 3х5 Wire.write(0x1f); //I Wire.write(0x1f); //I Wire.write(0x00); Wire.write(0x1f); //P Wire.write(0x05); Wire.write(0x07); Wire.write(0x00); Wire.write(0x1f); //H Wire.write(0x04); Wire.write(0x1f); Wire.write(0x00); Wire.write(0x1f); //I Wire.write(0x00); Wire.write(0x1f); //L Wire.write(0x10); Wire.write(0x10);// Wire.write(0x10); Wire.write(0x10); Wire.write(0x10); Wire.write(0x00); Wire.write(0x1f); //I Wire.write(0x00); Wire.write(0x1f); //P Wire.write(0x05); Wire.write(0x07); Wire.write(0x00); Wire.write(0x12); //S Wire.write(0x15); Wire.write(0x09); Wire.write(0x00); Wire.endTransmission(); } void loop(){ int line=1,x=35; clean(); LCD(line,x); delay(5000); }Код рабочий, но выводит дублированную строку, то есть как бы при разрешении 101х40 имеем 4 строки, при выводе в первую строку она дублируется в третьей. У рифера http://rifer.narod.ru/i2cldc.html разрешение 101х33 почему то.
Нашел еще в сети два проекта, код одного из них для дисплея Ericsson T28 LCD не заводится:
#include "Wire.h" //#include "C:\ARDUINO\soft\libraries\Systemfont5x7.h" //viewable 101x25 // I2C: 0x70h 0x71h 3C 3D A1018 T20 T28 T29 Lcd chip: based on PCF8558 // I2c: 0x78h (only write mode) T10 T18 Lcd chip: OM 4086U/2/2 // I2C: 0x72 0x74 0x70 (3 chip version) T68 101x80 RGB Lcd chip: HD66760 (device address 0x72 )/ UC1682 #define LCD_T28_ADR 0x38 // мой А1018 отзывается #define BLANK_MODE B00000000 #define NORMAL_MODE B00000001 // B00001001 #define POWER_DOWN_MODE B00000010 #define ALL_ON_MODE B00000100 #define HALF_CONTRAST_MODE B00001000 #define HALF_MIRROR_MODE B00010000 #define I2C_BUFFER 30 static const uint8_t System5x7[]/* PROGMEM*/ = { 0x00, 0x00, 0x00, 0x00, 0x00,// (space) 0x00, 0x00, 0x5F, 0x00, 0x00,// ! 0x00, 0x07, 0x00, 0x07, 0x00,// " 0x14, 0x7F, 0x14, 0x7F, 0x14,// # 0x24, 0x2A, 0x7F, 0x2A, 0x12,// $ 0x23, 0x13, 0x08, 0x64, 0x62,// % 0x36, 0x49, 0x55, 0x22, 0x50,// & 0x00, 0x05, 0x03, 0x00, 0x00,// ' 0x00, 0x1C, 0x22, 0x41, 0x00,// ( 0x00, 0x41, 0x22, 0x1C, 0x00,// ) 0x08, 0x2A, 0x1C, 0x2A, 0x08,// * 0x08, 0x08, 0x3E, 0x08, 0x08,// + 0x00, 0x50, 0x30, 0x00, 0x00,// , 0x08, 0x08, 0x08, 0x08, 0x08,// - 0x00, 0x60, 0x60, 0x00, 0x00,// . 0x20, 0x10, 0x08, 0x04, 0x02,// / 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0 0x00, 0x42, 0x7F, 0x40, 0x00,// 1 0x42, 0x61, 0x51, 0x49, 0x46,// 2 0x21, 0x41, 0x45, 0x4B, 0x31,// 3 0x18, 0x14, 0x12, 0x7F, 0x10,// 4 0x27, 0x45, 0x45, 0x45, 0x39,// 5 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6 0x01, 0x71, 0x09, 0x05, 0x03,// 7 0x36, 0x49, 0x49, 0x49, 0x36,// 8 0x06, 0x49, 0x49, 0x29, 0x1E,// 9 0x00, 0x36, 0x36, 0x00, 0x00,// : 0x00, 0x56, 0x36, 0x00, 0x00,// ; 0x00, 0x08, 0x14, 0x22, 0x41,// < 0x14, 0x14, 0x14, 0x14, 0x14,// = 0x41, 0x22, 0x14, 0x08, 0x00,// > 0x02, 0x01, 0x51, 0x09, 0x06,// ? 0x32, 0x49, 0x79, 0x41, 0x3E,// @ 0x7E, 0x11, 0x11, 0x11, 0x7E,// A 0x7F, 0x49, 0x49, 0x49, 0x36,// B 0x3E, 0x41, 0x41, 0x41, 0x22,// C 0x7F, 0x41, 0x41, 0x22, 0x1C,// D 0x7F, 0x49, 0x49, 0x49, 0x41,// E 0x7F, 0x09, 0x09, 0x01, 0x01,// F 0x3E, 0x41, 0x41, 0x51, 0x32,// G 0x7F, 0x08, 0x08, 0x08, 0x7F,// H 0x00, 0x41, 0x7F, 0x41, 0x00,// I 0x20, 0x40, 0x41, 0x3F, 0x01,// J 0x7F, 0x08, 0x14, 0x22, 0x41,// K 0x7F, 0x40, 0x40, 0x40, 0x40,// L 0x7F, 0x02, 0x04, 0x02, 0x7F,// M 0x7F, 0x04, 0x08, 0x10, 0x7F,// N 0x3E, 0x41, 0x41, 0x41, 0x3E,// O 0x7F, 0x09, 0x09, 0x09, 0x06,// P 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q 0x7F, 0x09, 0x19, 0x29, 0x46,// R 0x46, 0x49, 0x49, 0x49, 0x31,// S 0x01, 0x01, 0x7F, 0x01, 0x01,// T 0x3F, 0x40, 0x40, 0x40, 0x3F,// U 0x1F, 0x20, 0x40, 0x20, 0x1F,// V 0x7F, 0x20, 0x18, 0x20, 0x7F,// W 0x63, 0x14, 0x08, 0x14, 0x63,// X 0x03, 0x04, 0x78, 0x04, 0x03,// Y 0x61, 0x51, 0x49, 0x45, 0x43,// Z 0x00, 0x00, 0x7F, 0x41, 0x41,// [ 0x02, 0x04, 0x08, 0x10, 0x20,// "\" 0x41, 0x41, 0x7F, 0x00, 0x00,// ] 0x04, 0x02, 0x01, 0x02, 0x04,// ^ 0x40, 0x40, 0x40, 0x40, 0x40,// _ 0x00, 0x01, 0x02, 0x04, 0x00,// ` 0x20, 0x54, 0x54, 0x54, 0x78,// a 0x7F, 0x48, 0x44, 0x44, 0x38,// b 0x38, 0x44, 0x44, 0x44, 0x20,// c 0x38, 0x44, 0x44, 0x48, 0x7F,// d 0x38, 0x54, 0x54, 0x54, 0x18,// e 0x08, 0x7E, 0x09, 0x01, 0x02,// f 0x08, 0x14, 0x54, 0x54, 0x3C,// g 0x7F, 0x08, 0x04, 0x04, 0x78,// h 0x00, 0x44, 0x7D, 0x40, 0x00,// i 0x20, 0x40, 0x44, 0x3D, 0x00,// j 0x00, 0x7F, 0x10, 0x28, 0x44,// k 0x00, 0x41, 0x7F, 0x40, 0x00,// l 0x7C, 0x04, 0x18, 0x04, 0x78,// m 0x7C, 0x08, 0x04, 0x04, 0x78,// n 0x38, 0x44, 0x44, 0x44, 0x38,// o 0x7C, 0x14, 0x14, 0x14, 0x08,// p 0x08, 0x14, 0x14, 0x18, 0x7C,// q 0x7C, 0x08, 0x04, 0x04, 0x08,// r 0x48, 0x54, 0x54, 0x54, 0x20,// s 0x04, 0x3F, 0x44, 0x40, 0x20,// t 0x3C, 0x40, 0x40, 0x20, 0x7C,// u 0x1C, 0x20, 0x40, 0x20, 0x1C,// v 0x3C, 0x40, 0x30, 0x40, 0x3C,// w 0x44, 0x28, 0x10, 0x28, 0x44,// x 0x0C, 0x50, 0x50, 0x50, 0x3C,// y 0x44, 0x64, 0x54, 0x4C, 0x44,// z 0x00, 0x08, 0x36, 0x41, 0x00,// { 0x00, 0x00, 0x7F, 0x00, 0x00,// | 0x00, 0x41, 0x36, 0x08, 0x00,// } 0x08, 0x08, 0x2A, 0x1C, 0x08,// -> 0x08, 0x1C, 0x2A, 0x08, 0x08 // <- }; void setup() { Wire.begin(); Serial.begin(9600); } //fill 30bytes with b after that incr doesnt work, wire.h hs 32 data buf void fill30(byte x, byte y, byte b) { int i; Wire.beginTransmission(LCD_T28_ADR); Wire.write( y<<5|NORMAL_MODE ); Wire.write(x); for(i=0; i<I2C_BUFFER; i++) Wire.write(b); Wire.endTransmission(); } void cls() { int x,y; for(y=0; y<5; y++) for(x=0; x<=101; x+=I2C_BUFFER) fill30(x,y,0x0); } void CharOut(int x, int y, byte c) { // font starts from 32 int i=0; Wire.beginTransmission(LCD_T28_ADR); Wire.write( y<<5|NORMAL_MODE ); Wire.write(x); for(i=0; i<5; i++) { uint8_t b= System5x7[(c-32)*5+i]; Wire.write( b ); } Wire.endTransmission(); } void TextOut(int x, int y, const char* str) { int i; for(i=0; str[i]; i++) CharOut(x+i*5, y, (byte)str[i]); } unsigned long timeb, frame_time; unsigned long timea; void loop() { char buf[16]; timeb= millis(); cls(); TextOut(0,0," Hello World"); TextOut(0,1," Ericsson T28 LCD"); int fps= 1000.0 / (float)( millis() - timeb ); sprintf(buf, "fps=%i",fps); TextOut(0,3,buf); delay(5000); }Все собранные материалы в архиве на гуглодиске https://drive.google.com/file/d/1CdaPEWXl85z59nVL4gbhvoacqZtrnsDF/view?usp=sharing
Там же в папке T-A1018 проект ШИМ-управления обдувом процессора материнки на Attiny45, датчике LM35 и выводом инфы на дисплей A1018 от эриксона. Код не на вайринге а на си
Помогите корректно запустить дисплей и сделать вменяемую библиотеку для него
По даташиту http://rifer.narod.ru/i2c/PCF8558.pdf 5 строк высотой 8 бит и порядок битов в control byte другой !!!
По даташиту http://rifer.narod.ru/i2c/PCF8558.pdf 5 строк высотой 8 бит и порядок битов в control byte другой !!!
Все правильно, мой контроллер откликается сканеру на шину I2C по адресу #define addr 0x38 поэтому и порядок битов другой. Но в даташите на PCF8558 на 9-й странице первый абзац говорит что в дисплее по идее два контроллера, либо один но ведущий себя как два - в зависимости от бита SA0 в контролбайте.
Ведь в телефоне этот же дисплей дает 40х101 адресацию а не 2 штуки 20х101 с дублированием
Насколько я понял - можно использовать два контроллера на одной шине и сделать дисплей двойного размера 40х202 или 80х101.
И ещё - Wire.write((line<< 5)+B00010001) Вы путаете + и OR !
Плюс по Вашей картинке normal mode это YYY01001, а не YYY10001 как выходит у вас в коде !
Попробуйте так - Wire.write((line<< 5)|B00001001) и вот так - Wire.write((line<< 5)|B00000001)
Вы можете проверить варианты что я написал ? У меня нет такого дисплей и проверить можете только Вы !
Да , буду пробовать, часа через два, сейчас надо уехать. Спасибо что откликнулся.
Жду результатов ... Про два чипа Вы явно заблуждаетесь !
Вы можете проверить варианты что я написал ? У меня нет такого дисплей и проверить можете только Вы !
Ездил, зарплату выдавали, более того три дня отпуска по 27-е и уже билеты оплачены.
Приеду, будем разбирать задачу.
И ещё - Wire.write((line<< 5)+B00010001) Вы путаете + и OR !
Плюс по Вашей картинке normal mode это YYY01001, а не YYY10001 как выходит у вас в коде !
Попробуйте так - Wire.write((line<< 5)|B00001001) и вот так - Wire.write((line<< 5)|B00000001)
Попробовал. Оба варианта с ИЛИ ничего не выводят на дисплей
Этот код взят отсюда: https://forum.arduino.cc/index.php?topic=375764.0
И там в самом низу страницы кто-то вытащил дисплей из Т28 подключил и выложил код. Он тоже не работает
Победил.
Рабочий код:
#include "Wire.h" // I2C: 0x70h 0x71h 3C 3D A1018 T20 T28 T29 Lcd chip: based on PCF8558 // I2c: 0x78h (only write mode) T10 T18 Lcd chip: OM 4086U/2/2 // I2C: 0x72 0x74 0x70 (3 chip version) T68 101x80 RGB Lcd chip: HD66760 (device address 0x72 )/ UC1682 #define LCD_ADR 0x38 // мой А1018 отзывается #define BLANK_MODE B00000000 #define NORMAL_MODE B00000001 #define POWER_DOWN_MODE B00000010 #define ALL_ON_MODE B00000100 #define HALF_CONTRAST_MODE B00001000 #define HALF_MIRROR_MODE B00010000 #define I2C_BUFFER 30 static const uint8_t System5x7[]/* PROGMEM*/ = { 0x00, 0x00, 0x00, 0x00, 0x00,// (space) 0x00, 0x00, 0x5F, 0x00, 0x00,// ! 0x00, 0x07, 0x00, 0x07, 0x00,// " 0x14, 0x7F, 0x14, 0x7F, 0x14,// # 0x24, 0x2A, 0x7F, 0x2A, 0x12,// $ 0x23, 0x13, 0x08, 0x64, 0x62,// % 0x36, 0x49, 0x55, 0x22, 0x50,// & 0x00, 0x05, 0x03, 0x00, 0x00,// ' 0x00, 0x1C, 0x22, 0x41, 0x00,// ( 0x00, 0x41, 0x22, 0x1C, 0x00,// ) 0x08, 0x2A, 0x1C, 0x2A, 0x08,// * 0x08, 0x08, 0x3E, 0x08, 0x08,// + 0x00, 0x50, 0x30, 0x00, 0x00,// , 0x08, 0x08, 0x08, 0x08, 0x08,// - 0x00, 0x60, 0x60, 0x00, 0x00,// . 0x20, 0x10, 0x08, 0x04, 0x02,// / 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0 0x00, 0x42, 0x7F, 0x40, 0x00,// 1 0x42, 0x61, 0x51, 0x49, 0x46,// 2 0x21, 0x41, 0x45, 0x4B, 0x31,// 3 0x18, 0x14, 0x12, 0x7F, 0x10,// 4 0x27, 0x45, 0x45, 0x45, 0x39,// 5 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6 0x01, 0x71, 0x09, 0x05, 0x03,// 7 0x36, 0x49, 0x49, 0x49, 0x36,// 8 0x06, 0x49, 0x49, 0x29, 0x1E,// 9 0x00, 0x36, 0x36, 0x00, 0x00,// : 0x00, 0x56, 0x36, 0x00, 0x00,// ; 0x00, 0x08, 0x14, 0x22, 0x41,// < 0x14, 0x14, 0x14, 0x14, 0x14,// = 0x41, 0x22, 0x14, 0x08, 0x00,// > 0x02, 0x01, 0x51, 0x09, 0x06,// ? 0x32, 0x49, 0x79, 0x41, 0x3E,// @ 0x7E, 0x11, 0x11, 0x11, 0x7E,// A 0x7F, 0x49, 0x49, 0x49, 0x36,// B 0x3E, 0x41, 0x41, 0x41, 0x22,// C 0x7F, 0x41, 0x41, 0x22, 0x1C,// D 0x7F, 0x49, 0x49, 0x49, 0x41,// E 0x7F, 0x09, 0x09, 0x01, 0x01,// F 0x3E, 0x41, 0x41, 0x51, 0x32,// G 0x7F, 0x08, 0x08, 0x08, 0x7F,// H 0x00, 0x41, 0x7F, 0x41, 0x00,// I 0x20, 0x40, 0x41, 0x3F, 0x01,// J 0x7F, 0x08, 0x14, 0x22, 0x41,// K 0x7F, 0x40, 0x40, 0x40, 0x40,// L 0x7F, 0x02, 0x04, 0x02, 0x7F,// M 0x7F, 0x04, 0x08, 0x10, 0x7F,// N 0x3E, 0x41, 0x41, 0x41, 0x3E,// O 0x7F, 0x09, 0x09, 0x09, 0x06,// P 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q 0x7F, 0x09, 0x19, 0x29, 0x46,// R 0x46, 0x49, 0x49, 0x49, 0x31,// S 0x01, 0x01, 0x7F, 0x01, 0x01,// T 0x3F, 0x40, 0x40, 0x40, 0x3F,// U 0x1F, 0x20, 0x40, 0x20, 0x1F,// V 0x7F, 0x20, 0x18, 0x20, 0x7F,// W 0x63, 0x14, 0x08, 0x14, 0x63,// X 0x03, 0x04, 0x78, 0x04, 0x03,// Y 0x61, 0x51, 0x49, 0x45, 0x43,// Z 0x00, 0x00, 0x7F, 0x41, 0x41,// [ 0x02, 0x04, 0x08, 0x10, 0x20,// "\" 0x41, 0x41, 0x7F, 0x00, 0x00,// ] 0x04, 0x02, 0x01, 0x02, 0x04,// ^ 0x40, 0x40, 0x40, 0x40, 0x40,// _ 0x00, 0x01, 0x02, 0x04, 0x00,// ` 0x20, 0x54, 0x54, 0x54, 0x78,// a 0x7F, 0x48, 0x44, 0x44, 0x38,// b 0x38, 0x44, 0x44, 0x44, 0x20,// c 0x38, 0x44, 0x44, 0x48, 0x7F,// d 0x38, 0x54, 0x54, 0x54, 0x18,// e 0x08, 0x7E, 0x09, 0x01, 0x02,// f 0x08, 0x14, 0x54, 0x54, 0x3C,// g 0x7F, 0x08, 0x04, 0x04, 0x78,// h 0x00, 0x44, 0x7D, 0x40, 0x00,// i 0x20, 0x40, 0x44, 0x3D, 0x00,// j 0x00, 0x7F, 0x10, 0x28, 0x44,// k 0x00, 0x41, 0x7F, 0x40, 0x00,// l 0x7C, 0x04, 0x18, 0x04, 0x78,// m 0x7C, 0x08, 0x04, 0x04, 0x78,// n 0x38, 0x44, 0x44, 0x44, 0x38,// o 0x7C, 0x14, 0x14, 0x14, 0x08,// p 0x08, 0x14, 0x14, 0x18, 0x7C,// q 0x7C, 0x08, 0x04, 0x04, 0x08,// r 0x48, 0x54, 0x54, 0x54, 0x20,// s 0x04, 0x3F, 0x44, 0x40, 0x20,// t 0x3C, 0x40, 0x40, 0x20, 0x7C,// u 0x1C, 0x20, 0x40, 0x20, 0x1C,// v 0x3C, 0x40, 0x30, 0x40, 0x3C,// w 0x44, 0x28, 0x10, 0x28, 0x44,// x 0x0C, 0x50, 0x50, 0x50, 0x3C,// y 0x44, 0x64, 0x54, 0x4C, 0x44,// z 0x00, 0x08, 0x36, 0x41, 0x00,// { 0x00, 0x00, 0x7F, 0x00, 0x00,// | 0x00, 0x41, 0x36, 0x08, 0x00,// } 0x08, 0x08, 0x2A, 0x1C, 0x08,// -> 0x08, 0x1C, 0x2A, 0x08, 0x08 // <- }; void setup() { Wire.begin(); Serial.begin(9600); } //fill 30bytes with b after that incr doesnt work, wire.h hs 32 data buf void fill30(byte x, byte y, byte b) { int i; Wire.beginTransmission(LCD_ADR); Wire.write( y<<5|NORMAL_MODE ); Wire.write(x); for(i=0; i<I2C_BUFFER; i++) Wire.write(b); Wire.endTransmission(); } void cls() { int x,y; for(y=0; y<5; y++) for(x=0; x<=101; x+=I2C_BUFFER) fill30(x,y,0x0); } void CharOut(int x, int y, byte c) { // font starts from 32 int i=0; Wire.beginTransmission(LCD_ADR); Wire.write( y<<5|NORMAL_MODE ); Wire.write(x); for(i=0; i<5; i++) { uint8_t b= System5x7[(c-32)*5+i]; Wire.write( b ); } Wire.endTransmission(); } void TextOut(int x, int y, const char* str) { int i; for(i=0; str[i]; i++) CharOut(x+i*5, y, (byte)str[i]); } unsigned long timeb, frame_time; unsigned long timea; void loop() { char buf[16]; timeb= millis(); cls(); TextOut(0,0," Hello arduino.ru"); TextOut(0,2," Ericsson A1018 LCD"); int fps= 1000.0 / (float)( millis() - timeb ); sprintf(buf, "fps=%i",fps); TextOut(0,3,buf); delay(2000); }Из приятного - достаточно большой для вывода информации при тестировании устройств, занимает всего 2 пина контроллера (A4-Data, A5-SCK), контроллер работает с уровнями сигналов и питания хоть 3 хоть 5V, проверено.
Недостатки - требует замены светодиодов подсветки (родные стоят 4 штуки светло-зеленого цвета, смотрится плохо, лучше поменять на белый свет от разбитого дисплея), происходит передергивание изображения при полной очистке дисплея (лучше переписать скетч и переписывать только изменяющиеся фрагменты вывода)
Ну и самый неприятный момент - требует подачи более 5V для регулировки контрастности (5-6.4V). Фото сделано при напряжении 5.25V (бралось прямо с контакта питания mini-USB Arduino-Nano до диода шоттки)
Думаю ветку можно закрывать