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

Recent Posts from This Journal

  • Великая Октябрьская резня бензопилой

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

  • Очередная несуразность в единицах измерения

    Когда-то я написал программу PhysUnitCalc - калькулятор, умеющий работать с размерностями. Мне казалось, что я наступил уже на все грабли, которые…

  • Big Data, чтоб их... (3)

    "В предыдущих сериях": мой прибор выдаёт 6 значений: 3 координаты и 3 угла, т.е все 6 степеней свободы твёрдого тела. Причём ошибки измерения этих 6…

  • Покрышки с взрывным характером

    Продолжаю кататься на велосипеде на работу и назад, а также время от времени в РКК Энергию. С 17 мая (когда решил записывать, сколько проехал,…

  • Big Data, чтоб их... (2)

    Вчера получил упоротое уравнение, чтобы найти, с какими весами нужно брать результаты измерений, чтобы получить наименее шумную и при этом…

  • Big Data, чтоб их...

    Решил всё-таки вывести оптимальную обработку N измерений x k, каждое по M компонент (т.е вектор M×1), и на каждое дана своя ковариационная…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 1 comment