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
Carte électronique, com crash
Bonjour,
Tout d'abord, mes meilleurs voeux !!
J'ai un petit souci avec ma carte électronique. J'ai réalisé une carte électronique avec notamment un DS3231 et un 24FC1026 dessus. L'I2C était au top et tout ce qui a autour également ! :)
Seulement, j'ai décidé de rajouter des choses notamment avec un menu, une gestion de la température, ... Une fois envoyé sur la carte électronique, tout fonctionne même les nouveautés, mais seulement, l'I2C plante systématiquement dès le début et j'obtient pour la date 165/165/2016 et pareil pour l'heure 165h 165min ... (et pas d'incrémentation de l'heure, même via le menu, impossible de la régler alors qu'avant ça allait). J'ai essayé de setup une heure au démarrage mais rien n'y fait, cela reste a 165 partout.
J'avoue ne pas trop comprendre pour le coup. J'ai vérifié la continuité des pistes SDA SCL et elles sont bien continues du PIC vers chaque esclave (R presque nul), les résistances de pullup sont ok et bien a 4,7kohms, 5V stable, pas de c-c entre SDA SCL.
Tout fonctionne, hormis la communication I2C avec le DS3231 et le 24FC1026. Ce qui est d'autant plus étrange car je n'ai pas modifié l'I2C normalement..
Si quelqu'un pouvait m'éclairer je lui en serait très reconnaissant car je ne parviens pas à résoudre ce souci, souci étant le dernier du projet avant de pouvoir le cloturer définitivement...
Je met en pièce jointe le schéma de principe de ma carte électronique et tout mon programme complet si besoin.
En espérant que quelqu'un comprenne le souci ou puisse au moins m'aiguiller..
Merci d'avance,
Stefox.
Tout d'abord, mes meilleurs voeux !!
J'ai un petit souci avec ma carte électronique. J'ai réalisé une carte électronique avec notamment un DS3231 et un 24FC1026 dessus. L'I2C était au top et tout ce qui a autour également ! :)
Seulement, j'ai décidé de rajouter des choses notamment avec un menu, une gestion de la température, ... Une fois envoyé sur la carte électronique, tout fonctionne même les nouveautés, mais seulement, l'I2C plante systématiquement dès le début et j'obtient pour la date 165/165/2016 et pareil pour l'heure 165h 165min ... (et pas d'incrémentation de l'heure, même via le menu, impossible de la régler alors qu'avant ça allait). J'ai essayé de setup une heure au démarrage mais rien n'y fait, cela reste a 165 partout.
J'avoue ne pas trop comprendre pour le coup. J'ai vérifié la continuité des pistes SDA SCL et elles sont bien continues du PIC vers chaque esclave (R presque nul), les résistances de pullup sont ok et bien a 4,7kohms, 5V stable, pas de c-c entre SDA SCL.
Tout fonctionne, hormis la communication I2C avec le DS3231 et le 24FC1026. Ce qui est d'autant plus étrange car je n'ai pas modifié l'I2C normalement..
Si quelqu'un pouvait m'éclairer je lui en serait très reconnaissant car je ne parviens pas à résoudre ce souci, souci étant le dernier du projet avant de pouvoir le cloturer définitivement...
Je met en pièce jointe le schéma de principe de ma carte électronique et tout mon programme complet si besoin.
En espérant que quelqu'un comprenne le souci ou puisse au moins m'aiguiller..
Merci d'avance,
Stefox.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par Stefox le dim. 11 janv. 2026 08:51, modifié 2 fois.
Carte électronique, com crash
Bonjour,
Est-ce que le problème vient de l'évolution du matériel ou de celle du logiciel ?
Est-ce que tu as gardé des anciennes versions du logiciel qui fonctionnaient bien ?
Ne pas oublier de zipper le dossier projet régulièrement en incrémentant le nom du zip.
int tps_Cycle; if (tps_Cycle > 500000) ...
Traite tous les warnings de compilation qui sont souvent des annonces d'erreur, quelle est la taille d'un int dans xc8 ? A moins que tu voulais inhiber le time-out, alors pourquoi en mettre un ?
Parfois TimeSetting() et dateSetting() ne retournent pas le bool.
C'est un exemple, il y en a d'autres, tu vis dangereusement. :)
Reste à remplir le vide par du code, remonter l'erreur par un bool, et afficher l'erreur sur le port série. Tu gagnerais, au moins au départ en phase debug, à ajouter à la fin de chaque fonction d'écriture i2c une lecture pour vérifier que cela s'est bien passé.
Ne pas mélanger les int, uint8_t, uint16_t, int16_t, modifie ainsi :
uint8_t readRTC(uint8_t addr, uint8_t reg, bool ack);
uint8_t transformData = dec2bcd(data);
uint16_t RestoreCode;
uint8_t hoursSetting = 0;
uint8_t minSetting = 0;
uint8_t secSetting = 0;
J'arrête là, il y a encore plein de warnings.
Est-ce que le problème vient de l'évolution du matériel ou de celle du logiciel ?
Est-ce que tu as gardé des anciennes versions du logiciel qui fonctionnaient bien ?
Ne pas oublier de zipper le dossier projet régulièrement en incrémentant le nom du zip.
int tps_Cycle; if (tps_Cycle > 500000) ...
Traite tous les warnings de compilation qui sont souvent des annonces d'erreur, quelle est la taille d'un int dans xc8 ? A moins que tu voulais inhiber le time-out, alors pourquoi en mettre un ?
Parfois TimeSetting() et dateSetting() ne retournent pas le bool.
Code : Tout sélectionner
void writeRTC(uint8_t addr, uint8_t reg, uint8_t data)
...
if (I2C2_WriteAddr(addr) != 1)
{
}Reste à remplir le vide par du code, remonter l'erreur par un bool, et afficher l'erreur sur le port série. Tu gagnerais, au moins au départ en phase debug, à ajouter à la fin de chaque fonction d'écriture i2c une lecture pour vérifier que cela s'est bien passé.
Ne pas mélanger les int, uint8_t, uint16_t, int16_t, modifie ainsi :
uint8_t readRTC(uint8_t addr, uint8_t reg, bool ack);
uint8_t transformData = dec2bcd(data);
uint16_t RestoreCode;
uint8_t hoursSetting = 0;
uint8_t minSetting = 0;
uint8_t secSetting = 0;
J'arrête là, il y a encore plein de warnings.
Carte électronique, com crash
- paulfjujo

Maître- Messages : 3260
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
erreur de commentaire ?
je suppose que cela concerne l'alarme 1 A1M1,2,3
ATTENTION bit MSB 7 à 1
writeRTC(SLAVE_DS_ADRESS, 0x07, 0x80); // AL. seconde
Code : Tout sélectionner
Lcd_Write_Centered("Set A2F", 2);
__delay_ms(150);
writeRTC(SLAVE_DS_ADRESS, 0x07, 0x00); // seconde
__delay_ms(5);
writeRTC(SLAVE_DS_ADRESS, 0x08, 0x00); // minute
__delay_ms(5);
writeRTC(SLAVE_DS_ADRESS, 0x09, 0x00); // heure
__delay_ms(5);
writeRTC(SLAVE_DS_ADRESS, 0x0A, 0x00); // jour/date = ignore erreur de commentaire ?
je suppose que cela concerne l'alarme 1 A1M1,2,3
ATTENTION bit MSB 7 à 1
writeRTC(SLAVE_DS_ADRESS, 0x07, 0x80); // AL. seconde
Carte électronique, com crash
Je pense que cela vient depuis l'upgrade logiciel car les connexions I2C sont assez simple, je peux te donner une vue du PCB si tu veux, je les ai testé au multi et tout est ok.
J'ai fait une carte électronique simple et je l'ai testé (DS3231 et 24FC1026 fonctionnel au top) j'ai laissé tourné la carte H24 pendant un gros mois en jouant régulièrement avec. Tout était niquel
J'ai donc upgrade (sans backup, pas très malin, je l'admet
) en re-créant la carte mais en rajoutant des mosfet logique pour des résistances chauffantes et des petites choses comme ça utile pour mon boîtier. J'ai aussi améliorer du coup le code mais aucune raison de toucher a l'I2C, je ne pense pas avoir fait une modification dessus..
Depuis que ce soit sur la première carte ou la seconde, tout fonctionne hormis l'I2C donc pas de com avec le DS3231 et le 24FC1026.
J'ai passé l'analyseur logique et silence radio car j'ai pensé a metttre une pin femelle en // sur les lignes SDA SCL, les 2 lignes sont a 1. Je devrais réesayer l'expérience histoire d'être sûr de ce que je dis la, mais mon test en vitesse hier ne semble pas avoir vu quelque chose, faudra que je test avec un peu plus de temps ce weekend.
Concernant les warnings, oui je les ai effectivement remarqué bien entendu, mais cela fonctionnait avant, même avec eux, je dois les résoudre bien entendu, c'est surtout des conflits de type, mais de la a ce qu'ils fassent tomber l'I2C ??
Pour répondre à Paul, le DS3231 me génère une alarme a 00h00:00 qui est lue par le PIC, de la il fait tout une série de chose. Cela était fonctionnel aussi. Le seul problème que j'ai depuis mon upgrade, c'est l'I2C n'a pas l'air en très grande forme car je ne récupère plus que 165h165mn 165sec..
Je pense ici recommencer un projet en reprenant juste mon LCD et mon I2C et essayer de récupérer sur ma carte électronique l'heure. Car j'ai donné tout le code alors que 90% ne sert peut-être pas..
J'ai fait une carte électronique simple et je l'ai testé (DS3231 et 24FC1026 fonctionnel au top) j'ai laissé tourné la carte H24 pendant un gros mois en jouant régulièrement avec. Tout était niquel
J'ai donc upgrade (sans backup, pas très malin, je l'admet
Depuis que ce soit sur la première carte ou la seconde, tout fonctionne hormis l'I2C donc pas de com avec le DS3231 et le 24FC1026.
J'ai passé l'analyseur logique et silence radio car j'ai pensé a metttre une pin femelle en // sur les lignes SDA SCL, les 2 lignes sont a 1. Je devrais réesayer l'expérience histoire d'être sûr de ce que je dis la, mais mon test en vitesse hier ne semble pas avoir vu quelque chose, faudra que je test avec un peu plus de temps ce weekend.
Concernant les warnings, oui je les ai effectivement remarqué bien entendu, mais cela fonctionnait avant, même avec eux, je dois les résoudre bien entendu, c'est surtout des conflits de type, mais de la a ce qu'ils fassent tomber l'I2C ??
Pour répondre à Paul, le DS3231 me génère une alarme a 00h00:00 qui est lue par le PIC, de la il fait tout une série de chose. Cela était fonctionnel aussi. Le seul problème que j'ai depuis mon upgrade, c'est l'I2C n'a pas l'air en très grande forme car je ne récupère plus que 165h165mn 165sec..
Je pense ici recommencer un projet en reprenant juste mon LCD et mon I2C et essayer de récupérer sur ma carte électronique l'heure. Car j'ai donné tout le code alors que 90% ne sert peut-être pas..
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Carte électronique, com crash
Voilà pourquoi il faut remonter toutes les erreurs afin de vite déceler quand ça commence à aller mal.
Par exemple au moindre problème on envoie un message sur le port série indiquant la fonction en cours d'exécution.
Par exemple au moindre problème on envoie un message sur le port série indiquant la fonction en cours d'exécution.
Code : Tout sélectionner
//------------------------------------------------------------------------------
bool I2c2WriteAddr_8(byte addr_chip_7b, byte addr_data)
//------------------------------------------------------------------------------
// bus i2c2, start, adr_i2c<<1 + W, adresse data 8 bits
{
byte ret=TRUE;
I2c2Addr8b = (byte)(addr_chip_7b<<1);
I2c2AddrData = addr_data;
if (!I2c2Start()) ret = FALSE;
else {
if (!I2c2Write(I2c2Addr8b) || I2c2AckNak ||
!I2c2Write(addr_data) || I2c2AckNak) ret = FALSE;
if (!ret) I2c2Stop();
}
#if defined(UART1)
if (!ret) Uart1Str("I2c2WriteAddr8() !\n");
#endif
return (bool)ret;
} Carte électronique, com crash
Petite update, j'ai testé juste l'I2C avec le DS3231 et sur mon ancienne carte, j'ai bien l'heure qui s'affiche tout vas bien.
Mais sur la nouvelle ça foire tjr.. Il y aurait un souci dans le câblage ?
Voici le code minimaliste testé :
Je remarque aussi que la position des pins pour le pickit 5 est pas dans le même ordre pour programmer la première carte que la 2eme. Par hasard, s'il y a un fil inversé, ça peut se programmer mais se programmer mal et créer ce genre de bug ? Car par contre par exemple, le LCD il fonctionne parfaitement sur les 2 cartes
EDIT : j'ai comparé, les fils sont connecté dans l'autre sens, je dois donc tourner le connecteur sur cette carte, mais les fils semblent arrivée a bonne destination depuis le pickit au final, donc le problème est physique sur la carte je suppose
Mais sur la nouvelle ça foire tjr.. Il y aurait un souci dans le câblage ?
Voici le code minimaliste testé :
Je remarque aussi que la position des pins pour le pickit 5 est pas dans le même ordre pour programmer la première carte que la 2eme. Par hasard, s'il y a un fil inversé, ça peut se programmer mais se programmer mal et créer ce genre de bug ? Car par contre par exemple, le LCD il fonctionne parfaitement sur les 2 cartes
EDIT : j'ai comparé, les fils sont connecté dans l'autre sens, je dois donc tourner le connecteur sur cette carte, mais les fils semblent arrivée a bonne destination depuis le pickit au final, donc le problème est physique sur la carte je suppose
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Carte électronique, com crash
Bonjour,
Pour le hard, si je comprends bien, la première carte avait un DS1307, ensuite tu parles d'une deuxième carte avec DS3231 qui marchait bien avec le nouveau logiciel, et ensuite une troisième carte avec DS3231 et mosfet, qui ne marche pas. La deuxième carte marche toujours, donc ce n'est pas le logiciel.
J'ai l'impression qu'on retombe sur l'autre fil de discussion. Regarde avec l'analyseur ce que donne un start/stop répétitif, le signal doit être bien propre. Ensuite essaye le programme de test qu'on avait fait sur la première carte.
Pour le hard, si je comprends bien, la première carte avait un DS1307, ensuite tu parles d'une deuxième carte avec DS3231 qui marchait bien avec le nouveau logiciel, et ensuite une troisième carte avec DS3231 et mosfet, qui ne marche pas. La deuxième carte marche toujours, donc ce n'est pas le logiciel.
J'ai l'impression qu'on retombe sur l'autre fil de discussion. Regarde avec l'analyseur ce que donne un start/stop répétitif, le signal doit être bien propre. Ensuite essaye le programme de test qu'on avait fait sur la première carte.
Carte électronique, com crash
Bonjour,
Non, je vais essayer de résumer.
J'ai fait des tests avec un ds1307 pour tester l'I2C, ça a pris du temps mais cela a fonctionné au final.
De la j'ai créer une carte électronique (Donc je suis passé du ds1307 sur une breadbord vers une carte électronique dessiner avec Kicad afin d'avoir une platine réelle) avec un ds3231, une 24fc1026, un écran, ... Qui ressemble très fort au screen du PCB que j'ai envoyé
Tout s'est bien passé, la carte à tourner et été utilisé pendant 1 mois tout était au vert.
Donc j'ai recommencer la carte électronique en rajoutant des auxiliaires comme des MOSFET logique pour commander des résistances chauffantes, une ventilation puis un fusible thermique, des broches pour SDA SCL et RX TX, ... Pour le projet final
Sauf que cette dernière, tout semble aller bien.. Sauf l'I2C, c'est ça que je ne comprends pas.. L'écran est ok, les boutons réagissent bien si inhibe l'I2C, les MOSFET aussi, ...
J'ai effectivement comme tu dis utiliser l'analyseur logique hier soir ou je vois que le Microcontrôleur tente quelque chose (J'ai le start) ou le signal passe a 0 brièvement puis silence radio pendant 300ms et je revois un passage vers 0 et ça boucle ainsi. Je vais essayer de te faire une capture que tu puisse voir
Mon idée ici serait peut être de réaliser un scanner qui scan les adresses, essayer de trouver le DS3231 si ça ne va pas essayer de trouver l'EEPROM. S'il voit jamais le DS3231 mais bien l'eeprom, je vais songer à remplacer le DS3231 je pense.. Il m'en reste un
Non, je vais essayer de résumer.
J'ai fait des tests avec un ds1307 pour tester l'I2C, ça a pris du temps mais cela a fonctionné au final.
De la j'ai créer une carte électronique (Donc je suis passé du ds1307 sur une breadbord vers une carte électronique dessiner avec Kicad afin d'avoir une platine réelle) avec un ds3231, une 24fc1026, un écran, ... Qui ressemble très fort au screen du PCB que j'ai envoyé
Tout s'est bien passé, la carte à tourner et été utilisé pendant 1 mois tout était au vert.
Donc j'ai recommencer la carte électronique en rajoutant des auxiliaires comme des MOSFET logique pour commander des résistances chauffantes, une ventilation puis un fusible thermique, des broches pour SDA SCL et RX TX, ... Pour le projet final
Sauf que cette dernière, tout semble aller bien.. Sauf l'I2C, c'est ça que je ne comprends pas.. L'écran est ok, les boutons réagissent bien si inhibe l'I2C, les MOSFET aussi, ...
J'ai effectivement comme tu dis utiliser l'analyseur logique hier soir ou je vois que le Microcontrôleur tente quelque chose (J'ai le start) ou le signal passe a 0 brièvement puis silence radio pendant 300ms et je revois un passage vers 0 et ça boucle ainsi. Je vais essayer de te faire une capture que tu puisse voir
Mon idée ici serait peut être de réaliser un scanner qui scan les adresses, essayer de trouver le DS3231 si ça ne va pas essayer de trouver l'EEPROM. S'il voit jamais le DS3231 mais bien l'eeprom, je vais songer à remplacer le DS3231 je pense.. Il m'en reste un
Carte électronique, com crash
Carte électronique, com crash
J'ai testé un scan I2C avec juste mon DS3231 --> Rien trouvé
J'ai tésté un scan I2C avec mon 24FC1026 + DS3231 (car cms soudé donc voila..) --> Rien trouvé
J'ai voulu mettre mon analyseur sur les broches. J'ai fait un reset et magie... Il trouve les adresses.. Seulement, dès que j'enlève l'analyseur et que je fais un reset, il ne les trouves plus (Si je ne fais pas reset après avoir enlever l'analyseur, il dit qu'il les voit toujours). Au niveau des signaux j'ai un niveau bas constant puis un niveau haut pendant 20µs Ce qui n'est pas trop normal je pense.
J'ai essayé de garder l'analyseur branché et d'afficher l'heure mais malgré qu'il voit l'adresse, il ne sait pas me donner l'heure..
Ce qui est étrange c'est que si l'analyseur est branché et que je fais un scan pour l'adresse 0x48, il la voit aussi !!
Sauf qu'elle n'existe pas
Quand l'analyseur est mis en fait il voit tout, même le non existant. Une fois enlever il ne voit rien du tout.
Est-ce qu'avoir mis mes pin tulipes en // comme on le voit sur le screen du PCB peut poser problème ? Même si je branche rien dessus ?
J'ai tésté un scan I2C avec mon 24FC1026 + DS3231 (car cms soudé donc voila..) --> Rien trouvé
J'ai voulu mettre mon analyseur sur les broches. J'ai fait un reset et magie... Il trouve les adresses.. Seulement, dès que j'enlève l'analyseur et que je fais un reset, il ne les trouves plus (Si je ne fais pas reset après avoir enlever l'analyseur, il dit qu'il les voit toujours). Au niveau des signaux j'ai un niveau bas constant puis un niveau haut pendant 20µs Ce qui n'est pas trop normal je pense.
J'ai essayé de garder l'analyseur branché et d'afficher l'heure mais malgré qu'il voit l'adresse, il ne sait pas me donner l'heure..
Ce qui est étrange c'est que si l'analyseur est branché et que je fais un scan pour l'adresse 0x48, il la voit aussi !!
Quand l'analyseur est mis en fait il voit tout, même le non existant. Une fois enlever il ne voit rien du tout.
Est-ce qu'avoir mis mes pin tulipes en // comme on le voit sur le screen du PCB peut poser problème ? Même si je branche rien dessus ?
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 16 invités


