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 ---
Idée, bugs, propositions .......
Problème de séquence I2C entre deux PIC
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#31 Message par Serge » ven. 1 mai 2020 19:55 lien vers la Data-Sheet : Cliquez ici

Bon.

Alors si on met le bit "SEN" à 1( sur l'Esclave) pour l'instant ça fonctionne à condition de le remettre à "0" à la fin de chaque séquence d'Octet reçu.
Si non, ça marche pas.
Donc pas à la configue, mais après avoir reçu l'adresse, et jusqu'à la fin de la séquence d'écriture du Maître.

(Mais alors, pourquoi ça marche aussi si on le met pas ?????)

Pour l'instant, ça ne plante pas en écriture....... à suivre !

Problème de séquence I2C entre deux PIC
satinas
Expert
Expert
Messages : 1497
Enregistré en : novembre 2015

#32 Message par satinas » ven. 1 mai 2020 20:08 lien vers la Data-Sheet : Cliquez ici

génère une pulse sur une sortie en début de routine d'interruption pour vérifier, que tu n'as pas d'interruptions intempestives, je reviendrais toujours sur cette histoire de timing :-)

Problème de séquence I2C entre deux PIC
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#33 Message par Serge » ven. 1 mai 2020 20:10 lien vers la Data-Sheet : Cliquez ici

Ca semble ne plus planter comme ça....
En espérant que ça dure....

Donc, si on écrit plus d'un Octet par séquence, il faut maintenir l'Horloge sur l'Esclave pendant la séquence complète.
Sans oublier de le remettre à "0" après le STOP.

Si ça continue de bien fonctionner, c'est ce que je comprend !

Problème de séquence I2C entre deux PIC
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#34 Message par Serge » ven. 1 mai 2020 20:14 lien vers la Data-Sheet : Cliquez ici

Et ba NON !

C'est pas ça, ça à encore planté.
Toujours pareil, après le premier Octet... Pas d'acknowledge !

J'ai bien mon Acknowledge d'adresse, mais pas "toujours" l'Acknowledge du premier Octet.
Et si j'ai celui-là, alors la séquence des 3 Octets se termine bien.

Mais c'est pas constant
Modifié en dernier par Serge le ven. 1 mai 2020 20:19, modifié 3 fois.

Problème de séquence I2C entre deux PIC
satinas
Expert
Expert
Messages : 1497
Enregistré en : novembre 2015

#35 Message par satinas » ven. 1 mai 2020 20:17 lien vers la Data-Sheet : Cliquez ici

SEN=0, CKP reste à 1 en permanence
SEN=1, CKP passe à 0 en fin de réception d'un octet par l'esclave, on le remet à 1 par soft.

Je regarderais ça demain, c'est du MikroBasic ?

Problème de séquence I2C entre deux PIC
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#36 Message par Serge » ven. 1 mai 2020 20:22 lien vers la Data-Sheet : Cliquez ici

Oui, je suis d'accord avec ça.

Mais ça concerne pour l'instant le mode lecture.
CKP reste à "1" en mode écriture.
Et c'est toujours en mode écriture que j'ai ce problème.

C'est du PIC Basic

Problème de séquence I2C entre deux PIC
satinas
Expert
Expert
Messages : 1497
Enregistré en : novembre 2015

#37 Message par satinas » ven. 1 mai 2020 20:41 lien vers la Data-Sheet : Cliquez ici

Si SEN=1, Ca fonctionne pareil en lecture et écriture, le bit CKP passe à 0 en fin de transmission et l'esclave le remet à 1. Dans les 2 cas il a possibilité de prendre son temps pour stocker ou aller chercher la data.
Si SEN=0, en lecture CKP reste à 1, en écriture j'ai pas compris la doc, pareil que la lecture ou pas.
Tu remets toujours CKP à 1 après un read/write SSPBUF et cela devrait être bon.

Problème de séquence I2C entre deux PIC
satinas
Expert
Expert
Messages : 1497
Enregistré en : novembre 2015

#38 Message par satinas » sam. 2 mai 2020 11:08 lien vers la Data-Sheet : Cliquez ici

Bonjour
Teste déjà cela, avec seule l'interruption I2C autorisée.
Chez moi tes routines d'envoi marchent parfaitemnent à 400 kHz.
Si ça fonctionne aussi chez toi, on verra pour le reste.
La boucle d'attente de l'acknoledge est le point faible, car si problème on n'en sort pas.
Sans le CKP = 1 dans l'interruption, cela ne marche pas, pourtant cela devrait d'après la doc.

Code : Tout sélectionner

; ------------------------------------------------
; Master
; ------------------------------------------------
SSPCON1 = 0x28                    ; Master 7 bits
SSPADD  = FOSC/4/100000-1         ; Fscl=100kHz
;SSPADD = FOSC/4/400000-1         ; Fscl=400kHz

I2CSTART:
  SSPCON2.0 = 1                   ; SEN - Start Condition Enable Bit
  WHILE SSPCON2.0 = 1 : WEND      ; Wait for Start to complete
RETURN

I2CSTOP:
  WHILE (SSPCON2< 3) OR SSPSTAT.2 : WEND
  SSPCON2.2 = 1                   ; PEN - send stop bit
  WHILE SSPCON2.2 = 1 : WEND      ; Wait for SSP to complete
RETURN

I2CWR:
  SSPBUF = d                      ; Move data to SSPBUF
  WHILE SSPSTAT.2 = 1 : WEND      ; SSPSTAT = 1 Transmit in progress
  WHILE SSPCON2.6 = 1 : WEND      ; Wait for Acknowledge from slave 1=NotAck
RETURN                            ; Acknowledge received

TEST_WRITE:
  GOSUB I2CSTART
  d = I2CSLAVE_ADDR
  GOSUB I2CWR                     ; send adresse esclave
  d = data_1
  GOSUB I2CWR                     ; send data1
  d = data_2
  GOSUB I2CWR                     ; send data2
  d = data_3
  GOSUB I2CWR                     ; send data3
  GOSUB I2CSTOP
  GOSUB WAIT_10                   ; tempo de 10 ms
GOTO TEST_WRITE

; ------------------------------------------------
; Slave
; ------------------------------------------------
SSPCON1 = 0x36                ; Slave 7 bits, CKP=1, no int start/stop
SSPADD  = ...                 ; adresse slave

interruption
if PIR1.3 = 1                 ; received byte
  if SSPSTAT.0 = 1
    data = SSPBUF             ; read byte
  endif
  SSPCON1.4 = 1               ; CKP = 1
  PIR1.3 = 0
endif

Problème de séquence I2C entre deux PIC
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#39 Message par Serge » sam. 2 mai 2020 18:21 lien vers la Data-Sheet : Cliquez ici

Bonjour

J'essaye, et te redis

Problème de séquence I2C entre deux PIC
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#40 Message par Serge » sam. 2 mai 2020 20:24 lien vers la Data-Sheet : Cliquez ici

Pour l'instant ça ne fonctionne pas, et je sais pas pourquoi car tu as les mêmes commandes que moi.
Pourtant, si je remet le miens, ça marche (à part les plantes récurrentes)

Si je met ton programme, j'obtiens la condition "Start", et je n'ai pas l'adresse....
Je comprend pas pourquoi, c'est trop bizarre.

je continue à chercher pourquoi


Retourner vers « Le forum Fantas-PIC »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité