Микроконтроллеры | Вопросы по ATmega8 |
|
---|---|---|
Конечно возвращается. И обработчикик прерываний, и sleep отрабатывает как обычно, единственное, что некоторые прерывания в режиме шумопонижения автоматически маскируются на время оцифровки (какие именно - см даташит, наизусть не помню). |
|
|
|
||
В CodeVision есть процедура Delay_ms(100) |
|
|
Lerik: Откуда контроллер знает на какой частоте он работает |
|
|
В CodeVision не работаю, а в WinAVR GCC частота задается в makefile константой F_CPU. И что значит "прерывания приостанавливаются"? Выполняется cli? Скорее всего нет - даже миллисекунды хватит, чтобы порастерять все прерывания. Так вообще-то не делается |
|
|
chav1961: В CodeVision не работаю, а в WinAVR GCC частота задается в makefile константой F_CPU Это совершенно не обязательно У меня, например, частота задаётся в файле common.h |
|
|
Где это записать в программе так и не нашел, но нашел, что частота процессора записывается в ini файле проекта CPUClock= ..... to chav1961 ◊ Это я спрашивал, что если я на Delay_ms организую подсчет времени (часы, минуты), но у меня же еще работает остальная часть программы, где есть свои таймера с прерываниями и другие всякие прерывания, какое влияние эта Delay_ms окажет на них? Может тупо дойдет до Delay_ms и будет сидеть ждать пока эта выдержка не закончится, а уже потом начнет прерывания обрабатывать? Как она себя ведет при работе программы? |
|
|
Подсчет времени, если только требуется достаточная точность, можно делать только прерываниями от таймера. Таймер работает параллельно с работой центрального процессора и независимо от него, потерять от него прерывание - это надо сильно постараться, а любой другой способ неизбежно накрутит на показание часов/минут/секунд систематическую погрешность. Не нужно никаких delay, счетчик времени должен работать параллельно с работой процессора, если не хотите вранья как минимум на минуты за сутки. |
|
|
Ну как правильно делать я осознаю и как таймер работает тоже, просто на таймере по моему замороченнее хотелось попроще Сутки считать не будет, максимум 8 часов, если погрешность составит минуту, то это допустимо. |
|
|
Lerik: Но все таки как оно это Delay_ms работает совместно с программой? Обычно это глухой цикл, который крутится примерно 1мс. Если есть прерывания, то дольше. Я делаю иначе. Настраиваю таймерное прерывание на 1КГц, в нём пишу:
и тогда :
timer_ticks надо объявить как volatile. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |