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

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

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

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

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

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


 
Опции темы
Непрочитано 19.02.2015, 21:56  
vavan1983
Почётный гражданин KAZUS.RU
 
Аватар для 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.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,504
Сказал спасибо: 401
Сказали Спасибо 2,217 раз(а) в 1,315 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Работа с WDT в МК PIC16F628

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

CLRWDT не обязательно ставить перед SLEEP. Команда перехода в спячку и так обнулит таймер WDT и его предделитель. А вообще, засыпать в обработчике прерываний как-то не есть гуд.
alvadep вне форума  
Непрочитано 19.02.2015, 23:00  
vavan1983
Почётный гражданин KAZUS.RU
 
Аватар для 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.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: Работа с WDT в МК PIC16F628

Все зависит от того, чем будить МК. В ДШ это все описано.
alvadep вне форума  
Непрочитано 20.02.2015, 09:14  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,504
Сказал спасибо: 401
Сказали Спасибо 2,217 раз(а) в 1,315 сообщении(ях)
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.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
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,633
Сказал спасибо: 73
Сказали Спасибо 1,793 раз(а) в 647 сообщении(ях)
RECTO на пути к лучшему
По умолчанию Re: Работа с WDT в МК PIC16F628

Сообщение от alvadep Посмотреть сообщение
А вообще, засыпать в обработчике прерываний как-то не есть гуд.
Если сделать прямыми руками, то всё будет гуд.
А если пробуждение будет по WDT, то вообще никакой разницы.
RECTO вне форума  
Непрочитано 20.02.2015, 21:51  
RECTO
Супер-модератор
 
Регистрация: 09.06.2011
Сообщений: 2,633
Сказал спасибо: 73
Сказали Спасибо 1,793 раз(а) в 647 сообщении(ях)
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, время: 05:56.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot