Hi Rob, I come back to you because I have always some problems with my project. Let me remind you this project: a LDR controls the light of the day. As soon as the level is under a threshold, a motor closes a door up to an ILS is detected. When level goes beyond this threshold, the motor opens the door until an other ILS is detected. I use a PIC12F675 to control the system. The system, sometimes, doesn't run correctly: stops before the ILS, starts and goes back, or other quirks. Can you have a look to my program if you find a mistake. I also send you the circuit scheme.
Kind regards Michel <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> <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> Le dim. 2 août 2020 à 20:13, Rob CJ <[email protected]> a écrit : > 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://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> > <#m_6559444806024520843_x_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> > > Le sam. 1 août 2020 à 14:00, Michel MORICE <[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://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> > <#m_6559444806024520843_x_m_1664721968544230734_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> > > Le mar. 28 juil. 2020 à 19:52, Rob CJ <[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] <[email protected]> namens Rob CJ < > [email protected]> > *Verzonden:* dinsdag 28 juli 2020 19:10 > *Aan:* [email protected] <[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] <[email protected]> namens Michel > MORICE <[email protected]> > *Verzonden:* dinsdag 28 juli 2020 17:57 > *Aan:* [email protected] <[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://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> > <#m_6559444806024520843_x_m_1664721968544230734_m_6362723913766002535_x_x_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> > > Le lun. 27 juil. 2020 à 21:42, Rob CJ <[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]> > *Verzonden:* maandag 27 juli 2020 21:38 > *Aan:* [email protected] <[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] <[email protected]> namens Michel > MORICE <[email protected]> > *Verzonden:* maandag 27 juli 2020 12:06 > *Aan:* jallib <[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]. > 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]. > 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://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> > <#m_6559444806024520843_x_m_1664721968544230734_m_6362723913766002535_x_x_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> > > -- > 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/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]. > 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]. > 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]. > 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 > <https://groups.google.com/d/msgid/jallib/AM0PR07MB6241F411040DC09F0EA6CED4E64C0%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]. To view this discussion on the web visit https://groups.google.com/d/msgid/jallib/CAD9DK3K6vR840xf8R_BM3NZWTewiM%3DvnXuTxHquT2UhRBnhxDQ%40mail.gmail.com.
Poule5.jal
Description: Binary data
Poule.pdf
Description: Adobe PDF document
