Cj_Rob, thanks, you caught the issue! See the answer to HRob. :) On Sun, Oct 3, 2021 at 12:21 PM Rob CJ <[email protected]> wrote:
> Hi Vasile, > > I had a closer look at your program (and at the one of Rob). I saw your 20 > ms delay (which Rob got rid of) before you clear the interrupt flag. > > If I am right the Interrupt On Edge will no longer work if you did not > process it before the next change on the pin. So your 20ms delay may be the > cause of your problem. You should first clear the IOCAF0 as the first > step. > > Stil the 20ms delay may give you problems so that may be the reason that > the program of Rob does not have the problem. > > Kind regards, > > The other Rob > > > ------------------------------ > *Van:* [email protected] <[email protected]> namens vsurducan > <[email protected]> > *Verzonden:* zondag 3 oktober 2021 10:32 > *Aan:* [email protected] <[email protected]> > *Onderwerp:* Re: [jallib] interrupt on change issue > > Hi Rob, thanks for your feedback. > Your program somehow works, however in my level of understanding it is > not based on pure IOC. > Once the IOCAF_IOCAF0 is set ( a IOC occured) you are testing again the > level of RDY_IN which should not happen... IOC is the transition of IOCAF0 > or INTCON_IOCIF to high (and I'm assuming only that should be tested > since the transition is defined by IOCAP/IOCAN). > > On the other hand, if you set only the detection of the rising edge ( > IOCAP_IOCAP0 > = high, IOCAN_IOCAN0 = low), RDY_OUT stayed indefinitely on high even > on RDY_IN a positive edge occured, which seems wrong. > > According to the datasheet The "IOCIF Flag bit is read-only and cleared > when all the Interrupt-On-Change flags in the IOCxF registers > have been cleared by software", so that line can be commented, it will > not be cleared. In fact this seems to be the real problem with the IOC > module. > I can send you a scope image for positive edge detection to see the lost > IOCs on positive edges if that helps. > best wishes, > > > > On Sat, Oct 2, 2021 at 1:02 PM Rob Hamerling <[email protected]> > wrote: > > > Hi Vasili, > > On 01/10/2021 13.11, vsurducan wrote: > > Hi Rob and Rob, :) > I've tried with or without ISR, with AND IOCAP reset or normal IOCAP > reset. This IOC is erratic and has a lot of latency. The RDY_IN signal is > 20ms square 50% duty cycle, the RDY_OUT signal has a latency most of the > time...but sometimes has a 20mS pulse as it should. > > > I'm using IOC for quadrature encoders on the wheels of an RC vehicle for > navigation. With higher speeds the interrupt frequency is significantly > higher then once per 20ms. Nevertheless this seems to work quite well (but > latency is not a real issue). > > Below my test with a 12F1572 and modified version of your program on a > little board with LEDs on pins A0, A1 and A2. > The IOC of RDY_IN is handled by an interrupt routine. Both rising and > falling edge interrupts are activated and RDY_OUT (in my setup on pin_A2) > is controlled in the ISR as well. The input signal for RDY_IN is generated > in the forever loop on pin_A1. When connecting pin_A0 with pin_A1 RDY_OUT > is following RDY_IN neatly (visual observation shows all 3 LEDs blinking > synchronously). > > Hopefully this is of some help to solve your issue. > > Regards, Rob. > > > ================================= > alias pin_RDY_IN is pin_A0 > alias pin_RDY_IN_direction is pin_A0_direction > pin_RDY_IN_direction = input > OPTION_REG_WPUEN = 0 > WPUA_WPUA0 = 0 ; pull-up disabled on RA0 > > alias pin_RDY_OUT is pin_A2 > alias pin_RDY_OUT_direction is pin_A2_direction > pin_RDY_OUT_direction = output > pin_RDY_OUT = low > > alias pin_TRIGGER is pin_A1 > pin_A1_direction = OUTPUT > pin_TRIGGER = low > > -- main program > > INTCON_GIE = high > INTCON_IOCIE = high -- enable IOC interrupts > IOCAP_IOCAP0 = high -- enable positive edge interrupts RDY_IN > -- enable negative edge interrupts RDY_IN > > procedure IOC() is > pragma interrupt > if INTCON_IOCIF then -- IOC interrupt > if IOCAF_IOCAF0 then -- edge interrupt on RDY_IN > if pin_RDY_IN then -- was a positive edge > pin_RDY_OUT = high > else -- negative edge > pin_RDY_OUT = low > end if > IOCAF = IOCAF & 0xFE -- clear IOCAF0 > end if > INTCON_IOCIF = 0 -- reset IOC interrupt flag > end if > end procedure > > forever loop > pin_TRIGGER = high > delay_1ms(20) > pin_TRIGGER = low > delay_1ms(20) > end loop > > > > -- > *Rob H*amerling, Vianen, NL > > -- > 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/24f3dc21-9e72-2932-ea0b-ed3a6a0d64e2%40gmail.com > <https://groups.google.com/d/msgid/jallib/24f3dc21-9e72-2932-ea0b-ed3a6a0d64e2%40gmail.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/CAM%2Bj4qsi2442Wx2mjk%3DcoUuf2jaa1wrLA4s9qT52APe4sfdHiA%40mail.gmail.com > <https://groups.google.com/d/msgid/jallib/CAM%2Bj4qsi2442Wx2mjk%3DcoUuf2jaa1wrLA4s9qT52APe4sfdHiA%40mail.gmail.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/VI1PR07MB6256420C79A6C1BD1F58D696E6AD9%40VI1PR07MB6256.eurprd07.prod.outlook.com > <https://groups.google.com/d/msgid/jallib/VI1PR07MB6256420C79A6C1BD1F58D696E6AD9%40VI1PR07MB6256.eurprd07.prod.outlook.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/CAM%2Bj4qsox0i2h%3DsJm9HpsT6thxDpaoq-7YYhhfAoNNH2H0%2B%3D4A%40mail.gmail.com.
