Сдвиг картинки на экране 1.44 дюйма на ST7735

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Собственно, проблема- приехали экранчики 1.44 дюйма для проекта часов, обнаружилась неприятная хреновинка - изображение сдвинуто на 2 пикселя по ординате и на 3 пикселя по абсциссе, в итоге, если писать текст с нулевой координаты, то он немного обрезается, ну а снизу и сбоку экрана рамочка из рандомных пикселов. Как преодолеть?

З.Ы. Ссылка на экран - http://ru.aliexpress.com/item/TFT-1-44-SPI-Serial-Module-LCD-Colorful-Display-Panel-Red-for-Arduino-stm32-51/32247258826.html?recommendVersion=1

 

Заранее спасибо. Если нужны фотки - скину завтра, сейчас лениваа фотик искаать.

exolon
Offline
Зарегистрирован: 20.05.2015

таже проблемма, значит я не один такой (

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

 

Сейчас ваяю свою библиотеку, может решим проблему)

alfenok
Offline
Зарегистрирован: 11.08.2015

Yarik.Yar пишет:

Собственно, проблема- приехали экранчики 1.44 дюйма для проекта часов, обнаружилась неприятная хреновинка - изображение сдвинуто на 2 пикселя по ординате и на 3 пикселя по абсциссе, в итоге, если писать текст с нулевой координаты, то он немного обрезается, ну а снизу и сбоку экрана рамочка из рандомных пикселов. Как преодолеть?

З.Ы. Ссылка на экран - http://ru.aliexpress.com/item/TFT-1-44-SPI-Serial-Module-LCD-Colorful-Display-Panel-Red-for-Arduino-stm32-51/32247258826.html?recommendVersion=1

 

Заранее спасибо. Если нужны фотки - скину завтра, сейчас лениваа фотик искаать.

 

Поделись распиновкой, какие библиотеки используешь для данного дисплея???

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Хм...ок. Но утром)
Кажу - библиотека от Adafruit, гуглится adafruit st7735.
Распиновку завтра скажу)

alfenok
Offline
Зарегистрирован: 11.08.2015

Yarik.Yar пишет:
Хм...ок. Но утром) Кажу - библиотека от Adafruit, гуглится adafruit st7735. Распиновку завтра скажу)

Эти библиотеки я уже загуглил, а с распиновкой туговато, вечер сижу, никак догнать не могу (((

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Итак, своя библиотека не помогла. Видимо, китайцы просто не так запаяли экран...попробую сдвигом картинку выровнять, отпишусь, если что получится.

Pooler
Offline
Зарегистрирован: 26.01.2017

Так этот вопрос не решается? У меня тоже сдвинуто на 2 пиксела влево? Это чисто какие-то партии этих экранов глючные?

alfenok
Offline
Зарегистрирован: 11.08.2015

решается, я точно уже не помню, но я подключал через родные примеры в программе ардуино, и там при залитии тестового скетча нужно было какую-то строку расскоментировать, а какую-то закоментировать и все пошло ))))

Pooler
Offline
Зарегистрирован: 26.01.2017

Там что если вниз на 32 сдвинуто - да, OFFSET 0 надо сделать, а вот как убрать смещение влево на 2 - никак не могу нагуглить ((

alfenok
Offline
Зарегистрирован: 11.08.2015

посмотрю попозже, что вспомню - напишу, именно смещение на 2 строки

Pooler
Offline
Зарегистрирован: 26.01.2017

Спасибо, буду ждать.

S_Sanich
Offline
Зарегистрирован: 17.01.2017

ТщательнЕе надо искать, товарищи, тщательнЕе. Во тут лежит... Пиво оставьте себе))

 

Pooler
Offline
Зарегистрирован: 26.01.2017

S_Sanich пишет:

ТщательнЕе надо искать, товарищи, тщательнЕе. Во тут лежит... Пиво оставьте себе))

От души, Саныч! То, что нужно! А от пива зря отказался ))

S_Sanich
Offline
Зарегистрирован: 17.01.2017

Да не вопрос. Всегда приятно, когда что-то тобой нарытое кому-то пригодилось. И даже без пива приятно)) Менталитет у нас такой, видимо))

romansk
Offline
Зарегистрирован: 18.03.2019

По ссылке Саныча описание проблемы в дисплеях на контроллере ILI9163,  а тема про контроллер ST7735.

Однако собственно решение похоже )

В каталоге библиотеки Adafruit ST7735 есть файл Adafruit_ST77xx.cpp

и в нем функция 

void Adafruit_ST77xx::setAddrWindow(uint16_t x, uint16_t y, uint16_t w,
  uint16_t h) {
  x += _xstart;
  y += _ystart;
  uint32_t xa = ((uint32_t)x << 16) | (x+w-1);
  uint32_t ya = ((uint32_t)y << 16) | (y+h-1); 
 
  writeCommand(ST77XX_CASET); // Column addr set
  SPI_WRITE32(xa);
 
  writeCommand(ST77XX_RASET); // Row addr set
  SPI_WRITE32(ya);
 
  writeCommand(ST77XX_RAMWR); // write to RAM
}
 
 
соответственно нужно плюсовать сдвиг в строках
  x += _xstart;
  y += _ystart;
 
если нужно сдвинуть экран на два вправо и три вниз (у меня такое смещение), то правим так
  x += _xstart+2;
  y += _ystart+3;
 
 
S_Sanich
Offline
Зарегистрирован: 17.01.2017

Ну, дык... Истиному инженеру тока принцЫп (идея) нужна. А уж как ее применить к своей проблеме - это и есть инженерИя))) Глупо пользоваться чисто копипастами, согласитесь, сэр... ))

romansk
Offline
Зарегистрирован: 18.03.2019

точно )

в дополнении

проблема так же может крыться в неверно выбранной строке инициализации.

они вообщем то в штатных примерах все присутствуют, но все кроме одной закомментированы и если по умолчанию не разбираясь компилять, то не факт, что совпадет. 

это надо внимательнее поглядеть, что за тип экрана и разрешение и немного вчитаться в комментарии примера, выбрать нужную строчку и ей дальше пользоваться в своих поделках )

madmentat
Offline
Зарегистрирован: 27.02.2020

romansk пишет:

По ссылке Саныча описание проблемы в дисплеях на контроллере ILI9163,  а тема про контроллер ST7735.

Однако собственно решение похоже )

В каталоге библиотеки Adafruit ST7735 есть файл Adafruit_ST77xx.cpp

и в нем функция 

void Adafruit_ST77xx::setAddrWindow(uint16_t x, uint16_t y, uint16_t w,
  uint16_t h) {
  x += _xstart;
  y += _ystart;
  uint32_t xa = ((uint32_t)x << 16) | (x+w-1);
  uint32_t ya = ((uint32_t)y << 16) | (y+h-1); 
 
  writeCommand(ST77XX_CASET); // Column addr set
  SPI_WRITE32(xa);
 
  writeCommand(ST77XX_RASET); // Row addr set
  SPI_WRITE32(ya);
 
  writeCommand(ST77XX_RAMWR); // write to RAM
}
 
 
соответственно нужно плюсовать сдвиг в строках
  x += _xstart;
  y += _ystart;
 
если нужно сдвинуть экран на два вправо и три вниз (у меня такое смещение), то правим так
  x += _xstart+2;
  y += _ystart+3;
 
 

А где этот каталог-то находится? Может, я чего-то напутал?

У меня экран работает на Adafruit. В папке 

C:\Program Files (x86)\Arduino\libraries" лежат какие-то библиотеки. Но файла "Adafruit_ST77xx.cpp" там нет. Я нашел его в папке

"C:\Users\madmentat\Documents\Arduino\libraries\Adafruit_ST7735_and_ST7789_Library".

Сделал как указано выше, то есть, к "x += _xstart;" и "y += _ystart;" прибавил соответствующие цифры, сохранил изменения, перезалил скетч... Однако никакого толку нет. Вот интересно, почему?

madmentat
Offline
Зарегистрирован: 27.02.2020

madmentat пишет:

Сделал как указано выше, то есть, к "x += _xstart;" и "y += _ystart;" прибавил соответствующие цифры, сохранил изменения, перезалил скетч... Однако никакого толку нет. Вот интересно, почему?

Чот затупил ) Мне же надо было сдвинуть на два влево и на три вверх, то есть, вместо плюсиков нужны были минусики )