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 ---
- 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 ---
Modérateur : Gérard
Communication entre deux PICs en I²C
Communication entre deux PICs en I²C
Communication entre deux PICs en I²C
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)
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
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
Pour le Slave
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
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....
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
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:0> pins are configured as digital I/O on Reset
CONFIG LPT1OSC = OFF ; Timer1 configured for higher power operation
CONFIG MCLRE = ON ; MCLR pin enabled; RE3 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 100KHz) Incompatible 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 1= Sé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 Synchrone: 1= Enable 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 bit, CREN)
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 ' SMP: Controle de la vitesse du bus: 1=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/A: Data/Address en mode Maitre: (réservé). en esclave: 1=dernier byte reçu ou transmis=DATA si non 0= Adresse
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 ' UA: Update Address bit (10-Bit Slave mode only) 1=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 1= SSPBUF 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
' Esclave: 1= le registre SSPBUF est écrit en transmission non finie (erreur) effacer le bit par soft
SSPCON1.6 = 0 'SSPOV Réception: 1= SSPBUF contient toujours un octet tandis qu'il en reçois un autre. (erreur) effacer le bit par soft
' Transmission: 1= Sans importance.
SSPCON1.5 = 1 'SSPEN 1= I2c 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: 1= Non 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 mode, 7-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 mode, clock = FOSC/(4 * (SSPADD + 1))
'0111 = I2C Slave mode, 10-bit address
'0110 = I2C Slave mode, 7-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(0000h) réception dans le SSPSR si=0 Desable l'appel générale
SSPCON2.6 = 0 'ACKSTAT Transmission Maitre seulement 1= pas d'acknowledge reçu de l'esclave 0= acknowledge reçu
SSPCON2.5 = 0 'ACKDT En Réception Maitre seulement 1= Pas d'acknowledge 0= acknowledge
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 1= Enable 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 1= Condition Repeated START sur SDA et SCL 0= libre (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 '0= sortie
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/GIE: Interruptions Périphériques Enabled
INTCON.5 = 1 'TMR0IE: Interruption Compteur_0 Overflow Enabled
INTCON.4 = 1 'INT0IE: Interruptions Externes Enabled (B0 ?)
INTCON.3 = 0 'RBIE: Interruption Ports "B" Enabled (B7-4 ?)
INTCON.2 = 0 'TMR0IF: Flag de TMR0
INTCON.1 = 0 'INT0IF: Flag Interruptions externes (B0 ?)
INTCON.0 = 0 'RBIF: Flag Interruptions des ports B_7-4
INTCON2.7 = 1 'RBPU: PullUp du Port B Desabled (=1) sur les 8 bits
INTCON2.6 = 1 'INTEDG0: Interruption de B0 sur front Montant
INTCON2.5 = 0 'INTEDG1: Interruption de B1 sur front Montant
INTCON2.4 = 0 'INTEDG2: Interruption de B2 sur front Montant
INTCON2.3 = 0 '=0
INTCON2.2 = 0 'TMR0IP: Priorité de TMR0 (1=Haute)
INTCON2.1 = 0 '=0
INTCON2.0 = 0 'RBIP: Priorité 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=0
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 7) détermine si Niveau d'interruption
'RCON.7=0 ' Prise en compte du niveau d'interruption si=1 (la led ne clignotte plus si =1)
WHILE OSCCON.2=0 : 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 0, I2CDATA
'write 1, SSPCON1
'write 2, SSPCON2
sort1=0
sort2=0
sort3=0
sort4=0
sort5=0
sort6=0
sort7=0
sort8=0
while SSPSTAT.3 = 0 : 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
Communication entre deux PICs en I²C
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.
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
Retourner vers « Langage BASIC & PASCAL »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 28 invités