Всех приветствую из солнечного Баку.
Недавно купил себе 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
Может быть я что то не так подключил, а может быть библиотека не та.
Пожалуйста помогите мне решить этот вопрос.
Вот код программы:
005 | #define rst 8 // you can also connect this to the Arduino reset |
007 | #include <Adafruit_GFX.h> // Core graphics library |
008 | #include <Adafruit_ST7735.h> // Hardware-specific library |
012 | Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst); |
023 | Serial .print( "hello!" ); |
034 | tft.initR(INITR_BLACKTAB); |
040 | Serial .println( "init" ); |
042 | uint16_t time = millis(); |
043 | tft.fillScreen(ST7735_BLACK); |
044 | time = millis() - time; |
046 | Serial .println(time, DEC); |
050 | tft.fillScreen(ST7735_BLACK); |
051 | 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); |
059 | tft.drawPixel(tft.width()/2, tft.height()/2, ST7735_GREEN); |
063 | testlines(ST7735_YELLOW); |
067 | testfastlines(ST7735_RED, ST7735_BLUE); |
070 | testdrawrects(ST7735_GREEN); |
073 | testfillrects(ST7735_YELLOW, ST7735_MAGENTA); |
076 | tft.fillScreen(ST7735_BLACK); |
077 | testfillcircles(10, ST7735_BLUE); |
078 | testdrawcircles(10, ST7735_WHITE); |
090 | Serial .println( "done" ); |
095 | tft.invertDisplay( true ); |
097 | tft.invertDisplay( false ); |
101 | void testlines(uint16_t color) { |
102 | tft.fillScreen(ST7735_BLACK); |
103 | for (int16_t x=0; x < tft.width(); x+=6) { |
104 | tft.drawLine(0, 0, x, tft.height()-1, color); |
106 | for (int16_t y=0; y < tft.height(); y+=6) { |
107 | tft.drawLine(0, 0, tft.width()-1, y, color); |
110 | tft.fillScreen(ST7735_BLACK); |
111 | for (int16_t x=0; x < tft.width(); x+=6) { |
112 | tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color); |
114 | for (int16_t y=0; y < tft.height(); y+=6) { |
115 | tft.drawLine(tft.width()-1, 0, 0, y, color); |
118 | tft.fillScreen(ST7735_BLACK); |
119 | for (int16_t x=0; x < tft.width(); x+=6) { |
120 | tft.drawLine(0, tft.height()-1, x, 0, color); |
122 | for (int16_t y=0; y < tft.height(); y+=6) { |
123 | tft.drawLine(0, tft.height()-1, tft.width()-1, y, color); |
126 | tft.fillScreen(ST7735_BLACK); |
127 | for (int16_t x=0; x < tft.width(); x+=6) { |
128 | tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color); |
130 | for (int16_t y=0; y < tft.height(); y+=6) { |
131 | tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color); |
135 | void testdrawtext( char *text, uint16_t color) { |
137 | tft.setTextColor(color); |
138 | tft.setTextWrap( true ); |
142 | void testfastlines(uint16_t color1, uint16_t color2) { |
143 | tft.fillScreen(ST7735_BLACK); |
144 | for (int16_t y=0; y < tft.height(); y+=5) { |
145 | tft.drawFastHLine(0, y, tft.width(), color1); |
147 | for (int16_t x=0; x < tft.width(); x+=5) { |
148 | tft.drawFastVLine(x, 0, tft.height(), color2); |
152 | void testdrawrects(uint16_t color) { |
153 | tft.fillScreen(ST7735_BLACK); |
154 | for (int16_t x=0; x < tft.width(); x+=6) { |
155 | tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color); |
159 | void testfillrects(uint16_t color1, uint16_t color2) { |
160 | tft.fillScreen(ST7735_BLACK); |
161 | for (int16_t x=tft.width()-1; x > 6; x-=6) { |
162 | tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1); |
163 | tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2); |
167 | void testfillcircles(uint8_t radius, uint16_t color) { |
168 | for (int16_t x=radius; x < tft.width(); x+=radius*2) { |
169 | for (int16_t y=radius; y < tft.height(); y+=radius*2) { |
170 | tft.fillCircle(x, y, radius, color); |
175 | void testdrawcircles(uint8_t radius, uint16_t color) { |
176 | for (int16_t x=0; x < tft.width()+radius; x+=radius*2) { |
177 | for (int16_t y=0; y < tft.height()+radius; y+=radius*2) { |
178 | tft.drawCircle(x, y, radius, color); |
183 | void testtriangles() { |
184 | tft.fillScreen(ST7735_BLACK); |
191 | for (t = 0 ; t <= 15; t+=1) { |
192 | tft.drawTriangle(w, y, y, x, z, x, color); |
200 | void testroundrects() { |
201 | tft.fillScreen(ST7735_BLACK); |
205 | for (t = 0 ; t <= 4; t+=1) { |
210 | for (i = 0 ; i <= 24; i+=1) { |
211 | tft.drawRoundRect(x, y, w, h, 5, color); |
223 | tft.setTextWrap( false ); |
224 | tft.fillScreen(ST7735_BLACK); |
225 | tft.setCursor(0, 30); |
226 | tft.setTextColor(ST7735_RED); |
228 | tft.println( "Hello World!" ); |
229 | tft.setTextColor(ST7735_YELLOW); |
231 | tft.println( "Hello World!" ); |
232 | tft.setTextColor(ST7735_GREEN); |
234 | tft.println( "Hello World!" ); |
235 | tft.setTextColor(ST7735_BLUE); |
240 | tft.fillScreen(ST7735_BLACK); |
241 | tft.setTextColor(ST7735_WHITE); |
243 | tft.println( "Hello World!" ); |
245 | tft.setTextColor(ST7735_GREEN); |
247 | tft.println( " Want pi?" ); |
249 | tft.print(8675309, HEX); |
250 | tft.println( " Print HEX!" ); |
252 | tft.setTextColor(ST7735_WHITE); |
253 | tft.println( "Sketch has been" ); |
254 | tft.println( "running for: " ); |
255 | tft.setTextColor(ST7735_MAGENTA); |
256 | tft.print(millis() / 1000); |
257 | tft.setTextColor(ST7735_WHITE); |
258 | tft.print( " seconds." ); |
263 | tft.fillScreen(ST7735_BLACK); |
264 | tft.fillRoundRect(25, 10, 78, 60, 8, ST7735_WHITE); |
265 | tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_RED); |
268 | tft.fillRoundRect(25, 90, 78, 60, 8, ST7735_WHITE); |
269 | tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_GREEN); |
270 | tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_GREEN); |
273 | tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_BLUE); |
276 | tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_RED); |
277 | tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_RED); |
279 | 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
1
// Usage: myGLCD(<model code>, SDA, SCL, CS, RST[, RS]);
2
//
3
// When using the DM-TFT18-101 and shield from DisplayModule you should use the following:
4
// UTFT myGLCD(DMTFT18101,2,3,4,6,5);
5
//
6
// When using the TFT18SP shield from ElecFreaks you should use the following:
7
// UTFT myGLCD(TFT18SHLD,7,6,5,3,4);
8
//
9
UTFT myGLCD(ITDB18SP,11,10,9,12,8);
// Remember to change the model parameter to suit your display module!
О как! Я так понял что в случае с ардуиной всегда приходится выбирать между скоростью и количеством занятых пинов. 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 взять)