Go Down

Topic: Téléversement (Read 699 times) previous topic - next topic

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

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.
Ceux qui savent qu'ils ne savent rien en connaisse autant que ceux qui croient tout savoir et qui n'en connaissent pas plus qu'eux.
Pierre DAC.

Loulou17700

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
@++
L'urgent est déjà parti.
L'impossible est entrain de se faire.
Pour les miracles, On demande un délai de vingt-quatre heures.

Loulou17700

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
Code: [Select]

// 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);
  }
  }
L'urgent est déjà parti.
L'impossible est entrain de se faire.
Pour les miracles, On demande un délai de vingt-quatre heures.

Loulou17700

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.
@++
L'urgent est déjà parti.
L'impossible est entrain de se faire.
Pour les miracles, On demande un délai de vingt-quatre heures.


Quote
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...
D'après ce que je viens d'apprendre A0 s'appelle aussi D15. On devrait dire A0D15. Là ou cela se complique salement c'est:
- A0 est une entrée analogique
- Sur Arduino, il n'y a pas de sortie analogique du tout
- on peut faire analogWrite() sur pleins de broches numériques qui vont alors déliver un signal carré de rapport cyclique variable. C'est soit du 0V, soit du 5V. On peu considérer que le rapport cyclique est analogique car il peut prendre plusieurs valleurs et pas seulement deux. On ne peut pas utiliser analogWrite sur une broche analogique

Quote
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...
Sauf que pour produire un son ou faire varier la vitesse d'un moteur, on ne peut pas utiliser de sortie analogique vu qu'on en a pas. Pour le son, beaucoup vont utiliser un circuit spécialisé mp3. Un moteur "courant continu" qui ne tourne que dans un sens se pilote sous arduino avec une broche numérique en PWM accessible par analogWrite. Mais c'est bien une suite de  et de 1. Pareil pour les leds si on veut pouvoir faire varier l'éclairement.

Note sur les sons. Il existe différentes classes d'amplificateurs:
- classe A c'est de l'analogique en principe un trznsistor va laisser passer plus ou moins de courant
- classe AB, la plus classique dans les chaines HIFI. C'est toujours de l'analogique, mais on a un transistor qui conduit le courant dans un sens, un transistor pour l'autre sens.
- classe D ou on envoie des succession de 0 et de 1

Ce serait d'ailleurs intéressant de faire un lecteur/enregistreur en classe D (ou en modulation delta) avec une Arduino. Il faut très peu de composants. Je l'avais fait au tout début des PC qui tournaient à 4.77MHz et qui n'avaient pas de carte son. Il y avait juste le HP qui fait bip à l'allumage.




Pour en revenir au montage:
avec 330ohms, il y aura environ 10mA par led. Compte tenu que l'on conseille de ne pas dépasser 20mA par pin, on ne doit mettre que deux leds par broche. Perso, je pense que si on tire 40mA dans une pin, on perd environ 1,5V. Mais je n'ai pas envie de vérifier. J'estime avec 4 leds et 330ohms que l'on doit être aux environ de 30mA. Une meilleure solution tant électronique due visuelle est de mettre 3 leds par pin. il y a 16 pins numériques disponibles: 2 à 18 (ou 2 à 13 et A à A5)

Mais avec 40 leds, elles ne doivent pas être allumées en même temps, pour ne pas dépasser 200mA (c'est un problème de taille de fils à l'intérieur du circuit). Avec le montage je déconseille d'allumer plus de 6 branches en même temps.


Quote
Est ce que tu pourrais me dire ou est comment ouvrir ces fichiers bibliothèques?
Quel système d'exploitation?

Loulou17700

"Quel système d'exploitation?"
Windows Vista 32b SP2

Pour le montage, les leds s'allument de façon sporadique (voir le code) sur le schéma j'ai prévu 4 groupes alimentés de de D2 à D11 ce qui fait que je n'ai que 4 leds par branche qui vont allumées en même temps pendant 1s.
Il y aurait la solution d'insérer un circuit intégrer entre les sorties D2 à D11 et les branches de leds mais je ne sais pas quoi choisir comme circuit intégrer avec 10 canaux de 5V en entrée / sortie?? peut être a tu un conseil?
Il n'est pas trop tard pour faire la modif le PCB n'est pas parti à la gravure.

"Une meilleure solution tant électronique due visuelle est de mettre 3 leds par pin. il y a 16 pins numériques disponibles: 2 à 18 (ou 2 à 13 et A à A5)"
mon souci c'est de savoir quoi mettre dans le code pour adressé A0 - A5 ??

@++

L'urgent est déjà parti.
L'impossible est entrain de se faire.
Pour les miracles, On demande un délai de vingt-quatre heures.

68tjs

#22
Jan 20, 2021, 11:12 pm Last Edit: Jan 20, 2021, 11:15 pm by 68tjs
Reprenons.

Si on ouvre une datasheet on ne trouve pas A0, c'est donc que c'est une "invention" Wiring/Arduino.
Cette "invention" est pour simplifier la vie des débutants mais avec A0 c'est exactement le contraire qui se produit.

Dans tout les microcontrôleurs les E/S sont regroupées dans des "ports", de 8bits pour les avr, de 32 bits pour les ARM.
Par exemple pour l'atmega328p A0 c'est le PORTC, bit 0.

Chaque microcontrôleur est particulier ce que je vais dire n'est valable que pour le plus répandu l'atmega328p.
Les noms de port sont des lettres, le 328p a 3 PORTS B; C et D
Certains bits dans les ports sont utilisés à autre chose que des E/S : les accès Quartz, le reset, etc........

Dans le tableau suivant on voit que le bit 7 du port C n'est pas accessible.
On voit que les autre bits ont différentes fonctions alternatives.


Qui dit fonctions alternatives dit fonction principale et la fonction principale de toutes les pins qui sont reliées à un port numérique est d'être une E/S numérique.

On voit aussi que dans les fonctions alternatives ou secondaires il peut y avoir de l'I2C et point important, valable pour le 328p, une "autre façon" de faire des interruptions. Ce qui est remarquable dans le 328p c'est qu'absolument toutes les pins peuvent générer une interruption PCINT --> attention c'est moins simple qu'avec int0 et int1.

Le SPI se trouve dans les fonctions alternatives du port B
L'UART (liaison série) se trouve dans les fonctions alternatives du port D

Entrées analogiques :
On voit sur le synoptique que les pins qui sont reliées au portC sont aussi reliées à l'entrée du multiplexeur d'entrée du convertisseur analogique digital.
Ce multiplexeur à 10 entrées et 8 d'utilisées.
Dans le boîtier DIP 28 les 2 entrées libres sont perdues par manque de pins sur le boîtier.


Dénomination Wiring/Arduino des E/S
Dans leur documentation ils parlent de 13  E/S numériques (nommées de 1 à 13) et de 5 E/S analogiques (nommées de A0 à A5).

Ce qui est complétement faux :
Il y a 19 entrées numériques : de 1 à 19
Dont 5 (14 à 19) sont dotées de la sous fonction mesure analogique

Entrées purement analogiques sur nano et pro-mini :
Avec le boîtier CMS qui a 32 broches les deux entrées libres du multiplexeur analogique peuvent être rendues accessibles, elles le sont  sous le nom de A6 et A7.
MAIS comme il n'y a plus de place sur le PORT C elles ne peuvent être que des entrées analogiques.

Pour activer le mode numérique ou le mode fonction alternative il faut configurer des registres du microcontrôleur. Un registre c'est une mémoire d'un octet. Pour le programme c'est le compilateur qui choisi l'adresse des variables,  pour les registres c'est le concepteur du microcontrôleur qui a imposé une adresse fixe et non modifiable.


Fichier de l'EDI arduino.
Je donne le chemin chez moi  --> Debian Linux, windows connait plus depuis 20 ans.
arduino-1.8.13/hardware/arduino/avr/cores/arduino
Dans le  répertoire il y a un certain nombre de fichiers commençant par un W.
C'est parce qu'Arduino est un fork de Wiring et que tous les fichiers commençants par W proviennent de Wiring.

Un fichier intéressant est main.cpp.
Il donne la VRAIE structure du fichier qui est transmis au compilateur et c'est un vrai fichier cpp à l'intérieur duquel on retrouve les fonctions setup() et loop().
Ceux qui savent qu'ils ne savent rien en connaisse autant que ceux qui croient tout savoir et qui n'en connaissent pas plus qu'eux.
Pierre DAC.

Loulou17700

Bien! J'avoue que j'ai un peut de mal à suivre, je débute et de plus je prend le train en marche :)
Je comprend très vite mais il faut m'expliquer très longtemps... :)
Si tu est d'accord nous reprendrons tout ça demain après une bonne nuit de sommeil le temps de digérer tout ça, je suis sur que c'est un sujet qui va être très passionnant.
J'ai de très lointaines notions donc il va falloir enlever la poussière...
Bonne nuit.
@++
L'urgent est déjà parti.
L'impossible est entrain de se faire.
Pour les miracles, On demande un délai de vingt-quatre heures.

hbachetti

Quote
Est ce que tu pourrais me dire ou est comment ouvrir ces fichiers bibliothèques?
C'est en ligne :
https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring_digital.c

Quote
mon souci c'est de savoir quoi mettre dans le code pour adressé A0 - A5 ??
Comme A0-A5 sont analogiques ET digitales, on peut les adresser avec pinMode() et digitalRead() digitalWrite().

La lib ARDUINO définit A0 et A1 comme 14 et 15. Mais c'est une soupe interne pour pouvoir utiliser ces fonctions aussi bien avec D0-D13 qu'avec A0-A5.

Dans le source wiring_digital.c, par exemple pour digitalWrite() les fonctions internes digitalPinToPort() et portOutputRegister() permettent de récupérer le registre du port correspondant.

Donc ta boucle devient :

Code: [Select]

  for (short i=2; i<=15 ; i++) {
  // ou
  for (short i=D2; i<=A1 ; i++) {
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

hbachetti

Il faut voir ça comme un problème de portabilité. pinMode() et digitalRead() digitalWrite() doivent être multi-plateforme.
Sur la MEGA le même principe est utilisé :
https://github.com/arduino/ArduinoCore-avr/blob/master/variants/mega/pins_arduino.h

Où A0 est définit en 54, vu que la MEGA possède 53 ports digitaux.
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Loulou17700

Merci hbachetti, pour pouvoir exploiter pleinement ces fichiers dont tu m'a donner les liens cela implique de connaitre parfaitement le langage de programmation, hélas ce n'est pas mon cas, je suis qu'un simple débutant, je demande qu'a apprendre mais à mon age c'est pas évident...
il faut que je me procure un livre sur le sujet type "pour les nul" et un prof m'expliquer ce que je ne comprend pas.
Lire c'est bien mais il faut comprendre.

Pour revenir au projet SAPIN
Au dire de "Vileroi" et je comprend et partage parfaitement son point de vue je vais être confronté à un problème d'intensité dans les branches 20mA max, plutôt que de me compliquer la vie avec une solution logiciel je préférerais  ajouter un ou deux CI qui se comporteraient comme des relais je croie que la série des 74xxxx serais adapté à mes besoins entrée / sortie 5V alimentation du CI 5V mais je je ne sais pas le(s) quel(s) choisir?

@++
L'urgent est déjà parti.
L'impossible est entrain de se faire.
Pour les miracles, On demande un délai de vingt-quatre heures.

hbachetti

Tu seras également confronté à problème de courant maximal.

Éventuellement deux ULN2003 (7 sorties) ou ULN2803 (8 sorties).
Mais cela ne résoudra pas ton problème de logiciel. Il faudra bien à un moment donner écrire une boucle.
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Loulou17700

Tu seras également confronté à problème de courant maximal.

Éventuellement deux ULN2003 (7 sorties) ou ULN2803 (8 sorties).
Mais cela ne résoudra pas ton problème de logiciel. Il faudra bien à un moment donner écrire une boucle.

Pour le courant sa devrait passer, les données du data (Ic Continuous Collector Current 500 mA)
Vileroi a dit "J'estime avec 4 leds et 330ohms que l'on doit être aux environ de 30mA"

Le code tel que je l'ai donné fonctionne avec les sorties D2 à D11, après il faudra voir une fois la modif du schéma et du PCB avec les deux ULN2003 inséré dans le circuit...
Une fois le schéma modifier je vous ferais une copie.

@++
L'urgent est déjà parti.
L'impossible est entrain de se faire.
Pour les miracles, On demande un délai de vingt-quatre heures.

68tjs

#29
Jan 21, 2021, 03:14 pm Last Edit: Jan 21, 2021, 03:16 pm by 68tjs
Un point :
Tu verras toujours écrit que l'on ne met jamais deux diodes ou deux transistors en parallèle et c'est vrai.

Il faut en connaître la raison : dans la fabrication des semi-conducteurs la dispersion entre les lots de fabrication peut atteindre ± 30% ce qui est énorme.

C'est vrai pour ce que l'on appelle des composants "discrets", c'est-à-dire en boîtier individuel.
Il en est différemment à l'intérieur d'un circuit intégré où tous les composants sont sur le même morceau de silicium et ils sont réalisés en même temps.
Ils ont tous à la même dispersion c'est-à-dire qu'ils sont identiques et on peut les mettre en parallèle, c'est même fréquent dans un circuit intégré.

Et cela s'applique à la série des ULN2xxx et ULN28xx.
Les transistors, étant sur le même morceau de silicium, sont identiques et on peut mettre deux voies d'un ULN en parallèle pour augmenter le courant admissible.
Bien évidement on ne peut pas paralléliser des boîtiers différents.
Ceux qui savent qu'ils ne savent rien en connaisse autant que ceux qui croient tout savoir et qui n'en connaissent pas plus qu'eux.
Pierre DAC.

Go Up