ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
926614 Топик полностью
Ксения (10.06.2019 20:13 - 20:29, просмотров: 371) ответил Dingo на Ксения, а можете обозначить нечто, близкое к идеальному решению вашей задачи?
В случае, когда вместе с качественным ростом одновременно растет цена+трудозатраты, можно говорить лишь о компромиссе, но не об идеале. Огород до сих пор вскапывают лопатой, хотя лопата - далеко не идеальный инструмент. Мне же желателен компромисс ближе к дешевому/простому варианту, где я готова в какой-то мере поступиться качеством в точках, где отношение цены+трудозатраты к качеству растет скачкообразно. Скажем, минитрактор с культиватором многократно дороже лопаты, но он не может в то же число раз улучшить качество вскопанной грядки. Относительной моей задачи: 1. Самый простой/дешевый, но низкокачественный, вариант: по таймеру периодически опрашивать все порты, сравнивая их состояние с предыдущим. При обнаружении отличий пишется сообщение в FIFO-буфер для передачи в ПК, содержащее время события (= счетчик этого таймера), имя или номер порта, где это случилось, и новое состояние этого порта. События из FIFO-буфера отсылаются в свободное от прерываний время. Недостатки: МК не хватает тактовой частоты для частых прерываний, а они сами мешают работе USB-канала и ходу часов. Либо USB-канал и ход часов мешает строго регулярной периодичности прерываний. В ряде случаев нельзя определить, какой из бит изменился раньше, т.к. может оказывать влияние очередность чтения портов. 2. Вариант близкий к желаемому: наличие у МК PCINT (Pin Change Interrupts), подобного Arduino Atmega328, когда прерывание генерируется от изменения состояния любого пина порта. Таких прерываний должно быть столько же, сколько портов у МК (по одному на порт). В этом случае при возникновении прерывания в его обработчике ничего сравнивать не надо, а можно сразу писать в FIFO-буфер время+порт+состояние. Достоинство: нет лишних прерываний, последовательность изменившихся бит строго выдерживается. Недостатки: в классе AVR слишком мало портов, а классе STM32 нет возможности поставить все порты на "сигнализацию". 3. Вариант третий - FPGA. Думаю, что на FPGA возможно сделать всё :), вплоть до эмуляциии МК, но это дорогое решение, а для меня еще и предельно трудоемкое. Т.е. здесь качество не оправдывает цены, тогда как требуемая периодичность 1 мкс не столь уж мала, чтобы FPGA было бы единственным решением. Тем более что 1 мкс - просто круглое число, порядок величины, а потому и с частотой 5 мкс можно было бы согласиться, не слишком теряя в качестве. Ибо сама задача вытекает из необходимости проследить прохождение нервного импульса в головном мозгу подопытного домашнего :) животного, что проще всего сделать, имея карту, фиксирующую прохождение этих импульсов в контрольных точках. Подобно тому, как счетчики проходящих по дорогам автомобилей могут давать информацию о направлении грузопотоков, даже когда отдельные автомобили уникальную метку на себе не несут.