ТЕМА: Arduino и дисплеи от сотиков мобильных телефонов

Arduino и дисплеи от сотиков мобильных телефонов 1 год 3 нед. назад #386

  •  аватар
Сподвигнули меня на подборки дисплея разбитый шилд 3,5" для ардуино уно, и интерес запуска почти дармовых дисплеев. // странно, на шилде стабилизатор 3,3v использовался напрямую для подсветки. (тогда уж можно было запитать подсветку через резистор от 5v). Сам дисплей и микросхемы преобразователи уровней питались от 3,3v что шли с ардуины! , тогда по идее нафиг не нужен был стабилизатор на шилде.
На шлейфе ничего не написано, неизвесто название и распиновка. Попрозванивал, примерно прикинул что где может быт, распиновка 37пин - одна из стандартных,. зелёный шилд пришлось закинуть, ибо там через микросхемы согласователи иногда лупят в дисплей 4,5v , как-то не надёжно. Подключал через резисторы 10к, в итоге питание дисплея свыше 4v ибо пересиливается через входа . В итоге пришёл к резистивным делителям 10к-22к, просто и безопасно для дисплея и ардуины.
Подключил к меге , UTFT v2.77 (в v2.79 убрана поддержка ili9320 , в связи с тем что производители шилдов не захотели башлять бабосы за использование UTFT ) . и тупо перебирал все виды дисплеев от 0 до 32 (потом пришлось DB0-DB15 перевернуть, потому как в разных распиновках поразному) , пока экран качественно не запустился на UTFT myGLCD(22,38,39,40,41); ( это CTE28) .
// программа для определения ID контроллера дисплея, подключать все 16бит
// (эт чтоб найти старшие биты , ибо в большинстве случаев именно они используются для 8ми битного режима)
//
// в верхней строчке покажет 16 бит ответа с дисплея , начиная со старшего бита
// в нижней строчке в HEX коде старший и младший байты. (для ILI контроллеров это будет 9325, 9320, 9327,...)
// при угадывании правильного подключения шины данных дисплея должно получиться к примеру:
// 1я строчка: 1001 0011 0010 0101
// 2я строчка: 9 3 2 5 ,т.е. это контроллер ILI9325
// подсветку дисплея через ом~20-30 к +5v, питание дисплея от ардуиновских 3.3v (если надо то занизить стабилитроном
// или стабилизатором до 2.8v - т.к. иногда инициализации дисплеев приводятся для 2.8v - там константы напряжений
// для правильной работы ЖК матрицы)
//
// выводы дисплея желательно подключать через резист. делители к примеру 10к+22к , на крайняк тупо через 10к,
// но тогда на питание диспл. посадить стабилитрон 3,0-3,1v и запитывать через резист. ом~20-30 от +3,3v,
// иначе дисплей запитается через выводы и ~4-5v пересилят ардуиновские +3,3v
//
// выводы подключать стандартно UTFT на arduino mega RS(CD),WR, CS, RST
// Standard Arduino Mega/Due shield : <display model>,38, 39, 40, 41
// CTE TFT LCD/SD Shield for Arduino Mega : <display model>,38, 39, 40, 41
//
//выводы ардуино меги 22-29 к предполагаемым выводам дисплея DB8-DB15
//выводы ардуино меги 30-37 к предполагаемым выводам дисплея DB8-DB0
// и дополнительно, для получения ответа от дисплея, необходимо
// к выв. ардуино меги 42 подключить вывод RD дисплея. (по умолчанию на шилдах он кинут на +3.3v)
// Дисплей 1602, выводы VSS, VDD, RS, E, D4, D5, D6, D7
// к выводам ардуино меги GND, +5v, 13, 12, 11, 10, 9, 8
// помним на дисплее поставить резистор 3,3к между VO и VSS(+) , RW замкнуть на VSS(+), подключить A и K к VSS(+) и VDD
#include <LiquidCrystal.h>

#define CD_Pin 38 // (RS)
#define WR_Pin 39
#define CS_Pin 40
#define RST_Pin 41
#define RD_Pin 42

LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
int i;
byte byteH;
byte byteL;
void setup()
{
lcd.begin(16, 2);

digitalWrite(CS_Pin, 1); // деактивация диспл. (отключение его шины данных DB0..DB15)
digitalWrite(RST_Pin, 0); // сброс дисплея
//for (i=22; i<=42;i++) { digitalWrite(i, 0); } // всё лог.0
for (i=22; i<=42;i++) { pinMode(i, OUTPUT); } // конфиг всех пинов на выход + управляющие пины
digitalWrite(RST_Pin, 1); // вывод дисплея из сброса

// запишем команду
digitalWrite(RD_Pin, 1); // уст. порта дисплея на приём (ввод данных в дисплей)
digitalWrite(CD_Pin, 0); // будем работать 0-команда 1-данные
digitalWrite(CS_Pin, 0); // выбор дисплея (активация)
PORTA=0x00; PORTC=0x00; // это команда для считывания ID дисплея =0x00
digitalWrite(WR_Pin, 1); // дёргаем WR
digitalWrite(WR_Pin, 0);
digitalWrite(CS_Pin, 1); // деактивация диспл. (отключение его шины данных DB0..DB15)

//чтение данных
DDRA=0x00; DDRC=0x00; // или for (i=22; i<=37;i++) { pinMode(i, INPUT); } // конфиг всех пинов на вход
digitalWrite(RD_Pin, 0); // уст. порта дисплея на передачу (вывод данных с дисплея)
digitalWrite(CD_Pin, 1); // будем работать с 0-команда 1-данные
digitalWrite(CS_Pin, 0); // выбор дисплея (активация )
digitalWrite(WR_Pin, 1); // дёргаем WR
digitalWrite(WR_Pin, 0);

lcd.setCursor(0, 0);
byteH=0;
if ( digitalRead(29) ) { byteH=byteH+128; lcd.print(1); } else lcd.print(0);
if ( digitalRead(28) ) { byteH=byteH+64; lcd.print(1); } else lcd.print(0);
if ( digitalRead(27) ) { byteH=byteH+32; lcd.print(1); } else lcd.print(0);
if ( digitalRead(26) ) { byteH=byteH+16; lcd.print(1); } else lcd.print(0);
if ( digitalRead(25) ) { byteH=byteH+8; lcd.print(1); } else lcd.print(0);
if ( digitalRead(24) ) { byteH=byteH+4; lcd.print(1); } else lcd.print(0);
if ( digitalRead(23) ) { byteH=byteH+2; lcd.print(1); } else lcd.print(0);
if ( digitalRead(22) ) { byteH=byteH+1; lcd.print(1); } else lcd.print(0);
byteL=0;
if ( digitalRead(30) ) { byteL=byteL+128; lcd.print(1); } else lcd.print(0);
if ( digitalRead(31) ) { byteL=byteL+64; lcd.print(1); } else lcd.print(0);
if ( digitalRead(32) ) { byteL=byteL+32; lcd.print(1); } else lcd.print(0);
if ( digitalRead(33) ) { byteL=byteL+16; lcd.print(1); } else lcd.print(0);
if ( digitalRead(34) ) { byteL=byteL+8; lcd.print(1); } else lcd.print(0);
if ( digitalRead(35) ) { byteL=byteL+4; lcd.print(1); } else lcd.print(0);
if ( digitalRead(36) ) { byteL=byteL+2; lcd.print(1); } else lcd.print(0);
if ( digitalRead(37) ) { byteL=byteL+1; lcd.print(1); } else lcd.print(0);

lcd.setCursor(0, 1);
lcd.print("ID display: ");
lcd.print(byteH, HEX);lcd.print(byteL, HEX);

digitalWrite(CS_Pin, 1); // деактивация диспл. (отключение шины данных DB0..DB15)
DDRA=0xFF; DDRC=0xFF; // или for (i=22; i<=37;i++) { pinMode(i, OUTPUT); } // конф. шины данных ARDUINO на выход
digitalWrite(RD_Pin, 1); // уст. порта дисплея на приём (ввод данных в дисплей)
//digitalWrite(RST_Pin, 1);

// вставка для UTFT
// pinMode(42, OUTPUT); // конф.ардуино для RD на выход
// digitalWrite(42, 1); // уст. RD=1 - чтобы порт дисплея был на приём (ввод данных в дисплей)

//delay(100);
}

void loop() {
// put your main code here, to run repeatedly:

}

Именно на этом шлейфе дисплея не оказалось перемычек R1 R2....(для SPI или 8 бит режима) , шлейфом железно он на 16 бит. Разве что дорожки резать, ну нафиг, буду эти дисплеи использовать на mini pro или UNO c A6 и A7, для построения графиков по входному АЦП, ног хватит. , А т.к. шина данных дисплея отключается по CS , то можно и все цифровые пины использовать.

Приобрёл также по 39-79руб 2,8"-3,0" TFT8K1465 и TFT8K1465 400x240 вроде там ili9326 и R61509V (на их шлейфах есть R1-R4 для перевода в 8 бит и SPI) , после долгих поисков нашёл много разной инициализации на них, но незнаю как их вкорячить в UTFT хотябы взамен похожих, henningkarlsen.com ответил что работает только с изготовителями шилдов или консультация за деньги.

Также можно дисплеи поискать у от FLY , там много китайчины TFT8K... . Не советую увлекатьсям долгим поиском названий, в китае много фирмочек делают дисплеи, ставят какие угодно контроллеры, разнообразные шлейфы придумывая свои названия что по ним нереально найти что либо. Можно ещё прикидывать по самим контроллерам, что примерно в шлейф от них куда идёт.
Последнее редактирование: 8 мес. 2 дн. назад от user1.
Администратор запретил публиковать записи гостям.
Время создания страницы: 0.066 секунд