Перейти к содержанию

логическое И на AVR


ruhi

Рекомендуемые сообщения

Меня тут порадовали задачкой для АВР (я когда то очень много таких порешал, на практике - напомнили молодость :) ):

http://cxem.net/mc/mc446.php

сформулирована так: Нужно два быстрых элемента "И" и одновибратор. Можно использовать серию 155 у которой время срабатывания даже меньше получается, но не подходит по энергопотреблению. Хотелось бы сделать это на Attiny13.

Остановимся пока на 

Цитата

два быстрых элемента "И"

Я, соответственно, предложил реализацию:

Можожно сделать так:
loop1:
in reg1, pina; 1-tick
in reg2, pinb; 1-tick
and reg1, reg2; 1-tick
LSR reg1; 1-tick
out portB, reg1; 1-tick
rjmp loop1; 2-tick

Это код на ассемблере , который реализует два «элемента И» на АВР со временем срабатывания около 1мкс, в зависимости от тактовой частоты МК.

На частоте 16 MHz это 7/16 мк-секунды(7 ticks, на самом деле +4 = 11тиков максимум время срабатывания, позже поясню), входы элемента-И должны быть на одинаковых пинах условных портов A and B, а выходы следующие по старшинству биты-пины. Вообще говоря перед выводом в порт, скорее всего, нужно будет еще маску добавить это еще +1 тик!


Цикл можно переделать на использование только одного порта. Мой вариант в закодированном архиве приатачен, ключ выложу через неделю!

Мне интересно можно ли сделать быстрее чем у меня получилось! Сможет кто нибудь предложить вариант решения?
В общем, похоже что, на ассемблере можно написать «два элемента И» со временем срабатывания около 1.5мкс даже на 10МГц при произвольном расположении ног на одном порту.

bestAvrCodeForAnd.7z

Изменено пользователем ruhi

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

К сожалению,  проблема не в скорости. Проблема в ДЖИТТЕРЕ.

На выходе Вы получите мечущийся фронт с переменной задержкой.

Использовать тактируемый автомат в качестве жесткой логики - беспонтовая тема.

Поэтому сейчас в МК применяются специальные микро ПЛИС (как периферийный модуль) для решения входных и выходных логических асинхронных задач.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

5 минут назад, my504 сказал:

К сожалению,  проблема не в скорости. Проблема в ДЖИТТЕРЕ.

На выходе Вы получите мечущийся фронт с переменной задержкой от почти нуля до 1,5 мкс.

Использовать тактируемый автомат в качестве жесткой логики - беспонтовая тема.

Життер это для периодических сигналов, можно уточнить задачу:

переключения случаются не чаще раз в мили секунду, случайность задержки срабатывания в пределах до максимально разрешенной задержки разрешена!

То есть по условию задачи, життер в вашем определении, не является проблемой!

Изменено пользователем ruhi

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Джиттер - это для ЛЮБОГО сигнала. Нестабильность фронта выходного сигнала по отношению к входному и есть джиттер.

Если речь о миллисекундах, то зачем чего то там оптимизировать? Как правило, подобную логику делают с входной и выходной синхронизацией. То есть с определенным тактированием защелкивают входы, программно рассчитывают выходную функцию, а потом ее разом выводят (выходное тактирование). 

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

15 минут назад, my504 сказал:

Как правило, подобную логику делают с входной и выходной синхронизацией. То есть с определенным тактированием защелкивают входы, программно рассчитывают выходную функцию, а потом ее разом выводят (выходное тактирование). 

Было бы интересно посмотреть код! Скажу по секрету у меня получилось 6 (шесть) инструкций в цикле.

А оптимизировать надо чтобы понять пределы возможного.То есть, на что же можно рассчитывать!

15 минут назад, my504 сказал:

Джиттер - это для ЛЮБОГО сигнала. Нестабильность фронта выходного сигнала по отношению к входному и есть джиттер.

Я про другое определение думал, но в данном контексте такое определение совершенно уместно, но такой життер не является проблемой по условиям задачи, он разрешен, главное что он ограничен сверху!

Изменено пользователем ruhi

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

@ruhi Распишите точно задачу. А то в комментах по ссылке куча всего. И диаграммки желательно тоже. Ну вы и хвастун)))

Изменено пользователем MasterElectric
Ссылка на комментарий
Поделиться на другие сайты

В 29.01.2018 в 22:01, MasterElectric сказал:

Распишите точно задачу.

Про одновибратор я сам еще до конца не выяснил! Поэтому:

Нужно чтобы три ноги контроллера работали как элемент логическое-И, с минимально возможным максимальным временем срабатывания, то есть, например:

если на вход1 подана логическая единица,

на входе2 логический ноль, на выходе должен быть лог-ноль.

И при переключении входа2 в 1-цу , на выходе с задержкой Т (не больше Т!!! - то есть меньше можно!!!) должна появиться логическая единица!

Соответственно, надо написать код который реализует ДВА таких элемента на одном порте контроллера, то есть на ногах одного порта (PORTB, PINB, DDRB - например). И определить соответствующее этому коду максимальное Т!

Это, получается, задача определения предельных возможностей управления портом на AVR-ассемблере (спасибо @my504 за уточняющие вопросы), для всей линейки процессоров поддерживающих систему команд. На результат решения которой, в дальнейшем можно ориентироваться при разработке прикладных решений(, как минимум, а, даст бог, и еще что то интересное проявится).

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

В 26.01.2018 в 17:49, my504 сказал:

Если речь о миллисекундах, то зачем чего то там оптимизировать?

Там время срабатывания должно быть хотя бы в десять раз (и тоже "например"!) меньше чем время переключения на входах, миллисекунды я для примера назвал, может быть и меньше, собственно максимальное время переключения, как раз и определяет с какой скоростью можно переключать входные сигналы, то есть с какой скоростью можно реагировать!

Кстати, если вы посмотрите программную реализацию USB на AVR, то как раз увидите где это надо! Там как раз подобная задача, только намного заковыристее, прямого контроля-управления "ногами" решена,

там следят за фронтами, меряют время, выставляют уровни в соответствии с заданными последовательностями фронтов, задержек ...

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

При наличии достаточного объема flash проблема джиттера и быстродействия решается достаточно просто: для всех комбинаций пинов порта составляется таблица выходных состояний "логических элементов", затем считывается порт, по таблице находится выходное состояние и выводится в порт. Джиттер отсутствует, быстродействие предельное. Легко реализуются любые "логические" элементы с общим количеством входов до 8 и таким же кол-вом выходов.

Можно таблицу и в ОЗУ сделать, если его больше 256 байтов, и это, возможно, позволит еще чуток поднять быстродействие...

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, ARV сказал:

 Джиттер отсутствует

Даладна!!!

:lol:

Джиттер НЕИЗБЕЖЕН при ЛЮБОМ синхронном приеме сигнала. Входной сигнал и сигнал тактирования входной защелки некогерентны по определению, а значит будут наблюдаться БИЕНИЯ внутреннего входного, а значит и выходного, сигнала.

Ровно поэтому невозможно осуществить захват асинхронного счетчика внутренним тактированием МК.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, ARV сказал:

При наличии достаточного объема flash проблема джиттера и быстродействия решается достаточно просто: для всех комбинаций пинов порта составляется таблица выходных состояний "логических элементов", затем считывается порт, по таблице находится выходное состояние и выводится в порт. Джиттер отсутствует, быстродействие предельное. Легко реализуются любые "логические" элементы с общим количеством входов до 8 и таким же кол-вом выходов.

Можно таблицу и в ОЗУ сделать, если его больше 256 байтов, и это, возможно, позволит еще чуток поднять быстродействие...

Джиттер (очень мне не нравится использование этого термина в данном контексте, ну ладно), не возможно исключить, а в остальном, именно при этом подходе получилось 6(шесть) инструкций в цикле!

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

В моём понимании джиттер - это недетрминированные колебания интервала между сменой сигнала на входе и соответствующего изменения на выходе. Иначе говоря, колебания длительности "времени распространения" сигнала. С точностью до периода тактовой частоты МК в табличном методе джиттер будет отсутствовать.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

7 минут назад, ruhi сказал:

если вы посмотрите программную реализацию USB на AVR, то как раз увидите где это надо!

Это "надо" при любых софтовых задачах. Но причем тут USB? Этот протокол совершенно нечувствителен к джиттеру.  Мало того, его софтовая реализация не позволяет реализовать поставленную здесь задачу, поскольку управление стеком (машиной состояний стека) имеет более высокий приоритет, нежели логическая функция выхода или входа. Оная функция - суть есть крошечный кусок кода общего цикла.

3 минуты назад, ARV сказал:

С точностью до периода тактовой частоты МК

А период тактовой частоты - это не джиттер? :o

Тут обсуждается вопрос в скорости реакции измеряемой  максимум десятком циклов. Зачем нужна такая скорость, если 8...10%-ный джиттер - это "не джиттер"?

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, my504 сказал:

Но причем тут USB? Этот протокол совершенно нечувствителен

USB не при чем, я упомянул ПрОГРАММНУЮ РЕАЛИЗАЦИЮ юсб. 

проблема неопределенности времени реакции на фронт там тоже присутствует, и она решена!

Изменено пользователем ruhi

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

Программная реализация ЮСБ ничем не отличается от железной.  Организовать формальный опрос-логическую функцию-вывод при управлении D+D- невозможно без учета требуемого времени на остальное. Время потраченное на примитивную логическую функцию и ввод-вывод  на несколько десятичных порядков меньше остального.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, my504 сказал:

Программная реализация ЮСБ ничем не отличается от железной.

Это как это? Это похоже на то что вы заговариваетесь, пытаясь доказать то что вам хочется, даже не смотря на то что это не соответствует действительности :( !

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

Приведите пример. В каком месте USB протокола нужно с высокой скоростью выводить бит на основании анализа двух других битов?

Может я чего то и не знаю, но в протоколе USB нет такой процедуры...

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

7 минут назад, my504 сказал:

высокой скоростью выводить бит на основании анализа двух других битов?

там анализируются фронты и задержки на одной линии (один бит), но алгоритм работает на основе как минимум двух значений: текущего значения бита, задержки от предыдущего фронта.

и я уже точно не помню, но кажется в каких то случаях анализируются, все таки обе линии D+ D-.

Изменено пользователем ruhi

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

Мой вариант:

// вариант №1
start:
    in        r16, PinB
    mov       r17, r16
    lsl       r17
    and       r16, r17
    lsl       r16 
    andi      r16, 0x24
    out       PortB, r16
    rjmp      start

// вариант №2
start_2:
    ldi       r16, 0x24       
    sbic      PinB, 0
    sbis      PinB, 1
    cbr       r16, 0x04
    sbic      PinB, 3
    sbis      PinB, 4
    cbr       r16, 0x20
    out       PortB, r16
    rjmp      start_2

 

@ARV Да я ошибался, думал вычисление смещения займет много времени.

Ссылка на комментарий
Поделиться на другие сайты

51 минуту назад, ruhi сказал:

там анализируются фронты и задержки на одной линии (один бит), но алгоритм работает на основе как минимум двух значений: текущего значения бита, задержки от предыдущего фронта.

и я уже точно не помню, но кажется в каких то случаях анализируются, все таки обе линии D+ D-.

 

Анализ состояния двух пинов (они дифференциальные) собственно необязателен, но желателен, чтобы обеспечить помехозащищенность.

Даже если и находить логическую функцию этих пинов, причем тут ВЫВОД? 

Вы так и не показали аналог проставленной здесь задачи по реализации вентиля И (ИЛИ, исключающее ИЛИ и т.п.).

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, my504 сказал:

Вы так и не показали аналог проставленной здесь задачи по реализации вентиля И (ИЛИ, исключающее ИЛИ и т.п.).

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

Извините за недосказанность!

Совершенно точно можно сказать, что там реализована некоторая логическая функция (намного более сложная!!!), я не в коем случае, не утверждал что там реализован именно вентиль И (ИЛИ, исключающее ИЛИ ...

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...