nabbla (nabbla1) wrote,
nabbla
nabbla1

Categories:

Управление осветителем: перемудрил похоже

Попробовал прошить проект, имеющий "заваленные тайминги", 24,88 МГц вместо 25 МГц, в конце концов такое произойдёт при пониженном до нижней грани напряжении и максимальной температуре, так что можно пока и "рискнуть" :)

Одним и тем же сигналом ФИМ (фазо-импульсной модуляции) управляется и ИК подсветка, и подсветка ЖК экранчика, чтобы и самому понаблюдать, что творится. ИК сколько-нибудь видна, но даже на максимальной яркости для человека очень тускла.

И первое же наблюдение: при 1/256 от максимальной яркости ВООБЩЕ ПОДСВЕТКА НЕ ВИДНА, ни одна!

Ещё и управление с компьютера идёт "рвано", видимо получая в ответ целую мегабайтную картинку, драйвер "виртуального ком-порта" немножечко впадает в ступор, так что надо и программу переиначить, чтобы при подаче этих символов, "+" или "-", он не торопился картинку передавать, потерпим!


С программы и начнём. Так мы раньше ожидали прихода символа по UART:

		;далее мы хотим "бесконечный цикл", где мы записываем изображение в статическую память, выдаём самую простенькую информацию,
		;и ждём нажатия на кнопку, чтобы передать всё изображение (это дохрена)
	@@FrameLoop:
				NOP		IN
				; ERL		0
				; ERH		0
				
				; ;давайте для начала почистим память!
				; ;если не пожадничать и почистить весь мегабайт, не придётся сбрасывать ERL/ERH :)
				; j		29
	; @@OuterCLR:		Acc		24575		;24576 * 30 = 1024 * 720 
	; @@InnerCLR:		[ER++]	0
				; SUB		1
				; JGE		@@InnerCLR
				; jLOOP		@@OuterCLR				
				
				
				;хотим выждать свои 84 мс. Это свыше 2 кадров. На первый VSync, если повезёт, можем вообще попасть без задержки. 
				;до второго: 40 мс, до третьего: 80 мс. И давайте не жадничать: четвёртый кадр запишем
				j	12
	@@WaitMenu:		ACQ	VSync	;дождаться кадрового синхроимпульса
				jLOOP	@@WaitMenu


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

Как видно, у нас здесь в точности "нажмите любую клавишу" - UART используется лишь чтобы "затормозить" программу, пока чего-нибудь не придёт, а собственно пришедшее значение САМИМ ПРОЦЕССОРОМ не используется никак. Оно напрямую, "в обход процессора" управляет экранным меню камеры, а теперь ещё и подсветкой, а процессору вообще на всё пофиг сейчас.

Что ж, символы "+" и "-" имеют коды 0x2B и 0x2D соответственно, они идут перед любыми буквами и цифрами. Будем их "отсекать":

@@FrameLoop:
	Acc		IN
	SUB		0x2E	;даст отрицательное значение для "+" и "-", положительные для букв
	JL		@@FrameLoop


Дёшево и сердито. Попробуем такую штуковину отсинтезировать. В этот раз включил свой "более совершенный" алгоритм генерации ImmTable (таблицы непосредственных значений) - он очень сильно буксует на крупных программах с большой шириной шин адреса, но куда эффективнее срабатывает на маленьких, к каковым относится и нынешняя ImageTransfer.asm.

Возможно, скоро QuatCoreImmTable (таблица непосредственных значений) ждёт забвение, пришло в голову, что мы могли бы значения 0..127 по SrcAddr воспринимать не как значения -64..+63, как у меня было поначалу, а как обращение к памяти по адресам 0..127, и там "естественным образом" получается таблица непосредственных значений, т.е под неё специальной, отдельной памяти не надо, и есть надежда найти подходящие константы среди read-only строк и констант, определённых в памяти...

А пока "более совершенный" алгоритм свершил небольшое чудо, предельная частота 27,32 МГц, Critical Warning исчез - можно запускать.


Кое-чего начинает получаться, но на малых значениях яркости всё одинаково, хоть 1/256, хоть 1/8:


Начинаем видеть, как "разгораются" отражатели, на 1/4 яркости:

Именно сейчас видна сотовая структура отражателя, хотя по-моему она скорее "декоративная".

Теперь 1/2 яркости:


И полная яркость:


Что-то работает. Сейчас ещё осциллограммы возьму и громко подумаю...
Tags: ПЛИС, освещение, программки, работа, странные девайсы
Subscribe

  • Нахождение двух самых отдалённых точек

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

  • Слишком общительный счётчик

    Вчера я чуть поторопился отсинтезировать проект,параметры не поменял: RomWidth = 8 вместо 7, RamWidth = 9 вместо 8, и ещё EnableByteAccess=1, чтобы…

  • Балансируем конвейер QuatCore

    В пятницу у нас всё замечательно сработало на симуляции, первые 16 миллисекунд полёт нормальный. А вот прошить весь проект на ПЛИС и попробовать "в…

  • Огари разговаривают

    Сегодня по пути на работу встретил огарей прямо в Лосином острове, на берегу Яузы. Эти были на удивление бесстрашны, занимались своими делами, не…

  • Ковыряемся с сантехникой

    Наконец-то закрыл сколько-нибудь пристойно трубы, подводящие к смесителю, в квартире в Москве: А в воскресенье побывал на даче, там очередная…

  • Мартовское велосипедное

    Продолжаю кататься на работу и с работы на велосипеде, а также в РКК Энергию и на дачу. Хотя на две недели случился перерыв, очередная поломка,…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 1 comment