Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/140: Рейтинг темы: голосов - 140, средняя оценка - 4.75
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
1

Вывод на PAL TV и ИК-пульт

06.02.2016, 22:18. Просмотров 25615. Ответов 55
Метки нет (Все метки)

Мне тут подкинули задачку.

Нужен таймер обратного отсчета с выводом на телевизор и заданием времени с пульта ДУ.
На экране должны быть крупно минуты+секунды обратного отсчета и помельче - часы реального времени.

Я думаю, что можно обойтись ATMiko88 какой-нибудь.
Вот здесь заброшенный проект с выводом пал и в схеме присутствует приемник ИК.
http://trznadel.info/kuba/avr/index3.php

Только с таймингами непонятно, когда ловить сигналы с пульта, если все время вывод видео идет...

В принципе, можно и черно-белый вывод, но цветной лучше.
Разрешение можно совсем небольшое.

Может, кто видел готовые решения, или поделится наработками?
Спасибо.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2016, 22:18
Ответы с готовыми решениями:

Вывод на PAL TV и ИК-пульт на STM32
Поскольку вопросы перешли в плоскость STM32, решил сделать новую тему. Ссылка на старую тему.

Пульт 2.4 ГГц трансформировать в пульт управления к ПК
Хочу купить квадрокоптер сразу а не ждать месяц с китая. Поэтому в моделях ограничен каталогом...

BT.656 -> PAL?
Привет, народ. Кто знает, можно ли BT.656, полученный с tvp5160, перегнать обратно в тёплый...

AVI->PAL?
здравствуйте, глупый вопрос - а можно ли перегнать видео с компа на VHS без особого хадвера, кроме...

Разбираю формат PAL
Я являюсь счастливым обладателем платы STM32F4Dyscocery, на которой пытаюсь с генерировать видео...

55
vt340
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
07.05.2016, 14:57 41
Ещё интересный проект на эту тему http://benryves.com/projects/tvtext
0
otik110592
0 / 0 / 0
Регистрация: 24.08.2014
Сообщений: 400
07.05.2016, 15:21 42
до кучи
http://bitboxconsoti.btogspot.com/p/btog-page.html
http://belogic.com/uzebox/index.asp
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
07.05.2016, 15:45 43
Цитата Сообщение от vt340
Ещё интересный проект на эту тему http://benryves.com/projects/tvtext
Переходя на stm32, я рассчитываю получить 720х576 с чересстрочной разверткой. И прием ик-пульта.
И обойтись без ассемблера.
А так, конечно, это все интересно, но вывод видео сжирает все время AVR.

Спасибо.
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
02.06.2016, 10:04 44
Появился вопрос по выводу в SPI через DMA. Контроллер STM32F103C8T6 (PinBoard2).
Вот две картинки.

http://www.cyberforum.ru/savedimages/2016/06/02/zcdddwsxgygmxzpj3m.jpg


http://www.cyberforum.ru/savedimages/2016/06/02/zmwnv2bxhumztbxvua.jpg
На второй картинке в верхней строчке буквы A добавлена единица в старшем разряде.

Суть вопроса в том, что если старший бит в выдаче равен единице, после окончания выдачи ножка остается в высоком уровне, а если нулю - то в низком.
А мне нужно всегда оставлять в низком уровне.
Причем выдача идет начиная со старшего бита.

Используется SPI2.
Ничего похожего в описании SPI и DMA не нашел.

Как победить?

Код
const unsykned char Byte8_Font [] =
{
0b01111111,
0b00000001,
0b00000001,
0b00000001,
0b00000001,
0b00000001,
0b00000001,
0b00000001,
0b00000001,
0b00000001,
0b00000001,
0b00000001,
};

void GpioInit()
{
//Выводы синхронизации (таймер1 канил1)
RCC->APB2ENR |= (RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPAEN); //тактирование альт. ф. GPIO таймера
GPIOA->CRH |= (GPIO_CRH_MODE8| GPIO_CRH_CNF8_1);         //режим альт gpio
GPIOA->CRH &= (~GPIO_CRH_CNF8_0);                  //10 МГц

//выводы видео (spi2 mosi)
RCC->APB2ENR |= (RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPBEN);
GPIOB->CRH &= (~(GPIO_CRH_CNF13_0 | GPIO_CRH_CNF15_0)); //настройка выводов для SPI
GPIOB->CRH |= (GPIO_CRH_MODE13 | GPIO_CRH_MODE15      // MOSI = PB15
| GPIO_CRH_CNF13_1 | GPIO_CRH_CNF15_1);                // AF Push-Pull out
}

void DMAInit()
{
RCC->AHBENR |= RCC_AHBENR_DMA1EN; //такты

// 5 канал DMA1  память -> TX SPI2
DMA1_Channel5->CPOR = (uint32_t) &(SPI2->DR); //адрес DR
DMA1_Channel5->CCR    |=    DMA_CCR5_DIR  ; // направление передачи из памяти в периферию
//| DMA_CCR5_MINC ; //инкремент адреса буфера
}

void SPI_init(void)
{

// SPI2 init
RCC->APB1ENR |= RCC_APB1ENR_SPI2EN; // такты на SPI2
SPI2->CR1 |=  SPI_CR1_MSTR  // Режим мастера
| SPI_CR1_BR_0
//       | SPI_CR1_BR_1    //настройка делителя
//       | SPI_CR1_BR_2      //комментируя или раскомментируя эти строки можно изменять значение делителя
| SPI_CR1_SSM   // программное управление слэйвом
| SPI_CR1_SSI;   // при программном управлении слэйвом данный бит должен быть 1
SPI2->CR2 |= SPI_CR2_TXDMAEN; // Разрешить принимать данные для передачи через DMA
SPI2->CR1 |= SPI_CR1_SPE;   // разрешить SPI2
// | SPI_CR2_RXDMAEN; // разрешить передачу принятых данных через DMA
//SPI2->CR2 |= SPI_CR2_TXEIE;
return;
}

void SPI2_stort () // По сути это переинициализация каналов DMA
{
//GPIOB->CRH |= GPIO_CRH_MODE15_0;
DMA1_Channel5->CCR &= ~DMA_CCR5_EN;
DMA1_Channel5->CPOR = (uint32_t) &(SPI2->DR); //DR Base
DMA1_Channel5->CMAR = (uint32_t) &Byte8_Font[Y_current_line];
DMA1_Channel5->CNDTR = 22;
DMA1_Channel5->CCR |=  DMA_CCR5_EN;   //DMA_CCR5_TCIE |
}
0
02.06.2016, 10:04
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,113
02.06.2016, 10:53 45
Мне кажется, проблема надуманная. Вам достаточно передать 1 слово =0 в конце строки и всё. Точнее, даже это делать не надо, ведь конец строки должен совпадать с концом видимой части изображения экрана.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
02.06.2016, 10:59 46
Если время позволяет, перед началом передачи инициализировать SPI. По окончании передачи отключать SPI и принудительно выставлять ножку в 0.
0
otik110592
0 / 0 / 0
Регистрация: 24.08.2014
Сообщений: 400
02.06.2016, 11:31 47
тут вроде SPI и DMA задействованы https://hackaday.io/post/33136
0
mShit
0 / 0 / 0
Регистрация: 12.08.2012
Сообщений: 1,217
02.06.2016, 16:26 48
Тоже сталкивался с этой проблемой, притом что оно ещё и синхронизацию портит, т.к. продолжает светить единицей и во время синхроимпульса. Возможно по окончанию строки можно просто переключить порт в режим GPIO_Output с заранее заданным состоянием, но этот метод не проверял, т.к. тогда нужно както успеть его включить обратно перед выводом следующей строки, а у меня отлов синхроимпульса и запуск формирования строки происходит полностью аппаратно. Потому я просто пожертвовал последним пикселем в строке.
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
02.06.2016, 19:31 49
Цитата Сообщение от mShit
Тоже сталкивался с этой проблемой, притом что оно ещё и синхронизацию портит, т.к. продолжает светить единицей и во время синхроимпульса. Возможно по окончанию строки можно просто переключить порт в режим GPIO_Output с заранее заданным состоянием, но этот метод не проверял, т.к. тогда нужно както успеть его включить обратно перед выводом следующей строки, а у меня отлов синхроимпульса и запуск формирования строки происходит полностью аппаратно. Потому я просто пожертвовал последним пикселем в строке.
Так в том-то и дело, что было бы понятно, если бы последнее выводимое значение оставалось на ножке. Но ведь остается старший! бит, который выводился первым.
Причем, если переключить SPI на вывод младшим битом вперед, происходит все так же, - первым выводится младший бит, и именно в этом состоянии остается вывод mosi.
Errata ничего не говорит на эту тему.
Буду пробовать разные варианты.
0
Pymkvym
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,520
02.06.2016, 19:44 50
Я бы сделал буфер-видеопамять, например 640x480/8 = 38 400 байт
На stm32f103ret6 - 64кБт опреративки.

И пусть DMA по кругу бесконечно её выводит.
0
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,113
02.06.2016, 20:08 51
Цитата Сообщение от omtomtubo
Но ведь остается старший! бит, который выводился первым.
Вполне логичная ситуация. Он "начинает" _следующую_ посылку. А она начинается, как раз, со старшего бита.

Если мешает, попробуйте BIDIMODE, может будет отцепится от шины.
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
02.06.2016, 23:39 52
Ладно, применил костыль, по прерыванию окончания передачи DMA перевожу ножку в обычный режим и выставляю низкий уровень. (Кстати, многие так делают в проектах, связанных с выводом на тв).
Но.
Когда я в начале следующей строки включаю эту ножку опять в альт. режим MOSI - она оказывается в высоком уровне, если последний выводимый байт был с единицей в старшем разряде!
Явно это связано с модулем SPI.

UP: решилось записью в регистр DR нуля после окончания передачи DMA. И без переключения GPIO можно.
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
02.06.2016, 23:58 53
Цитата Сообщение от u37
Цитата Сообщение от omtomtubo
Но ведь остается старший! бит, который выводился первым.
Вполне логичная ситуация. Он "начинает" _следующую_ посылку. А она начинается, как раз, со старшего бита.

Если мешает, попробуйте BIDIMODE, может будет отцепится от шины.

Сейчас попробую.
Нет, не отцепляется.
0
mShit
0 / 0 / 0
Регистрация: 12.08.2012
Сообщений: 1,217
03.06.2016, 14:07 54
А в каком режиме spi работает? У меня в режиме слейв и только на передачу.
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
03.06.2016, 16:30 55
Цитата Сообщение от mShit
А в каком режиме spi работает? У меня в режиме слейв и только на передачу.
В режиме мастер.
0
omtomtubo
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
03.06.2016, 22:46 56
Поскольку вопросы продолжаются, сделаю новую тему в разделе STM32, если модераторы сочтут возможным, можно перенести сообщения из этой темы в новую, начиная с этого сообщения
0
03.06.2016, 22:46
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2016, 22:46

Подключение Pay-Pal
Народ, обьясните популярно(или дайте ссылочку) как прикрутить к своесу сайту Возможность приёма...

Получить ответ от Pay Pal после оплаты
Добрый день. Вопрос вот в чем: на сайте заполняется форма на какой email отправить деньги на...

Пригоден ли ЦАП для вывода видео в PAL?
Нашёл статью в интете где через пик и r2r цап выводят видеосигнал. Пытался вывести видео на телек...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
56
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.