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
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#31 Message par Serge » ven. 28 sept. 2018 11:03

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.

Communication entre deux PICs en I²C
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#32 Message par Serge » ven. 28 sept. 2018 11:12

J'ajoute que si je "resette" l'esclave, je libère le "Start" et le Maitre envoie l'adresse.
(sans suite derrière)

Communication entre deux PICs en I²C
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#33 Message par satinas » ven. 28 sept. 2018 15:22

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
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#34 Message par Serge » ven. 28 sept. 2018 20:44

Oui, je ne sais pas pourquoi j'ai interprété TXSTA comme ça en I2C...?
J'ai du lire quelque-chose en l'interprétant de travers.

Je vais modifier et t'envoyer mon code.

Merci pour ta patience.

Communication entre deux PICs en I²C
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#35 Message par Gérard » sam. 29 sept. 2018 17:47

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.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Communication entre deux PICs en I²C
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#36 Message par paulfjujo » sam. 29 sept. 2018 18:32

bonjour,


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 !)
Aide toi, le ciel ou FantasPic t'aidera

Communication entre deux PICs en I²C
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#37 Message par Gérard » sam. 29 sept. 2018 20:29

Et une fois de plus, Paul a la solution.
Merci ! à lui.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Communication entre deux PICs en I²C
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#38 Message par Serge » dim. 30 sept. 2018 17:15

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
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#39 Message par Serge » dim. 30 sept. 2018 17:28

Non, j'ai écrit une bêtise.

2,2K sur le 5V du PIC SDA et SCL,
et 750 ohms sur le 12V du PCA9600, ou les courants sont plus forts...

Communication entre deux PICs en I²C
Serge
Amateur
Amateur
Messages : 163
Enregistré en : septembre 2018

#40 Message par Serge » mer. 3 oct. 2018 17:26

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:

Code : Tout sélectionner

    if PIR1.3 then    'Flag de l'I2c
        
'I2CDATA = SSPSTAT
        '
write 0I2CDATA
        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 28 invités