Hi Michel,

Your solution is correct. You have to read the value of the comparator as soon 
you get an interrupt so you capture the value in the interrupt routine itself. 
In your second program you could remove the _usec_delay in the forever loop 
since it will only delay the opening or closing (unless you want that of 
course).

Note that your input signal on the comparator must have a minimal length as for 
the PIC to be able to read the correct level. If for example the pulse would be 
very short, you could get the interrupt but the signal could already be changed 
before you read the pin. Of course I am talking here about a signal in the 
microsecond range. Since in your first program you missed this signal, I 
suspect it to be short.

Kind regards,

Rob

________________________________
Van: [email protected] <[email protected]> namens Michel MORICE 
<[email protected]>
Verzonden: zondag 2 augustus 2020 19:20
Aan: [email protected] <[email protected]>
Onderwerp: Re: [jallib] PIC12F675 INTERRUPT WITH COMPARATOR OUTPUT CHANGING 
doesn't work

Hi Rob,

As I continued my project, I discovered a new problem for me.
Here after the initial draft:
--************************************************************************
--****** Programme POULE3  -Ouverture crépusculaire du poulailler ********
--***************************************Michel MORICE 16 juillet 2020****
include 12f675
pragma target clock 4_000_000
pragma target OSC INTOSC_NOCLKOUT  -- horloge interne à 4 MHz
pragma target MCLR internal        -- make MCLR pin available I/O
--conditionnement du PIC
ANSEL = 0b_0000_0011   --ports 0 et 1 en analogique, entrées du comparateur
TRISIO = 0b_0000_1011  --ports 0, 1, 3 en input, 2, 4 et 5 en output
CMCON = 0b_0000_0001   --comparateur + en 0, - en 1, sortie en 2
PIE1_CMIE = ON         --Comparator changing Interrupt ON
INTCON_PEIE = ON       --Peripheral Interrupt On
INTCON_GIE = ON        --Global Interrupt On
--paramétrage des portes
alias COMPS is pin_A2   --sortie du comparateur
alias ILS is pin_A3     --ILS contrôlant la fermeture de porte
alias OUVRE is pin_A4   --commande l'ouverture
alias FERME is pin_A5   --commande la fermeture
--paramétrage général
--ON OFF TRUE FALSE définis par include 12f675 et constants_jallib
const dword seconde = 1_000_000
const bit OUVERTE = ON
const bit FERMEE = OFF
var bit changeLum = FALSE
OUVRE = OFF
FERME = OFF
--****************************************************************
procedure changeLuminosite() is  pragma INTERRUPT
  if PIR1_CMIF == ON then     --changement de luminosité détecté
    PIR1_CMIF = OFF              --reset du flag de détection
    INTCON_GIE = OFF           --Stop global interrupt
    changeLum = TRUE           --flag de détection de changement activé
  end if
end procedure
--***************************************************************
procedure ouverturePorte() is
    OUVRE = ON               --on ouvre la porte - moteur ON+
    _usec_delay(seconde * 3) --pendant 3 secondes
    OUVRE = OFF              --arrêt du moteur
end procedure
--***************************************************************
procedure fermeturePorte() is
  FERME = ON                 --on ferme la porte - moteur ON-
  while ILS == OUVERTE loop  --tant que la porte n'est pas fermée
  end loop
  FERME = OFF                --arrêt moteur
end procedure
--****************************************************************
--***********programme principal******************************
forever loop
  while !changeLum loop
  end loop
  if COMPS == ON  then     --passe au jour
    ouverturePorte()
  else                                   --passe à la nuit
    fermeturePorte()
  end if
  changeLum = FALSE
  INTCON_GIE = ON
end loop
--*********************************************************************

That doesn'nt work and I found this solution (in blue):

--************************************************************************
--****** Programme POULE5  -Ouverture crépusculaire du poulailler ********
--***************************************Michel MORICE 2 août 2020****
include 12f675
pragma target clock 4_000_000
pragma target OSC INTOSC_NOCLKOUT  -- horloge interne à 4 MHz
pragma target MCLR internal        -- make MCLR pin A3 available as I/O
pragma target WDT disabled
--conditionnement du PIC
ANSEL  = 0b_0000_0011  --ports 0 et 1 en analogique, entrées du comparateur
TRISIO = 0b_0000_1011  --ports 0, 1, 3 en input, 2, 4 et 5 en output
CMCON  = 0b_0000_0001  --comparateur + en 0, - en 1, sortie en 2
PIE1   = 0b_0000_1000  --comparateur enable bit
INTCON = 0b_1100_0000  --global interrupt et peripheral interrupt
--paramétrage des portes
alias ILS is pin_A3     --ILS contrôlant la fermeture de porte
alias OUVRE is pin_A4   --commande l'ouverture
alias FERME is pin_A5   --commande la fermeture
--paramétrage général
--ON OFF TRUE FALSE définis par include 12f675 et constants_jallib
const dword seconde = 1_000_000
const bit OUVERTE = TRUE
const bit FERMEE  = FALSE
var bit lumChange = FALSE --flag de changement de luminosité
var bit etatCout           --etat de la sortie du comparateur
OUVRE = OFF
FERME = OFF
--****************************************************************
procedure changeLuminosite() is pragma INTERRUPT
  if PIR1_CMIF then     --changement de luminosité détecté
    PIR1_CMIF = OFF        --reset du flag détecté
    INTCON_GIE = OFF       --stop interrupts
    etatCout = CMCON_COUT  --mise en mémoire de la sortie
    lumChange = TRUE       --flag de changement de luminosité
  end if
end procedure

--***************************************************************
procedure ouverturePorte() is
  OUVRE = ON              --on ouvre la porte - moteur ON+
  _usec_delay(seconde * 3) --pendant 3 secondes
  OUVRE = OFF             --arrêt du moteur
end procedure
--***************************************************************
procedure fermeturePorte() is
  FERME = ON                   --on ferme la porte - moteur ON-
  while ILS == OUVERTE loop    --tant que la porte n'est pas fermée
  end loop
  FERME = OFF                --arrêt moteur
end procedure
--********************************************************************
--*************programme principal********************************
forever loop
  while !lumChange loop  --tant qu'il n'y a pas de changement
  end loop                       --on boucle
  _usec_delay(seconde)
  if etatCout == HIGH  then      --si c'est de nuit à jour
    ouverturePorte()
  else                           --si c'est de jour à nuit
    fermeturePorte()
  end if
  lumChange = FALSE              --reset du flag de changement
  INTCON_GIE = ON                --remise en attente des interrupts
  asm sleep                               --mise en sommeil
end loop
--*************************************************************************

I don't no exactly the reason, perhaps a timing problem again.
Now  tutto va bene , grazie mille
Thank you again. Merci beaucoup

Michel

[https://ipmcdn.avast.com/images/icons/icon-envelope-tick-round-orange-animated-no-repeat-v1.gif]<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
  Garanti sans virus. 
www.avast.com<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>

Le sam. 1 août 2020 à 14:00, Michel MORICE 
<[email protected]<mailto:[email protected]>> a écrit :
Hi Rob,

Sorry for not answering sooner, I was enjoying the sun for a few days.

Thank you for this solution, it's perfect. The problem was actually there and 
is fixed now.
I'ill finally be able to continue my project.

Best regards

Michel

[https://ipmcdn.avast.com/images/icons/icon-envelope-tick-round-orange-animated-no-repeat-v1.gif]<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
  Garanti sans virus. 
www.avast.com<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>

Le mar. 28 juil. 2020 à 19:52, Rob CJ 
<[email protected]<mailto:[email protected]>> a écrit :
Hi Michel,

Sorry for the spam but I saw that you did not enable the external interrupt in 
INTCON0. I was confused because you mentioned "An interrupt on A2 changing 
should start the process but that doesn't work."

But the statement about hanging in the interrupt routine still stands.

You have to change the code in your interrupt routine into the following:

procedure changeLuminosite() is pragma INTERRUPT
  if PIR1_CMIF then     --changement de luminosité détecté
     PIR1_CMIF = FALSE
    changeLum = TRUE
  end if
end procedure

Otherwise the PIC will re-enter the interrupt routine as soon as it has left it.

Kind regards,

Rob



________________________________
Van: [email protected]<mailto:[email protected]> 
<[email protected]<mailto:[email protected]>> namens Rob CJ 
<[email protected]<mailto:[email protected]>>
Verzonden: dinsdag 28 juli 2020 19:10
Aan: [email protected]<mailto:[email protected]> 
<[email protected]<mailto:[email protected]>>
Onderwerp: Re: [jallib] PIC12F675 INTERRUPT WITH COMPARATOR OUTPUT CHANGING 
doesn't work

Hi Michel,

Sorry missed that one. Then your problem may be the following.

I do not see that you service the external interrupt. This will result in the 
PIC being continuous in the interrupt routine since the INTF flag remains set.

It then appears as if the PIC hangs (believe me I have also run into this 
issue).

So you have to least service the external interrupt otherwise it will not work.

Kind regards,

Rob

________________________________
Van: [email protected]<mailto:[email protected]> 
<[email protected]<mailto:[email protected]>> namens Michel MORICE 
<[email protected]<mailto:[email protected]>>
Verzonden: dinsdag 28 juli 2020 17:57
Aan: [email protected]<mailto:[email protected]> 
<[email protected]<mailto:[email protected]>>
Onderwerp: Re: [jallib] PIC12F675 INTERRUPT WITH COMPARATOR OUTPUT CHANGING 
doesn't work

Hi Rob,
Thank you for trying to help me.
Yes it's necessary to enabling INTCON_PEIE. It is what I did with INTCON = 
0b_1100_0000.
The mystery is elsewhere

[https://ipmcdn.avast.com/images/icons/icon-envelope-tick-round-orange-animated-no-repeat-v1.gif]<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
  Garanti sans virus. 
www.avast.com<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>

Le lun. 27 juil. 2020 à 21:42, Rob CJ 
<[email protected]<mailto:[email protected]>> a écrit :
Hi Michel,

Maybe I was too quick. You mentioned that you have connected something to A2 so 
I assume you use the external interrupt.

Next to that you are using a comparator which is a peripheral device.

This means that you also have to enable interrupts from peripheral devices by 
enabling those interrupts with: INTCON_PEIE = TRUE

Kind regards,

Rob

________________________________
Van: Rob CJ <[email protected]<mailto:[email protected]>>
Verzonden: maandag 27 juli 2020 21:38
Aan: [email protected]<mailto:[email protected]> 
<[email protected]<mailto:[email protected]>>
Onderwerp: Re: [jallib] PIC12F675 INTERRUPT WITH COMPARATOR OUTPUT CHANGING 
doesn't work

Hello Michel,

If you want to use the external interrupt you have to enable it by: INTCON_INTE 
= TRUE

Initially it is disabled by default.

Kind regard,

Rob

________________________________
Van: [email protected]<mailto:[email protected]> 
<[email protected]<mailto:[email protected]>> namens Michel MORICE 
<[email protected]<mailto:[email protected]>>
Verzonden: maandag 27 juli 2020 12:06
Aan: jallib <[email protected]<mailto:[email protected]>>
Onderwerp: [jallib] PIC12F675 INTERRUPT WITH COMPARATOR OUTPUT CHANGING doesn't 
work

Hi
On a PIC12F675 I use A0 and A1 as analogic input to control the light of the 
day to open/close a door
A2 as logic output with a led to control the right operating.
An interrupt on A2 changing should start the process but that doesn't work.
Hereafter a little program to try the function.
Thanks for helping me.

--************************************************************************
--****** Programme POULE2  -Ouverture crépusculaire du poulailler ********
--***************************************Michel MORICE 16 juillet 2020****
include 12f675
pragma target clock 4_000_000
pragma target OSC INTOSC_NOCLKOUT  -- horloge interne à 4 MHz
pragma target MCLR internal        -- make MCLR pin A3 available as I/O
pragma target WDT disabled
--conditionnement du PIC
ANSEL  = 0b_0000_0011  --ports 0 et 1 en analogique, entrées du comparateur
TRISIO = 0b_0000_1011  --ports 0, 1, 3 en input, 2, 4 et 5 en output
CMCON  = 0b_0000_0001  --comparateur + en 0, - en 1, sortie en 2
PIE1   = 0b_0000_1000  --comparateur enable bit
INTCON = 0b_1100_0000  --global interrupt et peripheral interrupt
--paramétrage des portes
alias COMPS is pin_A2   --sortie du comparateur
alias ILS is pin_A3     --ILS contrôlant la fermeture de porte
alias OUVRE is pin_A4   --commande l'ouverture
alias FERME is pin_A5   --commande la fermeture
--paramétrage général
--ON OFF TRUE FALSE définis par include 12f675 et constants_jallib
const dword seconde = 1_000_000
const bit OUVERTE = ON
const bit FERMEE  = OFF
var bit changeLum = FALSE
--***************************************************************
--****************************************************************
procedure changeLuminosite() is pragma INTERRUPT
  if PIR1_CMIF then     --changement de luminosité détecté
    changeLum = TRUE
  end if
end procedure
--****************************************************************
--programme principal
forever loop
  if changeLum then
    PIR1_CMIF = OFF
    INTCON_GIE = OFF
    OUVRE = ON
    _usec_delay(seconde * 3)
    OUVRE = OFF
  end if
  INTCON_GIE = ON
  changeLum = FALSE
end loop




--
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/cdf66d12-1e34-4563-9d26-345617726af0o%40googlegroups.com<https://groups.google.com/d/msgid/jallib/cdf66d12-1e34-4563-9d26-345617726af0o%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/AM0PR07MB6241E981A94CAD71E293ABCFE6720%40AM0PR07MB6241.eurprd07.prod.outlook.com<https://groups.google.com/d/msgid/jallib/AM0PR07MB6241E981A94CAD71E293ABCFE6720%40AM0PR07MB6241.eurprd07.prod.outlook.com?utm_medium=email&utm_source=footer>.

[https://ipmcdn.avast.com/images/icons/icon-envelope-tick-round-orange-animated-no-repeat-v1.gif]<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
  Garanti sans virus. 
www.avast.com<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>

--
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/CAD9DK3KRQ%3DwE4NuYqB_h4qWFUCbDjGOej9s3qGHd3EJ7my_-sQ%40mail.gmail.com<https://groups.google.com/d/msgid/jallib/CAD9DK3KRQ%3DwE4NuYqB_h4qWFUCbDjGOej9s3qGHd3EJ7my_-sQ%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]<mailto:[email protected]>.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jallib/AM0PR07MB624194A0ECB1FA0C696F7E9BE6730%40AM0PR07MB6241.eurprd07.prod.outlook.com<https://groups.google.com/d/msgid/jallib/AM0PR07MB624194A0ECB1FA0C696F7E9BE6730%40AM0PR07MB6241.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]<mailto:[email protected]>.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jallib/AM0PR07MB62411E45F1DBD56F30C83C29E6730%40AM0PR07MB6241.eurprd07.prod.outlook.com<https://groups.google.com/d/msgid/jallib/AM0PR07MB62411E45F1DBD56F30C83C29E6730%40AM0PR07MB6241.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]<mailto:[email protected]>.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jallib/CAD9DK3Ka-wBWpMkcROqskhdvxfvbB1t%3DjnKzi3pUv0eSQyMnww%40mail.gmail.com<https://groups.google.com/d/msgid/jallib/CAD9DK3Ka-wBWpMkcROqskhdvxfvbB1t%3DjnKzi3pUv0eSQyMnww%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/AM0PR07MB6241F411040DC09F0EA6CED4E64C0%40AM0PR07MB6241.eurprd07.prod.outlook.com.

Reply via email to