Цвета ST7735 TFT

Flyboy74
Вторник 21 августа 2018 г., 4:18
Я использую TFT ST7735 с Res 160x228 в 16 -битном цветовом режиме.

Когда я отображаю изображения, они окрашены в синий.

Я предполагаю, что это гамма, которую мне нужно настроить?? на синем канале слишком большой прирост??

Я не совсем уверен, как работает гамма. Кто -нибудь может объяснить мне это??

Стивестронг
Ср 22 августа 2018 г. 10:10
Какое ядро
Какая доска
какой либерал

Flyboy74
Ср 22 августа 2018 г., 21:45
Я делаю свою собственную библиотеку.

Речь идет о понимании того, как программировать ST7735, а не о доске или ядре.

Я предполагаю, что речь идет о установке этих регистров

Gmctrp1 (e0h): гамма (‘+’Настройка характеристик полярности)
Gmctrn1 (e1h): гамма ‘-’Настройка характеристик коррекции полярности

Mrburnette
Ср 22 августа 2018 11:48
[Flyboy74 - Ср 22 августа 2018 г., 21:45] - Я делаю свою собственную библиотеку.

Речь идет о понимании того, как программировать ST7735, а не о доске или ядре.

Я предполагаю, что речь идет о установке этих регистров

Gmctrp1 (e0h): гамма (‘+’Настройка характеристик полярности)
Gmctrn1 (e1h): гамма ‘-’Настройка характеристик коррекции полярности
Вы пишете свою собственную графическую библиотеку и просите форум помочь вам понять, как установить гамма ST7735? Серьезно, чувак?

Я предложу вытащить другие совместимые библиотеки ST7735 и выяснить, как другие программисты атакуют проблему. Быстрый поиск в Google должен заставить вас начать.

Одним из результатов является PDF, который выглядит многообещающе.


Луча

Flyboy74
Чт 23 августа 2018 г., 3:04
Вы пишете свою собственную графическую библиотеку и просите форум помочь вам понять, как установить гамма ST7735? Серьезно, чувак?

Я предложу вытащить другие совместимые библиотеки ST7735 и выяснить, как другие программисты атакуют проблему.
Ну, конечно, первое, что я сделал, это увидеть, что происходит, когда я копирую настройки других людей.

Например, я попробовал этот ребят http: // форум.эспроино.com/разговоры/269808/ dmaRead (uint8 tx_val, uint8 *rx_buf, uint8 n){}

Эдогальдо
Че 23 августа 2018 г., 7:32 утра
Вы также тестировали с другими дисплеями? Есть вероятность, что это ошибка HW Inthat..

Mrburnette
Че 23 августа 2018 12:24
Просматривая Adafruit Lib, я нашел это:
https: // github.com/adafruit/adafruit-st ... 0D86C5AD12

Который предоставляет следующую информацию о том, где в листе данных определяется последовательность init: Информация на страницах 148-151 на этом таблице данных ST7735: ftp: // imall.Iteadstudio.com/im120419001 ... ST7735.PDF Больше поиска нашел реализацию Python, которая лучше задокументирована и не ссылается на «волшебную пыль» ... uint8 dmaTransfer(void * transmitBuf, void * receiveBuf, uint16 length);

Дэйвид.Прентис
Че 23 августа 2018 12:39
В таблице данных ST7735S описывается гамма -регистры и то, как работают параметры.

Есть десятки 132x162 контроллеров TFT. Вы уверены, что у вас есть чип Sitronics?
Многие производители возвращают аналогичные значения идентификации. Так что простой чтение идентификатора недостаточно.
Вам нужно сделать некоторую детективную работу E.глин. Сравните поведение регистров производителей.

Я предлагаю вам опубликовать ссылку на фактический дисплей, который вы купили.
И запустите тот же код на втором дисплее.

Возможно, у вас есть отклонение. Либо TFT -матрица или кремний в контроллере.

Дэйвид.

Дэйв Дж
Че 23 августа 2018 г. 13:33
[Эдогальдо - Четверг 23 августа 2018 г., 7:32 утра] - Вы также тестировали с другими дисплеями? Есть вероятность, что это ошибка HW Inthat..
Это мое подозрение.

Изменение настройки гамма в любом случае не решит проблему. Те же настройки используются для каждого из цветов. Это не возможно изменить только для синего.

Возможно, стоит изменить формат пикселя, чтобы увидеть, имеет ли это какое -либо влияние (дисплей поддерживает 12, 16 и 18 -битные режимы), но нет никакой гарантии, которая поможет.


Действительно глупый вопрос, который никто не думает: вы проверили, что нет синей тонированной пленки, покрывающей дисплей для защиты во время доставки, не вы вас?

Flyboy74
Че 23 августа 2018 г., 21:35
[Дэйв Дж - Четверг 23 августа 2018 г. 13:33] -
[Эдогальдо - Четверг 23 августа 2018 г., 7:32 утра] - Вы также проверяли с другими дисплеями? Есть вероятность, что это ошибка HW Inthat..
Это мое подозрение.

Изменение настройки гамма в любом случае не решит проблему. Те же настройки используются для каждого из цветов. Это не возможно изменить только для синего.

Возможно, стоит изменить формат пикселя, чтобы увидеть, имеет ли это какое -либо влияние (дисплей поддерживает 12, 16 и 18 -битные режимы), но нет никакой гарантии, которая поможет.


Действительно глупый вопрос, который никто не думает: вы проверили, что нет синей тонированной пленки, покрывающей дисплей для защиты во время доставки, не вы вас?
Да, я обнаружил, что у моего кода нет проблемы с синим оттенком на других HW, поэтому похоже на то, что HW - это вина, но я надеялся, что это можно будет компенсировать программное обеспечение для синего оттенка.

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

Эдогальдо
Че 23 августа 2018 г. 23:04
Хорошо, кажется, что красные и зеленые пиксели не достаточно яркие..
Вы должны проверить, как снизить синюю яркость, чтобы сбалансировать дефект..

Flyboy74
Пт 24 августа 2018 г. 11:58 утра
[Эдогальдо - Четверг 23 августа 2018 г., 23:04] - Хорошо, кажется, что красные и зеленые пиксели не достаточно яркие..
Вы должны проверить, как снизить синюю яркость, чтобы сбалансировать дефект..
Да, это то, что я хотел сделать, но не смог определить, можно ли отрегулировать усиление по отдельным каналам.

Дэйв Дж
Пт 24 августа 2018 г., 13:27
[Flyboy74 - Пт 24 августа 2018 г. 11:58] -
[Эдогальдо - Четверг 23 августа 2018 г., 23:04] - Хорошо, кажется, что красные и зеленые пиксели не достаточно яркие..
Вы должны проверить, как снизить синюю яркость, чтобы сбалансировать дефект..
Да, это то, что я хотел сделать, но не смог определить, можно ли отрегулировать усиление по отдельным каналам.
Я не думаю, что можно получить TFT, чтобы настроить его для отдельных каналов.

Эта статья Дает хорошее описание того, как контроллеры TFT работают внутри. Для меня кажется, что проблема заключается в написании зеленых/красных битов в память, либо передает их из памяти в преобразователи d/a (см. Рисунок 7A).

Это оставляет исправлять его в коде.

Первое, что нужно сделать, это выяснить, какие кусочки красных и зеленых каналов не попадают на дисплей. Я бы посоветовал написать программу, чтобы нарисовать серые бары по экрану с одним битом в выключении и все остальные на. эн.глин. Для дисплея с 4 битами на цвет, который вы бы использовали 0x7, 0xb, 0xd и 0xe. Если бар не серый, соответствующий бит не будет работать. Обратите внимание, что это может быть не то же самое для красных и зеленых каналов.

После того, как вы определили, какие биты затронуты, у вас есть два варианта:
  1. Если достаточно лучших наиболее значительных битов поработают по всем каналам, скажем, верхняя четверка, чтобы вы могли жить с уменьшенной глубиной цвета, вы можете просто замаскировать все биты ниже этого. Учитывая, что этот дисплей поддерживает 12 -битный режим на пиксель, если вы можете жить с 4 битами на канал или меньше, вы можете переключиться на этот режим и уменьшить количество данных, необходимые для отправки на дисплей.
  2. Если слишком высокий, не работает для вас, чтобы жить с уменьшенной глубиной цвета, вам придется написать код, чтобы избежать его использования.

    Допустим, второй наиболее значительный бит 5 -битного (так что диапазон от 0x00 до 0x1f) не работает. Все, что с набором 0x08, даст не тот цвет. Но 0x07 очень близок к 0x08, так почему бы не уменьшить все ниже верхнего бита на 1. Некоторый код сделает это более ясным: #define DEBOUNCE 100 void setup() { pinMode(PC13, OUTPUT); digitalWrite(PC13, LOW); pinMode(PB10, INPUT_PULLUP); pinMode(PB11, INPUT_PULLUP); Serial.begin(115200); } int isButtonPressed(int pin) { if (digitalRead(pin)) { delay(DEBOUNCE); while (digitalRead(pin)); return true; } else return false; } void loop() { if (isButtonPressed(PB10)) { Serial.println("You pressed UP"); digitalWrite(PC13, HIGH); delay(500); } if (isButtonPressed(PB11)) { Serial.println("You pressed DOWN"); digitalWrite(PC13, LOW); delay(500); } }

Flyboy74
Сб 25 августа 2018 г., 6:42
Большое спасибо за ссылку, Дэйв Дж. Я потратил некоторое время, чтобы внимательно прочитать ее, чтобы лучше понять мою проблему. Всего за брейф на него может быть возможная проблема генератора привода напряжения, и есть ряд регистров, которые можно настроить, чтобы настроить это.

Дэйв Дж
Сб 25 августа 2018 г. 10:21
[Flyboy74 - Сб 25 августа 2018 г. 6:42] - Большое спасибо за ссылку, Дэйв Дж. Я потратил некоторое время, чтобы внимательно прочитать ее, чтобы лучше понять мою проблему. Всего за брейф на него может быть возможная проблема генератора привода напряжения, и есть ряд регистров, которые можно настроить, чтобы настроить это.
Генератор привода напряжения, по -видимому, применяется ко всем каналам в равной степени, поэтому я сомневаюсь в этом помощи.

Кстати, проигнорируйте мое второе предложение по исправлению - я понял. Вы могли бы сделать что -то похожее, чтобы получить дополнительное эффективное. Допустим, 3 -й MSB 5 -битного канала не работает. Вы могли бы сделатьxa[a] = (((uint32_t)(reala)) | ((uint32_t)(imag<<16)));

Flyboy74
Сб 25 августа 2018 г. 10:33
[Дэйв Дж - Сб 25 августа 2018 г. 10:21] -
[Flyboy74 - Сб 25 августа 2018 г. 6:42] - Большое спасибо за ссылку, Дэйв Дж. Я потратил некоторое время, чтобы внимательно прочитать ее, чтобы лучше понять мою проблему. Всего за брейф на него может быть возможная проблема генератора привода напряжения, и есть ряд регистров, которые можно настроить, чтобы настроить это.
Генератор привода напряжения, по -видимому, применяется ко всем каналам в равной степени, поэтому я сомневаюсь в этом помощи.

Кстати, проигнорируйте мое второе предложение по исправлению - я понял. Вы могли бы сделать что -то похожее, чтобы получить дополнительное эффективное. Допустим, 3 -й MSB 5 -битного канала не работает. Вы могли бы сделатьuint32 *EXTI_IMR = (uint32_t *)0x400107ff; uint32 *EXTI_RTSR = (uint32_t *)0x40010807; uint32 *AFIO_EXTICR1 = (uint32_t *)0x40010407; void setup() { *EXTI_IMR = 0b00000000000000000000000000000001; //setup for pin 0 *EXTI_RTSR = 0b00000000000000000000000000000001; //setup for rising pin 0 *AFIO_EXTICR1 = 0b00000000000000000000000000000000; //setup for Port A }

STM8S003F3P6 - ESP8266 ESP -14