Доброе время суток! МК PIC18F252. Есть такая задача - нужно МК вводить в SLEEP и затем выводить по изменению уровня на выводе контроллера (в часности - RB5), и включить режим "мигания" светодиода. Написал на асме.
Светодиод на вывод RA2, T0CKI подключен на массу, кнопка на RB5 и массу, работает от кварца 4 Мгц.
;*******************************************************************************
*************
LIST P=18F252
#include <P18F252.INC> ;ПОДКЛЮЧЕНИЕ ФАЙЛА С ОПИСАНИЕМ ПЕРЕМЕННЫХ И СИСТЕМНЫХ РЕСУРСОВ PIC18F252
radix dec
;*******************************************************************************
*************
#define Led2 PORTA,2
; ================= задаем биты конфигурации : =================
CONFIG OSC = HS
CONFIG WDT = OFF ; сторожевой таймер выключить
CONFIG LVP = OFF ; запретить низковольтное программирование
BODEN = 0
; ==============================================================
Reg_1 EQU 0x039
Reg_2 EQU 0x040
;************************************************* *******************************************
ORG 0x0000 ; Вектор сброса процессора, начальный адрес
;************************************************* *******************************************
goto Start
Start:
clrf INTCON ; запрещаем все прерывания
clrf INTCON2
clrf INTCON3
clrf PIE1
clrf PIE2
clrf PIR1
clrf PIR2
clrf RCON
clrf SSPCON2
clrf SSPSTAT
clrf SSPBUF
clrf SSPADD
clrf T0CON
clrf T1CON
clrf T2CON
clrf T3CON
clrf CCP1CON ; Выкл. модули сравнения.
clrf CCP2CON
clrf SSPCON1
clrf RCSTA ; Выкл. посдедовательные порты.
clrf ADCON0 ; Выкл. АЦП
movlw B'00000110'
movwf ADCON1
clrf LATA
clrf LATB
clrf LATC
setf TRISA
setf TRISB
setf TRISC
movlw B'00100000'
movwf TRISB ;RB5 будет на вход
bcf TRISA,2 ; Порт на выход (светодиод)
bcf INTCON2, NOT_RBPU ; ВКЛ. ПОДТЯГ. РЕЗ. PORTB
bcf INTCON2, RBIP ; обработчик прерываний по изменению уровня на PORTB на ? приоритет
bsf INTCON, RBIE ; Разрешить прерывания по изменению уровня на PORTB
loop:
btfss PORTB,5
bra Start
rcall Pause02
clrf LATB
movf PORTB, W
bcf INTCON, RBIF
;bsf INTCON2, NOT_RBPU ; ВЫКЛ. ПОДТЯГ. РЕЗ. PORTB
sleep
nop
Skaniruem_knopku:
btfss PORTB,5
bra Skaniruem_knopku
btfss PORTB,5
bra $-2
migalka:
bsf Led2 ; Зажечь Svetodiod 2
rcall Pause02 ; Время = 0,2 с
btfss PORTB,5
bra Start
bcf Led2 ; Потушить Svetodiod 2
rcall Pause02 ; Время = 0,2 с
btfss PORTB,5
bra Start
bra migalka
; ==============================================================
Pause02:
movlw .197
movwf Reg_1
paus_ clrf Reg_2
paus__
nop
decfsz Reg_2, F
bra paus__
decfsz Reg_1, F
bra paus_
return
; ==============================================================
END
Вопрос в том что в режима сна МК потребляет 100 мкА. Не много ли потребляет? Например недавно "изучал" Pic12F629/675 - там ток потребления "во сне" менее 1 мкА.
P.S. Так же заметил странное влияние: если приблизить руку к мк, то ток возрастает до 1 мА
Пробовал питание от АКБ (U=4,2 В) ток потребления = 40 -50 мкА. Хотя в даташите на МК: I = 0,11 - 20 мкА.
Тут же достаю такой же "макет н а воздухе" на 12F675, те же условия (БП, тестер), "слип" работает как часы. Не понимаю в чем дело?