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 ---
Problème de séquence I2C entre deux PIC
Problème de séquence I2C entre deux PIC
Problème de séquence I2C entre deux PIC
Problème de séquence I2C entre deux PIC
Problème de séquence I2C entre deux PIC
Je réfléchis à un truc...
J'ai allumé une led en début de l'interruption de l'esclave, et je l'éteint en fin de l'interruption. (comme tu m'as suggéré)
Et je constate en fait, que la led clignote au rythme de 1/10 seconde allumée, et 1/2 seconde éteinte. (environ)
Ce qui correspond bien aux séquences vues à l'oscillo.
Cette fois, je n'ai plus de ckp pour le traitement, et de toute façon mes signaux SCL/SDA remontent bien après chaque séquence de 1,5ms.
Donc mon CKP ne bloque plus rien. Le bus est libre !
Si le bus est libre, c'est bien le "maitre" qui ne réagit pas alors qu'il est dans une boucle de 10 ms !!!
il n'a plus d'interruption INTCON.7=0 INTCON.6=0 INTCON.5=0
Il boucle avant d'entrer dans le programme principal sur :
do while 1
gosub sorties_cm
pause 10 ' ( pause 1 ou pas de pose, c'est pareil !)
loop
J'obtient toujours des séquences séparées d'une demie seconde.
J'ai allumé une led en début de l'interruption de l'esclave, et je l'éteint en fin de l'interruption. (comme tu m'as suggéré)
Et je constate en fait, que la led clignote au rythme de 1/10 seconde allumée, et 1/2 seconde éteinte. (environ)
Ce qui correspond bien aux séquences vues à l'oscillo.
Cette fois, je n'ai plus de ckp pour le traitement, et de toute façon mes signaux SCL/SDA remontent bien après chaque séquence de 1,5ms.
Donc mon CKP ne bloque plus rien. Le bus est libre !
Si le bus est libre, c'est bien le "maitre" qui ne réagit pas alors qu'il est dans une boucle de 10 ms !!!
il n'a plus d'interruption INTCON.7=0 INTCON.6=0 INTCON.5=0
Il boucle avant d'entrer dans le programme principal sur :
do while 1
gosub sorties_cm
pause 10 ' ( pause 1 ou pas de pose, c'est pareil !)
loop
J'obtient toujours des séquences séparées d'une demie seconde.
Problème de séquence I2C entre deux PIC
Je m’aperçois qu'en fait le test du bus libre n'est pas bon !
C'est lui qui génère un temps au début de chaque séquence et qui fini par sortir par la tempo "At" qui déborde.
En fait, le test :
if (SSPCON2<<3)+SSPSTAT.2=0 then , n'est jamais vrais !
et il sort par la tempo de débordement "At"
Pourtant le bus est libre !, mais ce test ne le voit pas.
Grace à ta méthode, je crois qu'on avance...
Merci.
C'est lui qui génère un temps au début de chaque séquence et qui fini par sortir par la tempo "At" qui déborde.
En fait, le test :
if (SSPCON2<<3)+SSPSTAT.2=0 then , n'est jamais vrais !
et il sort par la tempo de débordement "At"
Pourtant le bus est libre !, mais ce test ne le voit pas.
Grace à ta méthode, je crois qu'on avance...
Merci.
Problème de séquence I2C entre deux PIC
Bonjour
Quand je parlais de ne pas bloquer le bus, cela ne voulait pas dire laisser CKP à 0, mais le mettre à 1 le plus tôt possible pour ne jamais faire attendre le maître. Lors de mes anciens tests, il fallait le mettre à 1 même si le clock stretching n'était pas activé.
Dans le sous-programme buslibre, tu peux tester les bits d'erreurs i2c en même temps que les autres bits, pas au bout d'un "certain temps", et s'il y a erreur, on arrête tout.
Effectivement mon test est encore trop avancé, il faut commencer par une boucle d'envoi de la séquence par le maître avec personne en face, en ne tenant pas compte des NAK reçus.
Quand je parlais de ne pas bloquer le bus, cela ne voulait pas dire laisser CKP à 0, mais le mettre à 1 le plus tôt possible pour ne jamais faire attendre le maître. Lors de mes anciens tests, il fallait le mettre à 1 même si le clock stretching n'était pas activé.
Dans le sous-programme buslibre, tu peux tester les bits d'erreurs i2c en même temps que les autres bits, pas au bout d'un "certain temps", et s'il y a erreur, on arrête tout.
Effectivement mon test est encore trop avancé, il faut commencer par une boucle d'envoi de la séquence par le maître avec personne en face, en ne tenant pas compte des NAK reçus.
Problème de séquence I2C entre deux PIC
- paulfjujo
Expert- Messages : 2598
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour
un sujet pationnant que je suis ..de loin
galerant avec un 18F27K42 dont l'I2C hardware est vraiment compliqué !
vu le nombre de flag pouvant generer une interruption ..
en C, ça bloquerai ici :
if (SSPCON2<<3)+SSPSTAT.2==0
je rajouterai meme une parenthese au cas ou
if ( (SSPCON2<<3)+SSPSTAT.2==0)
utiliser un masque ((AND) sur SSPCON2 au lieu d'un decalage à gauche ?
SGDG !
juste pour vous apporter un soutien ..moral
Serge a écrit : .......
En fait, le test :
if (SSPCON2<<3)+SSPSTAT.2=0 then , n'est jamais vrais !
....
un sujet pationnant que je suis ..de loin
galerant avec un 18F27K42 dont l'I2C hardware est vraiment compliqué !
vu le nombre de flag pouvant generer une interruption ..
en C, ça bloquerai ici :
if (SSPCON2<<3)+SSPSTAT.2==0
je rajouterai meme une parenthese au cas ou
if ( (SSPCON2<<3)+SSPSTAT.2==0)
utiliser un masque ((AND) sur SSPCON2 au lieu d'un decalage à gauche ?
SGDG !
juste pour vous apporter un soutien ..moral
Modifié en dernier par paulfjujo le mer. 12 août 2020 08:13, modifié 1 fois.
Problème de séquence I2C entre deux PIC
Problème de séquence I2C entre deux PIC
Bonjour à tous.
Juste pour info:
J'ai fais un essais sans tester le bus libre, et ça pédale à fond sans la moindre "latence".
Sauf biensûr que ça se termine à un moment donné par l'erreur "Owerflow" SSPCON1.6 ! Normal....
Nous somme bien sur le problème.
Reste maintenant à trouver la bonne syntaxe de ce test du bus libre ....
Je vais corriger dans un premier temps comme le montre Pauljujo
Juste pour info:
J'ai fais un essais sans tester le bus libre, et ça pédale à fond sans la moindre "latence".
Sauf biensûr que ça se termine à un moment donné par l'erreur "Owerflow" SSPCON1.6 ! Normal....
Nous somme bien sur le problème.
Reste maintenant à trouver la bonne syntaxe de ce test du bus libre ....
Je vais corriger dans un premier temps comme le montre Pauljujo
Retourner vers « Le forum Fantas-PIC »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 92 invités