Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Gérard
Problème interruption IOC avec PIC 12F1572
Bonjour à tous,
J’utilise un PIC 12F1572 pour envoyer une trame de commande d'un module HC-12 à l’aide de boutons M / A câblés en Pull Up et détectés par l'interruption IOC vers un autre module HC-12 qui doit assurer la mise en marche ou l’arrêt d’un relais.
Je constate que l’interruption se déclenche de façon aléatoire à périodicité variable entre une à trois fois par jour sans raison apparente.
Pour être certain que c’est bien la trame ‘’CMDM’’ qui est émise par l’Uart j’ai mis la liaison série sous surveillance.
C'est bien l'interruption IOC sur l'entrée RA4 qui se déclenche avec Pull Up internes ou externes.
Pour le moment j’ai viré l’interruption IOC, je lis les boutons par la fonction Button et plus de problème.
Etant curieux, j’aimerai bien comprendre ce qui c’est passé et où se trouve mon éventuelle erreur.
Extrait du code en Mikrobasic:
J’utilise un PIC 12F1572 pour envoyer une trame de commande d'un module HC-12 à l’aide de boutons M / A câblés en Pull Up et détectés par l'interruption IOC vers un autre module HC-12 qui doit assurer la mise en marche ou l’arrêt d’un relais.
Je constate que l’interruption se déclenche de façon aléatoire à périodicité variable entre une à trois fois par jour sans raison apparente.
Pour être certain que c’est bien la trame ‘’CMDM’’ qui est émise par l’Uart j’ai mis la liaison série sous surveillance.
C'est bien l'interruption IOC sur l'entrée RA4 qui se déclenche avec Pull Up internes ou externes.
Pour le moment j’ai viré l’interruption IOC, je lis les boutons par la fonction Button et plus de problème.
Etant curieux, j’aimerai bien comprendre ce qui c’est passé et où se trouve mon éventuelle erreur.
Extrait du code en Mikrobasic:
Code : Tout sélectionner
Sub procedure interrupt
if IOCAF.4 = 1 then 'Bouton marche
DemM = 1 ‘Mém bouton marche appuyé
IOCAF.4 = 0 'RAZ interrupt flag
end if
if IOCAF.5 = 1 then 'Bouton arrêt
DemA = 1 ‘Mém bouton arrêt appuyé
IOCAF.5 = 0 'RAZ interrupt flag
end if
end sub
____________________________________________________
Main :
IOCAN = $30 ' RA4 et RA5 interrupt on falling edge
INTCON.IOCIE = 1 ‘ IOC enable
____________________________________________________
while (TRUE)
if DemM = 1 then
DemM = 0
Uart1_Write_Text("CMDMFI") ' Envoi commande CMDM (Marche) (FI = délimiteur)
end if
Problème interruption IOC avec PIC 12F1572
- paulfjujo
Expert- Messages : 2598
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
je ne pratique pas mikroBasic,
mais en C on mettrait
ne manquerait-il pas un "Wend " ? ou equivalent
sur certains PIC , avec les interrupts liées au PORTB, il faut LIRE le PORT pour desactiver le flag interrupt
sur les nouveaux PIC il y a en effet un flag par bit du port.
Code : Tout sélectionner
while (TRUE)
if DemM = 1 then
DemM = 0
Uart1_Write_Text("CMDMFI") ' Envoi commande CMDM (Marche) (FI = délimiteur)
end if
je ne pratique pas mikroBasic,
mais en C on mettrait
Code : Tout sélectionner
while(1)
{
} avec une accolade fermante ...
ne manquerait-il pas un "Wend " ? ou equivalent
sur certains PIC , avec les interrupts liées au PORTB, il faut LIRE le PORT pour desactiver le flag interrupt
sur les nouveaux PIC il y a en effet un flag par bit du port.
Problème interruption IOC avec PIC 12F1572
Problème interruption IOC avec PIC 12F1572
Problème interruption IOC avec PIC 12F1572
Problème interruption IOC avec PIC 12F1572
Problème interruption IOC avec PIC 12F1572
Problème interruption IOC avec PIC 12F1572
- paulfjujo
Expert- Messages : 2598
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour
cablés en pull Up ?
un BP ( ouvert au repos) entre 0V et Entree,
et une R de tirage pull up ?,,
R PulL uP , pas trop elevée ( 2,7K par ex) pour assurer un 1 au repos , bien franc
le bouton Arret DemA , il fait quoi ?
quid des rebonds BP ?
pour verifier que l'interrupt ne provienne QUE de RA4 ou RA
...à l’aide de boutons M / A câblés en Pull Up
cablés en pull Up ?
un BP ( ouvert au repos) entre 0V et Entree,
et une R de tirage pull up ?,,
R PulL uP , pas trop elevée ( 2,7K par ex) pour assurer un 1 au repos , bien franc
le bouton Arret DemA , il fait quoi ?
quid des rebonds BP ?
pour verifier que l'interrupt ne provienne QUE de RA4 ou RA
Code : Tout sélectionner
Sub procedure interrupt
if INTCON.IOCIE = 1 then
if IOCAF.4 = 1 then 'Bouton marche
DemM = 1 ‘Mém bouton marche appuyé
IOCAF.4 = 0 'RAZ interrupt flag
end if
if IOCAF.5 = 1 then 'Bouton arrêt
DemA = 1 ‘Mém bouton arrêt appuyé
IOCAF.5 = 0 'RAZ interrupt flag
end if
endi
end subvv
Problème interruption IOC avec PIC 12F1572
Bonjour Paul,
C'est bien un bouton NO entre GND et l'entrée RA4 du PIC avec pull up internes ou externes de 10 k, même problème.
Ce bouton sert à déclencher l'envoi d'une trame de commande via un HC-12 situé dans la cuisine vers un HC-12 situé dans la cave.
Pour activer ou désactiver un relais afin de mettre en / hors tension la prise de courant du four (Suite à deux avaries ayant pour origines des orages).
Ayant mis un PC en surveillance, je suis certains que c'est la routine d'interruption qui est en cause.
Je ne vois pas ce que les rebonds du Bp font dans cette galère, car tout est à l'état statique quand le phénomène se produit.
Je pense que tu voulais dire INTCON.IOCIF (interrupt flag).
J'avais testé cette solution, sans résultat.
J'ai aussi remplacé le PIC sans résultat.
J'ai testé différents canaux des HC12 sans résultat.
La fréquence du phénomène est très aléatoire, entre 30 mn et 4 jours.
Vue la situation j'arrête la recherche, je me passe de l'interruption et j'utilise le polling pour lire mes boutons.
Je vais éventuellement encore descendre la valeur des résistances pull up.
C'est bien un bouton NO entre GND et l'entrée RA4 du PIC avec pull up internes ou externes de 10 k, même problème.
Ce bouton sert à déclencher l'envoi d'une trame de commande via un HC-12 situé dans la cuisine vers un HC-12 situé dans la cave.
Pour activer ou désactiver un relais afin de mettre en / hors tension la prise de courant du four (Suite à deux avaries ayant pour origines des orages).
Ayant mis un PC en surveillance, je suis certains que c'est la routine d'interruption qui est en cause.
Je ne vois pas ce que les rebonds du Bp font dans cette galère, car tout est à l'état statique quand le phénomène se produit.
Je pense que tu voulais dire INTCON.IOCIF (interrupt flag).
Code : Tout sélectionner
if INTCON.IOCIE = 1 then
if IOCAF.4 = 1 then 'Bouton marche
DemM = 1 ‘Mém bouton marche appuyé
IOCAF.4 = 0 'RAZ interrupt flag
end if
J'avais testé cette solution, sans résultat.
J'ai aussi remplacé le PIC sans résultat.
J'ai testé différents canaux des HC12 sans résultat.
La fréquence du phénomène est très aléatoire, entre 30 mn et 4 jours.
Vue la situation j'arrête la recherche, je me passe de l'interruption et j'utilise le polling pour lire mes boutons.
Je vais éventuellement encore descendre la valeur des résistances pull up.
Problème interruption IOC avec PIC 12F1572
- Claudius
Passionné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
Bonjour,
Il serait intéressant d'avoir toute la séquence d'initialisation de ce PORTA (cf. Datasheet PIC12(L)F1571/2 - § 11.3 PORTA Registers - Page 111/334) avec notamment la valeur d'init. du registre ANSELA qui, après un Reset, est en "Analog mode" ;-)
Maintenant, si l'initialisation est conforme à celle attendue, il est tout de même dangereux de détecter l'appui d'un bouton sur front descendant ou montant sans une protection matérielle (filtre RC à mettre en // pour supprimer les détections de parasites extérieurs comme le 50 Hz ambiant)
Il serait intéressant d'avoir toute la séquence d'initialisation de ce PORTA (cf. Datasheet PIC12(L)F1571/2 - § 11.3 PORTA Registers - Page 111/334) avec notamment la valeur d'init. du registre ANSELA qui, après un Reset, est en "Analog mode" ;-)
Maintenant, si l'initialisation est conforme à celle attendue, il est tout de même dangereux de détecter l'appui d'un bouton sur front descendant ou montant sans une protection matérielle (filtre RC à mettre en // pour supprimer les détections de parasites extérieurs comme le 50 Hz ambiant)
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
Retourner vers « Langage BASIC & PASCAL »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 102 invités