No switch involved, just a voltage divider off the unregulated rail to detect a power off condition - this is fed in to PORTB,7 pin set up for interrupt on falling edge trigger.Do you have a schematic you can post.....?
Did you debounce the switch for the save code ? or disable the interrupt after first edge detected ?
Also if you use a global variable in interrupt did you declare it as volatile ?
Regards, Dana.
So what prevents the chip from running as VDD falls below 1.8V (the min VDD spec).Yes to all re the code (see below) and no to Brown out, it is turned off.
That means that the external power might have to fall to as low as 2.35V in order to get a valid Vil input low voltage (approx 0.8V)Divider is 4k7 & 2k2 from power rail with the tap off to the PIC
Good point - will change that.So what prevents the chip from running as VDD falls below 1.8V (the min VDD spec).
Yep, got the scope out and seeing something similar in 'real life' about 50ish % of the time.If power fail ramp rate very slow it will produce, due to noise on Vcc and on power divider
from supply, a possible condition where input looks like a bouncing switch.
Unfortunately, the 16F1827 doesn't let you select the input type, and when used as a regular input pin or IOC they're TTL, not schmitt trigger.Many of the pins on that chip have a schmitt trigger input
Unfortunately, the 16F1827 doesn't let you select the input type, and when used as a regular input pin or IOC they're TTL, not schmitt trigger.
There is a single pin (INT) that's schmitt trigger, but as I've said using a digital input to detect an analog voltage is a bad idea.
Using the ADC would work but that adds a lot of overhead and has timing issues as you have to constantly monitor the pin voltage.
If you're busy doing something else when power falls, well...
Not to beat a dead horse, but if you use the comparator you overcome these issues.
You get fast response, programmable polarity, hysteresis, and a programmable trip point using the DAC or FVR as the other input.
Or just stick with the device he has and use the correct peripheral to detect an analog voltage.Easier to just use a more modern device
From about 500kHz to 30Mhz depending on the builders needs (usually in a small band eg 5-5.5MHz).What is range of freqs out of the DDS needed ?
Well, it would be if I didn't have to use that MPlab X rubbish - I'm sticking to what I can compile for using the last version of MPlab (8.92).Easier to just use a more modern device, which gives you more of everything, including selectable Schmitt inputs.
Working on that today - I was listening, I had to shuffle some functions around to different pins to get to the comparator pins.Not to beat a dead horse, but if you use the comparator you overcome these issues.
You get fast response, programmable polarity, hysteresis, and a programmable trip point using the DAC or FVR as the other input.
Well, it would be if I didn't have to use that MPlab X rubbish - I'm sticking to what I can compile for using the last version of MPlab (8.92).
The FVR will give you a choice of three ref points... 1V, 2V, or 4V (assuming you're using a 5V LDO).About to get the FVR working.
; *******************************************************************************
; comparator-16F1827.asm
;********************************************************************************
;
; Target Controller PIC16F1827
; __________
; COMP-PLUS--RA2 |1 18| RA1---SPARE
; COMP-NEG---RA3 |2 17| RA0---DDS_LOAD
; COMP-OUT---RA4 |3 16| RA7---DDS_DATA
; SPARE------RA5 |4 15| RA6---DDS_CLK
; Ground-----Vss |5 14| VDD---+5 V
; ENCODER----RB0 |6 13| RB7---SPARE
; ENCODER----RB1 |7 12| RB6---LED STEP 10kHz
; STEP SW----RB2 |8 11| RB5---LED STEP 1kHz
; CAL SW-----RB3 |9 10| RB4---LED STEP 10Hz
; ----------
;
; *******************************************************************************
; * Device type and options *
; *******************************************************************************
;
processor 16F1827
radix dec
errorlevel -207 ; Skip found label after column 1
errorlevel -302 ; Skip out of bank nuisance messages
errorlevel -303 ; Skip program word too large. Truncated to core size
;
; *******************************************************************************
; * Configuration fuse information for 16F1827: *
; *******************************************************************************
;
include <P16F1827.INC>
__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
__CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_LO & _LVP_OFF
;
; *******************************************************************************
; * Assign names to IO pins. *
; *******************************************************************************
;
; 16F1827 Oscillator setup
; OSCCON - Oscillator control reg.
; ---------------------------------
; SPLLEN b7 enable PLL x4
; 1 = enabled 0 = disabled
; IRCF | b6-3 frequency selection
; 1111 = 16MHz HF
; 1110 = 8 or 32MHz HF
; 1101 = 4MHz HF
; 1100 = 2MHz HF
; 1011 = 1MHz HF
; 1010 = 500kHz HF
; 1001 = 250kHz HF
; 1000 = 125kHz HF
; 0111 = 500kHz MF (default)
; 0110 = 250kHz MF
; 0101 = 125kHz MF
; 0100 = 62.5kHz MF
; 0011 = 31.25kHz HF
; 0010 = 31.25kHz MF
; 000x = 31.25kHz LF
; Reserved B2 reserved, 0
; SCS B1 0-: 1x = int. OSC.
; 01 = Timer1 oscillator
; 00 = determined by FOSC <2:0> in Configuration
; POR default 00111-00 500 kHz (POR = Power On Reset)
OSCCONVAL EQU b'01101000' ; 4MhZ CLOCK
;
; *******************************************************************************
; * Allocate variables in general purpose register space *
; *******************************************************************************
;
CBLOCK 0x20 ; Start Data Block
ENDC ; End of Data Block
CBLOCK 0x70 ; Use bank common locations - saves bank switching
ENDC ; End of Data Block
;
; *******************************************************************************
; * Macro's *
; *******************************************************************************
;
LED_on macro
bsf PORTA,1
endm
LED_off macro
bcf PORTA,1
endm
;
; *******************************************************************************
; * Purpose: This is the start of the program. *
; *******************************************************************************
;
;
ORG 0x0000
goto start ; Jump to main program
ORG 0x0004 ; interrupt routine data save
bcf INTCON,GIE ; Clear Global Interrupt Enable bit
BANKSEL PIR2
bcf PIR2,C2IF ; Clear comparator flag
movlb 0
clrf PORTA
clrf PORTB
LED_on
goto $
retfie ; Enable general interrupts and return
;
;--------------------------------------------------------------------------------
start
clrf INTCON ; clear INTCON
clrf PORTA
clrf PORTB
; Set PIC oscillator frequency
banksel OSCCON ; Select OSCCON
movlw OSCCONVAL ; Oscillator frequency
movwf OSCCON ; Loads the wanted value
; Configures all I / O as digital
Banksel ANSELA
movlw b'00001000' ; RA3 analog all others digital
movwf ANSELA
clrf ANSELB ; PORTB all digital
; Disable all wakeup pull-ups
Banksel WPUA
clrf WPUA
clrf WPUB
banksel OPTION_REG
movlw b'10000111' ; Pull-ups disabled, TMR0 clock source internal
; clock, prescaler to TMR0, set TMR0 prescaler
movwf OPTION_REG ; 1:256
;
movlw b'00111100' ; PORTA (RA2:5 inputs RA0:1 & 6:7 outputs)
movwf TRISA ;
movlw b'10001111' ; PORTB 0:3 & 7 inputs 4:6 outputs
movwf TRISB ; NOTE: Pull-up via 10k resistor all unused pins
;
BANKSEL CM1CON0
clrf CM1CON0
clrf CM1CON1
movlw b'10000110'
movwf CM2CON0 ; Comparator enabled
; Comparator Output bit polarity
; Comparator Output internal
; Comparator output is not inverted
; Unimplemented
; Comparator operates in normal power, higher speed mode
; Comparator hysteresis enabled
; Comparator output to Timer1 and I/O pin is asynchronous
movlw b'10100011'
movwf CM2CON1 ; Positive interrupt on
; Negative interrupt off
; C2VP connects to FVR
; C2VP connects to FVR
; Unimplemented
; Unimplemented
; C2VN connects to C12IN3- pin - RA3
; C2VN connects to C12IN3- pin - RA3
movlw b'10001100' ; FVR on, Comparator ref 4.096V
movwf FVRCON
BANKSEL PIE2
bsf PIE2,C2IE
bsf INTCON,PEIE
movlb 0
main
bsf INTCON,GIE
nop
goto $-1
;
END
;--------------------------------------------------------------------------------
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?