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

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

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

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

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

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

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 08.11.2007, 11:20  
tnosov
Временная регистрация
 
Регистрация: 19.06.2007
Сообщений: 85
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
tnosov на пути к лучшему
По умолчанию Как выйти из режима Sleep (PIC16F84A)?

Как выйти из режима Sleep (PIC16F84A)?

Войти в режим Sleep получается. А выйти не получается. Задача экспериментальная:
1) после подачи питания включить светодиод;
2) по нажатию кнопки выключить светодиод и войти в режим sleep;
3) повторное нажатие выводит микроконтроллер из режима sleep и включает светодиод;
... переход к п.2

Прикладываю исходник на асемблере и схему. В железе макет собран. Все действия прокомментированы. Друзья, прошу помочь решить проблему.

-- Прилагается рисунок: --


Прикрепленный файл: 1078124.zip
Реклама:
tnosov вне форума  
Непрочитано 08.11.2007, 11:57  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

У Вас неправильно реализовано прерывание. Так оно не делается - простым переходом, ведь оно связано со стеком.
urry вне форума  
Непрочитано 08.11.2007, 12:45  
tnosov
Временная регистрация
 
Регистрация: 19.06.2007
Сообщений: 85
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
tnosov на пути к лучшему
По умолчанию

Сообщение от urry
У Вас неправильно реализовано прерывание. Так оно не делается - простым переходом, ведь оно связано со стеком.
Уважаемый urry. Я в душе надеялся на ваш ответ (на ответ профессионала). Спасибо. Однако я не понимаю физиологии, а если быть точнее, я не понимаю какая нужна последовательность действий.

Я понимаю что перед входом в сон надо загрузить в стек некий адрес. Предположим что перед командой sleep будет что-то типа call metka_sleep. Затем мы засыпаем. Дожидаемся прерывания. Выходим на вектор 4. Выполняем кусок программы который заканчивается командой retfie (возврат из прерывания по стеку). И куда мы возвращаемся? Опять к нашей метке metka_sleep. Ерунда какая-то. Может в стек можно загрузить адрес как-то иначе (или иной адрес).

urry - ну если вы знаете применительно к указанному простейшему примеру как сделать - подскажите. Я не могу найти конкретных примеров входа и выхода из режима sleep на ассемблере.

urry - ну вы же спец. Полагаю что для вас эта задача минутное дело. Помогите (на ассемблере).
tnosov вне форума  
Непрочитано 08.11.2007, 18:55  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

При выпонении команды слип происходит выборка следующей за инструкцией команды, которая будет выполнена - независимо от того, по какому поводу просыпаемся. Для подстраховки ставят ноп. Т.е идет загрузка программного счетчика, а не стека.
Чтобы не цитировать даташит дальше -
http://www.microchip.ru/files/d-shee.../pic16f62x.pdf
На асме меня программить не заставишь и мне не совсем понятно, что Ваша прога делает - поэтому я на Си написал кусочек для иллюстрации - разбирайтесь, там и проект в протеусе.

Прикрепленный файл: 4590505.rar
urry вне форума  
Непрочитано 09.11.2007, 10:29  
tnosov
Временная регистрация
 
Регистрация: 19.06.2007
Сообщений: 85
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
tnosov на пути к лучшему
По умолчанию

За материал спасибо. Я на самом деле не знал где правильно рыть.

Итак (выдержка из документации):
При выполнении команды SLEEP происходит предвыборка следующей инструкции (PC+1). Если прерывание должно выводить микроконтроллер из режима SLEEP, соответствующий бит разрешения прерывания устанавливается в '1'. Микроконтроллер выходит из режима SLEEP независимо от состояния бита GIE. Если GIE=0, выполняется следующая инструкция после SLEEP без перехода по вектору прерывания. Если GIE=1, исполняется следующая инструкция после SLEEP и происходит переход на подпрограмму обработки прерываний (адрес 0004h). Когда выполнение какой-либо команды при выходе из режима SLEEP нежелательно, необходимо после команды SLEEP использовать инструкцию NOP.

Нас не интересует переход на подпрограмму обработки прерываний. Нужно заснуть, по прерыванию проснуться, и работать дальше после команды Sleep. Я сделал всё как положено. Однако, теперь микроконтроллер не засыпает, выполняет команду Sleep и по непонятным причинам просыпается и "молотит" дальше (WDT отключен; сделан внешний подтягивающий резистор к кнопке).

Помогите разобраться!!!

LIST P=PIC16F84A
__CONFIG H'3FF1'

STATUS EQU H'0003'
PORTB EQU H'0006'
TRISB EQU H'0006'
OPTION_REG EQU H'0001' ; внимание! регистр из 2го банка
INTCON EQU H'000B' ; т.н. регистр запросов и масок

Reg_1 EQU H'000C'
Reg_2 EQU H'000D'
Reg_3 EQU H'000E'


org 0 ; начало программы
; подготовительные моменты
bsf STATUS,5 ; переход в Банк 1
; нам нужна нога RB0/INT для внешнего прерывания (согл. документации)
movlw b'00000001' ; RB0/INT на вход, остальные на выход
movwf TRISB

; включение подтягивающих резисторов, в частности для ноги RB0/INT
; т.к. управляющий бит инверсный, используем команду bcf
;bcf OPTION_REG,7

bcf STATUS,5 ; переход назад в Банк 0
clrf PORTB ; очистка порта
; работа
Start
bsf PORTB,7 ; подали сигнал на RB7
; короткая задержка, чтобы успеть отпустить кнопку после выхода из сна
call Pause
; здесь могут быть и др строчки,
; касающиеся, работы "вне сна"
; отслеживание нажатия кнопки на ноге RB0 (для входа в "сон")
m1 btfsc PORTB,0 ; бит-проверка ножки RB0/INT
goto m1
bcf PORTB,7 ; выключили сигнал на RB7 перед сном
; короткая задержка, чтобы успеть отпустить кнопку перед входом в сон
call Pause

; определение разрешений прерываний
bsf INTCON,4 ; разрешили прерывание по ноге RB0/INT

; настройка прерывания на "спадающий" фронт на ножке RA0/INT,
; т.к. она ч.з. внутренний резистор "подтянута" к плюсу
bsf STATUS,5 ; переход в Банк 1
bcf OPTION_REG,6
bcf STATUS,5 ; переход назад в Банк 0

sleep

; сегмент для контроля выполнения команды sleep
bsf PORTB,6 ; выключили сигнал на RB6
call Pause
bcf PORTB,6 ; выключили сигнал на RB6

goto Start

;delay = 1'000'000 machine cycles
Pause movlw .173
movwf Reg_1
movlw .19
movwf Reg_2
movlw .6
movwf Reg_3
wr decfsz Reg_1, F
goto wr
decfsz Reg_2, F
goto wr
decfsz Reg_3, F
goto wr
return

end ; конец программы

Прикрепленный файл: 9092381.zip
tnosov вне форума  
Непрочитано 09.11.2007, 10:34  
tnosov
Временная регистрация
 
Регистрация: 19.06.2007
Сообщений: 85
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
tnosov на пути к лучшему
По умолчанию

Уважаемы urry
Плз., не поленитесь - сделайте на Си сегмент без ухода на подпрограмму обработки прерываний. Я бы hex файл дизасемблировал и посмотрел как он устроен.
tnosov вне форума  
Непрочитано 09.11.2007, 11:25  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Чтобы посмотреть команды в си -шном коде, существует файл *.lst . Также в протеусе можете поставить галочку pic cpu registers и смотреть регистры -в пошаговой отладке.

Прикрепленный файл: 7021818.rar
urry вне форума  
Непрочитано 09.11.2007, 11:50  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Не поленился и запустил Ваш проект в МП-ЛАБе - уходит проц в спячку.
Пользуйтесь симулятором.

Прикрепленный файл: 8371382.rar
urry вне форума  
Непрочитано 09.11.2007, 12:40  
tnosov
Временная регистрация
 
Регистрация: 19.06.2007
Сообщений: 85
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
tnosov на пути к лучшему
По умолчанию

У меня конечно не так уж и много опыта, но симулятором я умею пользоваться. И в симуляторе действительно засыпает контроллер. Однако в железе контроллер "не хочет укладываться спать"...

Команда Sleep точно выполняется (в программе для контроля предусмотрен внешний сигнал на RB6 после пробуждения). Но процессор упорно не хочет спать.

Прошивал и пробовал два заведомо исправных микроконтроллера. Результат одинаков. НЕ СПИТ!

Может со схемотехникой что-то не так. Друзья - ну у кого есть практический опыт - не стесняйтесь - говорите.
tnosov вне форума  
Непрочитано 09.11.2007, 12:57  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

А как именно Вы видите, что он не спит ?
Через какое время выходит ?
Ваш хекс в студию.
urry вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AVR SLEEP режим picavr Микроконтроллеры, АЦП, память и т.д 2 19.08.2009 15:38
Как корректно перейти в sleep? hubble Микроконтроллеры, АЦП, память и т.д 7 25.12.2008 04:05
ATMEGA8 и SLEEP-режим black27512 Микроконтроллеры, АЦП, память и т.д 4 08.10.2008 18:55
выход из sleep (18f2320) SergeyKN Микроконтроллеры, АЦП, память и т.д 1 02.11.2006 14:41
HDD 2 режима? IgorN Ремонт оргтехники 9 21.10.2003 11:30


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


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