| 
	
	|  |  |  
	
		| View previous topic :: View next topic |  
		| Author | Message |  
		| Ned Israelsen Guest
 
 
 
 
 
 
 
			
			
			
			
			
			
			
			
			
 
 | 
			
				| No external interrupt with PIC12F675?? |  
				|  Posted: Fri Jan 24, 2003 12:52 am |   |  
				| 
 |  
				| I have tried multiple methods to get an external interrupt to work with CPM programming PIC12F675s.  The interrupt flag never gets set.  Example code (trying to trigger by pulling GP2 low): 
 ////////////////////////////////////////////////////////
 //trying to make the INT external interrupt on GP2 work
 //to switch state of a couple of LEDs on GP4,5
 ////////////////////////////////////////////////////////
 #include <12f675.h>
 #fuses INTRC_IO,PUT,NOWDT,NOPROTECT,NOMCLR, BROWNOUT
 #use delay(clock=4000000)
 //define IO pins
 #bit gpio5	=0x05.5
 #bit gpio4	=0x05.4
 #bit gpio3	=0x05.3
 #bit gpio2	=0x05.2
 #bit gpio1	=0x05.1
 #bit gpio0	=0x05.0
 #use fast_io(a)
 
 #byte OSCCAL = 0x90
 #rom 0x3ff = {0x3470}  /// input the calibration code
 #int_ext
 void external_handler(void)
 {
 gpio5=!gpio5;    //instantly flip LEDs on external interrupt
 gpio4=!gpio4;
 delay_ms(100);
 }
 
 #int_default
 void default_isr(void)
 {}
 
 main()
 {
 //setup i/o
 set_tris_a(0b001100); //GP0,1,4,5 output; 2,3 input
 gpio5=1;  gpio4=0;  gpio1=0;  gpio0=0; //turn on LED on gp5
 
 //set timer0 not to use GP2
 setup_counters(rtcc_internal, rtcc_div_2);
 
 //setup interrupts
 enable_interrupts(int_ext);
 ext_int_edge(h_to_l);  //GP2 is pulled high with resistor
 enable_interrupts(global);
 
 //loop and wait for interrupt
 while(true)
 {
 delay_ms(2500);
 gpio5=!gpio5;   //toggle LEDs just to show program is running
 gpio4=!gpio4;
 }
 }
 ___________________________
 This message was ported from CCS's old forum
 Original Post ID: 10958
 |  |  
		|  |  
		| Tomi Guest
 
 
 
 
 
 
 
			
			
			
			
			
			
			
			
			
 
 | 
			
				| Re: No external interrupt with PIC12F675?? |  
				|  Posted: Fri Jan 24, 2003 1:53 am |   |  
				| 
 |  
				| <font face="Courier New" size=-1>Remove your delay_ call from the ISR. ITs are disabled under execution of delay_ms() call in main() (so practically always is disabled). 
 :=I have tried multiple methods to get an external interrupt to work with CPM programming PIC12F675s.  The interrupt flag never gets set.  Example code (trying to trigger by pulling GP2 low):
 :=
 :=////////////////////////////////////////////////////////
 :=//trying to make the INT external interrupt on GP2 work
 :=//to switch state of a couple of LEDs on GP4,5
 :=////////////////////////////////////////////////////////
 :=#include <12f675.h>
 :=#fuses INTRC_IO,PUT,NOWDT,NOPROTECT,NOMCLR, BROWNOUT
 :=#use delay(clock=4000000)
 :=//define IO pins
 :=#bit gpio5	=0x05.5
 :=#bit gpio4	=0x05.4
 :=#bit gpio3	=0x05.3
 :=#bit gpio2	=0x05.2
 :=#bit gpio1	=0x05.1
 :=#bit gpio0	=0x05.0
 :=#use fast_io(a)
 :=
 :=#byte OSCCAL = 0x90
 :=#rom 0x3ff = {0x3470}  /// input the calibration code
 :=#int_ext
 :=void external_handler(void)
 :={
 :=gpio5=!gpio5;    //instantly flip LEDs on external interrupt
 :=gpio4=!gpio4;
 :=delay_ms(100);
 :=}
 :=
 :=#int_default
 :=void default_isr(void)
 :={}
 :=
 :=main()
 :={
 :=//setup i/o
 :=set_tris_a(0b001100); //GP0,1,4,5 output; 2,3 input
 :=gpio5=1;  gpio4=0;  gpio1=0;  gpio0=0; //turn on LED on gp5
 :=
 :=//set timer0 not to use GP2
 :=setup_counters(rtcc_internal, rtcc_div_2);
 :=
 :=//setup interrupts
 :=enable_interrupts(int_ext);
 :=ext_int_edge(h_to_l);  //GP2 is pulled high with resistor
 :=enable_interrupts(global);
 :=
 :=//loop and wait for interrupt
 :=while(true)
 :={
 :=delay_ms(2500);
 :=gpio5=!gpio5;   //toggle LEDs just to show program is running
 :=gpio4=!gpio4;
 :=}
 :=}
 :=</font>
 ___________________________
 This message was ported from CCS's old forum
 Original Post ID: 10959
 |  |  
		|  |  
		| Ned Israelsen Guest
 
 
 
 
 
 
 
			
			
			
			
			
			
			
			
			
 
 | 
			
				| Re: No external interrupt with PIC12F675?? |  
				|  Posted: Fri Jan 24, 2003 10:22 am |   |  
				| 
 |  
				| I have removed the delay_ms call and bit flip from main() and the delay call from the isr.  So, most of the time the program should be sitting in the while(true) loop doing nothing.  Also tried different 12F675s.  Still no interrupt.  (Code works fine with properly-set-up RB port change interrupt on GP3.) 
 
 :=<font face="Courier New" size=-1>Remove your delay_ call from the ISR. ITs are disabled under execution of delay_ms() call in main() (so practically always is disabled).
 :=
 :=:=I have tried multiple methods to get an external interrupt to work with CPM programming PIC12F675s.  The interrupt flag never gets set.  Example code (trying to trigger by pulling GP2 low):
 :=:=
 :=:=////////////////////////////////////////////////////////
 :=:=//trying to make the INT external interrupt on GP2 work
 :=:=//to switch state of a couple of LEDs on GP4,5
 :=:=////////////////////////////////////////////////////////
 :=:=#include <12f675.h>
 :=:=#fuses INTRC_IO,PUT,NOWDT,NOPROTECT,NOMCLR, BROWNOUT
 :=:=#use delay(clock=4000000)
 :=:=//define IO pins
 :=:=#bit gpio5	=0x05.5
 :=:=#bit gpio4	=0x05.4
 :=:=#bit gpio3	=0x05.3
 :=:=#bit gpio2	=0x05.2
 :=:=#bit gpio1	=0x05.1
 :=:=#bit gpio0	=0x05.0
 :=:=#use fast_io(a)
 :=:=
 :=:=#byte OSCCAL = 0x90
 :=:=#rom 0x3ff = {0x3470}  /// input the calibration code
 :=:=#int_ext
 :=:=void external_handler(void)
 :=:={
 :=:=gpio5=!gpio5;    //instantly flip LEDs on external interrupt
 :=:=gpio4=!gpio4;
 :=:=delay_ms(100);
 :=:=}
 :=:=
 :=:=#int_default
 :=:=void default_isr(void)
 :=:={}
 :=:=
 :=:=main()
 :=:={
 :=:=//setup i/o
 :=:=set_tris_a(0b001100); //GP0,1,4,5 output; 2,3 input
 :=:=gpio5=1;  gpio4=0;  gpio1=0;  gpio0=0; //turn on LED on gp5
 :=:=
 :=:=//set timer0 not to use GP2
 :=:=setup_counters(rtcc_internal, rtcc_div_2);
 :=:=
 :=:=//setup interrupts
 :=:=enable_interrupts(int_ext);
 :=:=ext_int_edge(h_to_l);  //GP2 is pulled high with resistor
 :=:=enable_interrupts(global);
 :=:=
 :=:=//loop and wait for interrupt
 :=:=while(true)
 :=:={
 :=:=delay_ms(2500);
 :=:=gpio5=!gpio5;   //toggle LEDs just to show program is running
 :=:=gpio4=!gpio4;
 :=:=}
 :=:=}
 :=:=</font>
 ___________________________
 This message was ported from CCS's old forum
 Original Post ID: 10969
 |  |  
		|  |  
		| PCM programmer 
 
 
 Joined: 06 Sep 2003
 Posts: 21708
 
 
 
			    
 
 | 
			
				| Re: No external interrupt with PIC12F675?? |  
				|  Posted: Fri Jan 24, 2003 1:00 pm |   |  
				| 
 |  
				| :=I have tried multiple methods to get an external interrupt to work with CPM programming PIC12F675s.  The interrupt flag never gets set. ------------------------------------------------------
 I think the start-up code inserted by the compiler
 may not be correct.  Try doing the following:
 
 Insert these lines above main():
 
 #byte ADCON0 = 0x1F
 #byte ANSEL = 0x9F
 #byte CMCON = 0x19
 
 
 Insert these lines at the very beginning of main():
 
 ADCON0 = 0;  // ADC off
 ANSEL = 0;   // GPIO pins 0,1,2 and 4 set to all digital
 CMCON = 7;   // Comparators off
 
 See if that helps.
 ___________________________
 This message was ported from CCS's old forum
 Original Post ID: 10971
 |  |  
		|  |  
		| Ned Israelsen Guest
 
 
 
 
 
 
 
			
			
			
			
			
			
			
			
			
 
 | 
			
				| Re: No external interrupt with PIC12F675?? |  
				|  Posted: Fri Jan 24, 2003 8:31 pm |   |  
				| 
 |  
				| :=:=I have tried multiple methods to get an external interrupt to work with CPM programming PIC12F675s.  The interrupt flag never gets set. :=------------------------------------------------------
 :=I think the start-up code inserted by the compiler
 :=may not be correct.  Try doing the following:
 :=
 :=Insert these lines above main():
 :=
 :=#byte ADCON0 = 0x1F
 :=#byte ANSEL = 0x9F
 :=#byte CMCON = 0x19
 :=
 :=
 :=Insert these lines at the very beginning of main():
 :=
 :=ADCON0 = 0;  // ADC off
 :=ANSEL = 0;   // GPIO pins 0,1,2 and 4 set to all digital
 :=CMCON = 7;   // Comparators off
 :=
 :=See if that helps.
 
 Yep.  That fixed it!  Thanks much!!
 ___________________________
 This message was ported from CCS's old forum
 Original Post ID: 10986
 |  |  
		|  |  
		|  |  
  
	| 
 
 | You cannot post new topics in this forum You cannot reply to topics in this forum
 You cannot edit your posts in this forum
 You cannot delete your posts in this forum
 You cannot vote in polls in this forum
 
 |  
 Powered by phpBB © 2001, 2005 phpBB Group
 
 |