Свежие обсуждения
Микроконтроллеры

Тестер для проверки мониторов

1 3 6

smg123: Синхроимпульсы строк формируются аппаратно таймером, а картинка и кадровая частота программно в прерывании. Придется заново высчитывать для каждого режима новые тайминги с учетом каждого такта.

Спасибо, что помогаете.
Сам бы я в кадровых коэффициентах не разобрался, а с нуля изучать AVR ещё долго не получится.

Жаль, если не получится разобраться, тогда придётся переходить на сетевое питание генератора.
Потому что уделить обвязке больше времени, чем самому генератору я не могу.
Он тем и был привлекателен, что на сборку требует всего полчаса времени вместе с программированием...

smg123: Может не получиться правильно при 10 Мгц режим 1280х1024х60 (с самыми короткими таймингами).

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

 

А на 20 МГц будет работать от 3.5 вольт? Если будет, то можно сделать "схему запуска" на вольтодобавочном конденсаторе при включении будет кратковременно доводить напряжение до 6-7 В, а после старта спадает до 3-4 вольт (в зависимости от напряжения литиевого аккумулятора).
Что-то попытался нарисовать схему - то ли в пятницу голова не работает, то ли это так трудно - не смог.
Хотел предложить другой вариант - двухступенчатый старт (сначала на внутреннем генераторе, затем переход на кварц), а потом почитал даташит на 2313 и вспомнил, что это в PICах, а не в аврах.
А может не запускается из-за того, что слишком маленькое время старта? Какие значения SUT выставлены? Можно попробовать SUT = 10 (при CSEL=0) или 11 при CSEL=1, т.е. для медленнонарастающего напряжения питания.

 

Pitty: А на 20 МГц будет работать от 3.5 вольт?

DWD:
С кварцем 20МГц МК запускается при напряжении питания не менее 4В.
С кварцем на 25МГц - не менее 4.5В.
Хотя при плавном снижении напряжения с кварцем на 25МГц МК продолжает работать вплоть до 3,5В. Но с нуля запускаться уже не хочет...

Pitty: А может не запускается из-за того, что слишком маленькое время старта? Какие значения SUT выставлены? Можно попробовать SUT = 10 (при CSEL=0) или 11 при CSEL=1, т.е. для медленнонарастающего напряжения питания.

Возможно. Я ведь не разбираюсь в AVR-ах...

У меня SUT1 = 0, остальное = 1.
Согласно программе - FUSE калькулятору, получается "Задержка запуска: 14 тактов + 0мс".
Есть режим, когда весь младший байт в "1" и "Задержка запуска: 14 тактов + 65мс".
Попробую перепрошить и посмотреть, как будет запускаться.

Спасибо за подсказку.

 

DWD: Сам бы я в кадровых коэффициентах не разобрался
Как ни парадоксально, дело как раз не в них. Они определены в программе в виде кол-ва строк и менять их не надо.
Нужно подбирать строчные константы, т.к. они определяют длительность активной части строки, которая должна уложиться между 2-мя аппаратно формируемыми строчными синхроимпульсами. Поскольку длительность обработчика прерываний (формирование картинки в активной части одной строки) возросла в 2 раза после уменьшения тактовой до 10МГц, соответственно увеличился и период кадров в 2 раза. Вот такой "пародокс".

У меня пока нет информации о таймингах для других режимов, кроме 640х480. Надо рыться в сети. Когда все длительности (B,C,D,E) будут известны - остальное сделать просто. Хотя можно их срисовать при симуляции разных режимов.
PS Вот нашел для любознательных.http://read.pudn.com/downloads126/ebook/535072/Standard_VESA_timing.pdf

Ну а после можно будет подумать о выключателе питания. Как вариант:
Нажатие на кнопку подачи питания приводит к работе прибора в течение 1 минуты. На это время на один из выводов подается команда включить ключ питания на схему. Потом отключение от батареи полностью.

PPS offtop Проект DDS GM заглох? Там коллеги по форуму нуждаются в хорошем фильтре. Сейчас для молодых программу для МК написать проще, чем сделать рабочий вариант аналогового фильтра.

 

smg123: Нужно подбирать строчные константы, т.к. они определяют длительность активной части строки...

Но с этим, вроде бы уже всё ясно?
На сколько я помню, эти коэффициенты легко вычисляются в зависимости от частоты кварца.
И место их установки в листинге программы известно.

smg123: Поскольку длительность обработчика прерываний (формирование картинки в активной части одной строки) возросла в 2 раза после уменьшения тактовой до 10МГц, соответственно увеличился и период кадров в 2 раза.

Но прерывания задаются программно и определяются числами, записываемыми в таймеры, почему нельзя увеличить частоту кадровой, подправив эти числа? Не известно, где они прописаны?
Или я не понял суть проблемы?

smg123: Нажатие на кнопку подачи питания приводит к работе прибора в течение 1 минуты. На это время на один из выводов подается команда включить ключ питания на схему. Потом отключение от батареи полностью.

В принципе, минуты должно хватить. Автовыключение нужно для защиты от забывчивости - если оставил включенным на ночь.
Но дополнительной кнопкой, как то, не удобно...
Удобнее использовать одну из имеющихся кнопок (картинка или разрешение) - для включения/выключения использовать длительное нажатие, а кратковременное - для родных режимов.
При выключении переводить МК в спящий режим, как в PIC-ах.
Или я много хочу?..

 

Возился 2 дня с исходником.
Вспомнился анекдот про иностранца: Позавчера пил с русскими, чуть не умер. Вчера похмелялся, лучше бы умер позавчера. (Проще кварц нужный выслать. )

Объясняю особенности программы.

1. Таймером с помощью ШИМ формируются АППАРАТНО строчные синхроимпульсы и по переполнению таймера формируются прерывания. Константы легко вычисляются при смене кварца.

2. ПРОГРАММНО в обработчике прерывания просчитывается и выводится построчно картинка. Длительность обработчика определяется в итоге 3-мя константами: BC, D, E и должна точно вписаться между ОТДЕЛЬНО формируемыми строчными сихроимпульсами и с нужной фазировкой к ним. Причем с точностью до такта. Изменение ЛЮБОЙ ОДНОЙ из констант приводит и к смещениям картинки и к изменениям длительности строки картинки.

3. Кадровые интервалы формируются ПРОГРАММНО в том же обработчике прерываний путем подсчета к-ва строк картинки, другими словами к-ва раз вызова обработчика прерывания. Кадровые константы в виде числа строк при смене кварца менять не надо.

Таким образом при смене кварца нужно для каждого режима просчитать еще 3 строчных константы BC,D,E, которые определяют строчные интервалы, но в итоге влияют на кадровую частоту. Замечу еще, что в обработчике еще разрешается обработка клавиш в другом прерывании в нужном месте кадра.
Так что не совсем все просто, как кажется.
Кстати, вывод картинки и ее гашение делается с помощью регистра направления работы порта DDR, а это значит, что без нагрузки формирование сигналов RGB будет некорректным.

 

smg123: Возился 2 дня с исходником.
...
Проще кварц нужный выслать.

Спасибо, smg123, за работу.
Понял, что простой подменой коэффициентов не победить. А жаль...

Но дело уже давно не в кварце...
Дело в питании - запустить МК от литиевого элемента (3В...3,6В), а кварц на 20МГц запускается только от 4В.
Рекомендацией изменить фузы пока не воспользовался из-за нехватки времени.

Когда попробую, тогда и определюсь что делать - от сетевого БП или с преобразователем 3В/5В.

Жаль, конечно...

 

Pitty: А может не запускается из-за того, что слишком маленькое время старта?

Вы были правы!
У меня было выставлено "Задержка запуска: 14 тактов + 0мс".
Только что перепрошил МК под версию кварца на 20МГц и фузы выставил так, что весь младший байт в "1".
Получилось, что "Задержка запуска: 14 тактов + 65мс".

Теперь с кварцем на 20МГц работает при плавном снижении напряжения питания до 2,3В и уверенно запускается при напряжении не менее 2,5В.
Так как аккумулятор будет разряжаться не ниже 3В, то есть запас и можно считать, что проблема с питанием от одного литиевого элемента решена.

Потребуется только зарядка для элемента. Но это уже другая песня.

Правда из-за снижения амплитуды импульсов с 5В до 3В падает и уровень сигнала на выходе и картинка на мониторе бледнеет. Но это уже зависит только от резистивного делителя напряжения в ЦАП.
Попробую придумать что нибудь, а не получится - и так сойдёт.

smg123, извините, что "заставил" Вас, в некотором роде зря, разбираться с программой.
Ведь, как оказалось, проблема решалась много проще и для такого случая не грех специально купить кварц на 20МГц.

Всем огромное спасибо!

 

Забыл - автовыключение же ещё реализовать...

smg123, Вы когда просматривали листинг программы, не заметили, как там реализовано переключение режимов?

В тексте есть вызов подпрограммы в виде:

cpi DEO_u8ResolutionState,0x01
brne PC+2
rcall R1280х1024x60Hz

И так на каждый режим.

Где, как я понял, "R1280х1024x60Hz" является меткой. По этой метке идёт процесс пересчёта строчных коэффициентов и т.д., чего мне пока не понять.
Так вот, Можно ли вставить ещё три строки типа:

cpi DEO_u8ResolutionState,0x01
brne PC+2
rcall OFF

И потом, по метке OFF написать команды перехода в спящий режим?

Правда, не знаю, как его включать?..

Собственно, на одной мс 561ТМ2 реулизуется отдельный включатель/выключатель от отдельной кнопки, но хотелось бы сначала попробовать реализовать всё программно. Ведь теоретически это реализуемо.
На крайний случай, когда надоест разбираться, можно и тумблерок какой нибуть втиснуть.

 

DWD: Можно ли вставить ещё три строки
Можно все, что не запрещено компилятором. Только не могу пока разобраться с симулятором АВР студии. Поэтому нет уверенности, что прошивка получается в соотв. с задуманным сценарием. В частности, меняю константы таймера, а частота ШИМ остается одинаковой (виртуально).