Страница 1 из 1
Подключение дисплея Powertip PG240160C от ПЧ к Discovery
Добавлено: Вт окт 01, 2013 12:00:45
mr_smit
Накрылась панель от преобразователя частоты (Altivar 61). Просто горит подсветка дисплея и всё. Прогревание платы помогло, но хватило на неделю. Панель из соседнего частотника в этом частотнике работает. В общем панель под замену. Пришла новая, поставили, всё нормально.
Но дурная голова рукам покоя не дает, поэтому разобрал панель, достал дисплей и хочу попробовать запустить его на плате STM32 Discovery, возможно дисплей живой. Дисплей
Powertip PG240160C. На
сайте производителя есть описание дисплея. Построен он на двух контроллерах
ST8024 и
ST8016:
У дисплея нет своей памяти и его нужно постоянно обновлять, т.е. нужен буфер под изображение. Разрешение 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
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 непонятных байта вы добавляете в каждую строку?
Нет. Но вроде бы их и не надо