E' un paio di giorni che cerco di mandare in modalità SLEEP il PIC12F509.
Il PIC è settato con oscillatore interno (4MHz) e quindi non riesco a vedere tramite i pin normalmente collegati al quarzo se effettivamente l' oscillatore viene spento.
Per capire se enti o meno in stand by l' unica verifica che posso fare è quella di montare in serie a Vdd un' amperometro tramite il quale misurare l' assorbimento nella condizione di normale funzionamento e l' assorbimento dopo l' esecuzione dell' istruzione SLEEP.
Il problema è proprio qui, infatti l' assorbimento non varia di nulla rimane costante a circa 350µA. Guardando il datasheet invece mi risulta che dovrebbe calare vistosamente nonostante la mia tensione di alimentazione sia a 5V invece che a 2V come indicato in tabella:
Inoltre se simulo (MPLAB sim) il programma noto che nel registro STATUS il POWER DOWN BIT (cioè il bit 3) cambia stato portandosi a zero subito dopo la lettura dell' istruzione SLEEP, e questo se non erro dovrebbe segnalare l' entrata in stand by del microcontrollore:
I bit di configurazione sono così settati:
Ed infine la parte di codice che potrebbe interessare (ancora priva di commenti):
- Codice: Seleziona tutto
#include P12F509.INC
__CONFIG B'000000001010'
TIMER_1 ORG 50H
TIMER_2 ORG 51H
TIMER_3 ORG 52H
CONTEGGIO ORG 53H
CONTEGGIO_ACC ORG 54H
CONTEGGIO_LAMP ORG 55H
ORG 60H
CLRF GPIO
MOVLW B'00011100'
TRIS GPIO
MOVLW B'01000000'
OPTION
BCF GPIO,0
BCF GPIO,1
MOVLW D'255'
MOVWF TIMER_1
MOVLW D'255'
MOVWF TIMER_2
MOVLW D'3'
MOVWF TIMER_3
MOVLW D'10'
MOVWF CONTEGGIO
MOVLW D'100'
MOVWF CONTEGGIO_ACC
MOVLW D'10'
MOVWF CONTEGGIO_LAMP
INIT BTFSC GPIO,3
GOTO LED_SPENTO
GOTO LED_ACCESO
..............
..............
..............
LUCE BSF GPIO,0
BTFSC GPIO,3
GOTO LUCE_RECUPERO
BCF GPIO,0
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
CALL RITARDO
SLEEP
END
Dunque vi chiedo, è corretto controllare come sto facendo io l' entrata del microcontrollore in modalità SLEEP ?
Dovrei effettivamente notare un calo di corrente ?
Ciao e grazie !!
David