Hi Hans, The code looks OK. Maybe as a test you can activate a LED in the interrupt routine to check if it gets there.
What exactly the behaviour? Kind regards, Rob ________________________________ Van: [email protected] <[email protected]> namens hans <[email protected]> Verzonden: zaterdag 24 september 2022 08:33 Aan: jallib <[email protected]> Onderwerp: Re: [jallib] Re: 18F4520 interrupt I have changed the program part as follows from the example port B0 , compiling is ok but no result -- alias the interrupt flags so they are readable. alias INT_0_ENABLE_BIT is INTCON_INT0IE alias INT_0_FLAG_BIT is INTCON_INT0IF alias INT_0_EDGE_BIT is INTCON2_INTEDG0 -- enable global interrupts INTCON_GIE = TRUE -- Enables all unmasked interrupts INTCON_PEIE = TRUE -- Enables all unmasked peripheral interrupts -- define your interrupt pin alias interrupt_pin is pin_B4 alias interrupt_pin_direction is pin_B4_direction interrupt_pin_direction = INPUT -- interrupt pin is input INT_0_ENABLE_BIT = TRUE -- interrupt pin enable bit for B0 procedure int_on_change_b0() -- procedure is written later -- main interrupt handler procedure interrupt() is pragma interrupt -- Check if interrupt pin 0 (B0) has an interrupt. if INT_0_FLAG_BIT then DTMF = portD_low INT_0_FLAG_BIT = FALSE -- reset interrupt flag end if end procedure a led on the interrupt pin B4 shows the short blink as soon as a dtmf tone is received. The received value remains on portD-low untill the next tone. So i can read it afterwards. My idea was to wait some time before reading the port. Op zaterdag 24 september 2022 om 08:08:47 UTC+2 schreef hans: Here is how i have started and having no reslut i did the (wrong??) chnages -- choose pins to use for int on change const byte int_on_change_pins[] = {"B",4} include interrupt_on_change int_on_change_init() -- interrupt for pin B4 procedure int_on_change_callback_0() is pragma inline DTMF = portD_low end procedure Op zaterdag 24 september 2022 om 08:07:18 UTC+2 schreef hans: Hello, I tried to use the example in the ample sequence 18F4620 Interrupt on change for the 18F4520. It does not work. What's going on? regards Hans Op zaterdag 24 september 2022 om 07:42:24 UTC+2 schreef [email protected]: Hi Vasile, he is using the interrupt on change library. It has "pragma interrupt" and needs the strange line "const byte int_on_change_pins[] = {"B",4}". I agree about the delay, but that depends on the use as you pointed out. It may be ok for the code that is there now, but another way would be to start a timer then when the timer is up use the timer interrupt to read portD_low. There is also sample 18f4620_interrupt_on_change_pin_b0.jal that shows the use of interrupt on change without using the library. Matt. On Saturday, September 24, 2022 at 1:21:09 AM UTC-4 vasile wrote: Hans, I do not see any "pragma interrupt", it's that OK? An interrupt procedure needs it no matter the name it has, without it there would be no jump to the ISR interrupt vector. This line looks strange to me here (but I'm not a master of programming): const byte int_on_change_pins[] = {"B",4} BTW, you do not want to use a software delay in an ISR routine, an ISR must be fast by definition because it consumes a period of time which is lost in the main loop. Exceptions for hardware resources of which programming time do not interfere too much with the main loop. Check if your pic has registers to detect which edge is used on interrupt on change. If yes you should program those too. I hope these would be helpful. In my opinion you should solve the problem by yourself, is the only way you can understand. On Sat, Sep 24, 2022 at 8:03 AM Matthew Schinkel <[email protected]> wrote: Hi Hans, without me testing or knowing the DTMF module your using. I think it looks ok. It should be easy to test. Just to make your code easier to read I would alias the pins and directions to useful names. You read code 10 times more than you write it. I don't know what pin_C3 is for, and pin_C3_direction isn't being set. Looks like your code will wait for an interrupt on pin_B4 then read the lower 4 bits of portd If the original sample works for you, you can add a sample for 18F4520. The library may need to be modified to support more chips. Matt. On Friday, September 23, 2022 at 12:44:59 PM UTC-4 hans wrote: The basic file: include 18f4520 -- target PICmicro -- -- This program uses the internal oscillator at 4 MHz. pragma target clock 4_000_000 -- oscillator frequency -- pragma target OSC INTOSC_NOCLKOUT -- internal oscillator pragma target WDT CONTROL -- watchdog pragma target XINST DISABLED -- do not use extended instructionset pragma target DEBUG DISABLED -- no debugging pragma target BROWNOUT DISABLED -- no brownout reset pragma target FCMEN DISABLED -- no clock monitoring pragma target IESO DISABLED -- no int/ext osc switching pragma target LVP DISABLED -- low voltage programming pragma target MCLR EXTERNAL -- external reset -- -- The configuration bit settings above are only a selection, sufficient -- for this program. Other programs may need more or different settings. -- WDTCON_SWDTEN = OFF -- disable WDT OSCCON_SCS = 0 -- select primary oscillator OSCCON_IRCF = 0b110 -- 4 MHz OSCTUNE_PLLEN = FALSE -- no PLL -- enable_digital_io() -- make all pins digital I/O -- -- DTMF programma pin_D0_direction = input pin_D1_direction = input pin_D2_direction = input pin_D3_direction = input pin_B4_direction = input -- for interrupt var byte DTMF -- choose pins to use for int on change const byte int_on_change_pins[] = {"B",4} include interrupt_on_change int_on_change_init() -- interrupt for pin B4 procedure int_on_change_callback_0() is pragma inline pin_C3 = low delay_1mS(400) DTMF = portD_low pin_C3 = high end procedure Op vrijdag 23 september 2022 om 14:59:53 UTC+2 schreef hans: Hello, I am trying to read a DTMF module with an interrupt on a 18F4520.pin B4. I found something in the examples. Is thissufficient and correct? Direct reading of portD_low is working correct. -- choose pins to use for int on change const byte int_on_change_pins[] = {"B",4} include interrupt_on_change int_on_change_init() -- interrupt for pin B4 procedure int_on_change_callback_0() is pragma inline delay_1mS(400) DTMF = portD_low end procedure regards Hans -- You received this message because you are subscribed to the Google Groups "jallib" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jallib/df18aa34-b7fc-4d5d-bfe5-65e1a4b741d9n%40googlegroups.com<https://groups.google.com/d/msgid/jallib/df18aa34-b7fc-4d5d-bfe5-65e1a4b741d9n%40googlegroups.com?utm_medium=email&utm_source=footer>. -- You received this message because you are subscribed to the Google Groups "jallib" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]<mailto:[email protected]>. To view this discussion on the web visit https://groups.google.com/d/msgid/jallib/f9987acb-6a37-40e6-8f36-d32046365d44n%40googlegroups.com<https://groups.google.com/d/msgid/jallib/f9987acb-6a37-40e6-8f36-d32046365d44n%40googlegroups.com?utm_medium=email&utm_source=footer>. -- You received this message because you are subscribed to the Google Groups "jallib" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jallib/GVXP195MB16377F315D4C27E94B02D1ECE6509%40GVXP195MB1637.EURP195.PROD.OUTLOOK.COM.
