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
Salut!
J'ai essayé de développer ma propre bibliothèque I2C pour mplab V6.10 - XC8 V2.46. avec un PICKIT 3. Le forum microchip n'est pas des plus vivant et 100% anglais.. J'essaie ailleurs pour voir un peu si quelqu'un sait me répondre
Je voudrais connecter un pic18F46K22 à un DS1307 pour écrire l'heure puis la lire. Cependant, en tant que débutant, ce n'est pas forcément facile de le faire seul, j'ai déjà passé un très long moment pour comprendre l'I2C, traduire la doc, avoir un code qui compile, ... Je voudrais donc commencer par m'assurer que ma bibliothèque est correcte avant d'aller plus loin.
Oui car j'ai essayé de faire une communication mais cela semble fort silencieux, si déjà ma bibliothèque est correct, ça me fermera des portes ^^
J'ai fait il y a 6 ans une communication I2C mais en C18 ( et d'autres bricole comme UART, ...) mais bon.. C'est vieux et n'est plus à jour, je voudrais donc faire en XC8
J'aimerais savoir si quelqu'un pourrait jeter un œil à ma bibliothèque et me donner son avis. Est-ce exact ? Est-ce que ça devrait marcher ? Des problèmes ? J'ai créé cette bibliothèque moi-même en lisant la documentation Microchip pour le PIC18F46K22. J'ai mis mon fichier en pièce jointe.
Actuellement, je ne m'occupe pas des collisions de bus car je voulais commencer par une communication très simple : un maître et un seul esclave. Je serai très heureux si ça marche déjà ainsi et ferai évoluer cela après.. Une chose à la fois ^^
Merci d'avance pour votre aide, commentaires, avis et corrections !
Passez une bonne journée,
Cordialement,
Lucas.
J'ai essayé de développer ma propre bibliothèque I2C pour mplab V6.10 - XC8 V2.46. avec un PICKIT 3. Le forum microchip n'est pas des plus vivant et 100% anglais.. J'essaie ailleurs pour voir un peu si quelqu'un sait me répondre
Je voudrais connecter un pic18F46K22 à un DS1307 pour écrire l'heure puis la lire. Cependant, en tant que débutant, ce n'est pas forcément facile de le faire seul, j'ai déjà passé un très long moment pour comprendre l'I2C, traduire la doc, avoir un code qui compile, ... Je voudrais donc commencer par m'assurer que ma bibliothèque est correcte avant d'aller plus loin.
J'ai fait il y a 6 ans une communication I2C mais en C18 ( et d'autres bricole comme UART, ...) mais bon.. C'est vieux et n'est plus à jour, je voudrais donc faire en XC8
J'aimerais savoir si quelqu'un pourrait jeter un œil à ma bibliothèque et me donner son avis. Est-ce exact ? Est-ce que ça devrait marcher ? Des problèmes ? J'ai créé cette bibliothèque moi-même en lisant la documentation Microchip pour le PIC18F46K22. J'ai mis mon fichier en pièce jointe.
Actuellement, je ne m'occupe pas des collisions de bus car je voulais commencer par une communication très simple : un maître et un seul esclave. Je serai très heureux si ça marche déjà ainsi et ferai évoluer cela après.. Une chose à la fois ^^
Merci d'avance pour votre aide, commentaires, avis et corrections !
Passez une bonne journée,
Cordialement,
Lucas.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Fonctions I2C
Bonjour Lucas,
L'I2C a souvent été traité sur le site, par exemple ici viewtopic.php?f=10&t=1307
Ta bibliothèque est bien présentée, le meilleur moyen de savoir si elle est bonne, c'est de la faire tourner. Quand tu parles d'un fonctionnement silencieux, cela signifie t-il que tu disposes d'un oscillo, outil indispensable pour ce genre de mise au point.
Pour tester l'I2C je commence toujours par lancer une boucle qui fait start/stop, puis start/envoi adr+W/stop. A ce stade tu sais si le DS1307 répond. Ensuite on passe à l'envoi de data, puis réception de data.
L'instruction while(SSP2CON2bits.ACKSTAT); me semble un peu trop brutale. Si le DS13076 ne répond cela fait un beau blocage du programme. Il vaut mieux que la fonction retourne le bit ACKSTAT, ce qui permet de traiter le problème en amont après avoir fait le stop. Pour cela on met à 0 le bit SSP2IF avant d'écrire SS2BUF et SSP2IF passera à 1 après réception de l'acknoledge (9ème bit). Le bit BF lui passera a 1 au 8ème bit, donc avant l'acknoledge.
L'I2C a souvent été traité sur le site, par exemple ici viewtopic.php?f=10&t=1307
Ta bibliothèque est bien présentée, le meilleur moyen de savoir si elle est bonne, c'est de la faire tourner. Quand tu parles d'un fonctionnement silencieux, cela signifie t-il que tu disposes d'un oscillo, outil indispensable pour ce genre de mise au point.
Pour tester l'I2C je commence toujours par lancer une boucle qui fait start/stop, puis start/envoi adr+W/stop. A ce stade tu sais si le DS1307 répond. Ensuite on passe à l'envoi de data, puis réception de data.
L'instruction while(SSP2CON2bits.ACKSTAT); me semble un peu trop brutale. Si le DS13076 ne répond cela fait un beau blocage du programme. Il vaut mieux que la fonction retourne le bit ACKSTAT, ce qui permet de traiter le problème en amont après avoir fait le stop. Pour cela on met à 0 le bit SSP2IF avant d'écrire SS2BUF et SSP2IF passera à 1 après réception de l'acknoledge (9ème bit). Le bit BF lui passera a 1 au 8ème bit, donc avant l'acknoledge.
Modifié en dernier par satinas le dim. 20 juil. 2025 20:59, modifié 1 fois.
Fonctions I2C
Merci beaucoup pour ta réponse.
En comparant le code, ils me semblent similaire (dans la logique de prog), je suis assez fière de moi ahah, j'avais un peu peur avec toute la doc microchip étant débutant..
J'ai appliqué également ta remarque qui est vrai, ce sera plus robuste sans le while, merci !! :)
Je n'ai pas d'oscilloscope malheureusement non, je fais avec ce que j'ai sous la main, des leds, un lcd, des tempo, ... un peu léger mais bon
Un peu deçu, j'étais sûr que le souci venait de ma bibliothèque. En fait, j'ai un circuit simple, un pic18F46K22, un DS1307. Sauf que je n'ai jamais réussi a communiquer avec lui.. J'ai fait un code très simple, un scan d'adresse et si réponse il y a, il allume la led, mais chaque adresse allume ma led, pourtant je n'ai que le DS1307 en 0x68 et c'est tout..
Par hasard, quelque chose choque dans ce que j'ai fait dans le fichier ci-joint ? Je joins le code du main si tu as l'occassion de regarder un peu, toi ou une autre âme tout aussi sympathique ! ^^
Niveau électronique physique, pour moi cela devrait être ok car j'ai déjà fait des com I2C, UART, ... Mais en C18 il y a 6-7 ans et cela fonctionnait. La carte n'a pas bougé depuis et est stockée dans une boite hermétique, à l'abri de la lumière, chaleur, humidité ^^ Je joins mon schématique si tu veux ^^
En comparant le code, ils me semblent similaire (dans la logique de prog), je suis assez fière de moi ahah, j'avais un peu peur avec toute la doc microchip étant débutant..
J'ai appliqué également ta remarque qui est vrai, ce sera plus robuste sans le while, merci !! :)
Je n'ai pas d'oscilloscope malheureusement non, je fais avec ce que j'ai sous la main, des leds, un lcd, des tempo, ... un peu léger mais bon
Un peu deçu, j'étais sûr que le souci venait de ma bibliothèque. En fait, j'ai un circuit simple, un pic18F46K22, un DS1307. Sauf que je n'ai jamais réussi a communiquer avec lui.. J'ai fait un code très simple, un scan d'adresse et si réponse il y a, il allume la led, mais chaque adresse allume ma led, pourtant je n'ai que le DS1307 en 0x68 et c'est tout..
Par hasard, quelque chose choque dans ce que j'ai fait dans le fichier ci-joint ? Je joins le code du main si tu as l'occassion de regarder un peu, toi ou une autre âme tout aussi sympathique ! ^^
Niveau électronique physique, pour moi cela devrait être ok car j'ai déjà fait des com I2C, UART, ... Mais en C18 il y a 6-7 ans et cela fonctionnait. La carte n'a pas bougé depuis et est stockée dans une boite hermétique, à l'abri de la lumière, chaleur, humidité ^^ Je joins mon schématique si tu veux ^^
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Fonctions I2C
Fonctions I2C
Fonctions I2C
Il te faut un oscilloscope, sinon il y a Arduino 
Si tu viens visiter Paris, tu y gagneras un oscilloscope analogique au choix.
Je n'ai pas ta nouvelle fonction write, donc difficile de répondre, si tu lis l'acknoledge trop tôt, ça ne marchera pas.
Est ce que tu as mis des leds sur SCL/SDA et est ce qu'elles changent d'état ?
Pourquoi ne pas rester en C18, MPLAB et MPLABX supportent C18.
Si tu viens visiter Paris, tu y gagneras un oscilloscope analogique au choix.
Je n'ai pas ta nouvelle fonction write, donc difficile de répondre, si tu lis l'acknoledge trop tôt, ça ne marchera pas.
Est ce que tu as mis des leds sur SCL/SDA et est ce qu'elles changent d'état ?
Pourquoi ne pas rester en C18, MPLAB et MPLABX supportent C18.
Fonctions I2C
A défaut d'un oscilloscope, tu peux peut-être t'offrir un petit analyseur logique chinois à 5€. Ce modèle fonctionne très bien couplé avec l'excellent logiciel "Logic 2" édité par SALEAE (gratuit). C'est même plus pratique qu'un oscillo pour décoder le I2C et le SPI.
L'essayer c'est l'adopter
L'essayer c'est l'adopter
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Fonctions I2C
Bonjour ! :)
A vrai dire, je ne veux pas d'arduino.. Le projet complet est destiné à être sous tension et fonctionner 24H/24 7j/7. Je ne suis pas du tout un pro mais j'ai plus confiance aux pics qu'Arduino et puis c'est bien plus satisfaisant de faire son propre PCB, ... ^^
Pour le C18, tout simplement car cela fait très longtemps que je n'ai plus pratiquer et que c'est aussi frais dans ma tête que le XC8
C18 n'étant plus à jour depuis 13 ou 14 ans il me semble, je voulais me mettre un peu à jour avec ce qui se fait aujourd'hui ou du moins, plus récemment ^^
Je pense pas venir sur Paris prochainement
Cependant merci beaucoup pour la proposition !!
Mais s'il faut que j'achète un oscillo, je le ferai ^^ J'avais vu celui-ci qui semblait bien le SDS1104X-E de siglent. Ou alors l'analyseur logique dont gwion parle ou les 2 ^^
J'ai mis un une led sur SDA --> GND et SCL --> GND, la led s'allume mais ne varie pas. Je ne m'attendais pas non plus à une variation à vrai dire, je pense que cela change vraiment très vite pour que ce soit perceptible, non ?
J'ai modifié mes fonctions I2C, j'ai donc modifié le while dont tu as parlé au tout début et ici j'ai inclus dans la fonctions WriteData et WriteAddr le flag que tu as parlé dernièrement. J'ai boot sur la carte et ça change un peu, je suis passé de j'ai apparament une réponse sur toutes les adresses même celle ou il n'y a pas d'esclave à je ne reçois plus aucune réponse de personne
A vrai dire, je ne veux pas d'arduino.. Le projet complet est destiné à être sous tension et fonctionner 24H/24 7j/7. Je ne suis pas du tout un pro mais j'ai plus confiance aux pics qu'Arduino et puis c'est bien plus satisfaisant de faire son propre PCB, ... ^^
Pour le C18, tout simplement car cela fait très longtemps que je n'ai plus pratiquer et que c'est aussi frais dans ma tête que le XC8
Je pense pas venir sur Paris prochainement
J'ai mis un une led sur SDA --> GND et SCL --> GND, la led s'allume mais ne varie pas. Je ne m'attendais pas non plus à une variation à vrai dire, je pense que cela change vraiment très vite pour que ce soit perceptible, non ?
J'ai modifié mes fonctions I2C, j'ai donc modifié le while dont tu as parlé au tout début et ici j'ai inclus dans la fonctions WriteData et WriteAddr le flag que tu as parlé dernièrement. J'ai boot sur la carte et ça change un peu, je suis passé de j'ai apparament une réponse sur toutes les adresses même celle ou il n'y a pas d'esclave à je ne reçois plus aucune réponse de personne
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Fonctions I2C
L'analyseur logic que tu m'as montré me parlait pas mal, j'ai fouillé dans mes boites et... Ben j'en ai un
J'ai branché et.... Silence radio (Ce qui correspond à pourquoi ma led ne s'allume plus jamais pendant le scan).
J'ai mis sur GND pendant le scan une fois (pas sur ce screen) et le signal varie bien donc je dirais que l'analyseur fonctionne.
Cependant, la je comprend pas pourquoi je ne vois pas au moins un start, un essai, quelque chose...
Je remet mon main vu que vous avez déjà l'I2C ^^
J'ai branché et.... Silence radio (Ce qui correspond à pourquoi ma led ne s'allume plus jamais pendant le scan).
J'ai mis sur GND pendant le scan une fois (pas sur ce screen) et le signal varie bien donc je dirais que l'analyseur fonctionne.
Cependant, la je comprend pas pourquoi je ne vois pas au moins un start, un essai, quelque chose...
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Fonctions I2C
Bonjour,
A ta place je travaillerais de façon méthodique et progressive.
D'abord sans la DS1307 faire une boucle 1000ms / start / 500ms / stop, et tu devrais voir les leds SCL et SDA clignoter.
Ensuite la boucle envoie en plus adresse+W sans se préoccuper de l'acknoledge reçu.
En baissant la vitesse I2C et en envoyant soit 0x00 soit 0xFE, on doit voir la différence sur la led SDA.
En espérant que les leds ne gênent pas trop la liaison I2C, pour les essais avec le DS1307 il vaut mieux les enlever.
C'est tout de même plus simple avec l'analyseur logique. Pour vérifier d'abord l'horloge système, fais clignoter une led et vérifie avec l'analyseur. C'est toujours bon d'avoir une led clignotante dans un coin qui indique que le programme n'est pas dans les choux.
A ta place je travaillerais de façon méthodique et progressive.
D'abord sans la DS1307 faire une boucle 1000ms / start / 500ms / stop, et tu devrais voir les leds SCL et SDA clignoter.
Ensuite la boucle envoie en plus adresse+W sans se préoccuper de l'acknoledge reçu.
En baissant la vitesse I2C et en envoyant soit 0x00 soit 0xFE, on doit voir la différence sur la led SDA.
En espérant que les leds ne gênent pas trop la liaison I2C, pour les essais avec le DS1307 il vaut mieux les enlever.
C'est tout de même plus simple avec l'analyseur logique. Pour vérifier d'abord l'horloge système, fais clignoter une led et vérifie avec l'analyseur. C'est toujours bon d'avoir une led clignotante dans un coin qui indique que le programme n'est pas dans les choux.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités


