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

Communication entre deux PICs en I²C
Serge
Débutant
Débutant
Messages : 41
Enregistré en : septembre 2018

#41 Message par Serge » mer. 3 oct. 2018 17:28

La ligne blocante est:
WHILE SSPCON2.3 = 1 : WEND ' Attente réception complète

Communication entre deux PICs en I²C
Serge
Débutant
Débutant
Messages : 41
Enregistré en : septembre 2018

#42 Message par Serge » mer. 3 oct. 2018 17:38

20181003_173345.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Communication entre deux PICs en I²C
satinas
Passioné
Passioné
Messages : 347
Enregistré en : novembre 2015

#43 Message par satinas » mer. 3 oct. 2018 19:22

Bonjour,
Sur l'i2c il y a la notion de clock stretching , qui permet au slave de bloquer le bus et de faire patienter le master. Mets le bit CKP à 1 sur le slave pour mettre SCL à l'état haut. On devrait sans doute pas avoir à le faire si on désactive le clock stretching dans la config du slave, mais cela coûte rien..

Il faudrait voir la totalité de ton programme slave, et simplifier à l'extrème. Commence par envoyer des données vers le slave, c'est le plus simple.
Attention, le flag RCEN (SSPCON2.3) ne concerne que le master, voir le datasheet. Pour le slave, on récupère la data reçue directement dans l'interruption (ou par polling sur le bit SSPIF ou BF).

http://ww1.microchip.com/downloads/en/d ... 39631e.pdf
page 176, réception i2c slave sans clock stretching (SEN = 0)
page 182, réception i2c slave avec clock stretching (SEN = 1)

Communication entre deux PICs en I²C
satinas
Passioné
Passioné
Messages : 347
Enregistré en : novembre 2015

#44 Message par satinas » ven. 5 oct. 2018 22:00

Bonsoir
Ben voila c'est reparti :)
Pendant que Jeremy se battait avec son serveur récalcitrant, j'ai regardé l'échange i2c entre 2 pics.
Testé sur 2 pics 18F4685, la lecture par le master a été un peu plus difficile que l'écriture.
Voila les 2 programmes complets.
Il serait bon d'ajouter un time-out dans la fonction I2cWait pour gérer les erreurs.
Il ne manque rien, au reset les pins sont en input, et les registres à 0 par défaut.
Le master envoie 3 octets data, puis reçoit 3 octets data.
Le master envoie bien un nack après le dernier octet reçu.
j'ai essayé de mettre à 1 le bit SSPCON1.SSPOV pour que le slave envoie aussi un nack après le dernier octet reçu, mais cela n'a pas l'air de marcher.

Pour le Master

Code : Tout sélectionner

main master
  SSPADD   = FOSC/4/100000-1  // F=100kHz
  SSPCON1  = 0x28             // i2c master on, F = FOSC/4/(SSPADD+1)
  I2cStart
  I2cWrite(0xE6)
  I2cWrite(data_snd[0])
  I2cWrite(data_snd[1])
  I2cWrite(data_snd[2])
  I2cStop
  I2cStart
  I2cWrite(0xE6+1)
  data_rcv[0] = I2cRead(0)
  data_rcv[1] = I2cRead(0)
  data_rcv[2] = I2cRead(1)
  I2cStop()
  boucler

I2cWait
  tant que SSPSTAT.R_NOT_W = 1 ou (SSPCON2 & 0x1F) != 0 attendre

I2cStart 
  I2cWait
  SSPCON2.SEN = 1

I2cStop
  I2cWait
  SSPCON2.PEN = 1

I2cWrite(byte)
  I2cWait
  SSPBUF = byte
  I2cWait
  byte ack = SSPCON2.ACKSTAT    // valeur ack reçue en fin de write

byte I2cRead(ack_nack)
  I2cWait
  SSPCON2.RCEN = 1
  I2cWait
  byte = SSPBUF
  I2cWait
  SSPCON2.ACKDT = ack_nack
  SSPCON2.ACKEN = 1


Pour le Slave

Code : Tout sélectionner

main slave
  byte i = 0
  byte read = 0
  SSPADD   = 0xE6         // adresse slave (0x73 << 1)
  SSPCON1  = 0x26         // i2c slave on, 7bit address, no int sur start/stop
  autoriser int i2c
  boucler
 
interrupt i2c (si PIR1.SSPIF = 1)
  PIR1.SSPIF = 0
  if SSPSTAT.D_NOT_A = 0                        // réception adresse slave + W/R
    i = 0
    read = SSPSTAT.R_NOT_W
  endif
  if SSPSTAT.BF = 1
    byte z = SSPBUF
    if read = 0 and SSPSTAT.D_NOT_A = 1         // réception 3 datas envoyées par master
      byte_rcv[i] = z
      i = i+1
    else if read = 1 and SSPSTAT.D_NOT_A = 0    // envoi première data au master
      SSPBUF = byte_snd[i]
      i = i+1
    endif
  else if read = 1 and SSPSTAT.D_NOT_A = 1      // envoi 2 datas suivantes au master
    SSPBUF = byte_snd[i]
    i = i+1
  endif
  SSPCON1.CKP = 1                               // nécessaire même si clock checking désactivé

Communication entre deux PICs en I²C
Serge
Débutant
Débutant
Messages : 41
Enregistré en : septembre 2018

#45 Message par Serge » mar. 23 oct. 2018 11:25

Désolé pour cette attente, mais je ne reçois plus les alertes .....(sais pas pourquoi)

J'allais justement poser des questions sur le CKP... est-il bien chargé de façon systématique ou faut-il le gérer par soft quand on utilise le MSSP.....
J'ai essayé avec CKP=1, mais c'est toujours pareil.
J'ai presque tout essayé et j'obtiens toujours la même chose:
Condition Start OK et reconnue sur les deux PIC Maitre et Esclave, et puis ensuite les deux SCL et SDA reste niveau BAS.....
Le Maitre n'envoie pas l'adresse.....
Alors que si je laisse la carte Maître seule, sans la raccorder à l'Esclave, le Maitre Envoie l'adresse derrière la condition Start.

Merci pour les réponses, je vais suivre vos avis et poursuivre....

Communication entre deux PICs en I²C
Serge
Débutant
Débutant
Messages : 41
Enregistré en : septembre 2018

#46 Message par Serge » mar. 23 oct. 2018 11:36

Mon dernier soft "Esclave" pour le test:

Code : Tout sélectionner

]
  
#CONFIG
    
CONFIG  OSC INTIO67         oscillator   interne ports i/o A6 et A7
    CONFIG  FCMEN 
OFF           Fail-Safe Clock Monitor disabled
    CONFIG  IESO 
OFF            Oscillator Switchover mode disabled
    CONFIG  PWRT 
OFF            PWRT disabled
    CONFIG  BOREN 
SBORDIS       Brown-out Reset enabled in hardware only (SBOREN is disabled)
    
CONFIG  BORV 3              Minimum setting
    CONFIG  WDT 
off             WDT enabled
    CONFIG  PBADEN 
OFF          PORTB<4:0pins are configured as digital I/O on Reset
    CONFIG  LPT1OSC 
OFF         Timer1 configured for higher power operation
    CONFIG  MCLRE 
ON            MCLR pin enabledRE3 input pin disabled
    CONFIG  LVP 
OFF             Single-Supply ICSP disabled
  
#ENDCONFIG
  
define OSC 8


' Module I2c 
'
Registre de Transmission
    TXSTA.7 
0  'CSRC Mode maitre avec horloge interne attribuée par BRG
    TXSTA.6 = 0  '
TX9 Transmission sur 8bits ou si =1 sur 9bits
    TXSTA.5 
0  'TXEN Transmission "Enable"    SCREN ou CREN ignorent  TXEN en mode synchro
    TXSTA.4 = 1  '
SYNC Transmission Synchrone'i2c ou asynchrone =0 UART ou SPI
    TXSTA.3 = 0  '
SENDB sans importance en mode synchrone (caractère BREAK pour l'assynchrone)
    TXSTA.2 = 0  '
BRGH Haute vitesse pour le Baud (400KHz au lieu de 100KHzIncompatible sur plusieurs capteurs
    TXSTA.1 
1  'TRMT Registre de transmission vide  si =0=plein
    TXSTA.0 = 0  '
TX9D 9ème bit de transmission peut être data ou parité ...
    
'Registre de Réception    
    RCSTA.7 = 0  '
SPEN 1Sérial port Enabled (configure RX/DT et TX/CK en port série 
    RCSTA.6 
0  'RX9  1= Réception sur 9 bits
    RCSTA.5 = 0  '
SREN Mode MAITRE Synchrone1Enable réception simple (Bit effacé après réception complète
    
RCSTA.4 0  'CREN  1=Enabled Réception continue (CREN Ignore SREN)
    RCSTA.3 = 1  '
ADDEN Adresse détect 9ème bit 1=Enabled interruption 0=9ème bit pour parité...
    
RCSTA.2 0  'FERR  1=Framing error (can be cleared by reading RCREG register and receiving next valid byte)
    RCSTA.1 = 0  '
OERR  1=Overrun error (can be cleared by clearing bitCREN)
    
RCSTA.0 0  'RX9D  9ème bit d'adresse ou de parité à calculer par soft
    
    
'ADRESSE       ' en Esclave mettre l'adresse de la carte dans SSPADD
    SSPADD = $40   ' 
en Maitre $27=100kHz $0C=308kHz $09=400kHz 8 MHz   'si Maitre, ce registre contient la vitesse du réseau et si Esclave, contient l'adresse de l'esclave
    
    SSPSTAT.7 = 1  ' 
SMPControle de la vitesse du bus1=vitesse standard 100 Khz  0=vitesse haute 400 Khz
    SSPSTAT.6 
0  ' CKE:  SMBus Select 1=enable SMBus  0=desable SMBus
    SSPSTAT.5 = 0  ' 
D/AData/Address en mode Maitre: (réservé). en esclave1=dernier byte reçu ou transmis=DATA si non 0Adresse
    SSPSTAT.4 
0  ' P: Stop bit    si=1 StopBit à été détecté  si=0 n'as pas été détecté
    SSPSTAT.3 
0  ' S: Start bit(1) si=1 StartBit à été détecté  si=0 n'as pas été détecté
    SSPSTAT.2 
0  ' R/W: Read/Write Information bit (I2C mode only) en mode Esclave 1=Read 0=Write en mode Maitre 1= Transmission en cours 0= pas de transmission en cours
    SSPSTAT.1 = 0  ' 
UAUpdate Address bit (10-Bit Slave mode only1=Indique que l'utilisateur doit mettre à jour l'adresse dans le registre de SSPADD
                   
' 0=L'adresse ne doit pas être mise à jour
    SSPSTAT.0 
0  ' BF si BF=0: Buffer Full Status bit    en mode Transmission 1= SSPBUF est plein 0=Vide
                                                    '
en mode Réception    1SSPBUF est plein (sans inclure l'ACK et le StB)  0=vide
    '
Config I2c
    SSPCON1.7 
0   'WCOL  Maitre: 1= Ecriture dans SSPBUF en transmission non valide (erreur) effacer le bit par soft
                    '     
Esclave1le registre SSPBUF  est écrit en transmission non finie (erreureffacer le bit par soft
    SSPCON1.6 
0   'SSPOV Réception: 1= SSPBUF contient toujours un octet tandis qu'il en reçois un autre. (erreureffacer le bit par soft
                    
'   Transmission: 1= Sans importance.
    SSPCON1.5 = 1   '
SSPEN  1I2c Enable et configure les pins SDA et SCL
    SSPCON1.4 
1   'CKP  Esclave:  1= Horloge de sortie  0= temps bas utilisé pour monter les données
                    '      
Maitre:  1Non utilisé
    SSPCON1.3 
1   'SSPM  1111 = I2C Slave mode, 10-bit address with Start and Stop bit interrupts enabled
    SSPCON1.2 = 1         '
1110 I2C Slave mode7-bit address with Start and Stop bit interrupts enabled
    SSPCON1.1 
1         '1011 = I2C Firmware Controlled Master mode (Slave Idle)
    SSPCON1.0 = 0         '
1000 I2C Master modeclock FOSC/(* (SSPADD 1))
                          
'0111 = I2C Slave mode, 10-bit address
                          '
0110 I2C Slave mode7-bit address
                          
'Bit combinations not specifically listed here are either reserved or implemented in SPI mode only. 
   '
Gestion I2c 
    SSPCON2.7 
1   'GCEN  en mode Esclave seulement si =1 Enable Interruption si appel général à l'adresse(0000hréception dans le SSPSR  si=0 Desable l'appel générale
    SSPCON2.6 = 0   '
ACKSTAT Transmission Maitre seulement 1pas d'acknowledge reçu de l'esclave 0acknowledge reçu
    SSPCON2.5 
0   'ACKDT En Réception Maitre seulement  1= Pas d'acknowledge  0acknowledge
    SSPCON2.4 
0   'ACKEN En Réception Maitre seulement  1= acknowledge sur SDA et SCL et transmission ACKDT Automatiquement (clear Hardwaire)  0= bus inocupé
    SSPCON2.3 = 0   '
RCEN  Mode Maitre seulement  1Enable mode réception I2c
    SSPCON2.2 
0   'PEN  Mode Maitre seulement  1= Condition STOP sur SDA et SCL  0= libre  (clear hardwaire)
    SSPCON2.1 = 0   '
RSEN Mode Maitre seulement  1Condition Repeated START sur SDA et SCL  0libre   (clear hardwaire)
    
SSPCON2.0 0   'SEN Maitre:  1= Condition START sur SDA et SCL   Esclave: 1= maintient l'horloge tant que l'esclave transmet

    OSCCON=%01110010        ' 
Bit 7 Inocupé sur instruction de Someil,   4-5-6 8Mh
    TRISA
=%00000011         '1= entrée
    TRISB=%11111111         '
0sortie
    TRISC
=%11111000         ' C6 en sortie TX UART   C7 en entrée RX UART C6 doit etre mis en entrée c'est le UART qui le met à 0 sortie

    INTCON.7 
1            'GIE/GIEH: Interruptions générales Enabled
    INTCON.6 = 1            '
PEIE/GIEInterruptions Périphériques Enabled
    INTCON.5 
1            'TMR0IE: Interruption Compteur_0 Overflow Enabled
    INTCON.4 = 1            '
INT0IEInterruptions Externes Enabled (B0 ?)
    
INTCON.3 0            'RBIE: Interruption Ports "B" Enabled  (B7-4 ?)
    INTCON.2 = 0            '
TMR0IFFlag de TMR0
    INTCON.1 
0            'INT0IF: Flag Interruptions externes  (B0 ?)
    INTCON.0 = 0            '
RBIFFlag Interruptions des ports B_7-4
    
    INTCON2.7 
1   'RBPU: PullUp du Port B Desabled (=1) sur les 8 bits
    INTCON2.6 = 1   '
INTEDG0Interruption de B0 sur front Montant
    INTCON2.5 
0   'INTEDG1: Interruption de B1 sur front Montant
    INTCON2.4 = 0   '
INTEDG2Interruption de B2 sur front Montant
    INTCON2.3 
0   '=0
    INTCON2.2 = 0   '
TMR0IPPriorité de TMR0 (1=Haute)
    
INTCON2.1 0   '=0
    INTCON2.0 = 0   '
RBIPPriorité Changement sur port B (1=Haute)                                                                                                                                                                                                 

    
PIE1.7=0      'PSPIE  1=Enable Interruption Port Parallèle Lecture/Ecriture 
    PIE1.6=0      '
ADIE   1=Enable A/D Convertisseur  
    PIE1.5
=0      'RCIE   1=Enable EUSART Interruption Receive 
    PIE1.4=0      '
TXIE   1=Enable EUSART Interruption Transmit 
    PIE1.3
=1      'SSPIE  1=Enabled Interruption Port Série synchrone Maitre
    PIE1.2=0      '
CCP1IE 1=Enabled Interruption CCP1 Comparateur 
    PIE1.1
=0      'TMR2IE 1=Enabled Interruption TMR2 vers PR2 
    PIE1.0=0      '
TMR1IE 1=Enabled Interruption TMR1 Overflow
        
'PIE2=%00000000        ' 7=Interruption Fail Oscillateur 6=Interruption Comparateur Enabled 5=0 4=Interruption Data Flash/EEprom Write Enabled 3=Interruption Bus/Colision Enabled
                               
' 2=Interruption défaut tension Enabled 1=Interruption Overflow TMR3 Enabled 0=Interruption Comparateur2 CCP2 Enabled
    IPR1.7=0    '
PSPIP Interruption Prioritaire port Parallèle
    IPR1.6
=0    'ADIP Interruption Prioritaire A/D Convertisseur
    IPR1.5=0    '
RCIP Interruption Prioritaire EUSART Réception
    IPR1.4
=0    'TXIP Interruption Prioritaire EUSART Transmission
    IPR1.3=0    '
SSPIP Interruption Prioritaire Port série Maître
    IPR1.2
=0    'CCP1IP Interruption Prioritaire Comparateur CCP1
    IPR1.1=0    '
TMR2IP Interruption Prioritaire TMR2 vers PR2 Match
    IPR1.0
=0    'TMR1IP Interruption Prioritaire TMR1 Overflow

    IPR2.7=0    '
Interruption Prioritaire sur défaut Oscillateur 
    IPR2.6
=0    'Interruption Prioritaire sur défaut Comparateur 
    IPR2.5=0    '
5=
    IPR2.4
=0    'Interruption Prioritaire sur Ecriture/Lecture Flash/EEprom
    IPR2.3=0    '
Interruption Prioritaire sur Collision Bus 
    IPR2.2
=0    'Interruption Prioritaire sur Tension alim 
    IPR2.1=0    '
Interruption Prioritaire sur Overflow TMR3 
    IPR2.1
=0    'Interruption Prioritaire sur Comparateur CCP2                             
    
    PIR1.7=0    '
PSPIF 1=Flag interrupt à lecture ou écriture  port Parallèle
    PIR1.6
=0    'ADIF 1=Flag Interrupt A/D conversion complete
    PIR1.5=0    '
RCIF 1=Flag EUSART Réception buffer
    PIR1.4
=0    'TXIF 1=Flag EUSART Transmission TXREG est Vide
    PIR1.3=0    '
SSPIF 1=Flag Synchrone Transmission/Réception complète (effacer par soft)
    
PIR1.2=0    'CCP1IF 1=Flag de capture sur TMR1   (effacer par soft)   ou Comparaison effectuée avec TMR1
    PIR1.1=0    '
TMR2IF 1=Flag de TMR2 dans PR2  (effacer par soft)
    
PIR1.0=0    'TMR1IF 1=Flag du registre de TMR1 Overflow


        '
ADCON0 = %11000001    ' Configure et allume le A/D Module
    ADCON1=%00001101 '
bit 4 et 5 référence tension et -   et config portA 0 et 1  
    ADCON2
=%00100100   ' bit 7à0 Justifie à gauche le résultat dans ADRH ou ADRL  ensuite 8 TAD et Fosc/4    ' a confirmer selon mesures réalisées
    T0CON
=%11000101    ' bit 7=Timer0_Enabled 6=1=8Bits (si non=16 bits) 5=source_clock_TOCK1 (si non TOCK0) 4=Front montant_de_TOCK1  3=0=Préscale_assigned   2-0=Valeur_de Préscale_TMR0 (110)
        '
OSCTUNE=%        
        
'RCON=%00000000  'IPEN (bit 7détermine si Niveau d'interruption
        '
RCON.7=' Prise en compte du niveau d'interruption si=1  (la led ne clignotte plus si =1)
    WHILE 
OSCCON.2=WEND    ' attente que la fréquence de l'oscillateur soit stable   

    LOW PORTA.2               
'mise à 0 des sorties
    LOW PORTA.3
    LOW PORTA.4
    LOW PORTA.5
    LOW PORTA.6
    LOW PORTA.7
    LOW PORTC.0
    LOW PORTC.1
    LOW PORTC.2

    '
Entrées
    Potar 
var PORTA.0
    Ana 
var PORTA.1
    Ent1 
var PORTC.5
    Ent2 
var PORTC.6
    Ent3 
var PORTC.7 
    Ent4 
var PORTB.5 
    Ent5 
var PORTB.1        
    Ent6 
var PORTB.2
    Ent7 
var PORTB.3
    Ent8 
var PORTB.4
    Ent9 
var PORTB.0  'interruption ext
        
    '
Sorties
    Sort1 
var PORTC.2
    Sort2 
var PORTC.1
    Sort3 
var PORTC.0
    Sort4 
var PORTA.6
    Sort5 
var PORTA.5
    Sort6 
var PORTA.4
    Sort7 
var PORTA.3
    Sort8 
var PORTA.2       
    LED 
var PORTA.7
    
    SCL 
var PORTC.3
    SDA 
var PORTC.4        


    CarteMax con 3
    Carte con 1
    
    Cli 
var bit                 ' Bit de clignottement (chien de garde)
    Bip var bit                 ' 
Bit plus rapide (Interruption de TMR0)

    
EntS var bit[cartemax*8]    ' nombre de carte max multiplié par nombre d'entrées
    
    i 
var byte
    X 
var byte[8]
    
T0 var byte                 ' Tempo clignottement
    T1 var byte                 ' 
Tempo de 255 centième de seconde (2 secondes)
    
T2 var byte                 ' Tempo de 255 secondes
    Entrees var byte            ' 
8 entrées de cette carte 
    I2CDATA 
var byte            ' Variable DATA pour I2C

    cli = 0                 
    bip = 0                 
    
    t0 = 0
    t1 = 0
    T2 = 0

    x(1)=127
    x(2)=63
    x(3)=31
    x(4)=15
    x(5)=7
    x(6)=3
    x(7)=1
    x(8)=0
    
    for i = 1 to 8*cartemax
        ents(i)=0              ' 
Mise à 0 des bits d'entrées des cartes
    next i
    
    On Interrupt Goto Int
    
    
    
Programme:

    
    led=cli
    
    
    goto Programme
    
    

  

'
Intéruptions_Intéruptions_Intéruptions_Intéruptions_Intéruptions_Intéruptions_Intéruptions_Intéruptions_Intéruptions_
     disable   
Int
:

    if 
intcon.2=1 then   'interruption tempo    TMR0
        intcon.2=0
        t0=t0+1
        t1=t1+1

        
        select case t0
            case 1
                bip=1
                cli=1
            case 32
                bip=0
            case 64
                bip=1
                cli=0
            case 96
                bip=0
            case 128
                t0=0
                t2=t2+1
        end select

    endif
    
    if PIR1.3 then    '
Flag de l'I2c
        '
write 0I2CDATA
        
'write 1, SSPCON1
        '
write 2SSPCON2
        sort1
=0    
        sort2
=0
        sort3
=0
        sort4
=0
        sort5
=0
        sort6
=0
        sort7
=0
        sort8
=0
            
while SSPSTAT.3 wend   ' attente du StartBit
            sort1=1
            while SSPSTAT.0 = 0 : wend   ' 
attente buffer plein 
                                  
' Le buffer est plein

            sort2=1                         ' 
led de contrôle N°1
                                     


            
            I2CDATA 
SSPBUF                ' lecture du registre de réception  '=191 ??? 10111111'
            write 3,i2cdata                 ' 
Ecriture de l'octet reçu à l'adresse 1
            sort4
=1                         ' led de contrôle
        PIR1.3=0
    endif
  


    
    if intcon.1=1  then    '
interruption RB0 

        intcon.1
=0  'RAZ de l'interruption B0'
    endif
        
    resume
    enable          
    End
'
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Communication entre deux PICs en I²C
Serge
Débutant
Débutant
Messages : 41
Enregistré en : septembre 2018

#47 Message par Serge » mar. 23 oct. 2018 11:40

Seule la led de la sortie1 s'allume quand le "Maitre" envoie la séquence I2C.

Communication entre deux PICs en I²C
Serge
Débutant
Débutant
Messages : 41
Enregistré en : septembre 2018

#48 Message par Serge » jeu. 25 oct. 2018 15:48

Bon, après bien des essais, je constate que cela fonctionne en mettant une diode sur la ligne SCL...+ vers l'esclave
C'est peut être un petit problème Hard alors....?
Je creuse autour de tout ça.

EN fait, rien ne devrait bloquer l'horloge après l'interruption du Start sur le Maitre.
Avec l'ajout des modules PCA9600, j'ai mes résistances de rappel au +12V que sur le pic maître mais dans un premier temps je ne vois pas ce que celà peut bien changer???
Je dois approfondir.

Communication entre deux PICs en I²C
Jérémy
Administrateur du site
Administrateur du site
Messages : 2229
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#49 Message par Jérémy » jeu. 25 oct. 2018 15:57

Bonjour ,

En I2C les résistances de tirage vers Vcc(pull-up) sont obligatoires !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Communication entre deux PICs en I²C
Serge
Débutant
Débutant
Messages : 41
Enregistré en : septembre 2018

#50 Message par Serge » jeu. 25 oct. 2018 16:40

Oui oui, je sais bien. si non comment aurions nous le niveau haut du signal.
Le problème n'est pas là, il s'agit au contraire d'une condition maintenue basse sur SCL...


Retourner vers « Langage BASIC & PASCAL »

Qui est en ligne

Utilisateurs parcourant ce forum : Bing [Bot], Google [Bot] et 4 invités