нестабильность времени выполнения команд

Марат
Offline
Зарегистрирован: 08.11.2012

Загружаю скетч Blink , меняю  delay(1000) на delayMicroseconds(25) и смотрю осцилографом на 13 ноге. Проблема в том что  длина импульса  периодически( или  хаотично) меняется   примерно  на 5 мкс. Может кто в курсе как  от этого избавиться?

 

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

delayMicroseconds работает без использования прерываний и таймеров и не учитывает их работу.

В ардуино идут системные часы на таймере0 - прерывания от этого таймера и увеличивают задержку. Запретите прерывания и у Вас будет равномерный период.

Марат
Offline
Зарегистрирован: 08.11.2012

Спасибо

usr-bin
Offline
Зарегистрирован: 04.09.2012

Написал программу на freeduino (на чипе atmega328P-PU), компилирую под atmega8, запускаю на atmega8.

Время задержек увеличивается в несколько раз. Вместо пауз примерно на полсекунды приходится использовать паузы 30-50 мс.

Получается дилема: то ли мне продали кварц не той частоты (маркировка НВ2 9108), то ли это закономерность и на разных чипах "время" течет по разному.

Схему подключения микросхемы использую из мануала: следующую

Ёмкость конденсаторов 22пФ, резистор .11 Ом., на свободные выводы вешается нагрузка в виде тестовых (отладочных) светодиодов, по которым и сужу по времени задержек.

Изменение времени (частоты импульсов) ведь не нормально, если так, что я сделал не так?

step962
Offline
Зарегистрирован: 23.05.2011

usr-bin пишет:

Получается дилема: то ли мне продали кварц не той частоты (маркировка НВ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 мс

usr-bin
Offline
Зарегистрирован: 04.09.2012

Фьюзы я не трогал. Все старался оставить по умолчанию, не вникая в то, без чего и так должно работать. Странно, что они так выставленны для 16 МГц'ового чипа.

Программу пишу в arduino-приложении выбирая стандартно присутствующий в списке устройств чип ATMEGA8, компилю там же, перекидываю на виндовый комп и шью COM-программатором Громова прогой uniprof.

 

По поводу кварца - я неоднократно встречал в сети замечания, что можно собрать схему и без кварца, но тогда могут появится трудноопределяемые глюки. А так как кварц и конденсаторы вещь недорогая, я решил их подключить.

Я даже программатор экранировал.

step962
Offline
Зарегистрирован: 23.05.2011

usr-bin пишет:

Фьюзы я не трогал. Все старался оставить по умолчанию, не вникая в то, без чего и так должно работать.

Ну и получили то, что получили.

Цитата:

Странно, что они так выставленны для 16 МГц'ового чипа.

Ну почему же странно - такая конфигурация по умолчанию позволяет программе изначально работать на "голом" чипе. А затем уже каждый подстраивает его (и схему) под свои нужды и 16 МГц тут не икона. Для работы с UART, например, куда более привлекательны кварцы с частотой, кратной 1,8432 МГц. А для работы от батарей - кварцы с пониженной тактовой частотой (ибо энергопотребление).

usr-bin
Offline
Зарегистрирован: 04.09.2012

Понял. Благодарю за разяснения.