Protection entrée Arduino

Bonjour,

Après avoir cramé deux cartes Arduino Mega, je m’interroge sur les causes possibles.

La première carte était un modèle chinois 1er prix. Je me suis dit que c’était peut-être la cause. J’ai alors investi dans une carte officielle, avec le même résultat

Dans le passé, je reconnais volontiers avec fait des bourdes (inversion de polarité ou surtension). Mais cette fois c'est autre chose. Un coup, mon montage (accordéon numérique) fonctionne très bien. La nuit passe et le lendemain sans avoir mis les doigts dedans, l’accordéon ne fonctionne plus.

La commande des notes se fait par 27 poussoirs clavier PC reliés aux entrées digitales de la Mega en mode pull up interne.

Le défaut est que certaines pin sont constamment à l’état haut, même en mettant les pin à la masse,

Cela se vérifie par le chargement d’un petit bout de code pour afficher tous les états bas ou hauts des pins digitales avec la carte complètement isolée du reste du montage.

Un copain électronicien très branché sur le sujet a fait 2 remarques :

1ère remarque :

Les pull-up internes présentent un petit inconvénient dans la mesure où elles n'entrent pas en action au tout début de la mise sous tension de l'instrument. Le temps que le programme se lance, il peut s'écouler un "certain temps" pendant lequel elles ne sont pas en action. Même pendant quelques nano secondes, l’état de l'entrée est indéfini.

Solution : il conseille l'ajout de résistances pull-up externes qui elles assurent, dès la mise sous tension, l'état haut sur les entrées.

2ème remarque :

Ne pas laisser de fil en l'air. C'est bien la situation actuelle avec les liaisons (nappe/pistes/connecteurs) entre les boutons poussoirs du clavier et les entrées Arduino qui pourraient se comporter comme une antenne susceptible de recevoir des parasites et interférence de toutes sortes.

Solution : ajouter entre les boutons poussoirs et les entrées de la carte des résistances de 1 k en série.

Qu’en pensez-vous ?

Cordialement

Jean-Claude à Quimper

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Sur la deuxième remarque : c'est une évidence.
D'où l'utilité de fixer un potentiel avec des résistances de tirage soit au plus (pull up) soit au moins (pull down)

Sur la première, je suis plus circonspect.
Néanmoins, il faut bien connaître l'état au démarrage des composants : microcontrôleur comme les autres composants.

Pour les micros au démarrage les IO sont en mode entrée.
Quand on les positionne en mode sortie, les sorties sont à l'état bas.
Donc si un composant doit recevoir un niveau haut dès la mise sous tension, il faut organiser son schéma en conséquence.
Mais quand même, on parle de temps inférieurs à la microseconde !

Les ESP32 qui sont fréquents dans le monde amateur, ont certains IO qui peuvent avoir un comportement particulier au démarrage du micro. C'est indiqué dans la documentation du micro. Il faut en tenir compte.

D'une manière générale, si le produit est critique, quand on décide d'un schéma de câblage, il faut connaître comment démarrent les composants et s'organiser en conséquence.

Concernant l'introduction et la mort des cartes, comme chaque fois que l'on débute, on fait des conneries, ce n'est pas plus compliqué.

Ce que tu as tué c'est le microcontrôleur, le microcontrôleur ce n'est ni Arduino ni les chinois qui le fabrique, c'est la société Microchip qui fourni le monde professionnel.
Dans les datasheets il y a un paragraphe "Absolute Maximum Ratings".
Ce sont des valeurs qui peuvent être atteintes "occasionnellement" et sur des temps "court".
En particulier les 40 mA par sortie : Microchip dit pas plus de 20 mA et la réalité est bien plus restrictive.

Oui et alors?


On parle un peu dans le vide là.
On ne voit ni schéma, ni code.

On ne voit pas non plus de contraintes matérielles .

@titi2929
Mes explications étaient pour de la connaissance générale , pour être en mesure de pouvoir faire la part des choses entre ce que l'on peut lire ici ou là et la réalité du terrain.

J'insiste, on parle de microseconde, même si c'est des dizaines de microsecondes qu'est-ce qui réagit dans un temps aussi court ?

C'est quoi des "poussoirs clavier PC" ?

Bonjour,
les contact sont des switch de clavier marque Cherry

si vous faites tourner ce code et ouvrez le terminal série à 115200 bauds, que voyez vous si vous appuyez sur aucun bouton ?

void setup() {
  Serial.begin(115200); // pin 0 et 1
  for (uint8_t pin = 2; pin <= 69; pin++) pinMode(pin, INPUT_PULLUP);
}

void loop() {
  Serial.print("**"); // pins 0 et 1
  for (uint8_t pin = 2; pin <= 69; pin++)  Serial.write(digitalRead(pin) == LOW ? 'L' : 'H');
  Serial.println();
  delay(1000);
}


Bonjour,
merci pour le code de test
sr le moniteur série, je vois une série de H avec au milieu un L qui doit correspondre à la pin HS.

Donc ton code confirme bien ce que je pensais- Une pin est en défaut. Reste à savoir quelle serait la cause. (je confirme ne pas être intervenu sur le montage entre la fois où cela fonctionnait et ne fonctionnait plus

Jean-Calude à Quimper

OK - et il n'y a bien rien de branché sur la MEGA ?

si c'est le cas, effectivement une pin est en défaut.