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 sur le langage C !

Modérateur : Jérémy

Carte électronique, com crash
Stefox
Débutant
Débutant
Messages : 63
Enregistré en : juillet 2025

#1 Message par Stefox » jeu. 8 janv. 2026 20:43

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.
schématique.jpg


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
satinas
Expert
Expert
Messages : 1497
Enregistré en : novembre 2015

#2 Message par satinas » ven. 9 janv. 2026 05:26

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.

Code : Tout sélectionner

void writeRTC(uint8_t addr, uint8_t reg, uint8_t data)
...
if (I2C2_WriteAddr(addr) != 1)
  {
       
  }
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.

Carte électronique, com crash
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3260
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#3 Message par paulfjujo » ven. 9 janv. 2026 09:15

bonjour,

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

Carte électronique, com crash
Stefox
Débutant
Débutant
Messages : 63
Enregistré en : juillet 2025

#4 Message par Stefox » ven. 9 janv. 2026 17:04

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.
Capture d’écran 2026-01-09 170200.png


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..
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Carte électronique, com crash
satinas
Expert
Expert
Messages : 1497
Enregistré en : novembre 2015

#5 Message par satinas » ven. 9 janv. 2026 17:33

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.

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
Stefox
Débutant
Débutant
Messages : 63
Enregistré en : juillet 2025

#6 Message par Stefox » ven. 9 janv. 2026 20:27

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é :
include.pdf


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
satinas
Expert
Expert
Messages : 1497
Enregistré en : novembre 2015

#7 Message par satinas » sam. 10 janv. 2026 03:45

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.

Carte électronique, com crash
Stefox
Débutant
Débutant
Messages : 63
Enregistré en : juillet 2025

#8 Message par Stefox » sam. 10 janv. 2026 08:28

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

Carte électronique, com crash
satinas
Expert
Expert
Messages : 1497
Enregistré en : novembre 2015

#9 Message par satinas » sam. 10 janv. 2026 09:06

Oui ce sont peut être les composants i2c qui sont responsables, mais surtout si tu les enlèves, teste l'I2c à vide avant de les remettre.

Carte électronique, com crash
Stefox
Débutant
Débutant
Messages : 63
Enregistré en : juillet 2025

#10 Message par Stefox » sam. 10 janv. 2026 11:22

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é
main.txt


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 !! :-D :-) 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 ?

analyseurlogic.png
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 16 invités