Самодельный лог. анализатор на AVR + SG24064

Здесь обсуждаем устройства на МК и программы для них
Ответить
Аватара пользователя
Fahivec
писатель, читатель
писатель, читатель
Сообщения: 121
Зарегистрирован: 30 дек 2014, 02:17
Откуда: Из-за речки

Самодельный лог. анализатор на AVR + SG24064

Сообщение Fahivec »

Доброго здоровья!

"Спас" от утилизации аж два символьно-графических дисплея формата 240х64 точек. Пока разбираюсь с ними и пишу свою низкоуровневую библиотеку на ассемблере AVR. И тем временем задумал построить простенький лог. анализатор - очень уж формат дисплея на него напрашивается.
Не так, чтобы мне этот анализатор нужен, но так и просится построить на его снове полезное устройство.
Тем более, что пришла пора длинных вечеров, а просто просиживать их у ящика желания нет.

Короче, я уже настроился творить, но кое какие вопросы по этому поводу требуют разъяснения.
Пока один из них. :?:
Каким образом собирать данные с входов:
а) семплировать с определенным периодом и откладывать в памяти (как это делают цифровые осциллографы)
или
б) ожидать изменения на входах и сохранять в памяти с временным штампом?
Надеюсь выразился внятно. :)

Кто что может посоветовать?

PS. Пошукал по теме на easyelectronics, оказывается DI HALT похожий вариант (б) еще в 10-м году предлагал.
Пока читаю ту ветку.

PPS. Ветка DI HALT-а заглохла. :(
На Fun Electronic процесс пошел по варианту а), но совсем в другой уровень - мне не потянуть.
Последний раз редактировалось Fahivec 07 дек 2017, 02:20, всего редактировалось 2 раза.
Тест пройден! :geek:
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Самодельный лог. анализатор на AVR + SG24064

Сообщение rhf-admin »

Хм, я б наверное тоже по варианту "а" пошёл. Так памяти меньше займёт, да и зачем нужны эти "временные штампы", что потом с ними делать?
На мой взгляд не так важно знать точное время, когда произошло то или иное событие, важнее знать когда это произошло относительно других событий. Скажем один фронт (импульс, импульс...) относительно другого.

З.Ы. Выкладывай тогда уж и ссылки на темы на easyelectronics и fun electronics, чтоб мы тоже почитали.
С уважением, администрация сайта.
Аватара пользователя
Fahivec
писатель, читатель
писатель, читатель
Сообщения: 121
Зарегистрирован: 30 дек 2014, 02:17
Откуда: Из-за речки

Re: Самодельный лог. анализатор на AVR + SG24064

Сообщение Fahivec »

Ссылки сделал/вставил в головном сообщении.
Вот еще одна тема "нашего" немецкого камрада по варианту а). :) Но там, естесственно, всё на Немецком. :D
Почему "нашего" ? Так такой же заядлый подельщик увлеченный электронщик! :rightly:

В двух словах, у него семплирование происходит на внешнюю SRAM, причем совершенно "хардверно". МК только управляет тактированием, стартом/стопом (а также триггером и пресемплом!) и последующей перекачкой на комп.
А там самописная прога собственно и заправляет этой железкой и выводит в графику. Анализатора, как такового, он еще не написал.
Т.е. хороший 8-канальный "показометр" с графикой в цвете.

Вот тоже думаю, может не изобретать? (Нет, блин, а как же хламерская гордость?)
Хотя, тогда уж и готовый купить можно. Причем со всеми плюшками. :lol:
Хм, я б наверное тоже по варианту "а" пошёл. Так памяти меньше займёт, да и зачем нужны эти "временные штампы", что потом с ними делать?
Должен не согласиться с тобой - вариант (б) требует меньше памяти, т.к. не "семплирует" тупо каждые, скажем, 10 мкс, а пишет в память только при изменении на входах. При этом с новыми данными сохраняет и относительное время в заданных единицах, напр. в тех же 10 мкс.
По ссылке выше (вариант б) есть об этом подробнее. Не хочу всё повторять.
Собственно мои рассуждения.
Обойтись тем хламом, что наковыряно. На тестовый момент, по крайней мере.
  • На минимальный вариант есть в наличии (лежит без дела) новехонькая Мега16.
    "Схватывать" изменения по прерыванию PCINT и сохранять во внутреннем озу (ок. 1кБ) байт данных и два/три байта времени.
    Понятно, что в лучшем случае можно будет "насобирать" до 250-и событий за один сеанс.
    Однако быстродействие, а значит и "полоса пропускания", будет ограниченно на (примерно) 10 микросекундах.
  • Вариант с расширенной внешней памятью на AT90S8515.
    С помощью внешнего цифрового компаратора и регистра-защелки формировать прерывание ICP, которое само уже захватит "время" из Т1. А по его прерыванию провести остальные действия: считать входа, сохранить в памяти данные с временным штампом.
    Причем использовать возможность этого МК работать с внешней ОЗУ, скажем на 32 кБ. Тогда количество записей увеличится существенно.
    Засада в том, что AT90S8515 у меня с буквой "L-8". Хотя разгоняется до 11-ти мгц. Однако, думаю, большой разницы не будет.
Тест пройден! :geek:
Аватара пользователя
Fahivec
писатель, читатель
писатель, читатель
Сообщения: 121
Зарегистрирован: 30 дек 2014, 02:17
Откуда: Из-за речки

Re: Самодельный лог. анализатор на AVR + SG24064

Сообщение Fahivec »

"Информация к размышлению..."(c)
Сегодня набросал для прикидки код обработчика прерывания с самыми необходимыми инструкциями. Оказалось, я в предидущем сообщении недооценил возможного быстродействия. :)
:!: EDIT. Засада! ATMega16 не имеет прерываний по смене уровня на входах! Поэтому код под спойлером отредактирован.
Значит, придется городить внешний детектор смены уровней в любом случае.
Захват данных.

Код: Выделить всё

	INPUTCAPT:	;	Обработчик прерывания ICP. Сюда попадем через 6 тактов.
		in	INPUT,	PINB		; +1	читаем входа порта B
		in	T1LOW,	ICR1L		; +1	читаем регистр захвата Т1
		in	T1HIG,	ICR1H		; +1
		st	X+,	T1LOW		; +2	сохраняем "время"
		st	X+,	T1HIG		; +2
		; возможно	st X+, T1CNT ; регистр-счетчик переполнений Т1 (+2)
		st	X+,	INPUT		; +2	сохраняем данные
		in	FLAGS,	SREG		; +1	сохраняем флаговый регистр
		dec	COUNTER			; +1	счетчик событий
		breq	STOP			; +1 (+2)
		out	SREG,	FLAGS		; +1	восстанавливаем флаговый регистр
		reti				; +4	Итого = 23 (25) тактов.
	STOP:	..	; здесь останавливаем ввод информации,
		..	; запрещаем прерывания ICP/T1OVF
		..	; поднимаем флаг готовности данных.
		out	SREG,	FLAGS		; +1	восстанавливаем флаговый регистр
		reti
Понятно, что для ускорения обработки нужно резервировать семь-восемь регистров (РОН). Но большинство из них можно взять из младшей (ущемленной) половины банка.
Т.е. при тактовой частоте 16 Мгц минимальный период захвата окажется около 1,6 мкс.
При 10 Мгц - ок. 2,5 мкс.
:-? Хм, довольно не плохо, а?
Значит, таймер Т1 должен тикать с периодом в 1 мкс. Тогда его переполнение наступит через добрых 65 миллисекунд - мало!
Добавим счетчик переполнений (1 байт = 255 переполнений) и получим максимальное время захвата данных более 16 секунд.

Вот где-то так.
Тест пройден! :geek:
Аватара пользователя
Fahivec
писатель, читатель
писатель, читатель
Сообщения: 121
Зарегистрирован: 30 дек 2014, 02:17
Откуда: Из-за речки

Re: Самодельный лог. анализатор на AVR + SG24064

Сообщение Fahivec »

Продолжаю размышления.

В связи с нехваткой портов при использовании внешнего ОЗУ, обдумываю минимальный вариант без онного.
Внутреннего ОЗУ в AT90S8515 всего 512 байтов. При скромнном стеке в 12 байт получу максимальное кол-во регистрируемых событий 125 при затрате 4-х байт на событие (1 байт данных и 3 байта времени). Но писать код придется без использования переменных в ОЗУ и с минимальным использованием стека.
Ну хорошо, можно ограничиться 120-ю событиями, тогда под стек и переменные останется уже 32 байта.
:?: Вот что можно "проанализировать" этими 120-ю изменениями? Т.е. на что их хватит?

Если же использовать Mega16, то с ее 1кБ ОЗУ "возможности" удваиваются.
:?: На что хватит 240 "захватов"?

Я думаю, активные пользователи лог.анализаторов смогут подсказать.
Последний раз редактировалось Fahivec 05 янв 2018, 16:01, всего редактировалось 1 раз.
Тест пройден! :geek:
Аватара пользователя
Fahivec
писатель, читатель
писатель, читатель
Сообщения: 121
Зарегистрирован: 30 дек 2014, 02:17
Откуда: Из-за речки

Re: Самодельный лог. анализатор на AVR + SG24064

Сообщение Fahivec »

Всех с наступившим 2018-м годом! Здоровья и творческих успехов!
Итак, подсказки по применению лог.анализатора я не дождался :(
Посему планирую применение внешнего ОЗУ, как опцию. Но, тут возникает проблема с таймингами, о которой писал в другой теме.

Ломал голову, как же подключить дисплей к оставшимся портам, коих осталось всего 6 линий! А ведь еще не подключены кнопки/крутилки! :-?

Но вот после новогоднего "прояснения" возникла мысль: а почему бы не оставить подключение а-ля "внешняя память", но к дисплею обращаться проверенным "ногодрыгом", т.е. на лету отключать интерфейс внешнего ОЗУ для обращения к LCD?
:?: Какие соображения по этому вопросу будут у уважаемого сообщества?
Тест пройден! :geek:
Аватара пользователя
Virtual2
Читатель
Читатель
Сообщения: 160
Зарегистрирован: 23 май 2016, 22:12

Re: Самодельный лог. анализатор на AVR + SG24064

Сообщение Virtual2 »

Fahivec писал(а): 05 янв 2018, 00:48 Ломал голову, как же подключить дисплей к оставшимся портам, коих осталось всего 6 линий! А ведь еще не подключены кнопки/крутилки! :-?
посади дисплей на I2C хоть через MCP23008. так обычно и сделано на контроллерах когда требуется IO экономить.
или хоть гирлянду на 74HC595...74LS595 из 3х ИО получится 8...16...
Аватара пользователя
Fahivec
писатель, читатель
писатель, читатель
Сообщения: 121
Зарегистрирован: 30 дек 2014, 02:17
Откуда: Из-за речки

Re: Самодельный лог. анализатор на AVR + SG24064

Сообщение Fahivec »

Virtual2 писал(а): 05 янв 2018, 10:39посади дисплей на I2C хоть через MCP23008. так обычно и сделано на контроллерах когда требуется IO экономить.
или хоть гирлянду на 74HC595...74LS595 из 3х ИО получится 8...16...
MCP23008 нет у меня. Всё, что в проекте будет использовано, стараюсь взять из того запаса и хлама, что есть в наличии. Иначе какой же из меня "хламер"? :lol:

Про регистры тоже думал, они даже есть в наличии. Но пока хочу опробовать, о чем спрашивал.
Тест пройден! :geek:
Аватара пользователя
Fahivec
писатель, читатель
писатель, читатель
Сообщения: 121
Зарегистрирован: 30 дек 2014, 02:17
Откуда: Из-за речки

Re: Самодельный лог. анализатор на AVR + SG24064

Сообщение Fahivec »

Пока еще трех лет не прошло, хочу просто сообщить, что "прожект" сей я еще не похоронил. :lol:
Плату устройства изготовил еще в первой половине прошлого года. Однако память и ее обвязку еще не впаял.
Т.е. пока играюсь с внутренним ОЗУ контроллера. И, соответственно, не могу с уверенность сказать, как себя поведут ЖКИ и внешнее ОЗУ, подключенные на общую шину.

Большую часть прошедшего с последнего сообщения времени затея эта пролежала в ожидании когда у меня наступит такое редкое сочетание, как свободное время плюс желание этим заниматься.
Правда, в последний месяц проекту повезло, как никогда: я научил МК рисовать графики по фиктивным данным и дошел до того момента, когда нужно писать процедуры управления выводом (курсоры, выбор окна и т.п.)
Вот тут-то опять спотыкнулся - нужно писать систему менюшек. Но, кроме сложности такого программирования сказывается и неопределенность желаемого (нет конкретного ТЗ).

На текущий момент я остановился на модели с дополнительным регистром счета времени (24 битный таймер/счетчик) и отказался от режима 8х8 пикселов на знакоместо, выбранного ранее в связи с упрощением графических процедур.
Из-за особенностей контроллера дисплея в текстовом режиме 6х8 графика кастрируется на два старших бита.
Ну, в общем: продолжение следует...
Тест пройден! :geek:
Ответить

Вернуться в «Устройства на микроконтроллерах»