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 : Jérémy
Fonctions I2C
Fonctions I2C
Bon.. C'est franchement pas trop mal !!
. Cependant, j'ai un petit bug sur la fin.
J'ai fait un main avec un LCD pour voir l'évolution et le bus semble se bloquer après l'affichage de "Slave -r detect" Le programme se fige la dessus.
L'analyseur voit SDA a 0 et SCL a 1 tout le temps après l'affichage de ce message.
J'imagine que c'est mes while dans mes fonctions I2C qui fait figer tout ?
J'ai dû mettre aussi la fin de mon code en commentaires car sinon le lcd se clear complètement et le programme se fige aussi..
Mes fonctions pour la lecture te semble correct ou bien aurais-je mal compris la procédure après un restart ?
J'ai fait un main avec un LCD pour voir l'évolution et le bus semble se bloquer après l'affichage de "Slave -r detect" Le programme se fige la dessus.
L'analyseur voit SDA a 0 et SCL a 1 tout le temps après l'affichage de ce message.
J'imagine que c'est mes while dans mes fonctions I2C qui fait figer tout ?
J'ai dû mettre aussi la fin de mon code en commentaires car sinon le lcd se clear complètement et le programme se fige aussi..
Mes fonctions pour la lecture te semble correct ou bien aurais-je mal compris la procédure après un restart ?
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Fonctions I2C
En fait j'ai confondu avec un autre programme, il semble que tu n'ai pas utilisé du tout les registres ANSEL. Tous ces registres sont à 0xff au reset car les pins mixtes démarrent toutes en mode analogique. Pour la led il faut mettre la pin en numérique, et si cela marchait quand même sans cela, ce n'était pas le cas de l'I2C.
La fonction I2C2_ReadAddr(uint8_t addr) n'est pas à jour pour retourner correctement l'acknoledge.
Dans la fonction I2C2_ReadData(uint8_t ack) il faut mettre le bit IF à 0 avant de mettre RCEN à 1, et pour la suite les bits BF et IF sont-ils bien utilisés ?
Regarde le code que j'avais fait pour la carte de Pedro. J'abuse du bit IF, t'es pas obligé de faire pareil. En plus pas de blocage car je teste même le retour du start, là aussi t'es pas obligé de suivre
https://fantaspic.fr/viewtopic.php?f=36&t=1125
La fonction I2C2_ReadAddr(uint8_t addr) n'est pas à jour pour retourner correctement l'acknoledge.
Dans la fonction I2C2_ReadData(uint8_t ack) il faut mettre le bit IF à 0 avant de mettre RCEN à 1, et pour la suite les bits BF et IF sont-ils bien utilisés ?
Regarde le code que j'avais fait pour la carte de Pedro. J'abuse du bit IF, t'es pas obligé de faire pareil. En plus pas de blocage car je teste même le retour du start, là aussi t'es pas obligé de suivre
https://fantaspic.fr/viewtopic.php?f=36&t=1125
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par satinas le jeu. 24 juil. 2025 16:43, modifié 1 fois.
Fonctions I2C
J'ai bien utilisé Ansel pour l"I2C, dans la fonction init que j'ai donné ici, c'était d'ailleurs le bug initiale ^^
Je vais tenter de comprendre un peu le code donné ^^ Mais il, y a déjà pas mal de chose qui ne fonctionnera plus aujourd'hui, tout comme de nombreux code que j'ai pu trouvé sur internet ^^
Je vais tenter de comprendre un peu le code donné ^^ Mais il, y a déjà pas mal de chose qui ne fonctionnera plus aujourd'hui, tout comme de nombreux code que j'ai pu trouvé sur internet ^^
Fonctions I2C
Fonctions I2C
Fonctions I2C
Ca m'a l'air correct.
BIen que j'aime pas le debugger de MPLABX, il pourrait être utile. Ou alors tu affiches une valeur différente sur le lcd avant chaque while tueur, et tu pourras savoir où est le blocage.
C'est pourquoi je mets des codes retour d'erreur partout, cela sert surtout au développement pour déceler rapidement les anomalies, après cela sert plus à grand chose.
BIen que j'aime pas le debugger de MPLABX, il pourrait être utile. Ou alors tu affiches une valeur différente sur le lcd avant chaque while tueur, et tu pourras savoir où est le blocage.
C'est pourquoi je mets des codes retour d'erreur partout, cela sert surtout au développement pour déceler rapidement les anomalies, après cela sert plus à grand chose.
Fonctions I2C
Fonctions I2C
Fonctions I2C
Ton programme est ok, il faut juste le debugger, trouver le while qui boucle.
Le voilà mon while, je répète dans ton cas reste simple
Le voilà mon while, je répète dans ton cas reste simple
Code : Tout sélectionner
//------------------------------------------------------------------------------
bool I2c2WaitFlag(void)
//------------------------------------------------------------------------------
// bus i2c2, attente que le flag SSPIF passe à 1
//
// après SEN = 1, attente fin du start
// après RSEN = 1, attente fin du restart
// après PEN = 1, attente fin du stop
// après écriture SSPBUF, attente fin envoi octet et réception ack/nak
// après RCEN = 1, attente réception octet
// après ACKEN = 1, attente fin envoi ack/nak
{
unsigned int t=50000; // time-out 100ms
while (t--) {
if (PIR3bits.SSP2IF) return TRUE;
__delay_us(2);
}
return FALSE;
} Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 6 invités


