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
Euuuu, oui !
Petite erreur de config sur le Slave.
j'ai corrigé le SSPCON1 comme suit sur le Slave:
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 = 0 '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.
et cette fois, je reste bloqué sur le Start.
Le Maitre n'envoie plus l'adresse.
L'esclave retourne toujours $88 pour le registre SSPSTAT,
les deux SDL et SDA sont à 0V et demeurent ainsi.
Petite erreur de config sur le Slave.
j'ai corrigé le SSPCON1 comme suit sur le Slave:
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 = 0 '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.
et cette fois, je reste bloqué sur le Start.
Le Maitre n'envoie plus l'adresse.
L'esclave retourne toujours $88 pour le registre SSPSTAT,
les deux SDL et SDA sont à 0V et demeurent ainsi.
Communication entre deux PICs en I²C
Communication entre deux PICs en I²C
TXSTA.4 = 1 'SYNC Transmission Synchrone'i2c ou asynchrone =0 UART ou SPI
TXSTA concerne le mode synchrone du module EUSART, il n'a rien à voir avec l'i2c et le spi
2 résistances de 4,7k sur scl/sda vers Vdd.
Tu devrais tester avec un programme simple qui fait le minimum, sans utiliser les interruptions.
Pour vérifier à l'oscillo que le slave acquitte bien son adresse.
Pour le master :
SSPADD = $27
SSPCON1 = $28
gosub I2CSTART
gosub I2CWR -> $40
gosub I2CWR -> $55
gosub I2CSTOP
Pour le slave :
SSPADD = $40
SSPCON1 = $26
Communication entre deux PICs en I²C
Communication entre deux PICs en I²C
Communication entre deux PICs en I²C
- paulfjujo
Expert- Messages : 2598
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
on la fixe soi meme ...
exemple dialogue entre 2 PIC 16F1847
mais pour l'instant je n'ai pas eu de cas concret pour appliquer ce genre de liaison ( courte !)
Gérard a écrit :J'ai juste une question : comment sait-on l'adresse I2C d'un PIC esclave?
Désolé, ça ne fait pas avancer le problème.
on la fixe soi meme ...
exemple dialogue entre 2 PIC 16F1847
mais pour l'instant je n'ai pas eu de cas concret pour appliquer ce genre de liaison ( courte !)
Communication entre deux PICs en I²C
Communication entre deux PICs en I²C
satinas a écrit :TXSTA.4 = 1 'SYNC Transmission Synchrone'i2c ou asynchrone =0 UART ou SPI
TXSTA concerne le mode synchrone du module EUSART, il n'a rien à voir avec l'i2c et le spi
2 résistances de 4,7k sur scl/sda vers Vdd.
Tu devrais tester avec un programme simple qui fait le minimum, sans utiliser les interruptions.
Pour vérifier à l'oscillo que le slave acquitte bien son adresse.
Pour le master :
SSPADD = $27
SSPCON1 = $28
gosub I2CSTART
gosub I2CWR -> $40
gosub I2CWR -> $55
gosub I2CSTOP
Pour le slave :
SSPADD = $40
SSPCON1 = $26
Bonjour.
Alors Pour ce qui est des résistances de rappel, je suis sur des valeurs bien différentes, car j'utilise un PCA9600 derrière la sortie du PIC afin de faire une liaison beaucoup plus longue (20m environ). sur le 5V du PIC j'ai des 750 homs.
Pas d’inquiétude de ce côté, je suis en 12V et mes résistances font 2,2K. Ce principe fonctionne parfaitement avec des bibliothèques I2C pour un Raspberry que j'ai déjà fait tourner (3,3V en entrée et 12V en sortie) sur cette distance. Si tu regarde bien la photo du signal que j'ai envoyé plus haut, tu verras que je suis bien en 12V (J'aurais voulu être en 24V, pour d'autres raisons, mais le PCA9600 ne supporte pas. 15V max).
Pour ce qui est du Soft, je fais encore quelques essais et je reviens...
Communication entre deux PICs en I²C
Communication entre deux PICs en I²C
Bonjour.
Alors, voilà:
J'ai beau essayer de toutes les manières, y compris sans interruption, je suis toujours bloqué à la condition "Start"
Si je débranche SCL, ma carte Maitre envoie le start, et enchaine sur l'adresse sans problème, mais dès que je branche SDL, la carte "Esclave" maintient SDL niveau bas après le "Start" de la carte Maitre, ce qui empêche la carte maitre d'enchainer sur l'adresse.
Pourtant cette fois ma carte esclave est (a priori) bien configurée.
Voici mon dernier essais:
Alors, voilà:
J'ai beau essayer de toutes les manières, y compris sans interruption, je suis toujours bloqué à la condition "Start"
Si je débranche SCL, ma carte Maitre envoie le start, et enchaine sur l'adresse sans problème, mais dès que je branche SDL, la carte "Esclave" maintient SDL niveau bas après le "Start" de la carte Maitre, ce qui empêche la carte maitre d'enchainer sur l'adresse.
Pourtant cette fois ma carte esclave est (a priori) bien configurée.
Voici mon dernier essais:
Code : Tout sélectionner
if PIR1.3 then 'Flag de l'I2c
'I2CDATA = SSPSTAT
'write 0, I2CDATA
sort1=0
sort2=0
sort3=0
sort4=0
sort5=0
sort6=0
sort7=0
sort8=0
SSPCON2.3 = 1 ' Mode réception
WHILE SSPCON2.3 = 1 : WEND ' Attente réception complète
sort6=1 ' led de contrôle
I2CDATA = SSPBUF ' lecture du registre de réception
write 1,i2cdata ' Ecriture de l'octet reçu à l'adresse 0
PIR1.3=0
endif
Retourner vers « Langage BASIC & PASCAL »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 100 invités