нестабильность времени выполнения команд
- Войдите на сайт для отправки комментариев
Чт, 08/11/2012 - 15:36
Загружаю скетч Blink , меняю delay(1000) на delayMicroseconds(25) и смотрю осцилографом на 13 ноге. Проблема в том что длина импульса периодически( или хаотично) меняется примерно на 5 мкс. Может кто в курсе как от этого избавиться?
delayMicroseconds работает без использования прерываний и таймеров и не учитывает их работу.
В ардуино идут системные часы на таймере0 - прерывания от этого таймера и увеличивают задержку. Запретите прерывания и у Вас будет равномерный период.
Спасибо
Написал программу на freeduino (на чипе atmega328P-PU), компилирую под atmega8, запускаю на atmega8.
Время задержек увеличивается в несколько раз. Вместо пауз примерно на полсекунды приходится использовать паузы 30-50 мс.
Получается дилема: то ли мне продали кварц не той частоты (маркировка НВ2 9108), то ли это закономерность и на разных чипах "время" течет по разному.
Схему подключения микросхемы использую из мануала:
Ёмкость конденсаторов 22пФ, резистор .11 Ом., на свободные выводы вешается нагрузка в виде тестовых (отладочных) светодиодов, по которым и сужу по времени задержек.
Изменение времени (частоты импульсов) ведь не нормально, если так, что я сделал не так?
Получается дилема: то ли мне продали кварц не той частоты (маркировка НВ2 9108), то ли это закономерность и на разных чипах "время" течет по разному.
Я бы даже сказал трилема:
+ то ли фьюзы выставлены неправильно.
Из даташита на ATMega8:
"The device is shipped with CKSEL = “0001” and SUT = “10” (1 MHz Internal RC Oscillator, slowly rising power)."
Алсо, ради интереса можете выкинуть из своей схемы кварц и конденсаторы - а оно все равно работать будет (скорее всего).
UPD: 500/16 - это как раз 31,25 мс
Фьюзы я не трогал. Все старался оставить по умолчанию, не вникая в то, без чего и так должно работать. Странно, что они так выставленны для 16 МГц'ового чипа.
Программу пишу в arduino-приложении выбирая стандартно присутствующий в списке устройств чип ATMEGA8, компилю там же, перекидываю на виндовый комп и шью COM-программатором Громова прогой uniprof.
По поводу кварца - я неоднократно встречал в сети замечания, что можно собрать схему и без кварца, но тогда могут появится трудноопределяемые глюки. А так как кварц и конденсаторы вещь недорогая, я решил их подключить.
Я даже программатор экранировал.
Фьюзы я не трогал. Все старался оставить по умолчанию, не вникая в то, без чего и так должно работать.
Ну и получили то, что получили.
Странно, что они так выставленны для 16 МГц'ового чипа.
Ну почему же странно - такая конфигурация по умолчанию позволяет программе изначально работать на "голом" чипе. А затем уже каждый подстраивает его (и схему) под свои нужды и 16 МГц тут не икона. Для работы с UART, например, куда более привлекательны кварцы с частотой, кратной 1,8432 МГц. А для работы от батарей - кварцы с пониженной тактовой частотой (ибо энергопотребление).
Понял. Благодарю за разяснения.