Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Исследование Watchdog

Сообщений 1 страница 4 из 4

1

Исследование Watchdog

У кого возникнут вопросы, пишите в личку или в тему "Вопросы-ответы" на главной странице форума.

+1

2

Проблема с 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)

0

3

'
Работа прерывания от 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 = 0

  Open "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 If

   Powerdown
  Goto Главный_цикл
End
'===============================================================================
'                        П О Д П Р О Г Р А М М Ы
'===============================================================================

'===============================================================================
  Обработка_прерывания_watchdog:
'-------------------------------------------------------------------------------
      Incr Переменная
      Флаг_сработал_watchdog = 1

      Print #1 , "Прерывание от Watchdog " ;
'-------------------------------------------------------------------------------
  Return
'===============================================================================

http://se.uploads.ru/t/3YdBU.jpg http://se.uploads.ru/t/lwMRs.jpg

+2

4

При использовании BootLoadera

Bit 3 – WDRF: Watchdog System Reset Flag  регистра  (MCUSR – MCU Status Register) не записывается

в качестве альтернативы, можно проверять перезагрузку от Watchdog  если  MCUSR = 0

Во всех остальных режимах перезагрузки и старта, в этом регистре что-то будет

Проверено на чипах:

Atmega48PA
Atmega88PA
Atbanned68P
Atmega328P
Atbanned284P

0