Страница 1 из 1

Подключение дисплея Powertip PG240160C от ПЧ к Discovery

Добавлено: Вт окт 01, 2013 12:00:45
mr_smit
Накрылась панель от преобразователя частоты (Altivar 61). Просто горит подсветка дисплея и всё. Прогревание платы помогло, но хватило на неделю. Панель из соседнего частотника в этом частотнике работает. В общем панель под замену. Пришла новая, поставили, всё нормально.

Но дурная голова рукам покоя не дает, поэтому разобрал панель, достал дисплей и хочу попробовать запустить его на плате STM32 Discovery, возможно дисплей живой. Дисплей Powertip PG240160C. На сайте производителя есть описание дисплея. Построен он на двух контроллерах ST8024 и ST8016:
ST8016T.pdf
(979.57 КБ) 777 скачиваний
Sironix ST8024T V0.12.pdf
(647.07 КБ) 822 скачивания
У дисплея нет своей памяти и его нужно постоянно обновлять, т.е. нужен буфер под изображение. Разрешение 240х160. Значит 240*160=38400 бит. 38400/8/1024 ~ 4,7кБ. На дискавери 8 кБ RAM т.е. хватит. Вопрос в другом, я не понимаю распиновку указанную производителем, потому что никогда не имел дела с подобными дисплеями. Что такое frame reverse signal и почему их аж 3 штуки? Bias voltage for non-select? И т.д. по списку. Не знаю с чего начать подключение.

Изображение Изображение Изображение Изображение Изображение

Re: Подключение дисплея Powertip PG240160C от ПЧ к Discovery

Добавлено: Вт окт 01, 2013 14:43:25
mr_smit
Нашел статью: LCD controller for ST8024+ST8016 based displays

Там автор подключает подобный дисплей только 320х240. И пишет: "чтобы отправить кадр надо установить FLM в 1, подать отрицательный импульс на CL1 чтобы сбросить вертикальный счетчик, вернуть FLM в 0. Теперь отправить 80 4-х битных слов тактированных CL2. После этого подать отриц. импульс на CL1 чтобы увеличить вертикальный счетчик и подождать определенное время до следующей линии. Повторить процедуру отправки для всех линий и снова синхронизировать кадр."

Если посмотреть на распиновку моего дисплея, то получается:

4 -> +18 вольт (контраст)
5 -> +3,3 вольта (питание)
6 -> синхронизация кадра (FLM из примера) ?
7 -> земля
8 -> импульс защелки данных (CL1 из примера) ?

10 -> +3,3 вольт (включаем дисплей)
11 -> импульс смещения данных (CL2 из примера) ?

14-17 -> 4-х битная шина данных
18 -> плюс подсветки
19 -> земля

Так что ли?

Re: Подключение дисплея Powertip PG240160C от ПЧ к Discovery

Добавлено: Вт окт 01, 2013 15:38:05
balmer
Можно для общего понимания почитать Reference manual на STM32L152xx, раздел "15 Liquid crystal display controller (LCD)"

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

Re: Подключение дисплея Powertip PG240160C от ПЧ к Discovery

Добавлено: Вт окт 01, 2013 16:15:04
mr_smit
balmer писал(а):Если вкратце - LCD сегменты они требуют для того чтобы гореть переменного напряжения. И они портятся от того, что через них протекает постоянный ток.
Про это я знаю.

Не пойму какой пин на дисплее за что отвечает. Например frame reverse signal, Bias voltage for non-select - что это такое?

Re: Подключение дисплея Powertip PG240160C от ПЧ к Discovery

Добавлено: Сб окт 05, 2013 00:36:09
VDLab
"frame reverse signal" на разъёме дисплея - это то же сигнал, что и FR в драйвере. По сути является входом модуляции для драйвера, каждый кадр нужно менять его логич. состояние. На временной диаграмме в даташитах на драйверы это показано.
Bias voltage for non-select - эти выводы подключаются к источнику опорных напряжений, ориентировочная схема которого опять же есть в даташитах. Конкретную схему этого узла (с номиналами резисторов делителей) нужно срисовывать с платы контроллера дисплея.

Re: Подключение дисплея Powertip PG240160C от ПЧ к Discovery

Добавлено: Ср янв 15, 2014 12:57:04
mr_smit
Решил снова заняться этим дисплеем. Нашел куда подключается питание в оригинальной плате. Подал туда 24 вольта и увидел что дисплей всё таки жив (видимая область заливается черным):
Изображение

Замерил напряжения:

2 (bias voltage) - 2,2 вольта
3 (bias voltage) - 26 вольт
4 (Power supply for LCD) - 28,4 вольта
5 (Power supply for Logic) - 3,3 вольта

12 (bias voltage) - 4,4 вольта
13 (bias voltage) - 24 вольта

Взял осциллограф. Выводы 1,9,20 (Frame Reverse Signal):
Изображение

Амплитуда 3,3 вольта:
Изображение

Причем все 3 вывода синхронны и повторяют друг друга:
Изображение

6-й вывод (Scan start-up signal) - на нем ноль.

На 8-м выводе (Data Latch Pulse) присутствуют импульсы длительностью ~0,6 мкс с интервалом ~80 мкс:
Изображение Изображение

Синхронизация 8-го вывода с 1,9,20. Сверху сигнал с 1 (Frame Reverse Signal), снизу 8 (Data Latch Pulse).
Изображение

11-й вывод (Data shift pulse):
Изображение

Синхронизация 1 (Frame Reverse Signal) и 11 (Data shift pulse). Сверху 11 снизу 1:
Изображение

Выводы 14-17 (Data bus 3-0) - видно что есть какая то активность.

Пока перевариваю информацию. Если есть идеи то прошу озвучить. А пока сделал плату адаптер под дисплей с двумя повышающими преобразователями (делал ещё до замеров к сожалению):
Изображение

Re: Подключение дисплея Powertip PG240160C от ПЧ к Discovery

Добавлено: Ср янв 15, 2014 16:16:14
mr_smit
Длина Frame Reverse Signal составляет 13 мс. Интервал импульсов Data Latch Pulse примерно 80 мкс. Получается 13000 мкс / 80 мкс = 162,5 т.е. с учетом погрешности измерения 160. У нас как раз дисплей имеет 160 строк. Но что тогда делает Data shift pulse ? И почему они следуют как бы по два?

Примерно понимаю так: в начале кадра Frame Reverse Signal меняет своё значение. В этот же момент на Data Latch Pulse идет импульс с 0 в 1 (начало передачи строки) и в этот же момент на Data shift pulse идет импульс с 1 в 0 (начало передачи данных). После каждого Data Latch Pulse на DATA 3-0 выплевываются данные строки. После завершения передачи строки ещё один импульс Data shift pulse с 1 в 0 (типа заперли данные). Ждем начала следующего Data Latch Pulse (импульс начала передачи следующей строки). И так все 160 строк.

Но что то пока до конца не понимаю. Прошу помощи.

Re: Подключение дисплея Powertip PG240160C от ПЧ к Discovery

Добавлено: Пт янв 17, 2014 11:56:01
mr_smit
Снял лог логическим анализатором. Не пойму как выставляются данные на входе. Latch переводится как защелка, Shift - сдвиг.

Изображение

Изображение

Изображение

Лог целиком можно открыть в Saleae Logic 1.1.15
Всё.zip
(723.84 КБ) 337 скачиваний
Frame Reverse Signal меняет своё состояние каждый кадр. Scan start-up signal - сигнализирует о начале нового кадра. Data Latch Pulse - сигнализирует о начале новой строки. После этого на выводах Data3-0 устанавливаются данные которые тактируются импульсами Data shift pulse. Импульс как бы двойной потому что байт задвигается за 2 раза (по 4 бита) по спадающему фронту Data shift pulse.

Строка состоит из 240 бит (30 байт). Т.е. мы должны отправить 60 раз по 4 бита или 30 байт. Но почему в интервал между строчными импульсами Data Latch Pulse укладывается 32 байта?? Откуда 2 лишних байта? Причем если все байты равны 0 (дисплей полностью залит), то именно эти 2 байта всегда меняются. Может это какая то доп. информация?? Перерыл весь даташит на контроллер, никакого упоминания не нашел.

Изображение

Если не считать этих 2-х не понятных байт, то в принципе можно пробовать писАть код под Discovery. Только 4 разных bias voltage меня смущают.

Re: Подключение дисплея Powertip PG240160C от ПЧ к Discovery

Добавлено: Пн янв 20, 2014 20:29:40
drakon
больше всего, контроллер рассчитан на разрешение 256x160, а матрица стоит 240x160, вот и пихают в последние 2 байта что попало, все ровно их не видно.

Re: Подключение дисплея Powertip PG240160C от ПЧ к Discovery

Добавлено: Ср янв 22, 2014 18:13:03
mr_smit
Пытаюсь вывести изображение. Сделал двумерный массив строки/данные строки. Значения битов записаны начиная с левого верхнего угла изображения.

Код: Выделить всё

const uint8_t picture[160][30] =
{
{ 0xC3, 0x9F, 0xFF, 0xFF, 0xFF, ...},
{ 0xC3, 0x9F, 0xFF, 0xFF, 0xFF, ...}
...
}
Вывожу на дисплей:

Код: Выделить всё

#include <stm32f10x.h>
#include <stm32f10x_conf.h>

#include <stm32f10x_gpio.h>
#include <stm32f10x_rcc.h>
#include <pic.h>

uint8_t              STROKA, BYTE;
GPIO_InitTypeDef     PORT;

int main(void)
{
	// подаем тактовую частоту на порты
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

	// инициализируем порты
	PORT.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
	PORT.GPIO_Mode = GPIO_Mode_Out_PP;
	PORT.GPIO_Speed = GPIO_Speed_50MHz;
	// порт управления
	GPIO_Init(GPIOA, &PORT);
	// порт данных
	GPIO_Init(GPIOC, &PORT);

	// начальная установка портов
	GPIO_ResetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2);
	GPIO_SetBits(GPIOA,GPIO_Pin_3);

    while(1)
    {
    	GPIOA->ODR^=GPIO_ODR_ODR0;        // каждый кадр инвертируем вывод

    	GPIOA->BSRR = GPIO_BSRR_BS1;      // подаём импульс начала кадра
    	GPIOA->BSRR = GPIO_BSRR_BR1;      //

            // построчно отправляем данные
            for (STROKA = 0; STROKA < 160; STROKA++) {

            	GPIOA->BSRR = GPIO_BSRR_BS2;    // импульс новой строки
            	GPIOA->BSRR = GPIO_BSRR_BR2;    //

                // отправляем 30 8-битных слов
               for (BYTE = 0; BYTE < 30; BYTE++) {

                	GPIOC->ODR = picture[STROKA][BYTE] >> 4;
                	GPIOA->BSRR = GPIO_BSRR_BR3;             // защелкнули данные
                	GPIOA->BSRR = GPIO_BSRR_BS3;             //

                    GPIOC->ODR = picture[STROKA][BYTE];
                	GPIOA->BSRR = GPIO_BSRR_BR3;             // защелкнули данные
                	GPIOA->BSRR = GPIO_BSRR_BS3;             // 

                 }
            }
    }
}
Но вместо изображения вижу:
Изображение

Попробовал жестко выставить данные на линиях:

Код: Выделить всё

	GPIO_SetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1);
	GPIO_ResetBits(GPIOC, GPIO_Pin_2 | GPIO_Pin_3);
Всё правильно. Чередуются через 2 бита.
Изображение

Сомневаюсь в этих строках:

Код: Выделить всё

GPIOC->ODR = picture[STROKA][BYTE] >> 4;
...
GPIOC->ODR = picture[STROKA][BYTE];
Правильно ли я записываю массив 8-ми битных данных в 16 битный порт (пачками по 4 бита) ?

Re: Подключение дисплея Powertip PG240160C от ПЧ к Discovery

Добавлено: Ср янв 22, 2014 20:23:29
drakon
попробуйте такую конструкцию, за одно она не будет мешать старшим битам порта:

Код: Выделить всё

__inline void lcd_dat(uint8_t dat){
	((dat & (1<<0)) ? (GPIOC->BSRR = GPIO_ODR_ODR0) : (GPIOC->BRR = GPIO_ODR_ODR0));
	((dat & (1<<1)) ? (GPIOC->BSRR = GPIO_ODR_ODR1) : (GPIOC->BRR = GPIO_ODR_ODR1));
	((dat & (1<<2)) ? (GPIOC->BSRR = GPIO_ODR_ODR2) : (GPIOC->BRR = GPIO_ODR_ODR2));
	((dat & (1<<3)) ? (GPIOC->BSRR = GPIO_ODR_ODR3) : (GPIOC->BRR = GPIO_ODR_ODR3));
}

Код: Выделить всё

                // отправляем 30 8-битных слов
               for (BYTE = 0; BYTE < 30; BYTE++) {

                   lcd_dat((picture[STROKA][BYTE]) >> 4);
                   GPIOA->BSRR = GPIO_BSRR_BR3;             // защелкнули данные
                   GPIOA->BSRR = GPIO_BSRR_BS3;             //

                    lcd_dat(picture[STROKA][BYTE]);
                   GPIOA->BSRR = GPIO_BSRR_BR3;             // защелкнули данные
                   GPIOA->BSRR = GPIO_BSRR_BS3;             //

                 }

Re: Подключение дисплея Powertip PG240160C от ПЧ к Discovery

Добавлено: Ср янв 22, 2014 21:42:28
dosikus
drakon писал(а): GPIOC->BSRR =GPIO_ ODR_ODR0;
Когда нибудь влетишь с подобным ...

Re: Подключение дисплея Powertip PG240160C от ПЧ к Discovery

Добавлено: Ср янв 22, 2014 23:08:17
drakon
все норм, я слежу :)

Код: Выделить всё

  __IO uint32_t BSRR;
  __IO uint32_t BRR;
#define GPIO_ODR_ODR0                        ((uint16_t)0x0001)

Re: Подключение дисплея Powertip PG240160C от ПЧ к Discovery

Добавлено: Чт янв 23, 2014 10:28:06
mr_smit
drakon писал(а):попробуйте такую конструкцию
То же самое.

Там получается обратная зависимость, если бит равен 1 то пиксель гасится, если 0 то зажигается.

Код: Выделить всё

GPIOC->ODR = 0x00;
...
GPIOC->ODR = 0x00>>4;
Изображение

Все нули в массиве:
Изображение

Картинка:
Изображение

Вообще ничего не понимаю :(

Я бы понял он ничего не отрисовывал, но полоски то 1100 рисует. Если бы частота где то сбивалась, то наверное хаотично. А тут четко пропуск посередине и всё. Хотя и при отрисовке 0х00 из массива пропуски есть. Всё таки что то не то с выводом.

Ещё раз уточню как я понимаю:
Изображение

Re: Подключение дисплея Powertip PG240160C от ПЧ к Discovery

Добавлено: Чт янв 23, 2014 15:45:52
drakon
а те 2 непонятных байта вы добавляете в каждую строку?

Re: Подключение дисплея Powertip PG240160C от ПЧ к Discovery

Добавлено: Чт янв 23, 2014 20:26:08
mr_smit
drakon писал(а):а те 2 непонятных байта вы добавляете в каждую строку?
Нет. Но вроде бы их и не надо