reception 2 octets en I2C
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

reception 2 octets en I2C



  1. #1
    invite820b5138

    reception 2 octets en I2C


    ------

    bonjour à tous,
    voilà, je communique entre mes 2 PIC16F876a via l'i2c, j'arrive à envoyer un octet, mais le soucis c'est que maintenant je dois en envoyer 2 d'un coups!
    et je vois pas comment faire au niveau de la reception...si vous pouviez me donner un coup de main...ça serai gentil,
    voici mon prog(en gros...) pour la réception d'un octet via interruption:

    bsf STATUS,RP0 ; sélectionner banque1
    btfss PIE1,SSPIE ; tester si interrupt autorisée
    goto restorereg ; et fin d'interrupt
    bcf STATUS,RP0 ; oui, sélectionner banque0
    btfss PIR1,SSPIF ; oui, tester si interrupt en cours
    goto restorereg ; et fin d'interrupt
    call intI2C ; oui, traiter interrupt
    bcf PIR1,SSPIF ; effacer flag interupt
    goto restorereg ; et fin d'interrupt

    intI2C
    movf SSPBUF,w ; charger octet reçu
    btfss SSPSTAT,D_A ; tester si octet de donnée
    return ; non, retour
    movwf data_i2c ; oui, le charger dans variable data_i2c
    bsf flag,0 ; mettrele flag à 1
    bsf PORTB,7 ; allumer LED pour indiquer réception OK
    return ; retour


    merci à tous et bonne fin de journée

    -----

  2. #2
    invitef26bdcba

    Re : reception 2 octets en I2C

    Salut,

    La 3ème ligne de ton code pose problème car un fois tu es en BANK1 et une autre tu es en BANK0, ce qui inévitablement cause un sérieux bug dans ton programme...

    David.

  3. #3
    invite820b5138

    Re : reception 2 octets en I2C

    ok, merci, je vais corriger ça, pourtant ça marche nikel pour un octet...
    et pour deux, vous avez pas d'idées du comment faut faire??
    au niveau du maître je dois envoyer un repeat start et mon deuxième octet, mais au niveau de l'esclave...comment je le receptionne???....

  4. #4
    invite820b5138

    Re : reception 2 octets en I2C

    j'ai modifié, et ça marche plus...et j'ai vérifié, je uis bien dans les bonnes bank,
    PIE1 est en banque1 et PIr1 en banque 0, donc c'est normal que je change de banque!

  5. A voir en vidéo sur Futura
  6. #5
    invite820b5138

    Re : reception 2 octets en I2C

    personne n'a d'idée pour la réception de deux octets???
    et même l'emmission (je suis pas sur qu'il faille juste envoyer un repeat start puis la donnée).

  7. #6
    invitef26bdcba

    Re : reception 2 octets en I2C

    Salut,

    C'est le "restorreg" qui pose problème!!!!

    Tu as au minimum une erreur de BANK et de ce fait, il est probable que la réception du première octet fonctionne correctement avant plantage de ton programme...

    David.

  8. #7
    invite820b5138

    Re : reception 2 octets en I2C

    salut David,
    je ne vois vraiment pas ou tu vois un problème, enfin je ne comprends pas.
    Si tu sais qu'il y a une erreur est-ce que tu peux être plus explicite, parce que la je ne comprends pas vraiment.
    Je teste si le bit SSPIE est à 1 (registre PIE1 en banque1)
    si non , fin d'interruption et donc le restorereg,
    et si oui je vais tester le bit SSPIF, mais comme il est en banque 0 je passe d'abord en banque 0 ...
    donc je ne vois vraiment pas, mais si tu es sur de toi, eclaire moi STP
    bonne soirée

  9. #8
    invitef26bdcba

    Re : reception 2 octets en I2C

    Dans le premier restorreg, tu sorts de la routine sans repasser en BANK0...

    bsf STATUS,RP0 ; sélectionner banque1
    btfss PIE1,SSPIE ; tester si interrupt autorisée
    goto restorereg ; et fin d'interrupt

    Je ne peux pas être plus clair que celà...

    David.

  10. #9
    invite820b5138

    Re : reception 2 octets en I2C

    bonjour,
    et merci david, je vais modifier ça ce matin!
    et pour la réception de deux octets, personne n'a de solutions???

  11. #10
    invitef26bdcba

    Re : reception 2 octets en I2C

    Salut,

    Modifie cette partie du code, et cela devrait fonctionner, car le reste de la routine semble correct.

    Si cela ne fonctionne pas, place ton code sur le forum.

    David.

  12. #11
    invite820b5138

    Re : reception 2 octets en I2C

    j'ai changé la partie du prog, ça a l'air de marcher.
    mais je ne sais toujours pas comment faire pour recevoir mon deuxième octet?
    quel bit il faut tester dans l'interruption?? parceque je ne peut pas en sortir, sinon je vais écraser le premier...bref, si quelqu'un sait comment on fait...
    vous avez bien deja utilisé l'I2C quand même....

  13. #12
    invitef26bdcba

    Re : reception 2 octets en I2C

    Au lieu de placer SPBUFF dans "data_i2c" range les données dans un buffer circulaire soft.
    Ensuite, tu disposes de tes données et tu peux les manipuler comme tu l'entends...

    David.

  14. #13
    invite820b5138

    Re : reception 2 octets en I2C

    ouais c'est une idée, mais je sais pas trop faire ce genre de truc, j'avais deja essayé pour une autre appli, sans grand succées!
    et pour juste deux octets je vois pas trop l'intéret d'utiliser un buffer...mais je me trompe surement...
    par contre ça me dit toujours pas comment recevoir cet octet....
    en tout cas merci quand même de ton aide, mon prog à l'air de mieu marcher pour un octet deja!!!!

  15. #14
    invitef26bdcba

    Re : reception 2 octets en I2C

    Bon,

    Si je te donne un exemple pour recevoir deux octets, le premier dans data_i2c et le deuxième dans data_i2c+1, cela te suffirait-il pour exploiter les données ?

    David.

  16. #15
    invitef26bdcba

    Re : reception 2 octets en I2C

    Allez, un bout de code pour te dépanner...

    A mettre à la place de "IntI2C"

    Code:
    	flags	       res .1		; flag divers
    	    data_i2c	res .2
    
    #define	FlagDon	       flags, 0		       ; deuxième donnée à réceptionner ?
    #define	FlagTrait	flags, 1		; traiter les deux octets
    
    intI2C	btfss	SSPSTAT,D_A 	     ; tester si octet de donnée
    	return 			              ; non, retour
    	movf	SSPBUF, w		; charger donnée dans registre de travail
    	btfss	FlagDon		           ; réception du deuxième octet ?
    	goto	PremDon		          ; non, alors ranger dans data_i2c
    	movwf	data_i2c + 1	        ; oui, alors ranger dans data_i2c + 1
    	bsf	FlagTrait		     ; indiquer qu'il faut traiter les données
    	bcf	FlagDon		            ; replacer pour prochaine réception
    	return			               ; retour
    	
    PremDon	movwf	data_i2c		; première octet, placer dans data_i2c
    	bsf	FlagDon	                      ; indiquer que le première octet est reçu
    	return			                 ; et retour
    	
    	; dans la boucle principale, traiter les deux données si FlagTrait est à un
    	; une fois les données traitées, effacer FlagTrait
    David.

  17. #16
    invite820b5138

    Re : reception 2 octets en I2C

    bonjour,
    merci beaucoup david, je vais essayé ça aujourd'hui, si jamais j'ai des soucis je viendrai te faire signe...
    en esperant que ça marche!

Discussions similaires

  1. octets
    Par invite254e45a5 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 21/11/2007, 15h25
  2. envoyer des octets sur RC6/TX avec logipic ?
    Par invite701c9700 dans le forum Électronique
    Réponses: 2
    Dernier message: 23/06/2007, 18h18
  3. Octets envoyés ?!
    Par invite96a93ba8 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 155
    Dernier message: 25/01/2007, 22h25
  4. bits et octets
    Par invite2927189f dans le forum Internet - Réseau - Sécurité générale
    Réponses: 5
    Dernier message: 04/12/2005, 20h56
  5. imagerie médicale : pixels/ octets/ couleurs...
    Par invitef1b4a1e8 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 09/03/2005, 23h55
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...