| View previous topic :: View next topic | 
	
	
		| Author | Message | 
	
		| rudy 
 
 
 Joined: 27 Apr 2008
 Posts: 168
 
 
 
			        
 
 | 
			
				| 18F46K22 EXTERNAL INT [Solved] |  
				|  Posted: Thu May 26, 2022 8:07 am |   |  
				| 
 |  
				| Hi there. 
 Do I need to do any other thing when I use external int 0 on this chip? Because I feed the RB0 with 1Hz pulse, it seems that the ISR ignores the low state of the pulse.
 
 
  	  | Code: |  	  | SETUP_ADC_PORTS(NO_ANALOGS); SETUP_COMPARATOR(NC_NC_NC_NC);
 SETUP_COUNTERS(RTCC_INTERNAL,RTCC_DIV_16);
 SETUP_TIMER_1(T1_DISABLED|T1_DIV_BY_1);
 SETUP_TIMER_2(T2_DISABLED,0xFF,16);
 SETUP_TIMER_3(T3_DISABLED|T3_DIV_BY_8);
 SETUP_TIMER_4(T4_DISABLED,0xFF,16);
 SETUP_TIMER_5(T5_DISABLED|T5_DIV_BY_8);
 SETUP_TIMER_6(T6_DISABLED,0xFF,16);
 SET_TRIS_A(0b00000000);
 SET_TRIS_B(0b11100001);
 SET_TRIS_C(0b11111111);
 SET_TRIS_D(0b11111111);
 SET_TRIS_E(0b11111111);
 PORT_B_PULLUPS(FALSE);
 EXT_INT_EDGE(0, L_TO_H);
 SETUP_CCP1(CCP_CAPTURE_RE);
 ENABLE_INTERRUPTS(INT_EXT);   //ENABLE RTC INTERRUPTS
 //   ENABLE_INTERRUPTS(INT_CCP1); //INABLE INFRARED INTERRUPTION
 ENABLE_INTERRUPTS(GLOBAL); //ENABLE GLOBAL INTERRUPTS
 | 
 
 
  	  | Code: |  	  | #INT_EXT   //RTC SR void RB0_ISR(void)
 {
 SEGUNDOS++;
 if(SEGUNDOS>=60)
 {
 SEGUNDOS=0;
 MINUTOS++;
 }
 if(MINUTOS==60)
 {
 MINUTOS=0;
 HORAS++;
 }
 if(HORAS==24)HORAS=0;
 CLK=1;
 }
 | 
 
 When bit CLK is set, I do some other things on the program, but, somehow, it seems to be always been set on the ISR.
 
 Taking a look at datasheet, I saw that RB0 is also used on SR LATCH and ECCP, but I cannot see any relation to these functions.
 
 Regards;
 |  | 
	
		|  | 
	
		| PCM programmer 
 
 
 Joined: 06 Sep 2003
 Posts: 21708
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Thu May 26, 2022 10:17 am |   |  
				| 
 |  
				| What is the Vdd voltage of your PIC ? What are the voltage levels (high and low) of the 1 Hz pulse ?
 
 If your PIC is running at 5.0v, the 1 Hz pulse needs to be at
 least 4.0v for the high level.  Ideally it should be higher.
 
 The low voltage level should be a max of 0.8v and ideally lower.
 |  | 
	
		|  | 
	
		| Ttelmah 
 
 
 Joined: 11 Mar 2010
 Posts: 19967
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Thu May 26, 2022 10:53 am |   |  
				| 
 |  
				| Er. Not sure what you mean, but it will 'ignore the low state'. The interrupt will trigger when the signal goes high....
 |  | 
	
		|  | 
	
		| rudy 
 
 
 Joined: 27 Apr 2008
 Posts: 168
 
 
 
			        
 
 | 
			
				|  |  
				|  Posted: Thu May 26, 2022 11:29 am |   |  
				| 
 |  
				| Weird!!!! 
 I may did some mistake. Suddenly, the problem vanishes....
 
 The 1HZ is 0-5V.
 
 It is OK now, working fine.
 
 Regards!
 |  | 
	
		|  | 
	
		| PCM programmer 
 
 
 Joined: 06 Sep 2003
 Posts: 21708
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Thu May 26, 2022 11:41 am |   |  
				| 
 |  
				|  	  | Quote: |  	  | EXT_INT_EDGE(0, L_TO_H); | 
 In your original posted code, show above, you have it set to trigger on
 the rising edge.  When it goes from low to high, it will trigger.
 
 
  	  | Quote: |  	  | interrupt will trigger when the signal goes high.... | 
 It's doing exactly what you told it to do above.
 |  | 
	
		|  | 
	
		| rudy 
 
 
 Joined: 27 Apr 2008
 Posts: 168
 
 
 
			        
 
 | 
			
				|  |  
				|  Posted: Thu May 26, 2022 11:46 am |   |  
				| 
 |  
				| No issues.. 
 There is an BC-548 transistor driving the signal before it enter on RB0, the +5V was loose on the collector, and that's was the problem.
 
 I sorry to disturb.. Once that this thread don't help much, please delete it from the forum.
 
 I apologize the mistake.
 
 Regards,
 |  | 
	
		|  | 
	
		|  |