Pic16F676 - Почему происходит постоянно сброс

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 6
Зарегистрирован: Вт авг 02, 2011 16:19:47

Сообщение Radioalex »

Предельно простая задача - зажечь светодиод при нажатие на кнопку. Обязательное условие:
- PIC16F676;
- работа от внутреннего тактового генератора;
- использование TM0.
Накидана прога в Протоне. Вот собственно она:
________________________
Device = 16F676 ' Использовать микроконтроллер 16F676
Config INTRC_OSC_NOCLKOUT , WDT_On , PWRTE_OFF , BODEN_OFF , CP_OFF , CPD_OFF , MCLRE_ON
Xtal = 4 ' Установить частоту генератора МК равной 4 МГц
TRISC = %00010000 ' Устанавливаем вывод C4 на вход
OPTION_REG = %10000111 'Коэффициент деления 1/256, отключение подтягивающих резисторов
INTCON = %00100000 'Отключение глобальных прерываний, прерывание по ТМ0.
On Interrupt GoTo Display 'В случае прерывания перейти на "Дисплей"

Main:
GoTo Main

Disable
Display:
PORTC.5= PORTC.4
Resume
Enable
_____________
Вопрос: почему все время происходит сброс сторожевого таймера и, как следствие, всего микроконтроллера???
Вложения
1.jpg
Вот схемка
(41.36 КБ) 358 скачиваний
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница

Сообщение urry »

WDT_On
в конфиге никакие ассоциации не вызывает ?
Контактная информация:
Реклама
Родился
Сообщения: 6
Зарегистрирован: Вт авг 02, 2011 16:19:47

Сообщение Radioalex »

в смысле никаких ассоциаций? WDT включен по умолчанию. его отключение приводит к некорректному поведению котроллера. я думаю модвох в другом. но в чем?
Прорезались зубы
Аватара пользователя
Сообщения: 243
Зарегистрирован: Пт фев 26, 2010 03:33:02
Откуда: Донецк

Сообщение pazak »

Таймер WDT, или "сторожевой пёс" (у программистов) работает от собственного RC генератора и имеет время переполнения 18 миллисекунд без предделителя. После сброса по включению питания, а так же после сброса при переполнении WDT все биты регистра OPTION REG устанавливается в "1", бит №3-PSA отвечает за включение предделителя перед WDT (1) или перед TMR0 (0). Биты №2-№0 отвечают за коэффициент деления предделителя, получается что, после сбросов предделитель включен перед WDT с коэффициентом деления 1:128. Умножаем 18мс на 128 получаем период переполнения WDT 2,3c, через это время происходит сброс МК. Необходимо или выключить WDT в слове конфигурации "WDT_OFF", или обеспечить сброс WDT в программе ранее чем произойдёт его переполнение.

С уважением.
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 6
Зарегистрирован: Вт авг 02, 2011 16:19:47

Сообщение Radioalex »

Большое спасибо за исчерпывающую информацию. Очень помогла.
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»