View previous topic :: View next topic |
Author |
Message |
TCC
Joined: 10 Feb 2010 Posts: 9
|
problem with comparator interrupt |
Posted: Mon Apr 05, 2010 7:46 pm |
|
|
Hi,
I have problem triggering the comparator interrupt, when C1+/AN2 input is greater than C1-/AN0 input (this threshold is fixed at 0.207V). I expect the interrupt to trigger, it just don't happen. Anyone can help?
Code: |
#include <16F1827.h>
#DEVICE ADC=10
#use delay(clock = 16000000)
#use rs232(baud=38400, xmit=PIN_B5, rcv=PIN_B2, PARITY=N, BITS=8, STOP=1)
#fuses INTRC_IO, NOWDT, BROWNOUT, NOMCLR
#BYTE PIR2 = 0x12
#BIT PIR2_C1IF = PIR2.5
#BYTE PIE2 = 0x92
#BIT PIE2_C1IE = PIE2.5
//#INT_COMP
void comparator_isr()
{
printf("OverCurrent ");
overCurrent = TRUE;
}
void main() {
setup_adc_ports(sAN0 | sAN2);
setup_comparator(A0_A2_A1_A2);
// enable_interrupts(INT_COMP);
// enable_interrupts(GLOBAL);
PIE2_C1IE = 1;
while(1)
{
while(PIR2_C1IF) // Wait for Comp. interrupt
{
comparator_isr();
PIR2_C1IF = 0; // Clear Comp. interrupt flag
}
}
|
|
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Apr 05, 2010 8:21 pm |
|
|
What's your compiler version ? |
|
|
TCC
Joined: 10 Feb 2010 Posts: 9
|
|
Posted: Mon Apr 05, 2010 10:38 pm |
|
|
I am using PCM V 4.106. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Apr 06, 2010 4:01 am |
|
|
The CCS code for the 16F1827 for vs. 4.106 has a lot of bugs. The
first thing I noticed is that it's doing a software UART even though
the hardware pins are specified. So that's a bug. It may still be usable
but it's not preferable.
There are several bugs in the start-up code. Most of them are harmless.
They're writing to registers that don't need to be written to. But
presumably CCS intended to write to other registers. I didn't take the
time to guess what they really wanted to do.
The setup_comparator() function doesn't write to the Comparator
registers. Therefore, it doesn't work. To fix this, you need to
write directly to the comparator registers and set them up manually.
Define the registers with #byte statements and write to them in main().
Here's part of the .LST file for vs. 4.106, showing some of the bugs.
Code: |
.................... void main() {
0074: CLRF 05
0075: CLRF 04
0076: MOVLW 1F
0077: ANDWF 03,F
0078: MOVLB 01
0079: BCF 0D.5 // TRISB.5 = 0 (output)
007A: MOVLB 02
007B: BSF 0D.5 // LATB.5 = 1
007C: MOVLW 00
007D: MOVLB 03
007E: MOVWF 0D // ANSELB = 0x00 (all digital)
007F: BCF 10.0 // *** Bug - register doesn't exist
0080: BCF 10.1
0081: BCF 10.2
0082: MOVLB 01
0083: BCF 1E.0 // ADCON1 Vref+ = AVdd
0084: BCF 1E.1
0085: MOVLB 03
0086: MOVWF 0C // ANSELA = 0x00 (all digital)
0087: MOVLB 01
0088: CLRF 17 // WDTCON = 0 *** Bug: Not Needed
0089: MOVLW 07
008A: MOVWF 1C // ADRESH = 7 *** Bug: Not needed
....................
.................... setup_adc_ports(sAN0 | sAN2);
008B: MOVLW 00
008C: MOVLB 03
008D: MOVWF 0D // ANSELB = 0x00 (all digital)
008E: BCF 10.0 // *** Bug - register doesn't exist
008F: BCF 10.1
0090: BCF 10.2
0091: MOVLB 01
0092: BCF 1E.0 // ADCON1 Vref+ = AVdd
0093: BCF 1E.1
0094: MOVLW 05
0095: MOVLB 03
0096: MOVWF 0C // ANSELA = 0x05
.................... setup_comparator(A0_A2_A1_A2);
0097: MOVLB 01
0098: CLRF 17 // WDTCON = 0x00 *** Bug: Not needed
0099: MOVLW 03
009A: MOVWF 1C // ADRESH = 7 *** Bug: Not needed
009B: MOVF 05,W // Read FSR0H *** Bug: Not needed
009C: IORLW 30
009D: MOVWF 05 // Write FSR0H *** Bug: Not needed
009E: MOVLW 0D // 10us delay loop
009F: MOVWF 77
00A0: DECFSZ 77,F
00A1: GOTO 0A0
00A2: MOVF 1C,W // Read ADRESH *** Bug: Not needed
00A3: MOVLB 00
00A4: BCF 12.5 // PIR2.C1IF = 0 |
|
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19499
|
|
Posted: Tue Apr 06, 2010 5:06 am |
|
|
On the UART, this can be fixed with device editor. CCS have the TX and RX selected as B1/B2, rather then B1/B5.... :(
Best Wishes |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Apr 06, 2010 1:35 pm |
|
|
I just now emailed CCS support about all these bugs.
Update:
CCS support says they will fix these problems in the next release,
which will be vs. 4.107. |
|
|
|