Свежие обсуждения
Микроконтроллеры

Ликбез по программированию PIC

1 82 99

Zandy: Уж, чем в железе пробовать, лучше сразу проверку окончания записи в цикле заложить перед слипом. Проще будет!

Это неспортивно! Тогда уж проще совсем не спать
Да и нам интересно, можно или нет

Хотя, если запись производится изредка, то можно и не париться...

 

AHTOXA: Тогда уж проще совсем не спать
Не спать нельзя. Микропотребление, аднака! Ус-во должно работать вечно от литиевой батарейки!

 

ну.... не удержался скачал ту документацию. Но с моим знанием английского ( ) я не нашел там ответа на наш вопрос. Там повторения из основного мануала.

И кстати, АЦП, помоему, можно запустить на преобразование и уйти в сон, а по окончанию преобразования проснуться и прочитать результат... очень смутно помню, может опять во сне видел

 

Мне кажется то что перед тем как уснуть необходимо к этому подготовиться, допустим отключить ШИМ, USART, компараторы, завершить запись в EEPROM и проверить что все записалось ОК, настроить параметры выхода из SLEEP и уснуть. Т.е. засыпать только после "подготовки" ко сну, а не влюбом подходящем месте иначе наверняка будут проблемы как с пробуждением так и с дальнейшим выполнением программы (после сна).

Zandy: Ус-во должно работать вечно от литиевой батарейки! Такого не бывает (к сожалению)

 

Покурил про слип...
Что нашёл интересного:

The Timer0 interrupt cannot wake the processor from SLEEP since the timer is shut off during SLEEP.
Timer0 вырубается при слипе.

USART Asynchronous mode is stopped during SLEEP.
Асинхронный USART - тоже.

Вот странное:
When the wake-up is due to an interrupt and the GIE bit is set, the PC is loaded with the interrupt vector
(0004h) after execution of PC+1.

После слипа сначала выполняется следующая инструкция, и только потом прерывание. Жуть

Насчёт GIE и пробуждения:

То есть, пробуждается и без GIE! При этом прерывание, естественно, не возникает.

Есть обратная сторона медали:

If the global interrupts are disabled (GIE is cleared), but any interrupt source has both its interrupt enable bit and the corresponding interrupt flag bits set, the device will immediately wake-up from SLEEP. The SLEEP instruction is completely executed.

Если при команде SLEEP (GIE выкл) для какого-нибудь прерывания оба флага (прерывания и разрешения, напр. EEIF и EEIE для EEPROM) установлены, то слип завершится немедленно.

Что касается спячки в процессе записи в ЕЕПРОМ - я думаю, что можно.

 

AHTOXA: то слип завершится немедленно.

Точней перевод такой: ... устройство проснется немедленно. Инструкция SLEEP полностью выполнена.

 

Kachipov: Точней перевод такой:

Не придирайтесь. Мне лень набивать лишние слова. Суть я передал.
Лучше чего-нибудь в тему скажите

 

Я не придирался. Я просто уточнил.

 

http://de7bugger.narod.ru/ - и будет вам щасьтье!
нормальный программатор. примеры написания программ и создания конструкций на PIC.

 

При подключении батареи питания к ус-ву, не выключателем, а путем установки батареи в отсек питания, в этот самый момент, могут происходить хаотичные изменения питающего напряжения, которые могут продолжаться достаточно долго, ну допустим до 1сек, пока человек не перестал "теребить" батарею и не успокоился, удостоверившись, что батарея вставлена нормально.

Спрашивается, как лучше защитить выполняемую контролером программу от этого явления программно? Внешний -MCLR использовать нельзя (вывод занят).
Надо ли задействовать POR, BOR, WDT? Как лучше их задействовать? Есть ли какие-то другие варианты, типа программной задержки в начале с последующей инициализацией (типа, зациклить инициализацию на 1 сек.)? Ну и т. д.?

Контроллер работает практически однократно. Используется для инициализации регистров другого ус-ва при включении питания. Потом засыпает навсегда. Время включения некритично, хоть через 10 сек после подачи питания.