Arduino Forum

International => Français => Topic started by: Carolyne on Nov 05, 2013, 09:02 am

Title: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 05, 2013, 09:02 am
Bonjour à tous,
- Quelqu'un connaîtrait-il l'intensité minimale à faire circuler dans les entrées analogiques, pour les faire "décoincer" ?
Tout en conservant une bonne "probabilité" de lecture. (disons: 100%)
Le but étant de faire des ponts diviseurs à faible consommation.
- Quel sont les temps: moyen et minimum que l'on doit allouer à une lecture de broche ananlogique ?
Question subsidiaire: Existe t-il un éditeur+compilateur; qui contiendrait dans son "help" (ou dans sa doc) l'ensemble (ou une bonne partie) des mots clé utilisés en: "C" (avec leur emploi; syntaxe, exemples...) ?
Comme cela existe dans les éditeurs "Basic".
Merci d'avance
Title: Re: Intensité et temps minimums en analogique ?
Post by: 68tjs on Nov 05, 2013, 09:33 am

Quelqu'un connaîtrait-il l'intensité minimale à faire circuler dans les entrées analogiques, pour les faire "décoincer" ?
Tout en conservant une bonne "probabilité" de lecture. (disons: 100%)
Le but étant de faire des ponts diviseurs à faible consommation.

Résumé succint :
Le signal appliqué sur l'entrée analogique ne doit pas avoir une impédance supérieure à 10 kohms même si coté microcontroleur l'impédence est de l'ordre du Megohms.
Ce n'est pas une question de courant mais de temps de charge d'un condensateur interne au micro.
Arduino a fixé la  fréquence de mesure pour que analogRead() satisfasse les besoins courants.

Détails :
Il y a bien d'autres paramètres et configurations pour la mesure analogique. Plutôt que de (mal) réciter la datasheet il est préférable que tu lise le chapitre correspondant.
Tu y touvera toutes les réponses a tes questions. Si ton application ne se satisfait pas de la configuration par défaut d'analogRead() tu y trouvera aussi comment faire une mesure "aux petits oignons" en écrivant directement dans les registres du micro-controleur.

Je ne me rappelle plus qu'elle est la carte que tu utilise. Pour améliorer la qualité de mesure j'ai une proposition qui ne colle que sur une UNO (avec un fer à souder et un condo).
Title: Re: Intensité et temps minimums en analogique ?
Post by: fdufnews on Nov 05, 2013, 09:42 am
Le mieux c'est de jeter un oeil à la documentation de l'ATmega que tu utilises sur le site Atmel.
Voilà ce qui est dit pour l'ATmega 328:
The ADC is optimized for analog signals with an output impedance of approximately 10 k? or
less. If such a source is used, the sampling time will be negligible. If a source with higher imped-
ance is used, the sampling time will depend on how long time the source needs to charge the
S/H capacitor, with can vary widely. The user is recommended to only use low impedance
sources with slowly varying signals, since this minimizes the required charge transfer to the S/H
capacitor.

L'entrée de l'ADC est équivalente à une résistance de 100kOhms suivie d'une capacité de 14pF à la masse.
Il faut que la capacité soit chargée à la tension que tu veux convertir pour que la mesure soit bonne.

Quote
- Quel sont les temps: moyen et minimum que l'on doit allouer à une lecture de broche analogique ?

Justement le temps en question va dépendre de l'impédance de ta source. Si son impédance est plus élevée que 10kOhms comme préconisé, il faudra augmenter le temps d'intégration.

Il faut aussi prendre en compte le fait que tu commutes ou non les entrées analogiques.
Si tu changes tes entrées analogiques entre chaque mesure il faut alors attendre que la tension se stabilise.
Si tu "lis" toujours la même entrée analogique tu n'as pas cette contrainte.

Concernant la documentation. La plupart des éditeurs de code dignes de ce nom proposent généralement une fonction qui permet de chercher un mot sous le curseur dans un fichier (pdf, html, chm généralement) que l'on spécifie en fonction du langage de développement.
Maintenant, il facile de garder ouverte une fenêtre avec un fichier d'aide à coté de la fenêtre d'édition. On trouve pas mal de refcard sur le net avec les principaux mots clés de tous les langages de programmation courants et c'est une aide simple et rapide.
http://www.digilife.be/quickreferences/quickrefs.htm (http://www.digilife.be/quickreferences/quickrefs.htm)
http://whatis.techtarget.com/reference/Our-Favorite-Cheat-Sheets#programming (http://whatis.techtarget.com/reference/Our-Favorite-Cheat-Sheets#programming)
Autrement pour les questions plus difficiles, j'utilise souvent le Kernighan et Ritchie (on le trouve sous forme de .pdf ou de .chm)
Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 05, 2013, 09:53 am
Bon... c'est pas des questions simples, surtout la première. je te laisse réfléchir un peu, en tirant le meilleur de la réponse de Fdufnews et ci-dessous :

La lecture analogique (enfin la conversion) se fait toute seule et prend très peu de temps (de l'ordre de 13/200000 = 70µs environ). mais la fonction analogRead() rajoute pas mal de bazar, et la durée de l'appel de cette fonction n'est pas bien définie.

Pour faire la conversion, un "interrupteur" connecte l'entrée à un condensateur de 14pF pendant 5µs à travers une résistance de 1K à 100K (c'est précis, hein?). il convient donc que le pont diviseur que tu mets ait une impédance de sortie assez petite pour que T < 5.R.C... avec C = 14.10-12, R = résistance équivalente vue du condensateur. un schéma simplifié est dispo page 258 du datasheet de l'ATMEGA328. les deux sources de courant IH et IL viennent bien sûr mettre le bazar dans le montage.
Pour une précision optimale, une impédance la plus faible possible est à prévoir, donc pont diviseur qui consomme.

J'ai démonté un thermomètre digital (genre lidl), et ça fait 15 ans qu'il tourne sur une petite pile 1,5V... en fait, la mesure analogique se fait par un pont diviseur, mais le pont n'est alimenté que lors de la mesure, ce qui fait qu'entre deux mesures, il ne consomme absoulment rien ;)

capit'ché?  :smiley-mr-green:

Mais au fait, ce pont diviseur que tu veux faire, il sert à quoi? car peut-être que ça peut nous donner des idées pour t'aiguiller dans ton choix...

Pour la seconde question (plus simple), il y a une traduction en français des principales fonctions arduino (et "C" ). : http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ReferenceEtendue (http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ReferenceEtendue)

Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 05, 2013, 10:52 am
Super_Cinci say:
Quote
Mais au fait, ce pont diviseur que tu veux faire, il sert à quoi

En gros: Faire une lecture de consommation (I * U)
-U par un pont diviseur, et I avec un bricolage à base d'effet Hall.
http://paulfjujo.free.fr/Hall_DC_mesure/Hall_DC_Mesure.htm (http://paulfjujo.free.fr/Hall_DC_mesure/Hall_DC_Mesure.htm)
Je compte établir une tension (niveau) de référence avec un commutateur 8 ou 10 positions et des résistances.
Fonctionnement:
- Reset des valeurs.
- Réglage du commut sur un niveau + top départ.
- Lecture du niveau + stockage de la valeur
- Boucle: (lecture; cumul; comparaison au niveau de réference; si niveau atteint--> agir)
L'idéal serait de pouvoir faire tout ça en numérique avec  un ship qui fasse la conversion analog/num avec une entrée haute impédance; pas trop "gourmand"; pas trop compliqué; assez "fin".....Et avec des dents en or.
Mais bon, ce n'est que le tout début, je rassemble de la doc.
Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 05, 2013, 10:58 am
Hey! qué passa ?
J'ai répondu à: 68tjs et à: fdufnews, que je remercie pour ses liens.
Et les deux réponses sont parties dans l"espace". Il semblerait que quand on poste en même temps que quelqu'un; le mien ne passe pas... Y'a du favoritisme ici Loool !
Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 05, 2013, 11:15 am

Y'a du favoritisme ici Loool !
ouaip ;) hi hi hi. Bonch, tu veux créer un niveau (une tension) de référence avec un commutateur et des résistances? tu vas mesurer ça par analog... Ca va te donner une valeur numérique. Pourquoi ne pas simplement définir directement une valeur numérique de seuil ou comparaison? ça consomme aucun courant, une variable...

Pour mesurer U, j'imagine que la valeur que tu vas mesurer se situera dans une plage entre Vmin et Vmax, genre de 10 à 15V pour une batterie de 12V... donc inutile de mesurer tout ce qu'il y a entre 0 et 10, il faudrait abaisser ta tension (avec une zener pour faire simple mais c'est pas le plus précis) de 10V, tu te retrouverais alors avec une tension de 0 à 5V, soit pleine échelle sur la plage de mesure. Ce n'est qu'une idée, à prendre ou à laisser.

Par exemple, dans ma voiture, le calculateur d'injection me donne une valeur numérique sur un octet pour la tension de baterie. et pour trouver la valeur en volts, je dois appliquer la formule U = 8 + octet / 32. donc j'obtiens une tension qui peut varier entre 8 et 15,97V avec une précision de 31,25mV. il y a peu de chances pour que la tension de ma batterie sorte de cette plage de valeurs, une alerte / protection serait déjà exécutée bien avant ça...
Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 05, 2013, 12:29 pm
Quote
Pourquoi ne pas simplement définir directement une valeur numérique de seuil ou comparaison? ça consomme aucun courant, une variable

A chaque mise en service du basar le niveau sera différent. Comment je fais pour entrer la variable quand je demarre ?
Avec un mic-mac en TTL je mets le niveau sur les entrées num, et quand je lance le prog, il stocke la valeur et libère les pins.
Ou alors, je mets des contacts secs sur les pins num et je mets la valeur en binaire (10 valeurs dont j'aurais les codes sur un papier.)
(à l'ancienne Lol!) Y'a ti mieux ?
C'est pas bête le coup du créneau (24-27 V); je vais creuser le sujet. C'est le point le plus délicat de l'histoire pour garder de la précision.
Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 05, 2013, 12:42 pm
Dans ton cas, il faudrait jouer avec des ampli-op. ces bébêtes permettent de faire pas mal d'opérations mathématiques sur les signaux analogiques (S = Ax + By par exemple). mais le problème, c'est que pour faire cracher du 0V à un ampli-op, c'est qu'il lui faut une alim de -3V, et pareil côté + (8V min pour 5V en sortie)... Mais la sortie d'un AOP a une résistance nulle par rapport aux besoins de l'entrée analogique, ce qui lui confère un bon point, voire une image. si tu as un peu de jus pour alimenter ton système, l'arduino peut permettre de générer facilement ces tensions (-4V et +9V à partir du 5V), avec, si tu connais, les circuits à pompe de charge... ;)
Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 05, 2013, 03:19 pm
Boudiou! Les ampli op, s'ils leur faut du plus, du moins, y ajouter une usine de pompage de charge à gaz et prendre le gaz sur l'Arduino ! Es trrropp coumplicatt aquo.
y doit y avoir moyen de contourner....Je retourne réfléchir.   ......à+.
Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 05, 2013, 04:23 pm
Et ben j'ai pas réfléchi; j'ai fait mes comptes:
1 0k pour 5 V; ça fait: 50K pour 25 V
ce qui fait: 0,5 mA ; qui font: 12,5 mW; et pour 6 heures: 75 mWh.
C'est à dire: Peanuts. Vive les ponts résistifs! ]:D ! Je teste de ce pas les réactions de la bête.
Merci quand même pour m'avoir forcée à réfléchir sur l'entrée du niveau en numérique.
Tu n'en a rien dit...C'est que c'est bon.
Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 05, 2013, 05:16 pm
En fait, je croyais (mais où ai-je la tête) que tu mettais un LCD (donc avec un bouton +/- pour modifier le niveau par exemple).

sinon, un potar tout c*n sur une entrée analog, ça marche très bien (reste quand même à savoir quelle valeur on a entré dans le bidule).

j'en ai rien dit parce que j'avais rien à dire, il m'arrive parfois de savoir fermer ma grande gu**le...
Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 05, 2013, 06:32 pm
Nan, je parlais d'entrer en binaire avec des contacts secs sur les broches numériques.
Hé, au fait le pont diviseur est nickel; j'ai mis 5,6K+27K pour 25V. La conversion est bien plus stable qu'avec le LM35.
Comment tu ferais pour que la carte, une fois branchée se mette en attente d'une fermeture de contact, qui serait le lancement du prog ?
je fais une boucle infinie dans laquelle je teste le contact, et si contact : Alors: Sortie de la boucle. ?
Il ne va pas y avoir un problème pour sortir de la boucle ? Genre procédure/syntaxe particulière ?
Pardonne les questions de newbee, mais vu le monument de la doc de réference "C", et le "pratique" de la fonction "recherche" dans les pdf, ça me scie un peu les bras. (j'aurais jamais dû la demander la doc de réference !!! p....n, c'est l'enfer ce langage.)
Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 05, 2013, 07:30 pm

Comment tu ferais pour que la carte, une fois branchée se mette en attente d'une fermeture de contact, qui serait le lancement du prog ?
je fais une boucle infinie dans laquelle je teste le contact, et si contact : Alors: Sortie de la boucle. ?
c'est bien, ça! il y a d'autres façon de le faire, mais je vais attendre que tu en sois aux interruptions et gestion d'évennements dans ta bible...  :smiley-mr-green:
Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 05, 2013, 08:33 pm
Et tu crois que j'ai que ça à faire; d'interrupter, de gérer les évèvenements et de déchiffrer les hyérogliphes ...
Tant pis, je vais y aller à l'intuite. Le débuggeur...Il va fûûmer!!!
Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 05, 2013, 09:10 pm
nan, mais si t'as pondu un truc genre

Code: [Select]

while(!digitalRead(pin_a_tester_ki_fo_attendre){}
t'as tout bon!

"genre" parce que tout dépend de comment tu câbles ton biniou, mais je te fais confiance.
Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 06, 2013, 12:16 am
Bouhou! Si tu voyais ce que j'ai fait, tu serais mort de rire.
Y'a du : "if" à trois branches (j'ai pas trouvé les "then"), y'a même du: "goto" ]:)
Autant dire que le débuggeur est carrément en folie.
J'ai même réussi à planter l'interface....grr... gné....
Bon, je vais tenter du "while". Mais là,....il faut que je refroidisse.
PS: Si il reste du lien vers de la doc de réference "C",  j'en reprendrais bien.
Parce que celle que j'ai pris, elle a été faite par des mecs (barbus) sous acide ....Sulfurique.
Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 06, 2013, 09:14 am
Quote
while(!digitalRead(pin_a_tester_ki_fo_attendre){}

Bon, alors. Résultat des cogitations:
Des points d'exclamation, j'en ai trouvé 2.
Le: "equality comparison" marche avec le égale, donc,
c'est le: "logical not"; ça voudrait dire que: Tant que: "pin_a_tester...." n'est pas "vivant" (actif, vrai, pas: "not"); alors on "tourne".
Et je mets l'action entre les deux accolades: Ouvert/fermé.
Mais ça, ça sous-entend qu'il y a du sous-entendu. Et that is the question: Y'a t-il du sous-entendu ?
Et c'est pas tout: A partir de quand  (de quoi) on considère qu'il est "vivant"; quand il est "0", ou "1" ?
J'aurais tendance à dire "0". (logique de barbu)
On a de la chance...L'alphabet grec est déjà pris par les matheux, et ils ont pas encore intégrés les smileys. Mais ça viendra...ça viendra.
Edit: Y'a pas de: "then" ! Mais y'a pas non plus de: "wend" !?!? WTF ? Ma mama mia! Comment je sort de la boucle?
Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 06, 2013, 11:34 am
Je propse ça:
Code: [Select]

#define analogPin A0
float sensorValue;
word value;
void setup()
{
pinMode( 1 , OUTPUT);
pinMode( 1 , INPUT);
}
void loop()
{
while ( !( digitalRead( 1) ) ){
digitalWrite( 1 , HIGH );
Serial.print("Etat Num : ");
Serial.println(digitalRead( 1 ));
delay(1000);
}
digitalWrite( 1 , LOW);
value=analogRead(analogPin);
Serial.print("Broche Analog: ");
Serial.println(value,1);
delay(1000);
}

Possible que je me soit emmelé les pinceaux avec les HIGH/LOW (rapport au point d'exclamation)
La carte l'accepte; mais maintenant, à la fin du téléversement; il me sort ça:
avrdude: stk500_getsync(): not in sync: resp=0x30
Je l'avais déjà eu, et en fermant /réouvrant; débranchant /rebranchant; ça lui "passait".
Mais là; ça lui passe pas.
Apparté: Quelle c*****ie d'avoir mis un "copier pour le forum", un "copier en tant qu'HTML", et pas de "copier tout sec".

Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 06, 2013, 11:54 am
Ok...

Code: [Select]

#define analogPin A0
#define BP_pin 1  // bouton poussoir entre pin 1 et la masse (gnd)
float sensorValue;
word value;

void setup()
{
pinMode( BP_pin , OUTPUT);
pinMode( BP_pin , INPUT);
digitalWrite( BP_pin , HIGH );    // c'est ici qu'il faut le faire. la pin 1 étant en input, ça active la pull-up (une résistance entre l'entrée et VCC)
}

void loop()
{
while ( digitalRead( BP_pin) ){}  // il n'y a rien dans la boucle, c'est normal, tant que BP_pin est à 1, on boucle, on tourne en rond.
// on sort de la boucle le jour où tu auras relié la pin BP_pin avec le GND (par appui sur le bouton poussoir...)
//  digitalWrite( BP_pin , LOW);  // peu nécessaire : il vaut mieux laisser la pull-up en route pour un usage futur de ton bouton.
value=analogRead(analogPin);
Serial.print("Broche Analog: ");
Serial.println(value,1);
delay(1000);
}

désolé pour le point d'exclamation dans le while, en fait, dans ce cas là, y'en a pas besoin... (oups quoi!)
Tu as vu, j'ai tout foiré ton code en rajoutant BP_pin. ben oui, car c'est bien là ton souci je crois. la pin 1 sert au "téléversement" (ah bon, on paie en ligne? sacrés ritals, savent pas traduire...), tout comma la pin 0. donc si tu as quelque chose de relié dessus, il est possible que ta carte ait du mal à répondre lors de la prog. débranche ce qu'il y a sur cette pin 1 et recommence la programmation pour voir ;)

Donc, si tu modifies la seconde ligne du code, ça te permet d'utiliser une autre pin pour ton bouton poussoir sans avoir à réécrire tout le code. elle est pas belle la vie?

Dans l'idéal, il ne faut jamais utiliser les pins 0 et 1 pour autre chose que Serial.
Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 06, 2013, 12:08 pm
Bon, un peu d'aide sur la structure en C....

en basic :

if condition then
  action1
else
  action2
endif

se traduit en C par

if (condition) {
  action1;
} else {
  action2;
}

il est itéressant (du moins c'est ce que je fais) de traduire le C en français...

tout comme while condition ... wend par while(condition){ ... } en français : "tant que condition est vérifiée, faire { ... } ".

et for i = 0 to 10 ... next i devient for(i=0; i<=10; i++){ ... } soit "Pour i égale 0, tant que i est inférieur ou égal à 10, faire { ... } et incrémenter i". plus fort que le basic, on peut faire plein de trucs : for(i=0; j>25; k /= 10){} "Pour i égale 0, tant que j est supérieur à 25, faire { ... } et diviser k par 10" c'est aussi un coup à se planter, car si j ne passe jamais en dessous de 25, on ne sort pas de la boucle...

les accolades permettent de grouper un bloc d'instruction de la même manière que begin...end du basic. en C, elles sont partout, ce qui uniformise un peu les boucles et tests. contrairement au basic où à chaque ouvrant correspond un fermant.

as-tu regardé là (je le remets) : http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ReferenceEtendue (http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ReferenceEtendue), c'est clair et concis, et ça explique bien la structure de base du C (en plus, c'est orienté arduino, idéal pour commencer, non?). Si tu veux une confidence, jusqu'à me mettre à l'arduino, je ne connaissans pas le C, juste le PHP qui s'en rapproche. et c'est par ce lien que je me suis mis à coder en C.

ah oui, autre chose : il n'y a pas vraiment de goto en C, perso, je ne m'en sers jamais, j'ai appris à vivre sans.
Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 06, 2013, 01:57 pm
L'histoire des blocs, j'avais plus ou moins "sniffé" l'embrouille. Et en effet c'est pas mal du tout; mais faut s'y faire; ça a l'air méchament puissant ce langage de ouf.
Ton lien, j'y suis allé; mais ils n'ont pas eu la bonne idée d'en faire une version téléchargeable (je ne peux  pas être connectée en continu; et le pdf, ça me gonfle (on peut pas le bricoler))
Je vais voir d'y brancher "HTtrack" cette nuit (because plus de débit.)
Le: ]:) "goto", il y est dans la doc' de ref', avec: "label"; mais je n'ai pas réussi à le faire accepter au débuggeur. (c'est quand même bien pratique, si on n'en abuse pas.)
D'ailleurs, il va falloir que je comprenne comment se passent les branchements...Sans "goto/gosub" ?!?
Pour la copie, c'est bon avec: "Ctrl+C". Ouf !
Conclusion: Les journées n'ayant que 24h et la doc' de ref' me paraissant fort copieuse; il n'est pas impossible que je pose d'autres questions.
Passons au ..barbecue. aux essais...
PS: Ton avatar...Il est bien sympa.
Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 06, 2013, 08:53 pm
Pour le problème du not sync resp=0x30.
Je pense que les pin 1 et 0 ne sont pas en cause, car cela a fonctionné normalement plusieurs fois avec des trucs branchés dessus.
J'ai réinstallé le soft, j'ai rassemblé tous les drivers Arduino que j'ai trouvé (et il y en a un paquet ) dans le dossier "drivers".
J'ai mis à jour: Windose m'a dit qu'il y avait pas mieux
J'ai été voir au matériel le N° du port qui est bien le même que celui de la carte.
Je conclu: Que c'est encore Windaube qui fait le c*** (à son habitude)
Et je vais sans doute le prendre" la main dans le sac" en installant tout le basar sur Xubuntu.     ...à+

Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 07, 2013, 10:14 pm
Bouhou snif! Pas moyen d'installer Arduno sur Xubuntu. Mais....
Mon daddy  a résolu le problème à la manière forte: La Dual est partie dans le tiroir: "cobayes".
Et a été remplacée par une UNO qui marche nickel. J'ai le détecteur Hall. Y'a pu qu'à bricoler une carcasse de transfo pour faire le "joint". (à consommer avec modération  Lol!)    ....à suivre...et.....à+.
Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 08, 2013, 07:47 am
Salut,

J'ai eu un problème de non reconnaissance (not in sync) une fois, j'ai bien cru que ma carte était foirée, en fait, c'est parceque j'avais monté ma carte sur une platine avec des entretoises en ferraille pour la surélever un peu. c'était très estétique, mais l'entretoise juste à côté du connecteur USB touchait le connecteur ISP du MEGA8U2 (puce USB <=> Serial), et courtcircuitait une pin. lorce que je connectais ma carte, le PC y trouvait un truc dans un mode cheulou. ue fois l'entretoise virée, hop, carte de nouveau opérationnelle.

Faut dire aussi que les trous de fixation ne sont pas super bien placés, z'ont pas du souvent jouer au mécano les p'tits gars de la team...
Title: Re: Intensité et temps minimums en analogique ?
Post by: MaximeFr59 on Nov 08, 2013, 08:47 am
Bonjour je suis nouveau sur le forum et sur arduino... il y a une partie du code que je ne comprend pas :

Code: [Select]
void setup()
{
pinMode( 1 , OUTPUT);
pinMode( 1 , INPUT);
}


Pourquoi déclarer la pin 1 en sortie puis tout de suite en entée ?? Merci
Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 08, 2013, 09:40 am
j'avais même pas vu...
Title: Re: Intensité et temps minimums en analogique ?
Post by: MaximeFr59 on Nov 08, 2013, 10:33 am
J'utiliserai un test conditionnel if plutôt que while :

Code: [Select]
#define analogPin A0
#define BP_pin 1  // bouton poussoir entre pin 1 et la masse (gnd)
float sensorValue;
word value;

void setup(){
 pinMode( BP_pin , OUTPUT);   // inutile je pense
 pinMode( BP_pin , INPUT);
 digitalWrite( BP_pin , HIGH );    // c'est ici qu'il faut le faire. la pin 1 étant en input, ça active la pull-up (une résistance entre l'entrée et VCC)
}

void loop(){
  if ( digitalRead( BP_pin) == 1){  // Si BP_pin = 1 alors on execute
     value=analogRead(analogPin);
     Serial.print("Broche Analog: ");
     Serial.println(value,1);
     delay(1000);
  }
}
Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 08, 2013, 10:57 am

J'utiliserai un test conditionnel if plutôt que while :

petites modifs :
Code: [Select]
#define analogPin A0
#define BP_pin 1  // bouton poussoir entre pin 1 et la masse (gnd)
float sensorValue;
word value;

void setup(){
//  pinMode( BP_pin , OUTPUT);   // inutile je pense (moi aussi, alors on vire)
 pinMode( BP_pin , INPUT);
 digitalWrite( BP_pin , HIGH );    // c'est ici qu'il faut le faire. la pin 1 étant en input, ça active la pull-up (une résistance entre l'entrée et VCC)
}

void loop(){
//  if ( digitalRead( BP_pin) == 1){  // Si BP_pin = 1 alors on execute  (ne marche pas je crois, digitalRead() renvoie 0 ou 255)
  if (!digitalRead(BP_pin)){            // au moins on est sûr, et dans notre cas, le BP est actif à l'état 0...
     value=analogRead(analogPin);
     Serial.print("Broche Analog: ");
     Serial.println(value,1);
     delay(1000);
  }
}


autant pour moi :

Code: [Select]
#define HIGH 0x1
#define LOW  0x0
#define true 0x1
#define false 0x0
mais dans le doute, autant tester "0" ou "tout le reste", c'est une vieille coutume en programmation
Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 08, 2013, 11:05 am
à: MaximeFr59: Le "if" c'est ce que j'avais fais au départ. Mais avec ce système, tout le code (qui va être plus conséquent), va être contenu dans le "if". Ce qui, d'après moi, n'est pas une bonne chose.
Je préfère une procédure de démmarage indépendante, et qui se fait oublier.

Ce "not sync resp...."; il y en a pas loin de 240 topics sur le forum.
Je ne les ai pas tous lus, mais je n'en ai trouve qu'un seul de résolu (par l'opération du saint esprit puisque chez moi, ça n'a pas marché.)
Les uns incriminent le driver, d'autres comme toi parlent des pin's 0 et 1, moi, j'accusais Windiou$.
Bref c'est un mystère aux causes multiples., dont certaines doivent mettre la carte dans un état stable de "not sync".
Et tant qu'un génie ne se sera pas penché sur le problème; et ban on sera emm***d**és.

Super_Cinci: De grâce, ne nous rajoute pas des instructions subsidiaires...On a déjà les neurones qui frisent avec le code "de base".
Concernant: "la petite ampoule et l'alim 500mA"; avec lesquelles tu pense ne pas risquer grand chose:
Détrompe toi; tu risque "gros". J'ai commencé comme ça, à peu près au même âge que ta musaraigne.
.....Et la soudure coûte cher....
Title: Re: Intensité et temps minimums en analogique ?
Post by: icare on Nov 08, 2013, 11:12 am
Bonjour,
Tu peux remplacer :
Code: [Select]
void setup(){
//  pinMode( BP_pin , OUTPUT);   // inutile je pense (moi aussi, alors on vire)
  pinMode( BP_pin , INPUT);
  digitalWrite( BP_pin , HIGH );    // c'est ici qu'il faut le faire. la pin 1 étant en input, ça active la pull-up (une résistance entre l'entrée et VCC)
}

par :
Code: [Select]
void setup(){
//  pinMode( BP_pin , OUTPUT);   // inutile je pense (moi aussi, alors on vire)
//  pinMode( BP_pin , INPUT);
//  digitalWrite( BP_pin , HIGH );    // c'est ici qu'il faut le faire. la pin 1 étant en input, ça active la pull-up (une résistance entre l'entrée et VCC)
  pinMode( BP_pin , INPUT_PULLUP);
}

@+
Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 08, 2013, 11:29 am
Que le code soit dans un if ou pas, ça ne change absolument rien, car une fois compilé, le if est tranformé en un branch (équivalant au goto du basic).
Code: [Select]

if (a==b){
instructions1...
}
instructions2...
deviendra à la compilation :
Code: [Select]

comparer a et b
si différent, aller directement à "instructions2"  // sous-entendu : sinon, continuer
instructions1...
instructions2...

et encore, je ne t'ai pas parlé d'assembleur (ce qu'il faudrait commencer par apprendre avant de jouer avec les langages évoulés... mais trop tard dans ton cas, c'est désespéré!). l'assembleur ne connaît pas les if, il ne sait que comparer, et sauter d'une ligne de code à une autre. XD ==> []

Code: [Select]

while(a!=b){}  // tourner en rond en attendant qu'ils soient égaux
instructions1...
sera compilé en
Code: [Select]

comparer a et b
si différent, retourner à la ligne précédente  // sous-entendu : sinon, continuer
instructions1...

une fois compilé, ça ne change pas grand chose... (bon, je vais essayer de faire un effort pour pas fusiller ton neurone). heu, je viens de voir la participation d'icare, je t'assure que je n'y suis pour rien, même si ça me fait déjà marrer d'avance ;)


Super_Cinci: De grâce, ne nous rajoute pas des instructions subsidiaires...On a déjà les neurones qui frisent avec le code "de base".
Si en plus tu en as plusieurs, ce n'est que mieux!
c'est comme le mauvais vin, la première gorgée est dure à avaler, puis plus tard, on s'y fait ;)
Je n'ai rien rajouté, juste corrigé ;) le pinMode(OUTPUT), c'est toi qui l'avais mis!

Concernant: "la petite ampoule et l'alim 500mA"; avec lesquelles tu pense ne pas risquer grand chose:
Détrompe toi; tu risque "gros". J'ai commencé comme ça, à peu près au même âge que ta musaraigne.
.....Et la soudure coûte cher....
Tu veux dire qu'elle va devenir comme toi? Boarf, si elle est capable en 2027 d'écrire sans faire de fautes, alors oui, je veux bien! (pis pour l'instant, à part tes référence au basic, tu caches bien tes défauts ;) )
Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 08, 2013, 02:46 pm
Quote
Que le code soit dans un if ou pas, ça ne change absolument rien, car une fois compilé, le if est tranformé en un branch.


Sans doute... Mais dans le code sous sa forme "écrite", tout le code sera bien dans le bloc du if. Et on va se retrouver à la fin avec une fermante de "Out of no where" située à un kilomètre de ce dont au sujet duquel elle se rapporte. Capitch ?
Je signale que je ne comprends pas encore tout ce que je fais avec le "C", et C bien ça le problème.
J'essaie un bout, je vois ce que ça donne et je tire les conclusions. Le "OUTPUT" il est venu avec le "INPUT" (il devait bien servir à quelque chose là où je l'ai pris.) Pas ma faute si les mecs ne nettoient pas leurs codes.

Quote
et encore, je ne t'ai pas parlé d'assembleur

On ne parle pas de ce qui fâche. Je me suis assez explosé le cerveau sur des "crackme's" de psychopathes; alors: Jumping! Jack...Flash!
Je demanderais bien la différence qu'il y a entre: "INPUT", et: "INPUT_PULLUP"; mais je crains de vous désespérer sur mon cas. ( "normalement"^^,  le souligné, c'est dans les noms de variables, donc d'après moi, y'en a pas.) wtf?

Quote
à part tes référence au basic

Le basic est le plus merveilleux des langages. Dommage qu'il soit un peu lent et un peu limité (enfin...un peu beaucoup.)
Dans les deux affirmations suivantes:
"tourner en rond en attendant qu'ils soient égaux" et; "si égaux, retourner à la ligne précédente"
D'après moi, y'a un os.
N'essayez pas de m'embrouiller...Je vous ai à l'oeil !
Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 08, 2013, 02:57 pm

quelque chose là où je l'ai pris.) Pas ma faute si les mecs ne nettoient pas leurs codes.

prends des codes de gonzesse alors! Nous les mecs on a déjà du mal à nettoyer nos chi*tes, alors les codes... mais c'est bourré de fleurs et petits coeurs, moins facile à lire...

Je demanderais bien la différence qu'il y a entre: "INPUT", et: "INPUT_PULLUP"; mais je crains de vous désespérer sur mon cas. ( "normalement"^^,  le souligné, c'est dans les noms de variables, donc d'après moi, y'en a pas.) wtf?

Code: [Select]

pinMode(10, INPUT_PULLUP);
// réunit les deux lignes suivantes :
pinMode(10, INPUT);
digitalWrite(10, HIGH);
// c'est un raccourcis en quelque sorte.


Le basic est le plus merveilleux des langages. Dommage qu'il soit un peu lent et un peu limité (enfin...un peu beaucoup.)

tu aurais dû naître 30 ans plus tôt ;)

Dans les deux affirmations suivantes:
"tourner en rond en attendant qu'ils soient égaux" et; "si égaux, retourner à la ligne précédente"
D'après moi, y'a un os.
N'essayez pas de m'embrouiller...Je vous ai à l'oeil !
une coquille oui, mais j'ai corrigé entre temps, désolé, pamafot, oups, et plus si je puis me permettre. il faut lire "si différent, retourn..." mais au moins, ça prouve que tu suis, donc je hais... et bravo !  :smiley-mr-green:
Title: Re: Intensité et temps minimums en analogique ?
Post by: MaximeFr59 on Nov 08, 2013, 04:54 pm
Quote
le code sera bien dans le bloc du if


Pour que le code soit plus lisible, tu peut utiliser des fonctions:

Code: [Select]

void maFonction1()
{
liste d'instructions...
return;
}

void maFonction2()
{
liste d'instructions...
return;
}

int maFonction3(int parametre1)
{
int result = 0;
liste d'instruction...
return result;
}

void loop()
{
   if (conditions)
   {
   int maVariable;
   maFonction1();
   maFonction2();
   maVariable = maFonction3(123);
   }

}



De cette manière tu ne fais appel qu'a des fonctions dans un bloc if, le code sera beaucoup plus lisible ;)
Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 08, 2013, 05:25 pm
la meilleure solution, c'est de faire une mise en page. l'EDI arduino le permet facilement, car il conserve les espaces de début de ligne. ainsi, à chaque fois qu'on ouvre un crochet (bloc d'instructions), on décale de 2 espaces (ou tabulations, mais les tabulations ne sont pas forcément interprétées de la même façon suivant l'éditeur : selon l'humeur...),

Code: [Select]

void loop(){
  instruction;
  if (test) {
    action;
    instruction;
    while(test2){
      instruction;
      action;
    }
  } else {
    instruction;
    for (i = O; i < 10; i++){
      if(test3){
        action;
        instruction;
        appel_fonction();
      }
    }
  }
}


C'est comme ça que je fais et je m'y retrouve, même sur des blocs de plusieurs centaines de lignes, il arrive que j'ai 20 ou 40 espaces en tête d'une ligne...

A chacun son truc... la mise en fonction, c'est bien, mais ne pas oublier que ça prend pas mal de mémoire à chaque appel et peut devenir assez ralentissant si on a besoin de vitesse.
Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 08, 2013, 06:11 pm
Les fonctions c'est pas facile.
L'indentation, je la fait, même en basic (et en python elle est obligatoire, même que c'est une sacré m***e entre les espaces et les tabulations.)
Pour ça: pinMode(10, INPUT_PULLUP) Le souligné (_) n'est pas dans la doc de ref du "C".
C'est spécial à Arduino ?
Il faut vraiment qu'ils fassent une version html téléchargeable de la doc de ref "Arduino". (avec tout le pognon qu'on leur laisse...)
HTTrack m'a remmené que des liens ripoux et des: "forbiden". Je vais retenter avec le réglage qui tue.
40 espaces d'indentation !!!! Pfiou!!!!!!!!!!
Title: Re: Intensité et temps minimums en analogique ?
Post by: haifger on Nov 08, 2013, 06:22 pm

Il faut vraiment qu'ils fassent une version html téléchargeable de la doc de ref "Arduino". (avec tout le pognon qu'on leur laisse...)

Ça n'est peut-être pas valable pour tous les systèmes (et je ne sais pas lequel tu utilises) mais sur les systèmes de type Debian et dérivés, l'installation du paquet arduino-core place une copie de la doc html dans /usr/share/doc/arduino-core/reference/index.html
Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 08, 2013, 06:37 pm

Pour ça: pinMode(10, INPUT_PULLUP) Le souligné (_) n'est pas dans la doc de ref du "C".
C'est spécial à Arduino ?

non, le souligné est un caractère comme les autre, qui permet de rendre les identifiants plus faciles à lire, en C, on écrit généralement les identifiants en minuscule et dans le cas de plusieurs mots, une majuscule à partir du second. Exemple : uneVariableQuatreMots. mais ce n'est pas obligatoire et je trouve moins lisible que "une_variable_quatre_mots". Toujours en C, les macros (définies par #define) et constantes sont souvent mises en majuscules, d'où l'utilisation du souligné pour séparer les mots. ce n'est que pour faire joli, comme l'identation, il n'y a pas de format oligatoire. Moi, je n'utilise pas du tout ces formats, c'est mon choix et je el vis plutôt bien (pis j'en ai rien à péter).

Il faut vraiment qu'ils fassent une version html téléchargeable de la doc de ref "Arduino". (avec tout le pognon qu'on leur laisse...)
HTTrack m'a remmené que des liens ripoux et des: "forbiden". Je vais retenter avec le réglage qui tue.
sous windows : Program Files\Arduino\reference\index.html si ça peut t'aider...

fume pas trop quand même XD
Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 08, 2013, 07:52 pm
Quote
sous windows : Program Files\Arduino\reference\index.html si ça peut t'aider...

Aaaaaaah !  ça aide pas...ça SAUVE ! Du coup , ça va se calmer niveau: questions.

Une ch'tit dernière.. 8) Pour la route:
Dans: pinMode(10, INPUT_PULLUP); si le souligné est un caractère non significatif, peut-on l'écrire: INPUTPULLUP comme un mot clé; ou faut il mettre un espace ?
Question subsidiaire: En C les espaces sont ils significatifs (critiques).
Quote
fume pas trop quand même smiley-lol

3 par jour..No more...Sinon ça plombe le budget .
Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 08, 2013, 08:11 pm
ok, 3 pas plus.

un espace ne vaut rien en C, mais vraiment rien du tout. tu pourrais écrire tout un programme sans aucun espace, ça marcherait pareil. Ah si... pour les instructions du préprocesseur (celles qui commencent par # ). non, pas tapper!

si tu as envie de t'amuser, tu peux aller te promener (en lecture seule, hein!) dans Program Files\Arduino\hardware\arduino\cores\arduino, c'est tout plein de fichier .h (faut pas les fumer, ce ne sont que des fichiers), des .c et .cpp. quand tu compiles un programme, le compilateur va aller chercher des bouts de ces fichiers pour intégrer les fonctions que tu utilises.

Tu y trouveras par exemple
Code: [Select]

#define INPUT 0x0
#define OUTPUT 0x1
#define INPUT_PULLUP 0x2


donc tu peux écrire pinMode(1, 2); ça équivaut à pinMode(1, INPUT_PULLUP); puisqu'il vaut 2... "INPUT PULLUP" ne veux absolument rien dire, puisque PULLUP n'est pas défini.

Bon, il est temps d'aller faire à manger!
Title: Re: Intensité et temps minimums en analogique ?
Post by: Carolyne on Nov 08, 2013, 10:08 pm
Et ben purée! ça c'est drôlement intéressant. C'est donc à ça que servent tous ces p....n de fichiers qu'il y a un peu partout.
Et ben tu va me croire, mais j'étais persuadée qu'ils ne servaient à rien; que c'étaient des sortes de "backup", d'archives; qui n'avaient servis que pour "construire" le soft.
Parce que j'ai chargé des softs en version "source", et dans les "read me", j'ai vu que c'était des fichiers qui "construisaient" le soft.
Je ne suis arrivé à rien avec. Et ça m'a bien faite râler. grr.
Il fallait  "compiler". J'ai donc chargé un compilateur.(gcc) Mais il fallait compiler le compilateur. wtf?  Avec en plus, une série de manips de diinnnngue. Et dans la doc, y'avait marqué: Que malgrès tout ça, c'était pas sûr qu'on y arrive.
Un jour...Je compilerai ! Et je ferai rendre gorge à ces foutus: "Make" et "Configure".
Title: Re: Intensité et temps minimums en analogique ?
Post by: Super_Cinci on Nov 08, 2013, 10:44 pm
Toute la puissance du #include... on croyait que digitalWrite() était du C? bah non, c'est une fonction (soit dit en passant : très très mal écrite, mais ça, c'est un autre débat auquel tu risques de prendre part si tu continues à traîner dans le coin, je te sens bein partie...). Ce qui est dommage, c'est qu'à la compilation, il ne soit pas pondu un seul et unique fichier C regroupant tous les codes utilisés, ce serait très instructif. j'ai déjà décodé un programme compilé, mais il était petit. Mais il m'a appris beaucoup sur tout ce que ces fichiers rajoutent inutilement...

car oui, en C, il n'y a pas que la structure du code qui compte, mais aussi le préprocesseur, une sorte de compilation avant la compilation, avec des # partout. et arduino en abuse un peu, mais bon, c'est l'une des plateformes les plus accessibles, alors on fait avec, ou pas.