Например TDA7294

 Форум РадиоКот • Просмотр темы - STM32F103C8T6 и LCD 2.8" 320х240
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Пт июн 22, 2018 00:59:13



Часовой пояс: UTC + 3 часа [ Летнее время ]


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: STM32F103C8T6 и LCD 2.8" 320х240
СообщениеДобавлено: Пт фев 23, 2018 02:19:24 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пн май 12, 2014 00:24:21
Сообщений: 24
Рейтинг сообщения: 0
Доброго времени суток. Решил разобраться с подключением и работой LCD дисплея https://voron.ua/catalog/023243 Подключил к модулю STM32F103C8T6, написал код, читаю ID дисплея ответ: 0x9393(такого вообще не существует) должно быть 0x9325 или 0x9331. Ножку Reset дисплея пробовал соединять с Reset мк и на порт мк цеплять программно сбрасывать, без разницы. Питание Дисплея от батареи 4.1в ток потребления при 100% подсветки 63мА. Соединение проводами 10см каждый прозванивал, общую землю сделал. Тайминги задержек менял ответ меняется 0x9300, 0x0093, 0x9393. Третий день сижу думаю что может быть не так. Кто работал с дисплеями такого типа, подскажите в чем проблема.
Код:
Код:
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"

#define   CS    GPIO_Pin_3        // LCD chip select: "0" - LCD активен, "1" - LCD не активен
#define   RS    GPIO_Pin_4        // LCD register select: "0" - index reg, "1" - control reg
#define   RD    GPIO_Pin_5        // RD - "1" WR - "0" - запись
#define   WR    GPIO_Pin_6        // RD - "0" WR - "1" - чтение
#define   RE    GPIO_Pin_7        // Reset: "0" - сброс, "1" - норм работа

#define   D10   GPIO_Pin_8        // 8 бит данных (R/W)
#define   D11   GPIO_Pin_9
#define   D12   GPIO_Pin_10
#define   D13   GPIO_Pin_11
#define   D14   GPIO_Pin_12
#define   D15   GPIO_Pin_13
#define   D16   GPIO_Pin_14
#define   D17   GPIO_Pin_15

#define  CS_LOW   GPIO_ResetBits(GPIOA, CS);  // CS - "0"
#define  RS_LOW   GPIO_ResetBits(GPIOA, RS);  // RS - "0"
#define  RD_LOW   GPIO_ResetBits(GPIOA, RD);  // RD - "0"
#define  WR_LOW   GPIO_ResetBits(GPIOA, WR);  // WR - "0"
#define  RE_LOW   GPIO_ResetBits(GPIOA, RE);  // RE - "0"

#define  CS_HIGH  GPIO_SetBits(GPIOA, CS);    // CS - "1"
#define  RS_HIGH  GPIO_SetBits(GPIOA, RS);    // RS - "1"
#define  RD_HIGH  GPIO_SetBits(GPIOA, RD);    // RD - "1"
#define  WR_HIGH  GPIO_SetBits(GPIOA, WR);    // WR - "1"
#define  RE_HIGH  GPIO_SetBits(GPIOA, RE);    // RE - "1"

GPIO_InitTypeDef PORT; // Структура порта
static __IO uint32_t TimingDelay; // Таймер, счетчик

//-------------- Системный таймер -------------------------------
void SysTick_Handler()
{
 if (TimingDelay != 0) {TimingDelay--;}        // Инкремент
}
//-------------- Задержка(милисек) ------------------------------
void Delay_ms(uint32_t mSecs)
{
 SysTick_Config(SystemCoreClock / (1000 - 1)); // Настроим сис. таймер на 1кГц.
 TimingDelay = mSecs+1;                        // Установим чтетчик мс.
 while (TimingDelay != 0);                     // Ждем пока досчитаем до 0.
}
//-------------- Задержка(микросек) ------------------------------
void Delay_us(uint32_t uSecs)
{
 SysTick_Config(SystemCoreClock / (1000000 - 1)); // Настроим сис. таймер на 1МГц.
 TimingDelay = uSecs+1;                           // Установим чтетчик мкс.
 while (TimingDelay != 0);                        // Ждем пока досчитаем до 0.
}
//-------------- Инициализация портов и сброс LCD ----------------
void PORT_Init(void)
{
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); // Вкл. тактирование

 PORT.GPIO_Pin  =  D10|D11|D12|D13|D14|D15|D16|D17; // линии данных
 PORT.GPIO_Mode =  GPIO_Mode_Out_PP;
 PORT.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOB, &PORT);

 PORT.GPIO_Pin = CS|RS|RD|WR|RE;     // линии управления
 PORT.GPIO_Mode =  GPIO_Mode_Out_PP;
 PORT.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOA, &PORT);

 CS_HIGH;        // Все линии управления высокий уровень
 RS_HIGH;
 RD_HIGH;
 WR_HIGH;

 RE_LOW;         // Сброс
 Delay_ms(50);   // По даташиту не меньше 10мс.
 RE_HIGH;
 Delay_ms(100);
}
//-------------- Установка линий данных на вход -------------------
void Data_Pin_Input(void)
{
 PORT.GPIO_Pin  =  D10|D11|D12|D13|D14|D15|D16|D17;
 PORT.GPIO_Mode =  GPIO_Mode_IPD;
 PORT.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOB, &PORT);
}
//------------- Установка линий данных на выход --------------------
void Data_Pin_Output(void)
{
 PORT.GPIO_Pin  =  D10|D11|D12|D13|D14|D15|D16|D17;
 PORT.GPIO_Mode =  GPIO_Mode_Out_PP;
 PORT.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOB, &PORT);
}
//------------- Установка 8-ми бит данных на вых. порта ------------
void SetData(uint8_t data)
{
 GPIOB->ODR = (int)((int)data << 8);
}
//--------------------- Считываем 8 бит с порта ---------------------
uint8_t GetData(void)
{
 uint8_t data = 0;
 data = (GPIOB->IDR >> 8);
 return data;
}
//--------------------- Чтение регистров LCD ------------------------
uint16_t ReadRegisterLCD(uint16_t reg)
{
 uint16_t data=0;
 Delay_us(50);
 CS_LOW;                    // 0 - LCD активен
 RS_LOW;                    // 0 - передаем данные
 RD_HIGH;                   // 1 - запись

 Data_Pin_Output();         // Порт данных на выход

 Delay_us(50);                 //            __
 WR_LOW;                    // 0 - запись   \__
 Delay_us(50);
 SetData(reg>>8);           // запись reg (15-8)бит __
 WR_HIGH;                          // 1 - запись        __/

 Delay_us(50);                 //            __
 WR_LOW;                    // 0 - запись   \__
 Delay_us(50);
 SetData(reg);              // запись reg (7-0)бит  __
 WR_HIGH;                      // 1 - запись        __/

 Data_Pin_Input();          // Порт данных на вход

 RS_HIGH;                   // 1 - принимаем данные

 Delay_us(50);                //            __
 RD_LOW;                    // 0 - чтение   \__
 Delay_us(50);
 data = (int)GetData()<<8;  // чтение (15-8)бит   __
 RD_HIGH;                            // 1 - чтение      __/

 Delay_us(50);                 //            __
 RD_LOW;                    // 0 - чтение   \__
 Delay_us(50);
 data |= GetData();         // чтение (7-0)бит    __
 RD_HIGH;                       // 1 - чтение      __/

 CS_HIGH;                   // 1 - LCD не активен
 return data;               // Результат
}

int main(void)
{
 uint16_t ID_LCD = 0;       // id экрана 9325 или 9331 или 9341 или др.

 SystemInit();              // Стандартная настройка тактирования 72мГц.
 PORT_Init();               // Инициализация

 while(!ID_LCD)             // Цикл пока ID_LCD = 0.
 {
  ID_LCD = ReadRegisterLCD(0x0000); // Читаем нулевой регистр LCD. В нем хранится id экрана 16 бит.
 }

 while(1)
 {
 }
}

Что происходит на управляющих ножках:
Изображение


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: STM32F103C8T6 и LCD 2.8" 320х240
СообщениеДобавлено: Пт фев 23, 2018 16:33:11 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пн май 12, 2014 00:24:21
Сообщений: 24
Рейтинг сообщения: 0
Думаю нашел виновника)
Изображение
Сейчас перепаяю R1 с положения 16bit на 8bit. По этому и получал только старшие 8бит 0х93 а младшие терялись. Надеюсь 99% только в этом проблема.


Вернуться наверх
 Профиль  
 
JLCPCB, 10 прототипов ПП всего за $2 и 2 дня доставка!

Крупнейший производитель печатных плат в Китае, 300,000+ заказчиков, 10,000+ он-лайн заказов в день.

Рассчитайте цену онлайн:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: STM32F103C8T6 и LCD 2.8" 320х240
СообщениеДобавлено: Пт фев 23, 2018 17:00:41 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 4
Зарегистрирован: Пт ноя 13, 2009 11:39:32
Сообщений: 177
Откуда: Москва
Рейтинг сообщения: 0
Сначала лучше данные выставить на линиях, а потом уже ВР дергать:


SetData(reg); // запись reg (7-0)бит _

WR_LOW; // 0 - запись \__
WR_HIGH; // 1 - запись __/


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: STM32F103C8T6 и LCD 2.8" 320х240
СообщениеДобавлено: Пт фев 23, 2018 18:52:16 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пн май 12, 2014 00:24:21
Сообщений: 24
Рейтинг сообщения: 0
Перепаял. Та же ошибка 0х0093 или 0х9393 выдает.

Так пробовал:
SetData(reg); // запись reg (7-0)бит
WR_LOW; // 0 - запись
WR_HIGH; // 1 - запись

У меня еще есть STM32F4Discovery попробую на ней запустить экранчик.


Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: STM32F103C8T6 и LCD 2.8" 320х240
СообщениеДобавлено: Вт мар 13, 2018 19:53:15 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пн май 12, 2014 00:24:21
Сообщений: 24
Рейтинг сообщения: 0
Разобрался. Вообщем дисплей работает только в 16-и битном режиме и перемычка на это не влияет. Сделал инициализацию, заливку разными цветами дисплея, а потом добавил массив с фоткой и отобразил. Код и фото приложил может кому понадобится. Контроллер дисплея ili9325.

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


Вложения:
STM32F4LCD.rar [531.38 KiB]
Скачиваний: 49
Вернуться наверх
 Профиль  
 

Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 



Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y