Вопрос по спящему режиму
Добавлено: Вт окт 18, 2016 16:06:30
Есть пик 12f1822 . Первый вопрос такой - от чего может просыпаца данный пик? то все что его может разбудить?
Второе - задача чтобы пик спал и его будило от PIR сенсора - реально такое?
Перепробовал много, не просыпаеца пик и все тут. Но может я чето не так сделал, вот кароч настройки в код конфигураторе:

У меня внешнее прерывание на пине РА0 по позитивному фронту (сенсор при появлении движения выдает 3 вольта длительностью 2 секунды примерно импульс).

Вот тут я так понял активируется вектор прерываний, вот я поставил галку энаблед.
Вот сам код проги (эта прога не полная — только начинаю шаг за шагом):
вот мы заходим в цикл после функции подготовки к работе. И сразу укладываем пик спать. Далее по идее по приходу импульса от сенсора пик должен по первому же положительному фронту проснулся и перейти на следуюший оператор идуший за функцией слиип () также?
А там у меня идет проверка наличия импульса но ноге пика, потом малая пауза и потом перепроверка для фильтрации помех, так если положительный уровень установлен (то есть не помеха а тот самый импульс от сенсора) то включаем ключ и светик и держим так пол минуты.
Но в реале пик отпипикивается по функции начальной так сказать инициализации и потом замолкает и вродь внешне как ушел спать, но как я там руками не махаю перед сенсором — ноль реакции. То есть видимо не просыпаеца. Что же не так?
Вот снимок с осцила показывающий что сенсор импульсы кидает исправно, то есть проблема не в нем.

Второе - задача чтобы пик спал и его будило от PIR сенсора - реально такое?
Перепробовал много, не просыпаеца пик и все тут. Но может я чето не так сделал, вот кароч настройки в код конфигураторе:

У меня внешнее прерывание на пине РА0 по позитивному фронту (сенсор при появлении движения выдает 3 вольта длительностью 2 секунды примерно импульс).

Вот тут я так понял активируется вектор прерываний, вот я поставил галку энаблед.
Вот сам код проги (эта прога не полная — только начинаю шаг за шагом):
Код: Выделить всё
void START_pause (void);
/*
Main application
*/
void main(void)
{
// initialize the device
SYSTEM_Initialize();
// When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
// Use the following macros to:
START_pause();
// Enable the Global Interrupts
INTERRUPT_GlobalInterruptEnable(); --- я тут игрался и так и так
// Enable the Peripheral Interrupts
INTERRUPT_PeripheralInterruptEnable(); --- тут тоже вариировал и так и эдак
// Disable the Global Interrupts
//INTERRUPT_GlobalInterruptDisable();
// Disable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptDisable();
int b = 0;
while (1)
{
SLEEP ();
if ((b = SENS_GetValue ()) == 1)
{
__delay_ms (20);
if ((b = SENS_GetValue ()) == 1)
{
KEY_SetHigh ();
LED_SetHigh ();
__delay_ms (500);
}
}
}
}
void START_pause (void)
{
int i = 70;
int c = 0;
while (i >= 10)
{
BEEP_SetHigh ();
LED_SetHigh ();
__delay_ms (200);
BEEP_SetLow ();
LED_SetLow ();
for (c = 0; c < i; c++ )
__delay_ms (10);
i = i - 2;
}
BEEP_SetHigh ();
LED_SetHigh ();
for (i = 0; i <= 20; i++)
__delay_ms (100);
BEEP_SetLow ();
LED_SetLow ();
}А там у меня идет проверка наличия импульса но ноге пика, потом малая пауза и потом перепроверка для фильтрации помех, так если положительный уровень установлен (то есть не помеха а тот самый импульс от сенсора) то включаем ключ и светик и держим так пол минуты.
Но в реале пик отпипикивается по функции начальной так сказать инициализации и потом замолкает и вродь внешне как ушел спать, но как я там руками не махаю перед сенсором — ноль реакции. То есть видимо не просыпаеца. Что же не так?
Вот снимок с осцила показывающий что сенсор импульсы кидает исправно, то есть проблема не в нем.
