Problème d'IRQ avec un PIC18F442

Signaler
Messages postés
3
Date d'inscription
mercredi 12 mai 2004
Statut
Membre
Dernière intervention
11 juin 2004
-
Messages postés
2
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
23 décembre 2004
-
Dans le cadre d'un stage, je suis amené à établir une communication entre deux PICs (un 16F627 et un 18F442). J'ai choisi de la faire via un port de communication et quelques pins de synchronisation. Apparemment, le PIC 18F442 n'aime pas ce genre de chose, parceque de temps en temps (aléatoirement) il ne veux plus rentrer en IRQ (sur une impulsion d'une pin de synchronisation), ou il y entre alors qu'il n'y a pas eu d'impulsion. Mais des fois il entre au bon moment dans l'IRQ.

Le PIC 18F doit envoyer 14bits vers le 16F. Il envoi les 7premiers bits sur le port C. Le 16F les lis et acquitte (RB0 du 18F). Le 18F met alors les 7bits dernier bits sur le bus et le 16F les lis, mais ne fait rien. Un certain temps plus tard, le 16F doit envoyer une réponse sur 7bits au 18F. Il signal qu'une donnée attent sur le bus (RB2). Le PIC 18F la lis et envoi les prochains premier 7 bits.

Voici le code dan sle PIC 18F442 :

LIST 	P=18F442, F=INHX32
include 

__CONFIG	_CONFIG1H, _HS_OSC_1H
__CONFIG	_CONFIG2H, _WDT_OFF_2H
__CONFIG	_CONFIG2L, _PWRT_OFF_2L & _BOR_OFF_2L
__CONFIG	_CONFIG3H, _CCP2MX_OFF_3H
__CONFIG	_CONFIG4L, _LVP_OFF_4L

CBLOCK	0x080

counter
cpt_parity
parity
req_A
req_B
rep_slave

ENDC

#define		WORK	PORTB,3
#define		TEST	PORTA,5

ORG     0x000

call	INIT
goto	INIT_PHASE

ORG	0x008

btfsc	INTCON,INT0IF
goto	RB0_IRQ

btfsc	INTCON3,INT2IF
call	RB2_IRQ

END_IRQ

bcf	INTCON3,INT2IF
bcf	INTCON,INT0IF

retfie	FAST

INIT_PHASE
movff	req_A,PORTC
bsf	INTCON,INT0IE
main
clrwdt

goto	main

INIT
movlw	0x07
movwf	ADCON1
clrf	TRISC ; COM with PIC16F

movlw	0x04
movwf	req_A
movlw	0xE2
movwf	req_B

bsf	INTCON,GIE
bcf	INTCON,INT0IE
bcf	INTCON3,INT2IE
bsf	INTCON2,INTEDG0
bsf	INTCON2,INTEDG2

clrf	rep_slave

return

RB0_IRQ
clrf	TRISC
movff	req_B,PORTC
movlw	0x02
movwf	req_A
movlw	0xE2
movwf	req_B

bsf	INTCON3,INT2IE
bcf	INTCON,INT0IE
goto	END_IRQ

RB2_IRQ
setf	TRISC
movff	PORTC,rep_slave
clrf	TRISC
movff	req_A,PORTC
bcf	INTCON3,INT2IE
bsf	INTCON,INT0IE

return

end


J'espère que quelque va pouvoir m'aider parceque ça fait 3 semaines que je butte sur ce problème de communication.

Merci d'avance
A voir également:

3 réponses

Messages postés
87
Date d'inscription
jeudi 10 octobre 2002
Statut
Membre
Dernière intervention
4 avril 2008

Allo a premiere vue ses bon mais tu devrait maitre une verification dans les interuption a savoire si tel pin est bien passer a +5 ou 0 et avec un temps de Delay pour etre sur, et du coter electronique pas sur que ca soit ce qui as de mieux la tu impose du +5 et du groud des deux coter a tour de rolle tu aurait ete plus sur si tu ferait passer rien du ground

comme ca

clrf PORTC
movlw 0xE2
movwf TRISC
comme ca je mais la pin RC 0,2,3,4 en sortie ca veux dire au ground et les autre reste en entre il ont rien dessus en l air mais tu doit maitre 8 resitance un coter +5 et lautre sur ta ligne entre tes deux pic la meme chose que du I2C la tu est sur de pas faire poufff ca reste rien une idee.

mais ce qui te manque est un delay de verification que la pin a bien changer d etat un temps determiner.

a++
Messages postés
3
Date d'inscription
mercredi 12 mai 2004
Statut
Membre
Dernière intervention
11 juin 2004

Merci pour ta réponse, je vais mettre un delay de verification et essayer ta methode programme et électronique.

J'espère que ça va marcher !!

@+
Messages postés
2
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
23 décembre 2004

verif les irq de ton watchdog a mon avis c'est ca!