Téléversement

Bonjour tout le mon et Bonne Année 2021.
Je viens de lire avec intérêt le poste de hbachetti sur "ARDUINO : problèmes de téléversement" et il s’avère que je rencontre ce type de problème avec une NANO.
Dans le poste il est noté:
3.4. La ligne série
Le convertisseur USB / série envoie les caractères à transmettre à la ligne série de l'ATmega.
Les deux pins D0 (RX) et D1 (TX) ne doivent pas être reliées à d'autres composants ou modules (Bluetooth par exemple) pendant le téléversement.
Effectivement ma carte NANO est souder sur un PCB avec une résistance et une LED sur D0 et D1, et lorsque je lance le téléversement j'ai un message d'erreur comme ceci:

  • Using Port : COM12*
  • Using Programmer : arduino*
  • Overriding Baud Rate : 115200*
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xf0
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00
    avrdude done. Thank you.
    Une erreur est survenue lors du transfert du croquis
    J'ai fait un test avec une autre carte NANO non connectée et tout se passe bien j'ai pu téléverser plusieurs fois le croquis sur la carte sans problème.

Y a t-il une solution pour faire le téléversement sans dé-souder les composants LEDs et ou résistances?
Merci pour vos avis.
Cordialement.

Loulou17700:
Y a t-il une solution pour faire le téléversement sans dé-souder les composants LEDs et ou résistances?
Merci pour vos avis.
Cordialement.

Bonsoir
Il faut électriquement isoler D0/D1 pendant l'upload par le bootloader
ça peut etre plus ou moins simple/facile selon l'implantation
fais qq photos de ton "montage"

Bonsoir Artouste,
Voici qq photos du montage....




Peut-être dessouder un coté des deux résistances TX/RX...
@++

Ce n'est pas trop compliqué pour intervenir

le plus simple est d'isoler au niveau des 2 resistances sur la partie non isolée (croix jaune)

il n'y a peut etre pas besoin d'isoler D0 ET D1 , une seule des lignes pose peut etre probleme.
Donc faire un essai.
Et bien sur : ne pas oublier une fois l'upload fait de retablir la liaison électrique (point de soudure, jumper, inter, etc

un petit coup de pince coupante au milieu des pattes de résistances .. et une goutte de soudure après téléchargement !
couper.png

couper.png

Merci les amis pour votre aide.
Je suis confronté a un autre problème sur se montage, j'ai vérifier toutes les connections et soudures et j'ai certain groupe de LEDs qui ne s'allume pas.
Les LEDs sont câblées en parallèle par branche D0, D1, D2..., avec une résistance de 330 Homs pour 5 LEDs et une moyenne de 130mA par branche (somme des LEDs).
Mes compétences limitées me laisse supposer que certaine LED "pompe" le courant des autre ce qui les empêchent de s'allumer certaine LED consomme 20mA (Rouge, Bleu) et d'autre 30mA (Vert, Jaune, Blanc, Orange).
Si vous pouviez me dire comment procéder pour que toutes les LEDs s'allume se serait super.
D'avance merci.
Je vous joint le schéma de principe et Dispatching.

Sapin_Led.pdf (69.8 KB)

Sapin_Dispatch.pdf (16.5 KB)

On ne peut pas mettre deux leds de couleurs différentes en parallèle? La diode qui s'allume pour la tension la plus faible va s'allumer, elle impose la tension faible et la deuxième ne s'allumera pas. Si on veut les mettre en parallèle, il faut que chaque diode ait sa résistance.

Avec 330 ohms, le courant dans chaque branche est de 10mA pour l'ensemble des 5 leds. Ce qui est heureux car une sortie ne peut supporter qu'environ 20mA (et 200mA pour l'ensemble des pins, alim comprise).

Pour allumer autant de leds, il faut soit les mettre en parallèle sous 5V, chacune avec sa résistance, soit en série sous au moins 15V avec une résistance par paquet de 5 leds. Il faut alors mettre une résistance en parallèle sur les diodes qui doivent consommer moins que les autres.
Dans les deux cas, il faut un transistor pour permettre le passage d'un courant supérieur à 20mA, ou d'avoir une tension supérieure à5V.

Solution à étudier: ne faire passer que 4mA dans les diodes, ce qui suffit normalement à avoir une lumière suffisante avec les diodes modernes, et les mettre en parallèle, chacune avec sa résistance série.
Si on fait cela, on a alors 20mA par branche et on put allumer environ 8 branches en même temps, pas plus.

Merci vileroi
En fait j'ai tout faux :frowning:
C'est pas grave en suivant tes conseils je vais revoir tout mon schéma et vu le nombre de résistance qu'il va me falloir je vais opter pour du CMS pour gagner un max de place et agrandir la taille de mon PCB...
Encore de l’occupation par ces temps de confinement.
Je vous informerais de l'avancement du projet.
@++

Avant de refaire le circuit, je te conseille de le faire vérifier. En général, on ne le fait pas car c'est souvent des assemblages de cartes, avec quelques composants en plus. On peut facilement changer une résistance, mais pas une structure complète.

Pour faire vérifier, et pour avoir le plus grand nombre de vérificateurs possibles:

  • bien entendu donne le schéma
  • moins les personnes du forum auront de travail (notamment ouvrir des fenêtres),plus les gens vont regarder. Par exemple pour le schéma, si c'est une image, elle apparaît directement sans avoir à ouvrir une fenêtre en plus. Et sur un téléphone c'est un plus (même sur un ordi). Un lien ça va, un pdf c'est moins terrible.
  • donne un maximum de caractéristiques des diodes (couple tension, courant), voir si tu as un lien vers la datasheet et le résumé courant/tension
  • choisi aussi le courant. 20mA c'était pour toutes les diodes il y a 40 ans. Maintenant, si la limite est souvent aux alentours de 50mA, 1 ou 2mA est parfois suffisant. Il ne s'agit pas ici forcément que la puissance lumineuse permette de lire. Si 2mA est suffisant, on peut alors se passer de transistors et allumer toutes les leds (utile en phase de mise au point). Si c'est 4mA, on peut se passer de transistors si on n'allume pas tout en même temps.
  • choisi mieux, le subject. "Téléversement" ne correspond plus. On peut le changer en cours en éditant le premier post.
  • ne fait pas forcément confiance au premier imbécile venu. Par exemple si tu ne vérifies pas ce que j'ai dit, ce n'est pas bon. Bien que si sur le forum on dit une bêtise, on se fait corriger (mais pas toujours). Souvent celui qui est d'accord ne dit rien; sinon si je dis "ne pas dépasser 20mA par pin", tu pourrais recevoir 50 messages "c'est vrai!"

Salut,
Je prend bien note de tous tes conseils, je vais tout remettre à plat a part le code pour la UNO / NANO qui lui fonctionne...
il y a surement des amélioration a apportées sur le code je l'ai trouvé sur "Tinkercad" Tinkercad | From mind to design in minutes
voici la copie du code:

// Générateur de signaux binaires pseudo-bruit
// PRBS 14 bits avec registre à décalage
// Sapin-LED

// Tous les bits numériques en sortie
void setup()
{
  for (short i=0; i<=13; i++)
    pinMode(i, OUTPUT);
}

void byte_output(word w)
{
  for (short i=0; i<=13; i++) {
    if (w & bit(i))
      digitalWrite(i,LOW);
    else  digitalWrite(i,HIGH);
  }
}

void loop()
{
  word state=1;
  while(true) {
    byte_output(state);
    // Opération Shift et XOR avec les bits 14, 13, 12, 2
    state=(state<<1 | (((state>>13)&1) ^ ((state>>12)&1) ^ ((state>>11)&1) ^ ((state>>1)&1)) );
    delay(100);
  }
  }

J'ai retenu ce code car les LEDs ne s'allument pas de façon cyclique.
Le plus serait de lui ajouter une fonction aléatoire "random" pour le rendre encore plus "vivant" mais là je décroche...

@++

Pourquoi avoir utilisé D0 D1 ?
Tu pourrais parfaitement remplacer par A0 A1, ou A2 A3, ou A4 A5 si I2C est inutilisé.

Bonjour hbachetti,
Bonne question, j'ai tout simplement utiliser le code tel qu'il était proposé et à l'origine pour une UNO sans connaitre l’inconvénient de la NANO, comme j'ai lu sur un site que les codes de la UNO sont compatible sur la NANO j'ai choisi la NANO pour un gain de place...
Après comme tu le suggère il faut adapter le code pour utiliser A0 et A1 en lieu et place de D0 D1, comme je doit refondre le schéma ce la ne pose pas de problème.
Si tu pouvais revoir les modif sur le code pour utiliser A0 et A, il y a une boucle de comptage et j'avoue que je ne sais pas faire, du moins il faudrait m'expliquer comment faire la sa risque de prendre du temps...
déjà le code modifié avec des lignes de commentaire pour expliquer qui fait quoi cela me permettrais de comprendre ce que je fait...
Cordialement.
@++

Simple.
Si tu jettes un oeil dans les entrailles de la librairie ARDUINO tu verras que A0 et A1 valent 14 et 15.
Donc plutôt que de faire une boucle de 0 à 13, fais une boucle de 2 à 15.

hbachetti:
Simple.
Si tu jettes un oeil dans les entrailles de la librairie ARDUINO tu verras que A0 et A1 valent 14 et 15.
Donc plutôt que de faire une boucle de 0 à 13, fais une boucle de 2 à 15.

OUI mais encore??? pour moi c'est du chinois...
peut-être une explication plus approfondie
En fait je vais réduire le nombre de led à 40 comme je doit rajouter une résistance par led ce qui va simplifier le câblage du PCB.
Dans le code j'ai changer les valeurs " i=0; i<=13 en i=2 et i<=11"
En simulation sur Tinkercad cela semble fonctionner...
@++

OUI mais encore??? pour moi c'est du chinois...
peut-être une explication plus approfondie

  1. la numérotation de 0 à 19 est uniquement une invention Wiring/Arduino.
    Le microcontrôleur ne comprend que des écritures dans des registres et ce travail est réalisé par les fonctions digitalRead et digitalWrite.

  2. À partir du moment où cette dénomination est du seul ressort de Wiring/Arduino ils ont fait ce qu'ils pensaient être le plus compréhensible pour des débutants.

  3. À partir du moment où le débutant sort du "classique" ce qui était fait pour l'aider ne fait que le perturber.

  4. Uno ou nano c'est le même microcontrôleur donc il n'y a aucune différence.
    Le code destiné à une UNO ne peut pas faire autrement que de fonctionner sur une nano
    La nano a "un plus" et non pas "un moins" que j'aborderai à la fin.

  5. À l'entrée des pins A0 à A5 il y a un aiguillage, cet aiguillage dirige soit vers un port numérique (mode E/S numérique) soit vers une entrée d'un multiplexeur analogique.
    La commande de "cet aiguillage" est réalisé par les fonctions analogRead() pour passer en mode analogique et pinMode() pour revenir au mode numérique. Ces fonctions se chargent d'écrire les bonnes valeurs dans les registres du microcontrôleur.

Les E/S ont une fonction principale dans laquelle elles sont au démarrage du micro.
Cette fonction principale est d'être une entrée/sortie (E/S) numérique.
Chez Wiring ils ont adopté la dénomination suivante :
D1 à D13 : ils ont dit que ce sont des E/S numériques
A0 à A5 : ils ont dit que ce sont des entrées analogiques
--> mais comme c'est faux puisque ce sont au départ des E/S numériques ils ont dit qu' A0 à A5 s'appelleraient aussi D14 à D19.
Écrire pinMode(A0, OUTPUT) est absolument équivalent à écrire pinMode(14, OUTPUT) mais comme les cartes sont sérigraphiées A0 à A5 quasiment personne n'utilise la deuxième notation. Si elle t'a été indiquée c'est pour insister sur le fait que ce sont des E/S numériques.

Le "plus" de la nano/pro-mini :

Le boîtier du microcontrôleur est un boîtier CMS mais ce n'est le plus important.
Ce qui est important que le boîtier CMS a 32 broches et que le boîtier de la UNO n'en a que 28.
Les 32 broches permettent de sortir deux entrées du multiplexeur analogique qui sont libres et ce n'est pas possible avec le boîtier DIP28.

La nano et la pro-mini ont donc :
A0 à A5 : pins pouvant être numériques ou analogiques
A6 et A7 : pins ne pouvant être qu'analogique

Merci aussi pour ma connaissance, j'ignorais aussi le N14.

Dans la vie la curiosité n'est pas un vilain défaut. La lecture des fichiers constituants les bibliothèques Arduino est très instructive, je dirai même surtout pour un non spécialiste.

68tjs:
Dans la vie la curiosité n'est pas un vilain défaut. La lecture des fichiers constituants les bibliothèques Arduino est très instructive, je dirai même surtout pour un non spécialiste.

Bonjour et merci pour toutes tes infos très complétes.
Mais il y a beaucoup de choses qui m’échappent dans ton commentaire, je ne suis qu'un simple débutant qui plus ai pas très assidu mes activités "électroniques" se font surtout pendant la période hivernale ou il fait meilleur au chaud...
si non aux beaux jour c'est surtout le Drone qui m'occupe principalement...

pour revenir à tes commentaires je sais que sur les pins des Arduinos il y a deux type de données qui circule "Digitales" 0/1 = allumer / éteindre une LED un relais... et "Analogiques" produire un son sur HP ou faire varier la vitesse d'un moteur électrique...

Ou je bloque c'est sur l'adressage je sais par observation que tout ce qui commence par D c'est Digitale et que tout ce qui commence par A c'est Analogique, après pour le reste c'est pas acquis...

Pour ce qui concerne le montage que j'ai commencé affin de conservé la NANO j'ai diminué le nombre de LED et ajouté un résistance smd par led et démarré à D2 pour pouvoir faire les mise à jour éventuelles du code.

Je vais vous joindre un zip du dossier complet schéma, PCB, code pour ceux que ça intéresse et y faire des modif éventuelles.
Cordialement à vous
@++

J'ai utilisé KiCad la réalisation du schéma et du PCB la gravure double face et confiée à JLCPCB.
Le Schéma

Le PCB

Le Code

// Générateur de signaux binaires pseudo-bruit
// PRBS 14 bits avec registre à décalage
// Sapin-LED

// Tous les bits numériques en sortie
void setup()
{
  for (short i=0; i<=13; i++)
    pinMode(i, OUTPUT);
}

void byte_output(word w)
{
  for (short i=0; i<=13; i++) {
    if (w & bit(i))
      digitalWrite(i,LOW);
    else  digitalWrite(i,HIGH);
  }
}

void loop()
{
  word state=1;
  while(true) {
    byte_output(state);
    // Opération Shift et XOR avec les bits 14, 13, 12, 2
    state=(state<<1 | (((state>>13)&1) ^ ((state>>12)&1) ^ ((state>>11)&1) ^ ((state>>1)&1)) );
    delay(100);
  }
  }

Sapin-Led-2_0.zip (1.2 MB)

68tjs:
La lecture des fichiers constituants les bibliothèques Arduino est très instructive, je dirai même surtout pour un non spécialiste.

Est ce que tu pourrais me dire ou est comment ouvrir ces fichiers bibliothèques?
D'avance merci.
@++