[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Интересный факт.
Сделал устройство на 8535 avr. Не очень сложное: измеряет время, измеряет сигнал, пишет во Flash, по UART отдаёт, из устройств индикации только пищалка. Все замечательно, все работает. Сделали 8 штук - все хорошо. Еще 8 все зашибись.
Со следующей восьмеркой началось интересное:
5 работают нормально, 3 вроде бы работают, но пищат не так, как должны, хотя все одинакого. Замена на одном из них контроллера помогла. Временно забили. Потом сделали ещё 16, из них не заработали 12 штук. Стали разбираться.
AVR генерирует определенную последовательность, по 4-м ногам необходимую для работы интегратора и автоподстройки коэффициента усиления.
Последовательность формируется на асинхронном таймере 2,таймере 1 и АЦП. Таймер 2 отсчитывает интервалы 20 и 10 мс со внешнего источника 1 кГц. OCR2 переписывается в обработчике. В нем же, при 10 мс интервале, запускается таймер1 на 8 мс от system clk. В обработчике таймера 1 запускается АЦП и останавливается таймер 1. Обработчик АЦП пихает померенный сигнал в буфер, легко успевает все сделать до окончания 10 мс. Тактовая частота 1.8432 МГц. За буфером следим из основной програмы.
На неправильно работающих последовательность генерировалась неправильная. Выяснилось, что таймер 2 отсчитывает интервалы не 20 и 10, а 10 и 5. Навешивание резистора на TOSC2 не помогло, аналогичный результат от резисторов и RC цепочек по входу TOSC1. Увеличение значений, записываемых в OCR2 привело в выправлению последовательности, но это же просто не спортивно.
Может быть кто сталкивался с подобными проблемами. Для сильно заинтересовавшихся, могу выслать СИшный код этого куска.
E-mail: info@telesys.ru