Harware interrupt problem with 20X2 and other X2

#1
bonjour,

je n'arrive pas à utiliser les interruptions hardware (hint1 ou hint2) avec le 20X2.
Le défaut parait-etre l'mpossibilité de désactiver la routine d'Irq apres
etre passe une fois dedans.

Pour affiner mon test j'ai écrit une séquence simple qui comprend:
l'initialisation avec les setup basiques et hintsetup (%00100010) pour hint1 sur B.0 et setintflags %0001010,
la boucle principale avec high B.7/ low B.7 comme marqueur à l'oscilloscope
la routine d'irq avec high B.6/Low B.6 comme marqueur et return, sans hintsetup ni setintflags.
Les Interruptions sont rétablies dans la boucle principale grace à un flag mis à un dans la routine d'irq!
J'ai fait le test avec hintsetup et setintflags en sortie d'irq aussi, ça ne marche pas non plus.

Je démarre la séquence sans le signal d'irq, elle tourne dans la boucle principale;
Je branche le signal (une impulsion calibrée à 1ms à 20Hz pour être tranquille, vu que Hint1 est en front montant)
J'ai testé front descendant = même problème!

Le marqueur B.6 n'est pas synchrone du signal et, lorsque je le débranche, B.6 continue !
J'ai cherché ce qui pouvait forcer le retour continuel en interruption sans trouver.

Pouvez vous m'indiquer une piste à tester?

J'ai utilisé les irq standard, ça marche, mais je voudrais utiliser les choix sur front montant et descendant.

Merci / Topor
 

Technical

Technical Support
Staff member
#2
interrupt:

;
; other code
;

flags = 0 ; clear all flags so ready for next interrupt

;setintflags off; or turn off any new flags completely

;hintsetup off; or turn off hardware interrupts completely

return
 
#3
Hello,

j'ai essayé à nouveau, sans résultat.

Je peux vous envoyer le texte du programme de test (100lignes avec les commentaires) mais je ne trouve pas comment
joindre un fichier à cette ré^ponse!
Sinon CTRL V.... Merci/Topor
 

PieM

Senior Member
#4
Bonjour,
mettre le forum en mode avancé (en bas à droite) et le fichier .bas en PJ.

Si le programme n'est pas trop long (<1000 caractères) :
sur PE6,
CTRL A dans la fenêtre pour tout sélectionner.
Cliquer Forum (onglet Principal)
Puis CTRL V dans la fenêtre du forum.
 
#5
Bonjour,
ma réponse d'hier n'apparaît plus, je suppose avoir fait une fausse manip.
Je la renvoie.
Ci-dessous le texte du bout de prog test:
----------------------------
; essais des interruptions hint sur 20X2
; le 22 nov 2017 file Hint171122-3
;
; boucle principale avec marqueur sur pinB.7 (4 short pulses/marqueur 1-0
; puis 2 long pulses/marqueur 1-1)
;
; routine d'interruption avec marqueur sur pin B.5 en entree (2 pulses / marqueur 2,
; puis en sortie (2 pulses/marqueur 3)
;
; les lignes en commentaire ont ete essayees, les masques ne fonctionnent pas,
; il y a bien prise en compte de la 1ere impulsion mais les interruptions
; suivantes ne sont pas dues a la pin B.0: le signal est d?sactiv?!
;
; aucune pause ni timer ne sont activ?s (a ma connaissance)
; tout se passe comme si une interruption etait generee en interne.
;
symbol drapout = bit0 ; flag
symbol drapword = w0
;

init:
drapout = 0
let dirsC = %00000000 ; port C en input
let dirsB = %11110000 ; B0, B1, B2 B3 inputs
let outpinsB = 0
setintflags off ; bit0=hint0, b1=hint1, b2=hint2, b3=hints
; b4=hintcomp, b5=hintserin, b6=hinti2c, b7=hintTimr
;
hintsetup %00000000 ; b0=hint0(reserved), b1=hint1, b2=hint2, b3(reserved)
; b4=hint0edge(reserved), b5=hint1edge, b6=hint2edge, b7 (reserved)
main:
high B.7 ; marqueur 1-0
low B.7
high B.7
low B.7
high B.7
low B.7
high B.7
low B.7
setint off
;hintsetup %00100010 ; hint1(B.0), rising edge
;setintflags %00000010, %00000010 ; hint1 only => Same ProBleme
;setintflags %00001000, %00001000 ; hint0-1-2 only => SPB
;setintflags %00001010, %00001000 ; hint0-1-2, hint1 masqu?e => SPB
;setintflags %00001010, %00000010 ;hint0-1-2 masqu?es, hint1 => SPB
;setintflags %00001010, %00001010 ;hint0-1-2, hint1 => SPB
hintsetup %00000010 ; hint1(B.0), falling edge
;setintflags %00000010, %00000010 ; hint1 = Same ProBleme
;setintflags %00001000, %00001000 ; hint0-1-2 = SPB
;setintflags %00001010, %00001000 ; hint0-1-2, hint1 masqu?e = SPB
;setintflags %00001010, %00000010 ;hint0-1-2 masqu?es, hint1 = SPB
setintflags %00001010, %00001010 ;hint0-1-2, hint1 = SPB
boucle:
if drapout = 1 then
drapout = 0
goto main
else endif
high B.7 ; marqueur 1-1
high B.7
high B.7
high B.7
low B.7
low B.7
low B.7
high B.7
high B.7
high B.7
high B.7
low B.7
low B.7
low B.7
goto boucle

Interrupt:
high B.5 ; marqueur 2
high B.5
low B.5
low B.5
high B.5
high B.5
low B.5
low B.5
Irq01:
;
drapout = 1
high B.6 ; marqueur 3
low B.6
high B.6
low B.6
;hintsetup %00000000 ; disable hint1(B.0)
;setintflags %00001010, %00000000 ;Hint1, mask all
;setintflags %00000000, %00001010 ;Hint1 off
setintflags off
setint off
return
------------------------------------------------------------------
J'ai lue la doc sur les interrupts dans la datasheet du PIC18F1XK22.
les questions portaient sur les moyens et les instructions en Basic pour gérer
les niveaux de priorite qui existe dans le PIC18F1XK22
quel est le vecteur d'IT utilisé: 0008h ou 0018h?
-Concernant hint1 et hint2 il y a 3 bits de control, INTxIP, INTxIE, INTxIF dans INTCON3
et INTEDGx dans INTCON2 comment sont gérés ces bits et ces registres?
Merci pouR votre support / Topor
 
Top