Микроконтроллеры | Работа таймеров в AVR |
|
---|---|---|
Да ужо разобрался вроде. Теперь другая задача: Есть некоторое количество событий инициализируемых соответствующими изменениями состояния входов (24 всего) надо ровно через хх милисекунд после события изменить состояние некоторого выхода события асинхронны, ведичина задержки должна отрабатываться +/- несколько сот тактов. Процессор загружен также бдугими задачами. оЗУ занято на 100%, стек использовать нельзя. |
|
|
Wladimir_TS: состояние некоторого выхода выход один или 24 ? |
|
|
Если выходов не более восьми - можно достичь практически нулевой и главное постоянной задержки с любой комбинацией используя в качестве ядра - флешку (правда большую, но те не менее) или нужно уже использовать ПЛИС, а вычисления оставить AVR. сильно сомневаюсь, что реально обслужить 24 асинхронных входа этим камнем, (причем активных EXT прерываний у него всего 8 (ну 11 если сильно подняпрячь) да еще и не трогая ОЗУ и с равенстовом тактов... |
|
|
С ПЛИС любой сможет (кто умеет с ними работать - так и было сделано), но нужно сделать как раз без. Линий 24 штуки. Для простоты - как только на линии А1-А24 (ВХОД) установился 1 надо отсчитать ХХ времени +/- пол-лаптя (типично 1+/-0,2 Сек) и установить "1" на соответствующей линии выхода. Доступных таймеров нет - уже все задействованы на контроль таймаутоа связи с вышестоящим устройством - один отсчитывает таймаут от последнего принятого байта, а второй от последней корректно принятой команды. (очень поганая и зашумленная линия, а отказ обмена череват). Еще 4 на другие программные UARTы ОЗУ занято на 90% под буфера обмена - слишком большие объемы информации прогоняются, брос в вышестоящее устройство не успевает - для надежности там 4х кратная избыточность в обмене. |
|
|
... Вот и делайте буфер по каждому из 3х input портов с частотой опроса не менее пол-лаптя и выталкивайте в output порт ( эдакое примитивное FIFO) спустя некое кратное ХХ / пол-лаптя число отсчетов... Но вот и |
|
|
Плис изъяли для уменьшения габаритов и удешевления. Cheeeper: ... Вот и делайте буфер по каждому из 3х input портов с частотой опроса не менее пол-лаптя и выталкивайте в output порт ( эдакое примитивное FIFO) спустя некое кратное ХХ / пол-лаптя число отсчетов... Не очень понял ? Cheeeper: Но Да передает и принимает одновременно по 4 UART, причем UART програмный из-за того что скорость сильно может отличаться и надо ее определять "на лету". |
|
|
Wladimir_TS: Ну - а события - то асинхронны как отсчитать время для каждого ? Поставьте еще один МК и сделайте на нем програм. таймер. Wladimir_TS: Процессор загружен также бдугими задачами. оЗУ занято на 100%, стек использовать нельзя. Wladimir_TS: Плис изъяли для уменьшения габаритов и удешевления. |
|
|
Wladimir_TS: Не очень понял ? но если вам нужно отдельно рулить каждой задержкой по каждому ОТДЕЛЬНОМУ порту и эти задержки изменяются или неравны - тоды ОЙ |
|
|
Alexey: Alexey Все равно не очень понятно. В смысле по событию записываю в ячейку память FFh и декрементирую каждые ХХ мСек до нуля ?
Физически некуда. И так плотность монтажа такова, что монтажныцы меня скоро убьют за простую коррекцию в плате.
Это стрельба из пушки по мелким пернатым. Cheeeper: Cheeeper ◊ Задержка фиксирована для всех линий и неизменна (завязана на параметры внешних компонентов). |
|
|
Wladimir_TS: Все равно не очень понятно. В смысле по событию записываю в ячейку память FFh и декрементирую каждые ХХ мСек до нуля ? Второй вариант мне больше нравится. Wladimir_TS: Физически некуда. Wladimir_TS: Это стрельба из пушки по мелким пернатым. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |