Hallo,
ich möchte einen Comparator vom PIC16F684 nutzen. Beim überschreiten
einer bestimmten Spannung soll ein Interrupt ausgelößt werden, aber es
tut sich nichts.
Habe an C2-/RC1 (PIN9) einen Spannungsteiler und an C2+/RC0 (PIN10) die
zu überwachende Spannung (im Moment auch Spannungsteiler).
Hier mein Code:
1 | #include <16F684.h>
|
2 | #pragma ID CHECKSUM // Checksumme als ID
|
3 | #pragma device adc=16
|
4 | #pragma FUSES NOWDT //No Watch Dog Timer
|
5 | #pragma FUSES INTRC_IO //Internal RC Osc, no CLKOUT
|
6 | #pragma FUSES PUT //Power Up Timer
|
7 | #pragma FUSES NOMCLR //Master Clear pin used for I/O
|
8 | #pragma FUSES NOIESO //Internal External Switch Over mode disabled
|
9 | #pragma FUSES NOFCMEN //Fail-safe clock monitor disabled
|
10 | #pragma use delay(int=8000000)
|
11 | #pragma ZERO_RAM
|
12 |
|
13 | #pragma use FIXED_IO( A_outputs=PIN_A5,PIN_A2,PIN_A1,PIN_A0 )
|
14 | #pragma use FIXED_IO( C_outputs=PIN_C5,PIN_C4,PIN_C3,PIN_C2 )
|
15 |
|
16 | #define led1 PIN_A0
|
17 | #define led2 PIN_A1
|
18 | #define led3 PIN_A2
|
19 | #define led4 PIN_C2
|
20 | #define led5 PIN_C3
|
21 | #define led6 PIN_C4
|
22 | #define led7 PIN_C5
|
23 | #define led8 PIN_A5
|
24 |
|
25 | // Interrupt_SR #############################################
|
26 | #int_COMP
|
27 | void COMP_isr(void)
|
28 | {
|
29 | output_high(led8);
|
30 | delay_ms(500);
|
31 | output_low(led8);
|
32 | delay_ms(500);
|
33 | output_high(led8);
|
34 | delay_ms(500);
|
35 | output_low(led8);
|
36 | }
|
37 |
|
38 |
|
39 | // Hauptprogramm ############################################
|
40 | void main()
|
41 | {
|
42 | setup_oscillator(OSC_8MHZ);
|
43 | setup_adc(ADC_OFF);
|
44 | setup_adc_ports(NO_ANALOGS);
|
45 | setup_ccp1(CCP_COMPARE_INT);
|
46 | setup_comparator(NC_NC_C1_C0);
|
47 | enable_interrupts(INT_COMP);
|
48 | enable_interrupts(GLOBAL);
|
49 |
|
50 | output_high(led8);
|
51 | delay_ms(300);
|
52 | output_low(led8);
|
53 | delay_ms(300);
|
54 | output_high(led8);
|
55 | delay_ms(300);
|
56 | output_low(led8);
|
57 |
|
58 | while(TRUE)
|
59 | {
|
60 | delay_cycles(10);
|
61 | }
|
62 | }
|