Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Работа с WDT в МК PIC16F628

Непрочитано 19.02.2015, 21:56  
vavan1983
Почётный гражданин KAZUS.RUN
 
Аватар для vavan1983
 
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
vavan1983 на пути к лучшему
По умолчанию Работа с WDT в МК PIC16F628

Что бы разрешить работу сторожевого таймера нужно в конфигурации МК установить соответствующий бит в 1 WDT=1.

Как запретить работу WDT в прерывании?

Код:
int i=0;
void main() 
{
CMCON=0x07;
OPTION_REG=0X0F;
INTCON=0XF0;
TRISA.RA0=0;
TRISA.RA1=0;
TRISA.RA2=0;
while(1)
{
PORTA.RA1=~PORTA.RA1;       //контроль работы основного цикла
Delay_ms(1);
}
}

void interrupt(void)
{
if(INTCON.T0IF==1)
{
INTCON.T0IF=0;
i++;
if(i›5000)
{
i=0;
PORTA.RA0=~PORTA.RA0;
asm {
CLRWDT
SLEEP
}
}
}
//==================================================  ============================
if(INTCON.INTF==1)     //в этом условии нужно отключть работу WDT
                       //условие выполняется при изменении лог. уровня на RB0
{
i=0;
PORTA.RA2=~PORTA.RA2;
INTCON.INTF=0;
}
}
В этом коде происходит перевод МК в спящий режим на время переполнения WDT.
Реклама:
vavan1983 вне форума  
Непрочитано 19.02.2015, 22:09  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Работа с WDT в МК PIC16F628

Никак. Только сбросом clrwdt
NewWriter вне форума  
Сказали "Спасибо" NewWriter
vavan1983 (19.02.2015)
Непрочитано 19.02.2015, 22:56  
alvadep
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,042
Сказал спасибо: 589
Сказали Спасибо 3,967 раз(а) в 1,825 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: Работа с WDT в МК PIC16F628

CLRWDT не обязательно ставить перед SLEEP. Команда перехода в спячку и так обнулит таймер WDT и его предделитель. А вообще, засыпать в обработчике прерываний как-то не есть гуд.
alvadep вне форума  
Непрочитано 19.02.2015, 23:00  
vavan1983
Почётный гражданин KAZUS.RUN
 
Аватар для vavan1983
 
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
vavan1983 на пути к лучшему
По умолчанию Re: Работа с WDT в МК PIC16F628

Сообщение от alvadep Посмотреть сообщение
CLRWDT не обязательно ставить перед SLEEP. Команда перехода в спячку и так обнулит таймер WDT и его предделитель. А вообще, засыпать в обработчике прерываний как-то не есть гуд.
Да я только начал разбираться. Да в прерывании точно не к чему.
Я так понял после выхода из SLEEP все переменные которые были изменены в процессе работы программы, потеряют свой принятые изменения и примут изначальные состояния?
vavan1983 вне форума  
Непрочитано 20.02.2015, 00:04  
alvadep
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,042
Сказал спасибо: 589
Сказали Спасибо 3,967 раз(а) в 1,825 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: Работа с WDT в МК PIC16F628

Все зависит от того, чем будить МК. В ДШ это все описано.
alvadep вне форума  
Непрочитано 20.02.2015, 09:14  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Работа с WDT в МК PIC16F628

Откройте даташит этого МК на странице 104, таблица 14-7 показываетс остояние регистров при сбросах, последний столбец - при просыпании по WDT. Никакие регистры не меняют состояние, в том числе и пользовательские и даже W, ведь питание не выключается. А в зависимости от установленного до засыпания бита GIE программа либо продолжится после просыпания (GIE был = 0), либо перейдет по вектору прерывания (GIE был = 1) - в таблице строчка с состоянием регистра PCL (счетчика команд). Так же посмотрите таблицу 14-6 на предыдущей странице (последняя строчка этой таблицы).

Последний раз редактировалось NewWriter; 20.02.2015 в 09:19.
NewWriter вне форума  
Непрочитано 20.02.2015, 09:28  
shindbad
Прохожий
 
Регистрация: 27.01.2015
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
shindbad на пути к лучшему
По умолчанию Re: Работа с WDT в МК PIC16F628

Сообщение от vavan1983 Посмотреть сообщение
.Я так понял после выхода из SLEEP все переменные которые были изменены в процессе работы программы, потеряют свой принятые изменения и примут изначальные состояния?
Если WDT выведет МК из спячки, то выполнение программы продолжится с команды, которая указана после SLEEP. На данные это повлияет, но для нормальной обработки прерывания, которое разбудит МК, следом за SLEEP рекомендуется писать NOP.

Последний раз редактировалось shindbad; 20.02.2015 в 09:30.
shindbad вне форума  
Непрочитано 20.02.2015, 10:40  
alvadep
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,042
Сказал спасибо: 589
Сказали Спасибо 3,967 раз(а) в 1,825 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: Работа с WDT в МК PIC16F628

А еще там есть раздел "WAKE-UP FROM SLEEP". Это я к этому.
И если выход по первому пункту, возможны варианты. Если начальная инициализация без проверки TO и PD, то именно так и будет
Цитата:
все переменные которые были изменены в процессе работы программы, потеряют свой принятые изменения и примут изначальные состояния
Миниатюры:
Нажмите на изображение для увеличения
Название: pic.png
Просмотров: 42
Размер:	467.4 Кб
ID:	75919  
alvadep вне форума  
Непрочитано 20.02.2015, 21:43  
RECTO
Супер-модератор
 
Регистрация: 09.06.2011
Сообщений: 2,762
Сказал спасибо: 76
Сказали Спасибо 1,840 раз(а) в 668 сообщении(ях)
RECTO на пути к лучшему
По умолчанию Re: Работа с WDT в МК PIC16F628

Сообщение от alvadep Посмотреть сообщение
А вообще, засыпать в обработчике прерываний как-то не есть гуд.
Если сделать прямыми руками, то всё будет гуд.
А если пробуждение будет по WDT, то вообще никакой разницы.
RECTO вне форума  
Непрочитано 20.02.2015, 21:51  
RECTO
Супер-модератор
 
Регистрация: 09.06.2011
Сообщений: 2,762
Сказал спасибо: 76
Сказали Спасибо 1,840 раз(а) в 668 сообщении(ях)
RECTO на пути к лучшему
По умолчанию Re: Работа с WDT в МК PIC16F628

Сообщение от vavan1983 Посмотреть сообщение
Я так понял после выхода из SLEEP все переменные которые были изменены в процессе работы программы, потеряют свой принятые изменения и примут изначальные состояния?
Только если подадите RESET. Потому что фактически это не пробуждение, а сброс МК. В остальных случаях все регистры сохраняют свои значения.
RECTO вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Attiny13 на коде из Bascom не просыпается по WDT 123ksn AVR 7 18.12.2017 23:30
HD6303XP непонятная работа контроллера andrey3824 Коллекция глюков 2 03.08.2014 08:19
Напряжённая работа Roshens Отвлекитесь, эмбеддеры! 8 01.09.2010 23:08


Часовой пояс GMT +4, время: 23:07.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.