Вторник, 03.12.2024, 11:50
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | модуль генерации TV видео сигнала на atmega16 - Страница 3 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Модератор форума: ВитГо  
модуль генерации TV видео сигнала на atmega16
MaxДата: Пятница, 05.07.2013, 12:21 | Сообщение # 31
Рядовой
Группа: Проверенные
Сообщений: 3
Репутация: 0
Статус: Offline
Реально на основании вашего проекта изменить разрешение на 24 символа в строке? (Требуется побольше размер букв иметь. У вас 8х8, а надо 12х12)...
 
ВитГоДата: Воскресенье, 07.07.2013, 05:17 | Сообщение # 32
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
если нет нужды в высоком разрешении то конечно загрубить его совершенно реально -)
правда возникнут накладные расходы на хранение символов в новом формате...

либо уменьшить разрешение при оставлении размера символов на прежнем уровне (буквы увеличатся в размерах)


Виталий (аka ВитГо)
 
MaxДата: Понедельник, 08.07.2013, 12:30 | Сообщение # 33
Рядовой
Группа: Проверенные
Сообщений: 3
Репутация: 0
Статус: Offline
Д
Цитата (ВитГо)
либо уменьшить разрешение при оставлении размера символов на прежнем уровне (буквы увеличатся в размерах)


Да. Спасибо. Именно таким путём сейчас и иду. Что касательно строки есть мысль в 2 раза уменьшить скорость SPI, тем самым буквы будут просто толще.
Вторая мысль, которую сегодня буду опробировать.. после строчного синхроимпульса использовать время паузы 8 мкс. Ну то есть начать передавать информацию не через 8мск, а раньше... Есть предположение, что экран телевизора (ЭЛТ) это поле не отображает, а вот TFT монитор может. На эту мысль натолкнул небольшой отступ от начала экрана до первого символа... явно экран там что-то может показать :-) Тогда ,возможно 46 вашх символов, смогут превратиться в 48, а делее делением на 2 в нужные мне 24 символа :-).

Далее проверил ССИ по времени и немного подкорректировал :-)
// длительность строчного синхроимпульса "4.5-4.9мкс по ГОСТ"
.equ avrtv_linesyncZL = 73 ;74 ;4.7 мкс x 16 Мгц= ; длительность уровня синхроимпульса
; При значении 74 импульсы были разной длинны: то 4.94мкс то 4.44мкс, со значением 73 получался импульс всегда одинаковый 4.63мкс
;Причина понятна - разное количество циклов для выполнения команд. В общем пока так.

// длительность уровня черного строки после строчного синхроимпульса 64мкс-4.63мкс=59.27мкс
;Было значение 192 и все вместе давало 64.69мкс либо 64.94мкс, поставил182 даёт 64.06мкс стабильно
.equ avrtv_lineOutBL = 182 ; 192 ; 60мкс x 16 Мгц= ; длительность строки после строчного СИ

Но пока не сомг запустить генерацию синхроимпульсов из вашего архива :-(. Сначала КСИ был инверсным... почему пока не пойму. (А да, я всё ужал до Mega8, которую использую в этом проекте). Изображение проскакивает, интуитивно понятно, что там дамп памяти выгружен и даже цифры видно, но с синхронизацией чехорда :-(

Два вопроса:
1.У вас:
ldi R16 , low (RAMEND) ; установка стека
out SPL , R16
ldi R16 , low (RAMEND) - low-ЭТО правильно?
out SPH , R16

2. Не могли бы Вы пояснить подробнее мысль инициализации таймера:
; настройка таймера Т1 в режим top=OCR1A OC1A=toggle
ldi R16 , (1<<COM1A1)|(1<<COM1A0) ; установка вывода OC1A=1 //// ЭТО же наоборот установит вывод в ноль.. или я не прав? :-( ****Был не прав. Это настроит на установку при совпадении в лог1
out TCCR1A , R16
ldi R16 , (1<<COM1A1)|(1<<COM1A0)|(1<<FOC1A) //// FOC1A - это для чего включили и потом через строку выключили? ****Принудительно заставили выход|пин OCR1A вставть в лог.1.
out TCCR1A , R16
ldi R16 , (0<<COM1A1)|(1<<COM1A0) ; режим top=OCR1A, OC1A toggle ****Настроили таймер, чтобы при совпадении он каждый раз переключался/инвертировался.
out TCCR1A , R16
****Получается в начале программы выход OCR1A у нас в логической единице, значит как минимум синхроимпульсы начнуться с переключения в логический ноль. То есть первое заданное время на этом таймере это нахождение выхода OCR1A в "1". По истечении первого времени он уйдёт в "0". Первое время загружаемо в таймер - avrtv_longsyncZH - 27.3мкс, после этого уходит OCR1A в "0" и загружается avrtv_shortsyncZH=4мкс.
Всё честно. Только почему-то на осцилографе инверсная картинка :-(


Сообщение отредактировал Max - Понедельник, 08.07.2013, 13:45
 
ВитГоДата: Суббота, 13.07.2013, 17:04 | Сообщение # 34
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
у мониторов свои длительности
Цитата (Max)
Но пока не сомг запустить генерацию синхроимпульсов из вашего архива :-(. Сначала КСИ был инверсным... почему пока не пойму. (А да, я всё ужал до Mega8, которую использую в этом проекте). Изображение проскакивает, интуитивно понятно, что там дамп памяти выгружен и даже цифры видно, но с синхронизацией чехорда :-(


режим генерации стоит toggle поэтому нужно установить перед выводом противоположный

Цитата (Max)
Два вопроса:
1.У вас:
ldi R16 , low (RAMEND) ; установка стека
out SPL , R16
ldi R16 , low (RAMEND) - low-ЭТО правильно?
out SPH , R16


опс. это конечно не правильно.. странно как это попало туда конечно во втором случае high должно стоять !!

Цитата (Max)
2. Не могли бы Вы пояснить подробнее мысль инициализации таймера:
; настройка таймера Т1 в режим top=OCR1A OC1A=toggle
ldi R16 , (1<<COM1A1)|(1<<COM1A0) ; установка вывода OC1A=1 //// ЭТО же наоборот установит вывод в ноль.. или я не прав? :-( ****Был не прав. Это настроит на установку при совпадении в лог1
out TCCR1A , R16
ldi R16 , (1<<COM1A1)|(1<<COM1A0)|(1<<FOC1A) //// FOC1A - это для чего включили и потом через строку выключили? ****Принудительно заставили выход|пин OCR1A вставть в лог.1.
out TCCR1A , R16
ldi R16 , (0<<COM1A1)|(1<<COM1A0) ; режим top=OCR1A, OC1A toggle ****Настроили таймер, чтобы при совпадении он каждый раз переключался/инвертировался.
out TCCR1A , R16
****Получается в начале программы выход OCR1A у нас в логической единице, значит как минимум синхроимпульсы начнуться с переключения в логический ноль. То есть первое заданное время на этом таймере это нахождение выхода OCR1A в "1". По истечении первого времени он уйдёт в "0". Первое время загружаемо в таймер - avrtv_longsyncZH - 27.3мкс, после этого уходит OCR1A в "0" и загружается avrtv_shortsyncZH=4мкс.
Всё честно. Только почему-то на осцилографе инверсная картинка :-(


посмотри может быть у 8ой меги по другому устанавливается первоначальное значение уровня на ocr1a

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

если сигнал идет в инверсе - то скорее всего первоначальное значение вывода ocr1a задано не верно...
кстати не у всех авр есть эта установка, но думаю в меге 8 будет

установи верным первоначальное положение и все заработает !


Виталий (аka ВитГо)
 
ВитГоДата: Суббота, 13.07.2013, 17:08 | Сообщение # 35
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Цитата (Max)
2. Не могли бы Вы пояснить подробнее мысль инициализации таймера:
; настройка таймера Т1 в режим top=OCR1A OC1A=toggle
ldi R16 , (1<<COM1A1)|(1<<COM1A0) ; установка вывода OC1A=1 //// ЭТО же наоборот установит вывод в ноль.. или я не прав? :-( ****Был не прав. Это настроит на установку при совпадении в лог1
out TCCR1A , R16
ldi R16 , (1<<COM1A1)|(1<<COM1A0)|(1<<FOC1A) //// FOC1A - это для чего включили и потом через строку выключили? ****Принудительно заставили выход|пин OCR1A вставть в лог.1.
out TCCR1A , R16
ldi R16 , (0<<COM1A1)|(1<<COM1A0) ; режим top=OCR1A, OC1A toggle ****Настроили таймер, чтобы при совпадении он каждый раз переключался/инвертировался.
out TCCR1A , R16


синхросигнал идет по уровню лог.0
поэтому я ставлю первоначальное состояние лог.1 (это уровень черного) и с приходом прерывания будет переход на лог.0 (уровень синхросигнала)...
код выше нужен для того чтобы установить вывод в нужное состояние
1- устанавливаем режим тоггле
2- устанавливаем нужный уровень на выводе
3- устанавливаем режим тоггле

одной командой записи в порт команды 1 и 2 у меня не совместились (вывод в нужное положение не переводился) поэтому получилась такая немного странная конструкция


Виталий (аka ВитГо)
 
ВитГоДата: Суббота, 13.07.2013, 17:12 | Сообщение # 36
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Цитата (Max)
Вторая мысль, которую сегодня буду опробировать.. после строчного синхроимпульса использовать время паузы 8 мкс. Ну то есть начать передавать информацию не через 8мск, а раньше... Есть предположение, что экран телевизора (ЭЛТ) это поле не отображает, а вот TFT монитор может. На эту мысль натолкнул небольшой отступ от начала экрана до первого символа... явно экран там что-то может показать :-) Тогда ,возможно 46 вашх символов, смогут превратиться в 48, а делее делением на 2 в нужные мне 24 символа :-).


угу, до 5.7 мкс можно сжать паузу и строчный импульс..
но имей в виду что все телики по разному на это реагируют
у меня есть маленький телек (автомобильный) он просто убивает левые символы... а вот большой 42 дюйма филипс умудряется показывать всю картинку, телек ббк почемуто наоборот режет правую часть изображения - вот такой вот зоопарк в одной квартире :-)))

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


Виталий (аka ВитГо)
 
MaxДата: Понедельник, 15.07.2013, 09:05 | Сообщение # 37
Рядовой
Группа: Проверенные
Сообщений: 3
Репутация: 0
Статус: Offline
Тут ещё с SPI проблемка назревает. Есть, "нечто" не стабильное...

По даташиту (на Мега8. Возможно, на мегу32 нечто другое написано, но сомневаюсь):
Регистр управления SPI - SPCR
Разряд 4 - MSTR: Выбор ведущего/подчиненного
Если в данный бит записана лог. 1, то SPI работает как ведущий (мастер), иначе (MSTR=0) как подчиненный. Если SS настроен как вход и к нему приложен низкий уровень, когда MSTR был равен 1, то бит MSTR автоматически сбрасывается и устанавливается флаг прерывания SPIF в регистре SPSR. Для возобновления ведущего режима SPI пользователь должен предусмотреть программную установку бита MSTR.

Ощущение, что так оно и есть :-). У вас в INIT пин SS никак на вывод не устанавливается. И похоже после команды:
ldi R16 , (1<<SPE)|(1<<MSTR)|(1<<CPHA) ; SPI master
out SPCR , R16

контроллер всё же уходит в Slave режим.
На до бы в INIT добавить:
sbi DDR "SS" , SS ; вывод SS на выход (Port"SS"."SS")
 
ВитГоДата: Понедельник, 15.07.2013, 20:46 | Сообщение # 38
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
гм.. да я про это читал в даташите, но как решил уже не помню..

просто у меня сейчас работает только резервный бук (в боевой был залит чаем) поэтому не могу посмотреть (резервный бук это асус еее900 - который даже 5 вкладок в хроме открыть не может :-(((

куплю новый бук - посмотрю что в проекте твориться (надеюсь что винт живой, потому что на нем куча проектов была)


Виталий (аka ВитГо)
 
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Поиск:


Copyright MyCorp © 2024
Сделать бесплатный сайт с uCoz