1. правильно! перепаять начало и конец координаты местами и хватит мозг канифолить :) и форум удлинять.
2. скетч калибровка из примера ( \UTouch\examples\Arduino\UTouch_Calibration ) . он выдаст калибровочные данные , поправляя свою либу, даже если у вас все координаты наоборот. Внесите их в файл UTouchCD , закометив предыдущие. Если не поканает , то скачав с офиц. сайта Utouch , замените файл UTouchCD на родной, запустите скетч калибровку , и внесите данные что он выдаст в UTouchCD.
// сфотайте потом нарисованный красивый рисунок скетчем UTouch_QuickPaint для истории. В адафруите тож рисовалка неплохая. Инит также можете поправить для перевотрота картинки, он находится в файле Adafruit_TFTLCD после строчки static const uint8_t ILI9488_regValues[] PROGMEM = {
так подозреваю, куда нить в середину надо добавить строчку
0xB6, 3, 0x00, 0x22, 0x3B,
рисовалку запускайте эту Adafruit_TFTLCD\examples\tftpaint3
Пока экран ехал ко мне продавец изменил страницу товара, убрал ссылки с библиотеками и примерами. Дисплей пришел в повреждением: лопнул тач(продаван сьехал с гарантий), но под мой проект он не нужен. Уже какие сутки бьюсь, не получается добиться хоть какой то реакции, белый экран и все. Продавец утверждает что стоит контроллер r61581, на просьбу поделиться софтом кидает ссылку на этот форум и все. Перепробовал все команды контроллеров инициализации дисплея. Скетча как такового нет, просто проверка заливкой экрана разными цветами. Компилится и загружается в мегу без ошибок. Библиотеку UTFT брал отсюда: http://www.rinkydinkelectronics.com/library.php?id=51 Пробовал другие отличающиеся UTFT какие под руку попадались ничего не помогает. Сбоку на шлейфе надпись fpc032mhv001rv2
в той же теме есть скетч для проверки ID дисплея в порту. посмотрите что выдаст. если определит дисплей то будет легче, если выдаст чтото типа как у меня ID Display 0х0404, то будет сложно, только методом перебора всех возможных библиотек. мой продавац тоже утверждал что у меня R61581 и в итоге запустилась СанСаныча с драйвером ILI9327_8 инициализация UTFT myGLCD(31,38,39,40,41); где этот драйвер подменян на ILI9488. не удивляйтесь с китайцев у меня вобще шлейф тач небыл припаян. так что пробуйте определить ID. а там будет видно. если этот скетч не работает поищите на просторах другие скетчи для определения дисплея и пробуйте их
swarm38, если вы перепробовали все иниты UTFT , другую IDE (1.5.8) и не помогло , то нагревайте плату и поднимайте дисп, смотрите сколько от него и куда идут дорожки. сфотайте в одном сообщении тыльную часть платы, лицевую и дорожки под шлейфом, слегка отогнув его . Судя по многочисленным резисторным сборкам, м.б. дисп стоит на 16 бит , здесь UTFT должно помочь, а что на дисп СанСаныча делал здесь не поможет.
Но м.б. китайцы использовали на плате для многих дисплеев , 8ми битный дисп, но могли подключить на другой порт, тогда поможет вышеупомянутая либа, только в ней надо будет перенаправить порт.
viki13viki , и как же вы вывели RD чтобы считать ID ? удивительно. Если у вас есть вопрос , что же за контроллер по настоящему стоит в вашем диспе, то надо примерно разрисовать распиновку диспа, из нее можно будет понять где RD , подключить его на 42 ногу ардуины и запустить читалки. На 11.2016 читалки v3.1 https://yadi.sk/d/TdOE0H_RzTUd2 .
еще раз повторюсь - без выведенного RD (Read - чтобы дисп мог отвечать), невозможно считать ID , скетч выдаст всякий мусор, который был до этого в порту. Только в других шилдах выведен RD и к тому же подписан.
уважаемый Slider , я не выводил RD . одна из читалок ID мне выдавала такое: ID Display 0х0404. я их перелопатил кучу. поиск по гуглу давал мало результатов и решения что это за ID не нашлось. в своем первом посте #1179 я об этом писал.
вот эта читалка
/*********************************************************************
*
* LCD_ID_Reader
*
* This sketch is meant only to attempt to read the driver ID code
* from inexpensive touchscreen LCDs found on eBay without needing to
* load any additional libraries. The hope is to identify the most
* common varieties and choose the best library for the screen you have.
*
* This has been successfully tested so far on 992X and 778X variety
* screens.
*
* Usage:
*
* Compile the sketch and run it on your board with the screen
* attached. In the serial monitor, you should see a message containing
* the driver code. The tricky thing is that if it does not work, the
* results may be undetermined. However, if we can compile a list,
* the difference between working and not may become more evident.
*
* Please visit http://misc.ws/lcd_information for more information.
*
* Version 1.2 - January 29th, 2015
*
*********************************************************************/
/*********************************************************************
*
* PIN ASSIGNMENTS
*
* You can alter the pin assignments to reflect any configuration you
* wish. I've provided the default shield configuration, which works
* on both the Arduino UNO and Mega 2560.
*
*********************************************************************/
//-- Arduino UNO or Mega 2560 Plugged as shield
#define LCD_RST A4
#define LCD_CS A3
#define LCD_RS A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_D0 8
#define LCD_D1 9
#define LCD_D2 2
#define LCD_D3 3
#define LCD_D4 4
#define LCD_D5 5
#define LCD_D6 6
#define LCD_D7 7
/*********************************************************************
*
* Attempt to initialize and reset LCD, then read its Driver Code
* at register index 0.
*
*********************************************************************/
void setup() {
char hexString[7];
uint16_t id;
Serial.begin(9600);
Serial.println("Initializing LCD...");
lcdInit();
lcdReset();
delay(500);
Serial.print("Reading ID...");
id = lcdReadID();
sprintf(hexString, "0x%0.4X", id);
Serial.println( hexString );
if( id == 0x7783 ) {
lcdRegister7783();
lcdFillScreen(0xF800);
Serial.println("If your screen filled red, then you may be able to use the library at https://github.com/Smoke-And-Wires/TFT-Shield-Example-Code");
} else if( id == 0x0154 ) {
lcdRegister0154();
lcdFillScreen(0xF800);
Serial.println("If your screen filled red, please report it at http://misc.ws/lcd_information");
Serial.println("There is currently no known working library.");
} else {
lcdRegisterOther();
lcdFillScreen(0xF800);
Serial.println("If your screen filled red, you may be able to use the library at http://misc.ws");
}
//print_all_regs();
}
void print_all_regs() {
char str[60];
uint16_t i, val;
for(i=0; i < 256; i++ )
{
delay(40);
val = lcdReadRegister(i);
sprintf(str, "Register 0x%0.2X : 0x%0.4X", i, val);
Serial.println( str );
}
}
void loop() {
}
/*********************************************************************
*
* LCD Functions - Inefficient but should be good enough
* to read the ID.
*
*********************************************************************/
void lcdRegister0154() {
lcdWriteRegister(0x000C, 0x130);
lcdWriteRegister(0x0080, 0x8d);
lcdWriteRegister(0x0092, 0x10);
lcdWriteRegister(0x0011, 0x1b);
lcdWriteRegister(0x0012, 0x3101);
lcdWriteRegister(0x0013, 0x105f);
lcdWriteRegister(0x0014, 0x667f);
lcdWriteRegister(0x0010, 0x800);
delay(20);
lcdWriteRegister(0x0011, 0x11b);
delay(20);
lcdWriteRegister(0x0011, 0x31b);
delay(20);
lcdWriteRegister(0x0011, 0x71b);
delay(20);
lcdWriteRegister(0x0011, 0xf1b);
delay(20);
lcdWriteRegister(0x0011, 0xf3b);
delay(30);
lcdWriteRegister(0x0001, 0x2128);
lcdWriteRegister(0x0002, 0x100);
lcdWriteRegister(0x0003, 0x1030);
lcdWriteRegister(0x0007, 0);
lcdWriteRegister(0x0008, 0x808);
lcdWriteRegister(0x000B, 0x1100);
lcdWriteRegister(0x000F, 0xf01);
lcdWriteRegister(0x0015, 0);
lcdWriteRegister(0x0030, 0);
lcdWriteRegister(0x0034, 319);
lcdWriteRegister(0x0035, 0);
lcdWriteRegister(0x0036, 239);
lcdWriteRegister(0x0037, 0);
lcdWriteRegister(0x0038, 319);
lcdWriteRegister(0x0039, 0);
lcdWriteRegister(0x0050, 0);
lcdWriteRegister(0x0051, 0xf00);
lcdWriteRegister(0x0052, 0xa03);
lcdWriteRegister(0x0053, 0x300);
lcdWriteRegister(0x0054, 0xc05);
lcdWriteRegister(0x0055, 0xf00);
lcdWriteRegister(0x0056, 0xf00);
lcdWriteRegister(0x0057, 3);
lcdWriteRegister(0x0058, 0x1f07);
lcdWriteRegister(0x0059, 0x71f);
delay(20);
lcdWriteRegister(0x0007, 0x12);
delay(20);
lcdWriteRegister(0x0007, 0x13);
}
void lcdRegisterOther() {
Serial.println("Loading LCD registers...");
lcdWriteRegister(0x00e5,0x8000);
lcdWriteRegister(0x0000,0x0001);
lcdWriteRegister(0x0001,0x0100);
lcdWriteRegister(0x0002,0x0700);
lcdWriteRegister(0x0003,0x1030);
lcdWriteRegister(0x0004,0x0000);
lcdWriteRegister(0x0008,0x0202);
lcdWriteRegister(0x0009,0x0000);
lcdWriteRegister(0x000a,0x0000);
lcdWriteRegister(0x000c,0x0000);
lcdWriteRegister(0x000d,0x0000);
lcdWriteRegister(0x000f,0x0000);
lcdWriteRegister(0x0010,0x0000);
lcdWriteRegister(0x0011,0x0000);
lcdWriteRegister(0x0012,0x0000);
lcdWriteRegister(0x0013,0x0000);
lcdWriteRegister(0x0010,0x17b0);
lcdWriteRegister(0x0011,0x0037);
lcdWriteRegister(0x0012,0x0138);
lcdWriteRegister(0x0013,0x1700);
lcdWriteRegister(0x0029,0x000d);
lcdWriteRegister(0x0020,0x0000);
lcdWriteRegister(0x0021,0x0000);
lcdWriteRegister(0x0030,0x0001);
lcdWriteRegister(0x0031,0x0606);
lcdWriteRegister(0x0032,0x0304);
lcdWriteRegister(0x0033,0x0202);
lcdWriteRegister(0x0034,0x0202);
lcdWriteRegister(0x0035,0x0103);
lcdWriteRegister(0x0036,0x011d);
lcdWriteRegister(0x0037,0x0404);
lcdWriteRegister(0x0038,0x0404);
lcdWriteRegister(0x0039,0x0404);
lcdWriteRegister(0x003c,0x0700);
lcdWriteRegister(0x003d,0x0a1f);
lcdWriteRegister(0x0050,0x0000);
lcdWriteRegister(0x0051,0x00ef);
lcdWriteRegister(0x0052,0x0000);
lcdWriteRegister(0x0053,0x013f);
lcdWriteRegister(0x0060,0x2700);
lcdWriteRegister(0x0061,0x0001);
lcdWriteRegister(0x006a,0x0000);
lcdWriteRegister(0x0090,0x0010);
lcdWriteRegister(0x0092,0x0000);
lcdWriteRegister(0x0093,0x0003);
lcdWriteRegister(0x0095,0x0101);
lcdWriteRegister(0x0097,0x0000);
lcdWriteRegister(0x0098,0x0000);
lcdWriteRegister(0x0007,0x0021);
lcdWriteRegister(0x0007,0x0031);
lcdWriteRegister(0x0007,0x0173);
}
void lcdRegister7783() {
lcdWriteRegister(0x0001,0x0100);
lcdWriteRegister(0x0002,0x0700);
lcdWriteRegister(0x0003,0x1030);
lcdWriteRegister(0x0008,0x0302);
lcdWriteRegister(0x0009,0x0000);
lcdWriteRegister(0x000A,0x0008);
lcdWriteRegister(0x0010,0x0790);
lcdWriteRegister(0x0011,0x0005);
lcdWriteRegister(0x0012,0x0000);
lcdWriteRegister(0x0013,0x0000);
lcdWriteRegister(0x0010,0x12B0);
lcdWriteRegister(0x0011,0x0007);
lcdWriteRegister(0x0012,0x008C);
lcdWriteRegister(0x0013,0x1700);
lcdWriteRegister(0x0029,0x0022);
lcdWriteRegister(0x0030,0x0000);
lcdWriteRegister(0x0031,0x0505);
lcdWriteRegister(0x0032,0x0205);
lcdWriteRegister(0x0035,0x0206);
lcdWriteRegister(0x0036,0x0408);
lcdWriteRegister(0x0037,0x0000);
lcdWriteRegister(0x0038,0x0504);
lcdWriteRegister(0x0039,0x0206);
lcdWriteRegister(0x003C,0x0206);
lcdWriteRegister(0x003D,0x0408);
lcdWriteRegister(0x0050,0x0000);
lcdWriteRegister(0x0051,0x00EF);
lcdWriteRegister(0x0052,0x0000);
lcdWriteRegister(0x0053,0x013F);
lcdWriteRegister(0x0060,0xA700);
lcdWriteRegister(0x0061,0x0001);
lcdWriteRegister(0x0090,0x0033);
lcdWriteRegister(0x0007,0x0133);
lcdWriteRegister(0x0001,0x0100);
lcdWriteRegister(0x0002,0x0700);
lcdWriteRegister(0x0003,0x1030);
lcdWriteRegister(0x0008,0x0302);
lcdWriteRegister(0x0009,0x0000);
lcdWriteRegister(0x000A,0x0008);
lcdWriteRegister(0x0010,0x0790);
lcdWriteRegister(0x0011,0x0005);
lcdWriteRegister(0x0012,0x0000);
lcdWriteRegister(0x0013,0x0000);
lcdWriteRegister(0x0010,0x12B0);
lcdWriteRegister(0x0011,0x0007);
lcdWriteRegister(0x0012,0x008C);
lcdWriteRegister(0x0013,0x1700);
lcdWriteRegister(0x0029,0x0022);
lcdWriteRegister(0x0030,0x0000);
lcdWriteRegister(0x0031,0x0505);
lcdWriteRegister(0x0032,0x0205);
lcdWriteRegister(0x0035,0x0206);
lcdWriteRegister(0x0036,0x0408);
lcdWriteRegister(0x0037,0x0000);
lcdWriteRegister(0x0038,0x0504);
lcdWriteRegister(0x0039,0x0206);
lcdWriteRegister(0x003C,0x0206);
lcdWriteRegister(0x003D,0x0408);
lcdWriteRegister(0x0050,0x0000);
lcdWriteRegister(0x0051,0x00EF);
lcdWriteRegister(0x0052,0x0000);
lcdWriteRegister(0x0053,0x013F);
lcdWriteRegister(0x0060,0xA700);
lcdWriteRegister(0x0061,0x0001);
lcdWriteRegister(0x0090,0x0033);
lcdWriteRegister(0x0007,0x0133);
}
void lcdInit() {
pinMode(LCD_CS, OUTPUT);
digitalWrite(LCD_CS, HIGH);
pinMode(LCD_RS, OUTPUT);
digitalWrite(LCD_RS, HIGH);
pinMode(LCD_WR, OUTPUT);
digitalWrite(LCD_WR, HIGH);
pinMode(LCD_RD, OUTPUT);
digitalWrite(LCD_RD, HIGH);
pinMode(LCD_RST, OUTPUT);
digitalWrite(LCD_RST, HIGH);
}
void lcdReset() {
digitalWrite(LCD_RST, LOW);
delay(2);
digitalWrite(LCD_RST, HIGH);
lcdWriteData(0);
lcdWriteData(0);
lcdWriteData(0);
lcdWriteData(0);
}
void lcdWrite8(uint16_t data) {
digitalWrite(LCD_D0, data & 1);
digitalWrite(LCD_D1, (data & 2) >> 1);
digitalWrite(LCD_D2, (data & 4) >> 2);
digitalWrite(LCD_D3, (data & 8) >> 3);
digitalWrite(LCD_D4, (data & 16) >> 4);
digitalWrite(LCD_D5, (data & 32) >> 5);
digitalWrite(LCD_D6, (data & 64) >> 6);
digitalWrite(LCD_D7, (data & 128) >> 7);
}
uint16_t lcdRead8() {
uint16_t result = digitalRead(LCD_D7);
result <<= 1;
result |= digitalRead(LCD_D6);
result <<= 1;
result |= digitalRead(LCD_D5);
result <<= 1;
result |= digitalRead(LCD_D4);
result <<= 1;
result |= digitalRead(LCD_D3);
result <<= 1;
result |= digitalRead(LCD_D2);
result <<= 1;
result |= digitalRead(LCD_D1);
result <<= 1;
result |= digitalRead(LCD_D0);
return result;
}
void lcdSetWriteDir() {
pinMode(LCD_D0, OUTPUT);
pinMode(LCD_D1, OUTPUT);
pinMode(LCD_D2, OUTPUT);
pinMode(LCD_D3, OUTPUT);
pinMode(LCD_D4, OUTPUT);
pinMode(LCD_D5, OUTPUT);
pinMode(LCD_D6, OUTPUT);
pinMode(LCD_D7, OUTPUT);
}
void lcdSetReadDir() {
pinMode(LCD_D0, INPUT);
pinMode(LCD_D1, INPUT);
pinMode(LCD_D2, INPUT);
pinMode(LCD_D3, INPUT);
pinMode(LCD_D4, INPUT);
pinMode(LCD_D5, INPUT);
pinMode(LCD_D6, INPUT);
pinMode(LCD_D7, INPUT);
}
void lcdWriteData(uint16_t data) {
lcdSetWriteDir();
digitalWrite(LCD_CS, LOW);
digitalWrite(LCD_RS, HIGH);
digitalWrite(LCD_RD, HIGH);
digitalWrite(LCD_WR, HIGH);
lcdWrite8(data >> 8);
digitalWrite(LCD_WR, LOW);
delayMicroseconds(10);
digitalWrite(LCD_WR, HIGH);
lcdWrite8(data);
digitalWrite(LCD_WR, LOW);
delayMicroseconds(10);
digitalWrite(LCD_WR, HIGH);
digitalWrite(LCD_CS, HIGH);
}
void lcdWriteCommand(uint16_t command) {
lcdSetWriteDir();
digitalWrite(LCD_CS, LOW);
digitalWrite(LCD_RS, LOW);
digitalWrite(LCD_RD, HIGH);
digitalWrite(LCD_WR, HIGH);
lcdWrite8(command >> 8);
digitalWrite(LCD_WR, LOW);
delayMicroseconds(10);
digitalWrite(LCD_WR, HIGH);
lcdWrite8(command);
digitalWrite(LCD_WR, LOW);
delayMicroseconds(10);
digitalWrite(LCD_WR, HIGH);
digitalWrite(LCD_CS, HIGH);
}
int lcdReadData() {
uint16_t result;
lcdSetReadDir();
digitalWrite(LCD_CS, LOW);
digitalWrite(LCD_RS, HIGH);
digitalWrite(LCD_RD, HIGH);
digitalWrite(LCD_WR, HIGH);
digitalWrite(LCD_RD, LOW);
delayMicroseconds(10);
result = lcdRead8() << 8;
digitalWrite(LCD_RD, HIGH);
delayMicroseconds(10);
digitalWrite(LCD_RD, LOW);
delayMicroseconds(10);
result |= lcdRead8();
digitalWrite(LCD_RD, HIGH);
digitalWrite(LCD_CS, HIGH);
return result;
}
void lcdWriteRegister(uint16_t addr, uint16_t data) {
lcdWriteCommand(addr);
lcdWriteData(data);
}
uint16_t lcdReadRegister(uint16_t reg) {
lcdWriteCommand(reg);
return lcdReadData();
}
uint16_t lcdReadID() {
return lcdReadRegister(0x00);
}
void lcdFillScreen(uint16_t color) {
Serial.println("Filling the screen...");
/*lcdWriteRegister(0x0050, 0);
lcdWriteRegister(0x0051, 219);
lcdWriteRegister(0x0052, 0);
lcdWriteRegister(0x0053, 319);
*/
lcdWriteRegister(0x0020, 0);
lcdWriteRegister(0x0021, 0);
lcdWriteCommand(0x0022);
digitalWrite(LCD_CS, LOW);
digitalWrite(LCD_RS, HIGH);
digitalWrite(LCD_RD, HIGH);
digitalWrite(LCD_WR, HIGH);
lcdSetWriteDir();
uint32_t i = 320;
i *=240;
while( i-- ) {
lcdWrite8(color >> 8);
digitalWrite(LCD_WR, LOW);
delayMicroseconds(10);
digitalWrite(LCD_WR, HIGH);
lcdWrite8(color);
digitalWrite(LCD_WR, LOW);
delayMicroseconds(10);
digitalWrite(LCD_WR, HIGH);
}
digitalWrite(LCD_CS, HIGH);
Serial.println("Done filling...");
}
вот результат
не выводил RD так как экран запустился и это было бы лишней перепайкой.
Что касается данного шилда, он 8 битный в данном исполнении, полностью его разбирал по косточкам, отпаивал плату. Судя по шлейфу 8 из 40 контактов не используются, они просто не разведены на шлейфе TFT. Писал в другой теме, реагирует только на ili932x. При этом где-то в серидине экрана имеется призрачное изображение, причем цветное. Пока и оставил на потом, пытался вывести RD, результата не дало. Вот в другой теме выкладывал фото http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=3#comment-217715
Вот спасибо за ссылку на товар. Мне его прислали на замену разбитого без описания. Делаем просто, берем библиотеку UTFT выбираем R61581 или CTE35IPS (что одно и тоже), в функции присвоения значений в массиве битности шины byte dtm[] меняем соответсвующее значение с 16 на 8, у меня конкретно 27 значение в массиве. Добавляем в initlcd.h инверсию LCD_Write_COM(0x21); все работает. Ща попробую фотку закачать. Еще раз спасибо за наводку на товар. Если не получится или не понимаете как сделать, могу выложить библиотеку с исправлением под даный шилд.
Когда приходит уведомление то та же есть и ссылка на отключение уведомлений
нет толка от этой ссылки, все равно идут уведомления, в тот раз когда писал специально снял галку с "Уведомлять меня о новых комментариях" и все равно получил уведомление (((
Когда приходит уведомление то та же есть и ссылка на отключение уведомлений
нет толка от этой ссылки, все равно идут уведомления, в тот раз когда писал специально снял галку с "Уведомлять меня о новых комментариях" и все равно получил уведомление (((
В почте пометь как спам, а потом раз в день чисти папку спам. В нее всеравно чтото кроме этих сообщений поподает.
доброе время суток. есть mega 2560 на ней седить EF02037 CAN-BUS Shield OBD2 через провода цепляю экран 3.95 тач не работает. подключаю проводами экран на прямую на мегу без EF02037 CAN-BUS Shield, тач работает. подсоеденяю отбратно через EF02037 CAN-BUS Shield проводами, сново тач не работает. в чем загвоздка? спасибо
Всем добрый вечер! Перечитал всю тему, перепробовал все, кроме пайки,нчего не получается, хотя вроде все уже разжевано. В общем предистория такова: китаец по ошибке прислал 4 шт ATMega+3,95 TFTLCD (на ili9488). В общем решил я его включить. Ну заработать то оно заработало, (спасибо вышенаписанному) но блин ЗЕРКАЛЬНО! Еще раз говорю, пробовал бблиотеку менять в разных вариантах - не идет! А так как сам в общем то ЧАЙНИК в этом деле, может кто подскажет (пошагово) как победить данную проблему (больно уж хочется)? Еще раз прошу сильно не "ругать", в общем ткните носом, где, куда и чего менять, чтоб заработало?
..... но блин ЗЕРКАЛЬНО! Еще раз говорю, пробовал бблиотеку менять в разных вариантах - не идет! А так как сам в общем то ЧАЙНИК в этом деле, может кто подскажет (пошагово) как победить данную проблему (больно уж хочется)? Еще раз прошу сильно не "ругать", в общем ткните носом, где, куда и чего менять, чтоб заработало?
изучите предыдущую 24 страницу, там все разжевал .
поиск по форуму : зеркалирование , mirror
// непонятно и не видно что вам надо отзеркалить , но там зеркалирование и тача и экрана поднималось
Ситуация такая: скетч стартует и должен нарисовать кучку изображения. Если выводить инфу в порт, то видно что скетч работает. Но на дисплее все белое, ничего не выводится. При этом если уменьшить кол-во выводимых изображений, то все рисуется.
Юзаю красный шилд 3.5 на ili9488
Либа utft, когда будете тестить, проинициализируйте под свой дисплей =)
Заранее спасибо, хотелось бы узнать - у меня лыжи не едут или все же уперся в возможности железки
как управлять сервоприводами знаю, подключил. но мне надо вывести угол отклонений на дисплей.
Вот скетч для работы сервоприводов.
#include <Servo.h>
const int servo1 = 4; // первая серва
const int servo2 = 10; // вторая серва
const int joyH = 3; // выход L/R джойстика Parallax
const int joyV = 4; // выход U/D джойстика Parallax
int servoVal; // переменная для хранения данных с аналогового пина
Servo myservo1; // создаем объект Servo для управления первой сервой
Servo myservo2; // создаем объект Servo для управления второй сервой
void setup() {
// Servo
myservo1.attach(servo1); // подключаем серву
myservo2.attach(servo2); // подключаем серву
// Инициализация серийного протокола связи
Serial.begin(9600);
}
void loop(){
// отображаем значения с джойстика с использованием серийного монитора
outputJoystick();
// считываем значение с джойстика по горизонтали (значение между 0 и 1023)
servoVal = analogRead(joyH);
servoVal = map(servoVal, 0, 1023, 0, 180); // масштабируем полученное значение для использования с серводвигателем (результат возвращается в диапазоне от 0 до 180)
myservo2.write(servoVal); // выводим ротор сервы в положение в соответствии с полученным масштабированным значением
// считываем значение джойстика вдоль вертикальной оси (значение от 0 до 1023)
servoVal = analogRead(joyV);
servoVal = map(servoVal, 0, 1023, 0, 180); //масштабируем полученное значение для использования с сервой (диапазон: от 0 до 180)
myservo1.write(servoVal); // выводим ротор второй сервы в соответствии с полученным масштабированным значением
delay(15); // ждем, пока серва обеспечит заданное положение
}
/**
* отображаем значения джойстика
*/
void outputJoystick(){
Serial.print(analogRead(joyH));
Serial.print ("---");
Serial.print(analogRead(joyV));
Serial.println ("----------------");
}
Задача такая. При работе каждого сервоприводов, нужно чтобы на дисплее отображался угол наклона или процент отклонения. У меня не получается объединить скетчи в один. Прошу помочь доработать скетч или показать самый простой пример а доработаем сами. Заранее спасибо, всех с праздниками!
Надо править значения ориентации TFT. Смотрите по даташиту комбинацию битов в регистре отвечающую за этот параметр и замените так что бы изображение на TFT выводилось повернутым на 180 градусов. UTF библиотека имеет такой косяк, в ней всего два варианта отображения. Вертикально и горизонтально. Сталкивался с таким явлением, пришел TFT с разбитым тачем, заменил и упс.... Провожу по экрану а линия рисуется зеркально. поменял значения в дефайнах отвечающих за ориентацию изображения и все стало на свои места. И фото выкладывать не надо, все ясно как божий день.
Не работает в том случае, когда ориентация TFT спроецированна на 180 градусов. Парень писал библитотеку под определенные модули. Сталкивался, долго думал. Пока сам не взялся и не написал библиотеку, там и решил некоторые вопросы по тачу.
Не работает в том случае, когда ориентация TFT спроецированна на 180 градусов. Парень писал библитотеку под определенные модули. Сталкивался, долго думал. Пока сам не взялся и не написал библиотеку, там и решил некоторые вопросы по тачу.
Аааа, т.е. когда в библиотеке забито портрет, а сам дисплей ладшафтный? Блииин, чертовы китайцы :) А что там делать? У меня дисплей кооринаты крайние выдает в основном, ну там 0/239 или 399/0 или 399/239 или -1/-1. При чем когда тыкаешь в точку одну то считывает случайные координаты.
Просто думал про ориентацию, только смущает, что координаты скачут с одной точки.
Не совсем, портрет имеет две ратации, 90 и 240 градусов. Относительно координат x0 и y0 получается что изменение сопротивления тача по осям изменяется на 180 градусов. Как следствие надо определять ориентацию не толко области памяти матрици, но и тачскрина. Бывает что не совпадает толко одна из осей, поэтому UTFT несколько ущербна в этом вопросе. Также пытался использовать его библиотеку Flashloader. Разобрал по косточкам, и нифига с помошью его проги записать не смог. Списывалс с ним, был шокирован ответом, мол писал давно, непомню, разбирайся, вобщем понятно. Но использовать как основу для понимания и немного корректируя можно запустить любой TFT.
Ну да. Сами написали прогу, сами сделали модули, Какие вопросы. Хотя Nextion безнадега полная. Ограничения по элементам, закрытая библиотека. Я давно ушел от AVR в вопросах работы с TFT. В Nextion используют stm микроконтроллер, но как я понял пока в режиме FSMC, я бы на их месте перешел на LTDC. Если интересно можете посмотреть. https://www.youtube.com/watch?v=2yn_j_dLoy4&list=PLkkjxEa2qzKGh_kpzz9WezAtbcON0WFut
Ну да. Сами написали прогу, сами сделали модули, Какие вопросы. Хотя Nextion безнадега полная. Ограничения по элементам, закрытая библиотека. Я давно ушел от AVR в вопросах работы с TFT. В Nextion используют stm микроконтроллер, но как я понял пока в режиме FSMC, я бы на их месте перешел на LTDC.
Хотите сказать с Некстон лучше не связыватся? Просто хотелось бы меньше сюрпризов. Я так понял от китайцев можно в любом момент ждать сюрпризов.
А что посоветуете по работе с TFT у меня ардуино due используется. Как то не ожидал таких сложностей с дисплеем.
Почему. Вы получаете своеобразную "Видеокарту". Вы создаете две программы, одну для Nextion, визуализация процессов и вторую в arduino, управляющая процессом визуализации. Имеет смысл, разгружает AVR, делает работу более производительной, основную программу. Библиотека UTFT отнюдь не китайская, если я не ошибаюсь ее написал европеец.
Почему. Вы получаете своеобразную "Видеокарту". Вы создаете две программы, одну для Nextion, визуализация процессов и вторую в arduino, управляющая процессом визуализации. Имеет смысл, разгружает AVR, делает работу более производительной, основную программу. Библиотека UTFT отнюдь не китайская, если я не ошибаюсь ее написал европеец.
А с этим дисплеем больше возьни получается? Ну если только для себя разобратся? Я так понял там китаезы накосячили при сборке? ПРосто когда я покупал его, даже контроллер не тот продован мне указал, разрешение, короче все характеристики :) На буржуинском форуме как то программно меняли ориентацию, попробую там поискать.
С библиотекой понятное дело, а вот с дисплеями самими :) По UTFT вообще вопросов нема, отрабатывает все нормально, а вот Urtouch косячит чего то, обидно.
Это из фруктового ада, не суть важно, есть похожий из др. источников. Начинается с команды 0xEF. А вот нету такой в доке!
У ili9341 нету, и у других контролеров нету, штук 5 просмотрел. Как нет и других команд заданых магическими числам (наверно потому, что авторы тоже не знают что оно такое). Че за хрень с инитом?
И с остальным не так уж гладко, регистр 36h. Описан как
Parameter 1 1 ↑ XX MY MX MV ML BGR MH 0 0 00
Description
This command defines read/write scanning direction of frame memory.
This command makes no change on the other driver status.
Bit Name Description
MY Row Address Order
MX Column Address Order
MV Row / Column Exchange These 3 bits control MCU to memory write/read direction.
ML Vertical Refresh Order LCD vertical refresh direction control.
BGR RGB-BGR Order
Color selector switch control (0=RGB color filter panel, 1=BGR color filter panel)
MH Horizontal Refresh ORDER LCD horizontal refreshing direction control.
У остальных распостраненных контролеров вобщем так же. Но проверка показывает, что работают не все флаги. Работают BGR, MV, MX. А MH, ML, MY видимого влияния не оказывают. Прямо сейчас играюсь записываемым в 36h значением и вспоминаю что ранее была таже проблема на других экранах.
Все это наводит на мысль, что китайцы ставят урезаный чёртекакой контролер, отдаленно напоминающий ili9341.
ПС. Советчики уровня "Бери либу ххх и не парся", или "Посотри как у меня тут -ххх", просьба, просто не утруждать себя ответами. Хотелось бы услышать коментарии тех кто в курсе проблемы.
щас гляну. я чета вообще запутался с координатами. в верху по иди должно быть х0 у0 в правом нижнем х320 у 480.
функция map в помощь, если не брать в руки паяльник
совсем запутался. щас все проверю
может нужно перепаять YN и YP местами?
2 способа:
1. правильно! перепаять начало и конец координаты местами и хватит мозг канифолить :) и форум удлинять.
2. скетч калибровка из примера ( \UTouch\examples\Arduino\UTouch_Calibration ) . он выдаст калибровочные данные , поправляя свою либу, даже если у вас все координаты наоборот. Внесите их в файл UTouchCD , закометив предыдущие. Если не поканает , то скачав с офиц. сайта Utouch , замените файл UTouchCD на родной, запустите скетч калибровку , и внесите данные что он выдаст в UTouchCD.
// сфотайте потом нарисованный красивый рисунок скетчем UTouch_QuickPaint для истории. В адафруите тож рисовалка неплохая. Инит также можете поправить для перевотрота картинки, он находится в файле Adafruit_TFTLCD после строчки static const uint8_t ILI9488_regValues[] PROGMEM = {
так подозреваю, куда нить в середину надо добавить строчку
0xB6, 3, 0x00, 0x22, 0x3B,
рисовалку запускайте эту Adafruit_TFTLCD\examples\tftpaint3
Slider уже ругается. заканчиваем. итог
нужно было перевернуть шлейф вот так, тоесть на 180 градусов.
спаял, откалибровал, прописал координаты и все стало как надо. тему можно закрыть.
всем огромное спасибо кто помог. особенно огромное спасибо Sliderу, без него еще бы месяц ковырялся. всем приятного дня.
о, крутяк, все заработало. рад тож :). норм получилось :) . пожалуйста.
так вот бывает, купил подешевше , а потом дорабатывай "напильником", так, чтоб нескучали , а по радостней потом было :) .
Доброго времени суток!
Приобрел дисплей TFT 3.5 для Arduino MEGA 2560 r3, вот отсюда:
https://ru.aliexpress.com/item/Free-shipping-LCD-Display-Module-TFT-3-5-...
Пока экран ехал ко мне продавец изменил страницу товара, убрал ссылки с библиотеками и примерами. Дисплей пришел в повреждением: лопнул тач(продаван сьехал с гарантий), но под мой проект он не нужен. Уже какие сутки бьюсь, не получается добиться хоть какой то реакции, белый экран и все. Продавец утверждает что стоит контроллер r61581, на просьбу поделиться софтом кидает ссылку на этот форум и все. Перепробовал все команды контроллеров инициализации дисплея. Скетча как такового нет, просто проверка заливкой экрана разными цветами. Компилится и загружается в мегу без ошибок. Библиотеку UTFT брал отсюда: http://www.rinkydinkelectronics.com/library.php?id=51 Пробовал другие отличающиеся UTFT какие под руку попадались ничего не помогает. Сбоку на шлейфе надпись fpc032mhv001rv2
добрый день Swarm38. попробуйте библиотеку из этой темы http://arduino.ru/forum/apparatnye-voprosy/35-tft-lcd-krasnyi-megovskii-mega-2560-r3-resheno-kak-reshit-drugie#comment-204256 это библиотека от СанСаныча. там их две одна в середине темы и другая в самом низу. на моей меге и тфт 3.95 она единственная со всего простора инета заработала.
добрый день Swarm38. попробуйте библиотеку из этой темы http://arduino.ru/forum/apparatnye-voprosy/35-tft-lcd-krasnyi-megovskii-mega-2560-r3-resheno-kak-reshit-drugie#comment-204256 это библиотека от СанСаныча. там их две одна в середине темы и другая в самом низу. на моей меге и тфт 3.95 она единственная со всего простора инета заработала.
Спасибо за наводку. Перепробовал сначала один, потом другой архив, все равно ни на одну из команд инициализации экран не реагирует =(
в той же теме есть скетч для проверки ID дисплея в порту. посмотрите что выдаст. если определит дисплей то будет легче, если выдаст чтото типа как у меня ID Display 0х0404, то будет сложно, только методом перебора всех возможных библиотек. мой продавац тоже утверждал что у меня R61581 и в итоге запустилась СанСаныча с драйвером ILI9327_8 инициализация UTFT myGLCD(31,38,39,40,41); где этот драйвер подменян на ILI9488. не удивляйтесь с китайцев у меня вобще шлейф тач небыл припаян. так что пробуйте определить ID. а там будет видно. если этот скетч не работает поищите на просторах другие скетчи для определения дисплея и пробуйте их
swarm38, если вы перепробовали все иниты UTFT , другую IDE (1.5.8) и не помогло , то нагревайте плату и поднимайте дисп, смотрите сколько от него и куда идут дорожки. сфотайте в одном сообщении тыльную часть платы, лицевую и дорожки под шлейфом, слегка отогнув его . Судя по многочисленным резисторным сборкам, м.б. дисп стоит на 16 бит , здесь UTFT должно помочь, а что на дисп СанСаныча делал здесь не поможет.
Но м.б. китайцы использовали на плате для многих дисплеев , 8ми битный дисп, но могли подключить на другой порт, тогда поможет вышеупомянутая либа, только в ней надо будет перенаправить порт.
как вариант вообще напутали с битностью как здесь http://arduino.ru/forum/apparatnye-voprosy/35-tft-lcd-krasnyi-megovskii-mega-2560-r3-resheno-kak-reshit-drugie , можете наподобе этой методы сами сделать. Прозвонить разрисовать распиновку, вывести RD и прочитать ID диспа, заодно и определится его битность.
viki13viki , и как же вы вывели RD чтобы считать ID ? удивительно. Если у вас есть вопрос , что же за контроллер по настоящему стоит в вашем диспе, то надо примерно разрисовать распиновку диспа, из нее можно будет понять где RD , подключить его на 42 ногу ардуины и запустить читалки. На 11.2016 читалки v3.1 https://yadi.sk/d/TdOE0H_RzTUd2 .
еще раз повторюсь - без выведенного RD (Read - чтобы дисп мог отвечать), невозможно считать ID , скетч выдаст всякий мусор, который был до этого в порту. Только в других шилдах выведен RD и к тому же подписан.
уважаемый Slider , я не выводил RD . одна из читалок ID мне выдавала такое: ID Display 0х0404. я их перелопатил кучу. поиск по гуглу давал мало результатов и решения что это за ID не нашлось. в своем первом посте #1179 я об этом писал.
вот эта читалка
вот результат
не выводил RD так как экран запустился и это было бы лишней перепайкой.
Что касается данного шилда, он 8 битный в данном исполнении, полностью его разбирал по косточкам, отпаивал плату. Судя по шлейфу 8 из 40 контактов не используются, они просто не разведены на шлейфе TFT. Писал в другой теме, реагирует только на ili932x. При этом где-то в серидине экрана имеется призрачное изображение, причем цветное. Пока и оставил на потом, пытался вывести RD, результата не дало. Вот в другой теме выкладывал фото http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=3#comment-217715
Вот спасибо за ссылку на товар. Мне его прислали на замену разбитого без описания. Делаем просто, берем библиотеку UTFT выбираем R61581 или CTE35IPS (что одно и тоже), в функции присвоения значений в массиве битности шины byte dtm[] меняем соответсвующее значение с 16 на 8, у меня конкретно 27 значение в массиве. Добавляем в initlcd.h инверсию LCD_Write_COM(0x21); все работает. Ща попробую фотку закачать. Еще раз спасибо за наводку на товар. Если не получится или не понимаете как сделать, могу выложить библиотеку с исправлением под даный шилд.
вот тут немного непонятно :)
лучше сразу
Буду премного благодарен если этот кирпич подаст признаки жизни :)
Пробуй http://178.130.34.198/adafruit/UTFTNEW/UTFT.rar
Старую библиотеку или удали или перенеси в другое место, иначе они будут конфликтовать. По результату отпишись....
Заработало!)
Использовал свежескачанную IDE 1.5.8, скетч залился вот с такой ошибкой, надеюсь не кретично в будущем:
Еще раз спасибо большое за рабочую библиотеку)
PS. перезалил библиотеку к себе на ЯД https://yadi.sk/d/QXU_Mu3zzTzvM
Не за что. Удачи.
как блин отписаться от темы нодаели уже уведомления на почту ((
Когда приходит уведомление то та же есть и ссылка на отключение уведомлений
Тогда не знаю.
нет толка от этой ссылки, все равно идут уведомления, в тот раз когда писал специально снял галку с "Уведомлять меня о новых комментариях" и все равно получил уведомление (((
нет толка от этой ссылки, все равно идут уведомления, в тот раз когда писал специально снял галку с "Уведомлять меня о новых комментариях" и все равно получил уведомление (((
В почте пометь как спам, а потом раз в день чисти папку спам. В нее всеравно чтото кроме этих сообщений поподает.
эх , так и неузнал его ID :))))
в продолжение про R61581 . вот ещё один шилд который запустился на UTFT myGLCD(27,38,39,40,41);
480x320 3.5 TFT LCD mega 2560 дисплей FPC-35H001A0-A
только уже не припомню на 8 или 16 бит запустился , давно дело было . но резисторов столькоже много, и из шлейфа типа 16 бит разведено.
если что в файле UTFT.cpp display_transfer_mode = dtm[model]; заменить на display_transfer_mode = 8; или display_transfer_mode = 16;
и для уменьшения занимаемого размера либы , в файле memorysaver.h раскомментить все #define DISABLE кроме //#define DISABLE_R61581
пример UTFT\examples\Arduino (AVR)\UTFT_Demo_480x320
доброе время суток. есть mega 2560 на ней седить EF02037 CAN-BUS Shield OBD2 через провода цепляю экран 3.95 тач не работает. подключаю проводами экран на прямую на мегу без EF02037 CAN-BUS Shield, тач работает. подсоеденяю отбратно через EF02037 CAN-BUS Shield проводами, сново тач не работает. в чем загвоздка? спасибо
отвечаю сам. переместил пины с 2.3.4.5.6 на 3.4.5.6.7 и все пошло. дело в том что пин 2 в EF02037 CAN-BUS Shield занят, он занят как INT.
Всем добрый вечер! Перечитал всю тему, перепробовал все, кроме пайки,нчего не получается, хотя вроде все уже разжевано. В общем предистория такова: китаец по ошибке прислал 4 шт ATMega+3,95 TFTLCD (на ili9488). В общем решил я его включить. Ну заработать то оно заработало, (спасибо вышенаписанному) но блин ЗЕРКАЛЬНО! Еще раз говорю, пробовал бблиотеку менять в разных вариантах - не идет! А так как сам в общем то ЧАЙНИК в этом деле, может кто подскажет (пошагово) как победить данную проблему (больно уж хочется)? Еще раз прошу сильно не "ругать", в общем ткните носом, где, куда и чего менять, чтоб заработало?
..... но блин ЗЕРКАЛЬНО! Еще раз говорю, пробовал бблиотеку менять в разных вариантах - не идет! А так как сам в общем то ЧАЙНИК в этом деле, может кто подскажет (пошагово) как победить данную проблему (больно уж хочется)? Еще раз прошу сильно не "ругать", в общем ткните носом, где, куда и чего менять, чтоб заработало?
изучите предыдущую 24 страницу, там все разжевал .
поиск по форуму : зеркалирование , mirror
// непонятно и не видно что вам надо отзеркалить , но там зеркалирование и тача и экрана поднималось
Пробовал и АДАфрут - белый экран. Переустановл, все то же.
Зеркально пшет экран. Тач работает нормально, но с UTFT, в АДАфруте не знаю.
День добрый купил красный шилд 3,95 Mega 2560
Запускается при 31 и при 27, но изображение зеркально. менял 0X48 на 0Х88 ничего не происходит :( Подскажите как перевернуть?
ссылку, фото выкладовайте.
Тут у кого нибудь точно есть такой конфиг:
у кого есть мега 2560 и дисплей с разрешением 320х480 большая просьба проверить этот скетч
https://yadi.sk/d/UUaLcRh43Er9Ru
Ситуация такая: скетч стартует и должен нарисовать кучку изображения. Если выводить инфу в порт, то видно что скетч работает. Но на дисплее все белое, ничего не выводится. При этом если уменьшить кол-во выводимых изображений, то все рисуется.
Юзаю красный шилд 3.5 на ili9488
Либа utft, когда будете тестить, проинициализируйте под свой дисплей =)
Заранее спасибо, хотелось бы узнать - у меня лыжи не едут или все же уперся в возможности железки
А вот для дисплея.
Задача такая. При работе каждого сервоприводов, нужно чтобы на дисплее отображался угол наклона или процент отклонения. У меня не получается объединить скетчи в один. Прошу помочь доработать скетч или показать самый простой пример а доработаем сами. Заранее спасибо, всех с праздниками!
Пытаюсь запустить тач 3,5" (CTE35IPS).
Пробовал UTouch и URTouch.
Запустились UTouch_QuickPaint и UTouch_QuickDraw из обеих библиотек.
Но рисует не там и в зеркале.
Попробовал запустить URTouch_Calibration, появляется экран с инструкцией и дальше никакой реакции, куда не нажимай. И так в обеех библиотеках.
Направте на путь истиный.
Пытаюсь запустить тач 3,5" (CTE35IPS).
.....
фотки в студию
Надо править значения ориентации TFT. Смотрите по даташиту комбинацию битов в регистре отвечающую за этот параметр и замените так что бы изображение на TFT выводилось повернутым на 180 градусов. UTF библиотека имеет такой косяк, в ней всего два варианта отображения. Вертикально и горизонтально. Сталкивался с таким явлением, пришел TFT с разбитым тачем, заменил и упс.... Провожу по экрану а линия рисуется зеркально. поменял значения в дефайнах отвечающих за ориентацию изображения и все стало на свои места. И фото выкладывать не надо, все ясно как божий день.
Да тут больше интересно почему не работают примеры "Калибровки" и "Кнопок".
Фото только вечером.
Хочу сделать кнопки на экране. Примерно такие.
Но не работают. Только картинка и нет реакции на нажатие.
Калибровка тоже мёртвая, картинка и нет реакции на нажатие.
А вот такой пример криво, но работает. Водишь по экрану и получаются кривулины.
Направьте в правильную сторону.
Извиняюсь за качество, чё могу.
Победил тач, а то тоже ни как заставить не могу. Какую то пургу в координатах выдает.
Не работает в том случае, когда ориентация TFT спроецированна на 180 градусов. Парень писал библитотеку под определенные модули. Сталкивался, долго думал. Пока сам не взялся и не написал библиотеку, там и решил некоторые вопросы по тачу.
Не работает в том случае, когда ориентация TFT спроецированна на 180 градусов. Парень писал библитотеку под определенные модули. Сталкивался, долго думал. Пока сам не взялся и не написал библиотеку, там и решил некоторые вопросы по тачу.
Аааа, т.е. когда в библиотеке забито портрет, а сам дисплей ладшафтный? Блииин, чертовы китайцы :) А что там делать? У меня дисплей кооринаты крайние выдает в основном, ну там 0/239 или 399/0 или 399/239 или -1/-1. При чем когда тыкаешь в точку одну то считывает случайные координаты.
Просто думал про ориентацию, только смущает, что координаты скачут с одной точки.
А где там ориентацию править?
Не совсем, портрет имеет две ратации, 90 и 240 градусов. Относительно координат x0 и y0 получается что изменение сопротивления тача по осям изменяется на 180 градусов. Как следствие надо определять ориентацию не толко области памяти матрици, но и тачскрина. Бывает что не совпадает толко одна из осей, поэтому UTFT несколько ущербна в этом вопросе. Также пытался использовать его библиотеку Flashloader. Разобрал по косточкам, и нифига с помошью его проги записать не смог. Списывалс с ним, был шокирован ответом, мол писал давно, непомню, разбирайся, вобщем понятно. Но использовать как основу для понимания и немного корректируя можно запустить любой TFT.
Нда уж, с экономил называется. Проще было некстион сразу взять, там хоть стандартно все :)
Но симптомы у меня именно от ориентации этой путанной?
Ну да. Сами написали прогу, сами сделали модули, Какие вопросы. Хотя Nextion безнадега полная. Ограничения по элементам, закрытая библиотека. Я давно ушел от AVR в вопросах работы с TFT. В Nextion используют stm микроконтроллер, но как я понял пока в режиме FSMC, я бы на их месте перешел на LTDC. Если интересно можете посмотреть. https://www.youtube.com/watch?v=2yn_j_dLoy4&list=PLkkjxEa2qzKGh_kpzz9WezAtbcON0WFut
Ну да. Сами написали прогу, сами сделали модули, Какие вопросы. Хотя Nextion безнадега полная. Ограничения по элементам, закрытая библиотека. Я давно ушел от AVR в вопросах работы с TFT. В Nextion используют stm микроконтроллер, но как я понял пока в режиме FSMC, я бы на их месте перешел на LTDC.
Хотите сказать с Некстон лучше не связыватся? Просто хотелось бы меньше сюрпризов. Я так понял от китайцев можно в любом момент ждать сюрпризов.
А что посоветуете по работе с TFT у меня ардуино due используется. Как то не ожидал таких сложностей с дисплеем.
Почему. Вы получаете своеобразную "Видеокарту". Вы создаете две программы, одну для Nextion, визуализация процессов и вторую в arduino, управляющая процессом визуализации. Имеет смысл, разгружает AVR, делает работу более производительной, основную программу. Библиотека UTFT отнюдь не китайская, если я не ошибаюсь ее написал европеец.
Почему. Вы получаете своеобразную "Видеокарту". Вы создаете две программы, одну для Nextion, визуализация процессов и вторую в arduino, управляющая процессом визуализации. Имеет смысл, разгружает AVR, делает работу более производительной, основную программу. Библиотека UTFT отнюдь не китайская, если я не ошибаюсь ее написал европеец.
А с этим дисплеем больше возьни получается? Ну если только для себя разобратся? Я так понял там китаезы накосячили при сборке? ПРосто когда я покупал его, даже контроллер не тот продован мне указал, разрешение, короче все характеристики :) На буржуинском форуме как то программно меняли ориентацию, попробую там поискать.
С библиотекой понятное дело, а вот с дисплеями самими :) По UTFT вообще вопросов нема, отрабатывает все нормально, а вот Urtouch косячит чего то, обидно.
За ориентацию отвечает 36h регистр TFT. Открывайте даташит на чип TFT и смотрите какой набор битов надо активировать для нужной вам ориентации.
Да. Именно 36h-й и отвечает.
Подключил вчера очередной экран. Такой - https://ru.aliexpress.com/item/2-8-inch-TFT-LCD-Module-without-Touch-Panel-ILI9341-Drive-IC-240-RGB-320-SPI/32764300681.html?spm=2114.10010208.1000014.2.wQImlV&traffic_analysisId=recommend_3035_null_null_null&scm=1007.13338.84300.000000000000000&pvid=d5d83a42-bab3-453f-9f50-4f3b93848529&tpp=1 . По SPI подключил. До этого подключал еще парочку других по 8-битной паралельной. И каждый раз замечаю неладное. Они то работают в принципе, но есть моменты.
Инициализация. Проходит успешно, код гуляющий по инету - чтото типа
Это из фруктового ада, не суть важно, есть похожий из др. источников. Начинается с команды 0xEF. А вот нету такой в доке!
У ili9341 нету, и у других контролеров нету, штук 5 просмотрел. Как нет и других команд заданых магическими числам (наверно потому, что авторы тоже не знают что оно такое). Че за хрень с инитом?
И с остальным не так уж гладко, регистр 36h. Описан как
8.2.29. Memory Access Control (36h)
36h MADCTL (Memory Access Control)
D/CX RDX WRX D17-8 D7 D6 D5 D4 D3 D2 D1 D0 HEX
Command 0 1 ↑ XX 0 0 1 1 0 1 1 0 36h
Parameter 1 1 ↑ XX MY MX MV ML BGR MH 0 0 00
Description
This command defines read/write scanning direction of frame memory.
This command makes no change on the other driver status.
Bit Name Description
MY Row Address Order
MX Column Address Order
MV Row / Column Exchange These 3 bits control MCU to memory write/read direction.
ML Vertical Refresh Order LCD vertical refresh direction control.
BGR RGB-BGR Order
Color selector switch control (0=RGB color filter panel, 1=BGR color filter panel)
MH Horizontal Refresh ORDER LCD horizontal refreshing direction control.
У остальных распостраненных контролеров вобщем так же. Но проверка показывает, что работают не все флаги. Работают BGR, MV, MX. А MH, ML, MY видимого влияния не оказывают. Прямо сейчас играюсь записываемым в 36h значением и вспоминаю что ранее была таже проблема на других экранах.
Все это наводит на мысль, что китайцы ставят урезаный чёртекакой контролер, отдаленно напоминающий ili9341.
ПС. Советчики уровня "Бери либу ххх и не парся", или "Посотри как у меня тут -ххх", просьба, просто не утруждать себя ответами. Хотелось бы услышать коментарии тех кто в курсе проблемы.