Перейти к содержанию
    

Выход из SLEEP по нажатию кнопки на MCLR

Есть готовое устройство на PIC18F14K22, у которого на выводе MCLR висит кнопка, которая в процессе работы за счет различных типов нажатий (click, double click, long pressed) переключает режимы работы и отображения информации на дисплее.
После некоторого простоя, устройство надо переводить в режим SLEEP, с возможностью просыпания или хотя бы перезапуска устройства по нажатию на эту же кнопку.
Так вот перед тем как уснуть, я разрешаю прерывание по изменению порта RA3(MCLR) и выполняю команду SLEEP. Но вместо того чтобы уснуть, устройство тут же просыпается и продолжает работу, хотя на кнопку никто не нажимал.
Если в качестве просыпания используется любой другой вход, то все нормально работает, но мне нужно чтобы работало от RA3/MCLR. Что за чудо вход, где я косячу?

    INTERRUPT_GlobalInterruptDisable();
    IOCAbits.IOCA3 = 1;
    INTCONbits.RABIF = 0;
    Nop();
    Sleep();
    Nop();
    IOCAbits.IOCA3 = 0;
    INTCONbits.RABIF = 0;
    INTERRUPT_GlobalInterruptEnable();

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

40 минут назад, Yaumen сказал:

Но вместо того чтобы уснуть, устройство тут же просыпается и продолжает работу, хотя на кнопку никто не нажимал.

watchdog включен?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Yaumen сказал:

но мне нужно чтобы работало от RA3/MCLR. Что за чудо вход, где я косячу?

Скорее всего, в конфигурации не установили режим: "RA3 input pin enabled".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

28 minutes ago, HardEgor said:

watchdog включен?

нет

4 minutes ago, quark said:

Скорее всего, в конфигурации не установили режим: "RA3 input pin enabled".

Установил. Иначе бы выбор режимов по кнопке, подключенной к RA3 не работал, а постоянно бы сбрасывался!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитайте в даташите раздел "I/O Ports". Там есть правильная последовательность действий. Нужна еще операция чтения регистра обязательно, на сколько я помню, перед сбросом флагов прерываний.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, quark said:

Почитайте в даташите раздел I/O Ports. Там есть правильная последовательность действий. Нужна еще операция чтения регистра обязательно, на сколько я помню, перед сбросом флагов прерываний.

Уже до дыр зачитал ... Я не первый день уже с этим борюсь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

51 минуту назад, Yaumen сказал:

Уже до дыр зачитал ... Я не первый день уже с этим борюсь

А подтягивающие резисторы внешние или внутренние используете? Попробуете внешнюю подтяжку поставить на A3.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, Yaumen сказал:

стоит 10К к питанию и емкость 0.1 мкФ к земле

В общем, если хотите чтобы вам помогли разобраться, нужно выложить установленную конфигурацию полностью и кусок программы перехода в Sleep целиком, где устанавливаются все рабочие регисторы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я это и сделал в самом первом посте. Это и есть полный код перехода в SLEEP.

Проблема решилась добавлением PORTA перед сбросом RABIF

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 минут назад, Yaumen сказал:

Проблема решилась добавлением PORTA перед сбросом RABIF

Понятно. Порт A3 - только для чтения. В этом его отличие от других.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...