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 ---
Forum général en BASIC et PASCAL !

Modérateur : Gérard

Problème interruption IOC avec PIC 12F1572
pspic
Passioné
Passioné
Messages : 250
Âge : 73
Enregistré en : septembre 2017
Localisation : 68

#1 Message par pspic » mer. 31 juil. 2019 08:43

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:

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
Avatar de l’utilisateur
Expert
Expert
Messages : 1503
Âge : 69
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » mer. 31 juil. 2019 09:15

bonjour,

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.
Aides toi, le ciel ou Fantastpic t'aideras

Problème interruption IOC avec PIC 12F1572
satinas
Passioné
Passioné
Messages : 420
Enregistré en : novembre 2015

#3 Message par satinas » mer. 31 juil. 2019 11:43

Bonjour
Le pic fait peut être des resets intempestifs
Les variables modifiées par une routine d'interruption doivent être déclarées en volatile

Problème interruption IOC avec PIC 12F1572
pspic
Passioné
Passioné
Messages : 250
Âge : 73
Enregistré en : septembre 2017
Localisation : 68

#4 Message par pspic » mer. 31 juil. 2019 13:00

ne manquerait-il pas un "Wend " ? ou equivalent

Bonjour,
J'ai coupé le wend par copier coller, mais il existe bien dans mon code.
Je vais suivre la préconisation de Satinas et voir ce que ça donne.

Problème interruption IOC avec PIC 12F1572
pspic
Passioné
Passioné
Messages : 250
Âge : 73
Enregistré en : septembre 2017
Localisation : 68

#5 Message par pspic » mer. 31 juil. 2019 13:05

satinas a écrit :Bonjour
Le pic fait peut être des resets intempestifs
Les variables modifiées par une routine d'interruption doivent être déclarées en volatile

Bonjour,
Merci pour cette remarque, je vais essayer de déclarer en volatile et voir ce que ça donnes.

Problème interruption IOC avec PIC 12F1572
pspic
Passioné
Passioné
Messages : 250
Âge : 73
Enregistré en : septembre 2017
Localisation : 68

#6 Message par pspic » sam. 3 août 2019 07:19

Bonjour à tous,
Merci Satinas, tu as vu juste.
Depuis que j'ai déclaré les variables DemM et DemA en volatile le problème est résolu.

Problème interruption IOC avec PIC 12F1572
pspic
Passioné
Passioné
Messages : 250
Âge : 73
Enregistré en : septembre 2017
Localisation : 68

#7 Message par pspic » sam. 3 août 2019 10:46

J'ai parlé trop vite, après 3 jours sans plantage le problème réapparait.

Problème interruption IOC avec PIC 12F1572
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1503
Âge : 69
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#8 Message par paulfjujo » sam. 3 août 2019 14:43

bonjour

...à 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
Aides toi, le ciel ou Fantastpic t'aideras

Problème interruption IOC avec PIC 12F1572
pspic
Passioné
Passioné
Messages : 250
Âge : 73
Enregistré en : septembre 2017
Localisation : 68

#9 Message par pspic » sam. 3 août 2019 18:06

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).

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
Avatar de l’utilisateur
Passioné
Passioné
Messages : 209
Âge : 64
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#10 Message par Claudius » lun. 5 août 2019 12:56

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)


Retourner vers « Langage BASIC & PASCAL »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités