Например TDA7294

Форум РадиоКот • Просмотр темы - Подключение VGA к STM32 - не понятные градиентные линии
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пт мар 29, 2024 07:47:01

Часовой пояс: UTC + 3 часа


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



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Подключение VGA к STM32 - не понятные градиентные линии
СообщениеДобавлено: Вт окт 10, 2017 15:58:42 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вс сен 23, 2012 05:51:35
Сообщений: 132
Рейтинг сообщения: 0
Надеюсь на помощь, тк сломал уже всю голову. Делаю выход вга, плата c STM32F103C8T6. Линии цветов подключены через 220 ом резисторы, сигналы синхронизации напрямую. В общем, делал всё по статьям.
Сигнал формируется через прерывания от трёх таймеров и монитор видит этот сигнал и распознаёт, как 800х600х56. Но! Рисует от не каждую 39 и 40 линию, как я хочу, а непонятные градиенты. Всё проверил и для меня это осталось загадкой. Вот фотка:

Вложение:
photo_2017-10-10_16-54-47.jpg [127.14 KiB]
Скачиваний: 618


Собственно, инициализацию таймеров:
Код:
//line timer
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
   
   TIM_TimeBaseStructInit(&TIM_InitStructure); // Инициализация структуры
   TIM_InitStructure.TIM_Prescaler = 0;    // Предделитель
   TIM_InitStructure.TIM_Period = 2050;              // Период таймера
   TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
   TIM_TimeBaseInit(TIM2, &TIM_InitStructure); // Функция настройки таймера
   TIM_Cmd(TIM2, ENABLE);                      // Включение таймера
   
   NVIC_EnableIRQ(TIM2_IRQn); 
   TIM_ITConfig(TIM2, TIM_DIER_UIE, ENABLE);
   
   //hor sync timer on
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
   TIM_TimeBaseStructInit(&TIM_InitStructure);
   TIM_InitStructure.TIM_Prescaler = 0;
   TIM_InitStructure.TIM_Period = 1600;
   TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
   TIM_TimeBaseInit(TIM3, &TIM_InitStructure);
   
   NVIC_EnableIRQ(TIM3_IRQn); 
   TIM_ITConfig(TIM3, TIM_DIER_UIE, ENABLE);
   
   //hor sync timer off
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
   TIM_TimeBaseStructInit(&TIM_InitStructure);
   TIM_InitStructure.TIM_Prescaler = 0;
   TIM_InitStructure.TIM_Period = 1752;           
   TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
   TIM_TimeBaseInit(TIM4, &TIM_InitStructure);
   
   NVIC_EnableIRQ(TIM4_IRQn); 
   TIM_ITConfig(TIM4, TIM_DIER_UIE, ENABLE);


И код прерываний:
Код:
void TIM2_IRQHandler(void){
   if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){
      TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
      TIM_Cmd(TIM3, ENABLE);
      TIM_Cmd(TIM4, ENABLE);
      
      vline++;
      clr++;
      
      if (vline >= (LINE_COUNT-4)){
         VSYNC_ON;
      }else{
         VSYNC_OFF;
      }
      
      int clrsel = clr/40;
      int clrsec = GPIO_Pin_0;
      if (clrsel%3 == 1) clrsec = GPIO_Pin_2;
      if (clrsel%3 == 2) clrsec = GPIO_Pin_4;
      
      
      if (vline < 600 && (vline%40 == 0 || vline%40 == 1)){
         GPIOA->BRR = clrsec;
      }else{
         GPIOA->BSRR = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
      }
      
      if (vline==LINE_COUNT){
         vline = 0;
         frame++;
         clr = 0;
         if (frame == 60){
            GPIOC->BRR = GPIO_Pin_13;
         }
         
         if (frame == 120){
            GPIOC->BSRR = GPIO_Pin_13;
            frame = 0;
         }
      }
   }
}

void TIM3_IRQHandler(void){
   if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){
      GPIOA->BSRR = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
      HSYNC_ON;
      TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
      TIM_Cmd(TIM3, DISABLE);
   }
}

void TIM4_IRQHandler(void){
   if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET){
      HSYNC_OFF;
      TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
      TIM_Cmd(TIM4, DISABLE);
   }
}

_________________
Собираю самопальный мини-компьютер


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

Часовой пояс: UTC + 3 часа


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

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


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

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


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