Показаны сообщения с ярлыком отладка. Показать все сообщения
Показаны сообщения с ярлыком отладка. Показать все сообщения

среда, 11 января 2017 г.

В задумчивости

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


Примитивнее ничего не придумать: каждый тик прерывания в линию ButtonSelect выдается строб длительностью 1 микросекунда. Всё.

Смотрим эту линию анализатором:


Но как? Откуда такая скважность? Выход в режиме триггера? Но как? Откуда?


вторник, 10 января 2017 г.

Загадки во тьме

Переписал управление – все должно крутиться через табличный диспетчер, тактируемый прерыванием... и столкнулся с некоторыми странностями: тайминги отличаются от ожидаемых, странные лакуны в обмене с дисплеем и т.п. Пришлось до предела урезать код, чтобы было легче найти «виновника торжества». Пока что не нашел, но ищу.


UPD. Странности с диспетчером устранил, но причину увеличенных интервалов (должно быть 4 мс, а не 5 с хвостиком) пока не нашел. Вполне возможно, что в этом виноват кварц. Для проверки надо будет посмотреть тайминги при тактировании МК от от внутреннего генератора 8 МГц.


UPD2. Проблема не в частоте генератора. Очень интересно, очень...

понедельник, 9 января 2017 г.

Несколько слов о встроенных задержках в mikroPascal

В mikroPascal имеется ряд удобных процедур (или функций, если говорить применительно к функциональности этих элементов, а не к их синтаксису) для отработки временных задержек. Народ их активно использует, но... Впрочем, дальше вы всё увидите сами:


Возможное предположение здесь, как правило, одно: кварц с Ali завелся не на той гармонике (и далее должна быть пространная ругань в адрес продавца, минимум на половину страницы). Но! Более длинные задержки отрабатываются более-менее корректно (с погрешностью ± несколько процентов). Получается, что короткую задержку в 1 us необходимо реализовывать как-то иначе, например, через процедуру Delay_us(1) ­– ошибка при этом тоже будет, но все-таки она будет меньше.


Надо будет когда-то потом посмотреть эту погрешность и на частоте встроенного генератора 8 МГц, но уже и так понятно, что в критичных к точности таймингов случаях лучше реализовывать короткие задержки своей процедурой, например, через свободный таймер с контролем флага в цикле.

ps. Для анализа таймингов использовался 8-канальный логический анализатор Saleae logic.