Bonjour,
nous avons développé un programme d'alarme à base d'un PIC 12F675 avec une boucle normalement fermée au +.
Aujourd'hui, comme j'aimerai filtrer la boucle et la protéger contre un court-circuit volontaire, je dois intercaler un transistor PNP entre la boucle et l'entrée du PIC.
L'inconvénient c'est que ma boucle doit maintenant être normalement fermée au moins.
Question:
quelles sont, à votre avis, les lignes du programme que je dois modifier?
Le programme est développé avec MPLAB donc en "C" et compilé avec CCS.
Je vous donne ci-dessous, les paragraphes du programme concernant la boucle:
<<<<<<<<
byte clignotement_LED; // mémoire pour controle durée clignotement
byte ouverture_boucle=0xFF; // mémoire de l'état de la boucle
byte mode_test_fini=0xFF; // commutateur logiciel pour mode test ou non
<<<<<<<<<<
#int_EXT // interruption sur ouverture boucle (interruption externe sur front)
EXT_isr()
{ delay_ms(100); // anti-rebond
if (ouverture_boucle==0x00) {mode_test_fini=0;} // lors de la refermeture de la boucle, le mode test prend fin
ouverture_boucle=0x00; // Commutateur logiciel pour prévenir le reste du prog que la boucle a été ouverte
INTCON&=0xFD; // remeise à zéro du flag INTF
disable_interrupts(INT_EXT); // Dévalidation de l'interruption
}
<<<<<<<<<<<<<
restart_wdt();
ext_int_edge( H_TO_L );
TRIS=0x0F; // GP4 et GP5 en sortie
OPTION_REG&=0x7F;
<<<<<<<<<<<<<<
if (ouverture_boucle==0) // Si la boucle a été ouverte traitement alarme sinon mode veille
{
restart_wdt();
if (input(GP3)) // si bouton reset ouvert alors mode test
{
ext_int_edge( L_TO_H ); // Interruption sur FERMETURE de la boucle autorisée
enable_interrupts(INT_EXT); // et autorisation de l'interruption externe
}
else //sinon mode normal
{ disable_interrupts(INT_EXT);} // interruption externe non validée et arret de l'alarme par Reset seulement
traitement_boucle_ouverte(); // procédure de traitement de l'alarme
}
restart_wdt();
sleep();
goto debut;
}
<<<<<<<<<<<<<<<<
void traitement_boucle_ouverte(void ) //procédure d'élaboration de l'alarme sonore et LED
{
IOC=0x08;
INTCON &=0xF8;
#asm // remise à zéro du flag interruption GPIF
clrf 0x05
bcf 0x0B,0
#endasm
clignotement_LED=0x00;
Reset_actionne=0xFF;
enable_interrupts(INT_RA3); // seul l'interruption sur changement GP3 autorisée
setup_timer_1(T1_INTERNAL|T1_D IV_BY_2);
while ((duree_cycle_alarme>0)&(Reset _actionne>0)&(mode_test_fini>0 ))
{
pas_fini=0x04;
....... etc...
J'espère n'avoir rien oublié.
J'ai fais l'essai d'inversé "L_to_H" dans les 2 lignes qui contiennent cette fonction pour passer du front montant au front descendant mais ça n'a rien fait, à la mise en route de l'alarme mon voyant indique que la boucle est ouverte, alors qu'elle est bien fermée. (et bien sûr, c'est normal)
Sur quelle fonction pensez-vous que je puisse agir pour inverser la polarité de la boucle.
Je suis prêt à tout essayer.
Merci d'avance,
michel5002
-----