Исследование Watchdog
У кого возникнут вопросы, пишите в личку или в тему "Вопросы-ответы" на главной странице форума.
Программирование ATMEL в BASCOM. |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » Программирование ATMEL в BASCOM. » Примеры применения в среде Баском » Исследование Watchdog
Исследование Watchdog
У кого возникнут вопросы, пишите в личку или в тему "Вопросы-ответы" на главной странице форума.
Проблема с Watchdog в МК Atmega48_48P_88_88P_168_168P_328P_164_164P_324_324P_644_644PP1284P при симуляции в Протеус 7.10; 8.1
Симуляция Протеус 7.10; 8.1 + исходники - скачать
Ошибка в библиотеке AVR2.dll Протеуса.
В железе проверено, всё работает при обработке силами Bascom т.е.:
On Wdt Обработка_прерывания_watchdog ' Переход на подпрограмму обработки прерывания после переполнения таймера-счётчика Watchdog
Config Watchdog = 512 ' 16 32 64 128 256 512 1024 2048 4096 8192
Start Watchdog
При использовании симуляции, код немного меняется, смотрите исходники в архиве.
При использовании в симуляторе Atmega48_88_168_164_324_644 - установленные временные интервалы Watchdog сохраняются (Протеус 7.10; 8.1)
При использовании в симуляторе Atmega48P_88P_168P_328P_164P_324P_644PP1284P - установленные временные интервалы Watchdog сильно занижены, но само прерывание обрабатывается в полном объёме (Протеус 7.10; 8.1)
'
Работа прерывания от Watchdog в МК Attiny13A, именно прерывания, не путать с Reset МК!
Терминальная программа написана пользователем нашего форума под ником "Пётр", описана здесь
'###############################################################################
'Для корректного отображения в компиляторе Bascom, используйте шрифт Consolas!
'###############################################################################
$regfile = "attiny13a.dat" ' Используемый контроллер
$crystal = 9600000 ' 9,6 МГц при CKDIV8 = 0 (смотреть скрин фьюзов)
' $crystal = 1200000 ' 1,2 МГц при CKDIV8 = 1 (смотреть скрин фьюзов)
$framesize = 16 'размер области используемой и необходимой для преобразований
$hwstack = 10 ' Размер аппаратного стека
$swstack = 10 ' Размер программного стека' Настройка USART с выходом TxD на выводе Portb.4 (3 ножка МК) и программной реализацией,
' скорость трансляции 9600 бод, при частоте МК 9,6 МГц, фьюз CKDIV8 = 0Open "comb.4:9600,8,n,1" For Output As #1
Print #1 , "Reset МК"'------------------------- Настройка Watchdog --------------------------------
On Wdt Обработка_прерывания_watchdog ' Nosave ' Переход на подпрограмму обработки прерывания после переполнения таймера-счётчика Watchdog
Config Watchdog = 1024 'время срабатывания ~1сек., при соответствии $crystal и фьюзов МК ' 16 32 64 128 256 512 1024 2048 4096 8192
'--------------------- Используемые переменные -------------------------------
Dim Переменная As Byte
Dim Флаг_сработал_watchdog As Byte
'-------------- Разрешаем работу необходимых прерываний ----------------------
Enable Wdt ' Разрешаем прерывание от переполнения таймера Watchdog
'------------ Разрешаем работу всех включенных прерываний --------------------
Enable Interrupts ' Глобально разрешаем все взадействованные прерывания
'===============================================================================
' Г Л А В Н Ы Й Ц И К Л
'===============================================================================
Главный_цикл:If Флаг_сработал_watchdog <> 0 Then
Print #1 , Переменная
Флаг_сработал_watchdog = 0
Goto Главный_цикл
End IfPowerdown
Goto Главный_цикл
End
'===============================================================================
' П О Д П Р О Г Р А М М Ы
'==============================================================================='===============================================================================
Обработка_прерывания_watchdog:
'-------------------------------------------------------------------------------
Incr Переменная
Флаг_сработал_watchdog = 1Print #1 , "Прерывание от Watchdog " ;
'-------------------------------------------------------------------------------
Return
'===============================================================================
При использовании BootLoadera
Bit 3 – WDRF: Watchdog System Reset Flag регистра (MCUSR – MCU Status Register) не записывается
в качестве альтернативы, можно проверять перезагрузку от Watchdog если MCUSR = 0
Во всех остальных режимах перезагрузки и старта, в этом регистре что-то будет
Проверено на чипах:
Atmega48PA
Atmega88PA
Atbanned68P
Atmega328P
Atbanned284P
Вы здесь » Программирование ATMEL в BASCOM. » Примеры применения в среде Баском » Исследование Watchdog