1.8 TFT Подключение Проблема. Помогите
- Войдите на сайт для отправки комментариев
Пнд, 20/10/2014 - 15:14
Всех приветствую из солнечного Баку.
Недавно купил себе 1.8 ТФТ 128х160 скрин из Китая.
Короче, китаец не ответил на вопрос что за библиотека для него нужна и т.д. У меня проблема вот такая.
Значит ножки модуля такие:
16- Led -
15 Led +
14-
13MOSI
12 MISO
11CLK
10 CS
9SCK
8SDA
7RS
6 RST
5-
4 - это для яркости
3-
2-VCC
1-GND
Подключил к ардуино уно как в тест программе:
#define sclk 4
#define mosi 5
#define cs 6
#define dc 7
#define rst 8
Модуль //// UNO
10 (CS) ------ 6

9 (SCK) ------ 4
8 (SDA)--------------5
7 (RS)--------7
6 (RST) - --- --- 8
Может быть я что то не так подключил, а может быть библиотека не та.
Пожалуйста помогите мне решить этот вопрос.
Вот код программы:
#define sclk 4 #define mosi 5 #define cs 6 #define dc 7 #define rst 8 // you can also connect this to the Arduino reset #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_ST7735.h> // Hardware-specific library #include <SPI.h> // Option 1: use any pins but a little slower Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst); // Option 2: must use the hardware SPI pins // (for UNO thats sclk = 13 and sid = 11) and pin 10 must be // an output. This is much faster - also required if you want // to use the microSD card (see the image drawing example) //Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst); float p = 3.1415926; void setup(void) { Serial.begin(9600); Serial.print("hello!"); // Our supplier changed the 1.8" display slightly after Jan 10, 2012 // so that the alignment of the TFT had to be shifted by a few pixels // this just means the init code is slightly different. Check the // color of the tab to see which init code to try. If the display is // cut off or has extra 'random' pixels on the top & left, try the // other option! // If you are seeing red and green color inversion, use Black Tab // If your TFT's plastic wrap has a Black Tab, use the following: tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab // If your TFT's plastic wrap has a Red Tab, use the following: //tft.initR(INITR_REDTAB); // initialize a ST7735R chip, red tab // If your TFT's plastic wrap has a Green Tab, use the following: //tft.initR(INITR_GREENTAB); // initialize a ST7735R chip, green tab Serial.println("init"); uint16_t time = millis(); tft.fillScreen(ST7735_BLACK); time = millis() - time; Serial.println(time, DEC); delay(500); // large block of text tft.fillScreen(ST7735_BLACK); testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST7735_WHITE); delay(1000); // tft print function! tftPrintTest(); delay(4000); // a single pixel tft.drawPixel(tft.width()/2, tft.height()/2, ST7735_GREEN); delay(500); // line draw test testlines(ST7735_YELLOW); delay(500); // optimized lines testfastlines(ST7735_RED, ST7735_BLUE); delay(500); testdrawrects(ST7735_GREEN); delay(500); testfillrects(ST7735_YELLOW, ST7735_MAGENTA); delay(500); tft.fillScreen(ST7735_BLACK); testfillcircles(10, ST7735_BLUE); testdrawcircles(10, ST7735_WHITE); delay(500); testroundrects(); delay(500); testtriangles(); delay(500); mediabuttons(); delay(500); Serial.println("done"); delay(1000); } void loop() { tft.invertDisplay(true); delay(500); tft.invertDisplay(false); delay(500); } void testlines(uint16_t color) { tft.fillScreen(ST7735_BLACK); for (int16_t x=0; x < tft.width(); x+=6) { tft.drawLine(0, 0, x, tft.height()-1, color); } for (int16_t y=0; y < tft.height(); y+=6) { tft.drawLine(0, 0, tft.width()-1, y, color); } tft.fillScreen(ST7735_BLACK); for (int16_t x=0; x < tft.width(); x+=6) { tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color); } for (int16_t y=0; y < tft.height(); y+=6) { tft.drawLine(tft.width()-1, 0, 0, y, color); } tft.fillScreen(ST7735_BLACK); for (int16_t x=0; x < tft.width(); x+=6) { tft.drawLine(0, tft.height()-1, x, 0, color); } for (int16_t y=0; y < tft.height(); y+=6) { tft.drawLine(0, tft.height()-1, tft.width()-1, y, color); } tft.fillScreen(ST7735_BLACK); for (int16_t x=0; x < tft.width(); x+=6) { tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color); } for (int16_t y=0; y < tft.height(); y+=6) { tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color); } } void testdrawtext(char *text, uint16_t color) { tft.setCursor(0, 0); tft.setTextColor(color); tft.setTextWrap(true); tft.print(text); } void testfastlines(uint16_t color1, uint16_t color2) { tft.fillScreen(ST7735_BLACK); for (int16_t y=0; y < tft.height(); y+=5) { tft.drawFastHLine(0, y, tft.width(), color1); } for (int16_t x=0; x < tft.width(); x+=5) { tft.drawFastVLine(x, 0, tft.height(), color2); } } void testdrawrects(uint16_t color) { tft.fillScreen(ST7735_BLACK); for (int16_t x=0; x < tft.width(); x+=6) { tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color); } } void testfillrects(uint16_t color1, uint16_t color2) { tft.fillScreen(ST7735_BLACK); for (int16_t x=tft.width()-1; x > 6; x-=6) { tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1); tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2); } } void testfillcircles(uint8_t radius, uint16_t color) { for (int16_t x=radius; x < tft.width(); x+=radius*2) { for (int16_t y=radius; y < tft.height(); y+=radius*2) { tft.fillCircle(x, y, radius, color); } } } void testdrawcircles(uint8_t radius, uint16_t color) { for (int16_t x=0; x < tft.width()+radius; x+=radius*2) { for (int16_t y=0; y < tft.height()+radius; y+=radius*2) { tft.drawCircle(x, y, radius, color); } } } void testtriangles() { tft.fillScreen(ST7735_BLACK); int color = 0xF800; int t; int w = 63; int x = 159; int y = 0; int z = 127; for(t = 0 ; t <= 15; t+=1) { tft.drawTriangle(w, y, y, x, z, x, color); x-=4; y+=4; z-=4; color+=100; } } void testroundrects() { tft.fillScreen(ST7735_BLACK); int color = 100; int i; int t; for(t = 0 ; t <= 4; t+=1) { int x = 0; int y = 0; int w = 127; int h = 159; for(i = 0 ; i <= 24; i+=1) { tft.drawRoundRect(x, y, w, h, 5, color); x+=2; y+=3; w-=4; h-=6; color+=1100; } color+=100; } } void tftPrintTest() { tft.setTextWrap(false); tft.fillScreen(ST7735_BLACK); tft.setCursor(0, 30); tft.setTextColor(ST7735_RED); tft.setTextSize(1); tft.println("Hello World!"); tft.setTextColor(ST7735_YELLOW); tft.setTextSize(2); tft.println("Hello World!"); tft.setTextColor(ST7735_GREEN); tft.setTextSize(3); tft.println("Hello World!"); tft.setTextColor(ST7735_BLUE); tft.setTextSize(4); tft.print(1234.567); delay(1500); tft.setCursor(0, 0); tft.fillScreen(ST7735_BLACK); tft.setTextColor(ST7735_WHITE); tft.setTextSize(0); tft.println("Hello World!"); tft.setTextSize(1); tft.setTextColor(ST7735_GREEN); tft.print(p, 6); tft.println(" Want pi?"); tft.println(" "); tft.print(8675309, HEX); // print 8,675,309 out in HEX! tft.println(" Print HEX!"); tft.println(" "); tft.setTextColor(ST7735_WHITE); tft.println("Sketch has been"); tft.println("running for: "); tft.setTextColor(ST7735_MAGENTA); tft.print(millis() / 1000); tft.setTextColor(ST7735_WHITE); tft.print(" seconds."); } void mediabuttons() { // play tft.fillScreen(ST7735_BLACK); tft.fillRoundRect(25, 10, 78, 60, 8, ST7735_WHITE); tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_RED); delay(500); // pause tft.fillRoundRect(25, 90, 78, 60, 8, ST7735_WHITE); tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_GREEN); tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_GREEN); delay(500); // play color tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_BLUE); delay(50); // pause color tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_RED); tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_RED); // play color tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_GREEN); }
я пробовал этот http://ru.aliexpress.com/item/New-Stylish-1-8-inch-128-x-160-Pixels-For-Arduino-TFT-LCD-Display-Module-Breakout/32612697845.html запускать - нехрена не запускается (код брал из примеров к библиотеки)
и uno и mega2560 - результат один - белый экран((((
и uno и mega2560 - результат один - белый экран((((
Ну на первой фотке экран у тебя не совсем белый. Для начала надо точно определиться какой именно контроллер дисплея установлен в твоем шилде. Как это сделать? Насколько я могу судить есть только три способа:
1. Отодрать экран от шилда и надеяться то на чипе есть какая-то надпись
2. С помощью хитрого скетча попытаться считать данные в порт Serial
3. Искать по всему форуму (а то и по всему инету) тему с таким же дисплеем.
Проблема, как правило, решаема, однако мода на головняки с дисплеями уже давно прошла, потому что я в трёх или четырёх темах просил помощи по такому же вопросу, и хоть бы кто заглянул! Ну и пришлось самому разруливать.
Кстати такой подход гораздо эффективнее: никто не отвечает на мольбы о помощи, а бабки уже заплочены и дисплей надо как-то приторачивать к ардуине. Просто приходится включать собственный котелок! И вот, вместо морочения головы людям с тем же вопросом, с которым они уже досыта наморочили голову примерно год назад, я беру и начинаю сам пролистывать кучу тем здесь и паралельно - в гугле...
Тоесть я вот что хочу сказать: мудохаться с подключением какого-то отдельновзятого дисплея может быть интересно только его владельцу. Диалог же может возникнуть только если еще у кого-то есть такой же дисплей или схожие проблемы при подключении. Я вот сейчас почти понимаю почему мне никто не отвечал: потому что где-то и когда-то это всё уже обсуждалось! И когда народ видит такие темы, думает примерно так: "Нет времени, желания и вообще: пусть сам разбирается! Я же разобрался? А то кто-то перерыл тонны инфы по этому вопросу, создал отдельную тему, всё разжевал и выложил. Осталось только найти, включить мозги и радоваться жизни и работающему дисплею! Так он и это ленится сам сделать - надо прити к нему домой и самому всё подключить. А когда ему надоест играться с этим дисплеем, он станет всех доставать с просьбой правильно подключить светодиод к 13-му пину..." Ну вот примерно такие ассоциации вызывают просьбы о помощи, в то время, когда буквально рядом это всё уже побеждалось и разжовывалось. Народ помогает чаще из любопытства чем из сострадания. Вот яркий тому пример.
P.S. Я всегда выбираю третий вариант: сбор информации. Потому что в первом варианте, остальные два уже могут не понадобиться, а второй вариант, лично мне - "помог" очень и очень условно.
Так что - желаю тебе самому во всём разобраться. Так ты сам будешь поимать смысл происходящего, а не надеяться что кто-то начнёт понимать за тебя...
Я тоже собираю информацию, а не тупо ною помогите.
вот нарыл http://lesson.iarduino.ru/page/podklyuchaem-cvetnoy-displey-1-8-tft-ili9163-st7735r-sd-k-arduino/
сегодня попробую -посмотрим что получится
Ну на первой фотке экран у тебя не совсем белый.
это фото не моего экрана, а ТСа
Я тоже собираю информацию, а не тупо ною помогите.
вот нарыл http://lesson.iarduino.ru/page/podklyuchaem-cvetnoy-displey-1-8-tft-ili9163-st7735r-sd-k-arduino/
сегодня попробую -посмотрим что получится
Вот и модлодец! Как говорится: "Хочешь что бы что-то было сделано - сделай это сам" Я как никто это прочувствовал. Слава Богу не на этом форуме. Тут мне помогли на 101%.
Тебе еще простенький дисплей попался: 9 пинов всего подключить. Не то что мне: только 16 по шине. Афигеть.
Я тоже собираю информацию, а не тупо ною помогите.
вот нарыл http://lesson.iarduino.ru/page/podklyuchaem-cvetnoy-displey-1-8-tft-ili9163-st7735r-sd-k-arduino/
сегодня попробую -посмотрим что получится
Вот и модлодец! Как говорится: "Хочешь что бы что-то было сделано - сделай это сам" Я как никто это прочувствовал. Слава Богу не на этом форуме. Тут мне помогли на 101%.
Тебе еще простенький дисплей попался: 9 пинов всего подключить. Не то что мне: только 16 по шине. Афигеть.
фото вот по ссылке http://ru.aliexpress.com/item/New-Stylish-1-8-inch-128-x-160-Pixels-For-Arduino-TFT-LCD-Display-Module-Breakout/32612697845.html
согласно этого примера http://http://lesson.iarduino.ru/page/podklyuchaem-cvetnoy-displey-1-8-tft-ili9163-st7735r-sd-k-arduino/ поробовал - сильно мерцает дисплей (((( работает очень крайне криво((
гугл , яндекс , форум в поиск - 1.8" LCD TFT display module
Библиотек подходят несколько и Adafruit и UTFT. одну из ссылок где народ расписал подключение уже здесь давали lesson.iarduino.ru/page/podklyuchaem-cvetnoy-displey-1-8-tft-ili9163-st7735r-sd-k-arduino/
попробуйте ещё http://arduino-tv.ru/catalog/id/1.8_-tft-lcd-display-module-st7735s-128x160-obzor
http://arduinolab.pw/index.php/2015/12/02/chasy-na-ds1302-i-18-tft-lcd-display-module-st7735s/
и если встречаете в примерах подключения - резисторы , инми не надо принебрегать, иначе дисп. уже утиль. (может повезти, если длинный слабый USB кабель и на нем получилось хорошее падение напряжения. Китайцы хитро извратились , лог уровни 5в от ардуино через внутренние защитные диоды в контроллере на дисплее должны завысить питание контроллера выше 3,3-3,6в и сжечь его, но не даёт параллельно пасаженная питанию - подсветка (белые светодиоды), выполняя роль стабилитрона 3,0-3,3в.
// попробуйте ещё UTFT , в её pdf описан вызов .
примеры из её стандартных с вашим разрешением с пометкой _serial
О как! Я так понял что в случае с ардуиной всегда приходится выбирать между скоростью и количеством занятых пинов. SPI и I2C - это: свободные пины, но жуткие тормоза, вследствие которых использовать графику на графическом дисплее - я не знаю... Хотя с другой стороны, ждать от 16-ти мегагерцового контроллера каких-то графических чудес и не приходится. У меня тоже есть UNO и 8-ми битный TFT к ней, так элемнтарно геометрические фигуры прорисовываются туго. Вывод текста еще - так себе... Для сравнения купил DUE и 16-ти битный 3.5". Сегодня, буквально, планирую переписать некоторые свои проекты под этот дисплей. Посмотрим насколько всё станет шустрее. Демки идут, конечно, гораздо бодрее.
AVR не совсем предназначен для вывода изображений, посему тормоза могут быть. У большинства ATMega макс. частота (официально) = 20МГц. Минимальный делитель частоты для SPI = 2. Путём нехитрых подсчётов видим, что частота SPI (макс.) = 10МГц. Это если все данные уже посчитаны и данные просто льются на потоке, и то, такой частоты достигнуть нельзя, ибо надо ещё данные в буфер загружать и т.д. и т.п.
Нужен быстрый вывод графики - либо разгоняем AVR (https://geektimes.ru/post/258086/), либо берем контроллер помощнее, либо берём не контроллер вовсе, а ПЛИСину. Вот там раздол для графического творчества! У меня на STM32F030F4P6 SPI (по расчётам) разогнался до 48МГц (опять же, это макс. доп. частота, эффективная - чуть ниже). Считаем для экрана 128x128:
128*128 = 16384(пикселей)
Глубина цвета = 16бит (rrrrrggggggbbbbb)
16384 * 16 = 262144 (бит) - послать для заполнения экрана
48000000 / 262144 ≈ 183.105 (FPS)
Понятно, что ещё есть служебные команды, расчёт изображения, итого, ИМХО, около 80FPS у меня было.
P.S. Посчитал для AVR@20МГц (SPI 10МГц). Теоретическое кол-во FPS ≈ 38.15 . Фактическое - меньше 10.
Бум!)
А если использовать параллельный интерфейс, да ещё и через FSMC...так там сотни FPS будут) Но я пока играюсь с младшими STM, там такого нету.
А Arduino DUE, это ж вроде ARM, он как с графикой - справляется? По моему - не очень как-то.
Yarik.Yar, вижу что ты с экранами чаще дело имел чем я, не подскажешь по этой теме? Посмотреть
1. ARM есмь общее зерно. Реализация от Atmel - не очень-то, на самом деле) Да и ардуина - зло.
2. По той теме - обычно контроллер поддерживает несколько интерфейсов. В параллельном режиме SDA, SCL и SCK будут выпонять другие функции.
А вообще, по дисплеям тут есть и более спецы, чем я, diger67, к примеру.
Да они-то тут есть, но личка на форуме не предусмотрена. И как до них достучаться?
А datasheet на чип кто нибудь пытался посмотреть? Нет там I2C, параллельный и SPI 3 или 4 проводной. Просто китайцы так подписали SDA это обычно MOSI, SCL - SCK, A0 - DC и про RESET нельзя забывать.
Мм...я не дошёл до того уровня экстрасенсорной восприимчивости, когда, глядя на шину данных, понимаешь, какой контроллер внутре.
Посему поиск даташита был бы занятием эфемерным и не дал бы результата)
А datasheet на чип кто нибудь пытался посмотреть?
еще бы точно знать на какой чип даташид искать((
ибо написать на дисплее что угодно можно((
надпись на шлейфе не дала гуглу шансов найти чтото
А datasheet на чип кто нибудь пытался посмотреть?
еще бы точно знать на какой чип даташид искать((
ибо написать на дисплее что угодно можно((
надпись на шлейфе не дала гуглу шансов найти чтото
Эммм... Смотри пункт первый из моего первого поста. В некотором смысле это тоже сбор информации. Только аккуратно!
Да я вот тоже задумался... Читал PDF по UTFT и заметил такую же фигню:
И как ардуина будет знать что по каким пинам там должно идти? Или там как раз первая переменная и определяет что там на пинах надо ловить?
Апну
и uno и mega2560 - результат один - белый экран((((
Посоветуйте попроще экранчик без головоломок, для начинающего...
Думаю 5110 взять)