Show Posts
Pages: 1 ... 41 42 [43] 44 45 ... 87
631  International / Le bar / Re: Calcul de distance, HELP ! on: August 12, 2013, 12:46:09 am
Moi, j'aurais fait plus simple (la mécaflu, c'était pas trop mon truc). J'aurais fait 3 ou 4 mesures (pression, diamètre tube, distance), appliqué à une parabole et zou, on trouve une certaine relation entre les données, on en tire une petite formule assez simple, et basta.

Ensuite, on s'aperçoit que ça marche pas, on reprend tout à 0 et on appelle B@tto.

(ok, je sors...)
632  International / Français / Re: Stabilité des mesures en fonction de l'alim ?!! on: August 12, 2013, 12:36:26 am
Oui, je me répète un peu, alors je tente un résumé...

Sur un montage, j'ai eu ce souci de valeurs analogiques qui bougent toutes seules. j'y ai remédié en utilisant une tension de ref sur Aref. j'utilise alors cette tension Aref comme source pour mes potars ou capteurs. mais le souci, c'est que la pin du Aref du µP est directement reliée à la référence de l'ADC, soit AVcc au reset. Comme AVcc = Vcc, si on met une zener de 4.7V, il va y avoir pas mal de courant à passer par là tant qu'on ne fait pas un changement de référence Aref, au risque de détruire une partie du composant. je ne vois pas trop comment résoudre ça, mais une fois la référence externe en place, ça ne bouge plus du tout. utiliser un relais qui commuterait une bonne tension de référence une fois Aref déconnecté (par software) de AVCC?

Pour avoir branché un oscilloscope sur le Aref de la carte, je vous confirme que ça bouge dans tous les sens sur près de 200mV, en gros, pour s'en affranchir, il faudrait faire mesure = analogRead(xx) >> 3, soit faire retomber la précision à 7 bits (0 à 127 au lieu du 0 à 1023 d'origine)...
633  International / Français / Re: [Projet] Un tableau de bord numérisé on: August 11, 2013, 12:59:08 pm
Effectivement, pour l'instant, j'ai fait mes premières brides de code avec PSPad, un éditeur miltulangage (très pratique en PHP qui propose une coloration syntaxique bien plus claire qu'arduino, et qui a l'avantage de lister toutes les fonctions et #define d'un fichier pour se retrouver et naviguer plus vite. On peut lui associer un (des) compilateur(s), il faudrait essayer.

sinon, j'ai monté une platine avec une dizaine de potars et 24 inters, une alim 12V + 5V, et en plus un UNO qui génère la trame "XR25" (trame série du calculateur d'injection) avec de nombreuses données qui bougent (vitesse moteur, durée d'injection, avance allumage, dépression admission...), et quelques signaux d'impulsions (vitesse véhicule, débitmètre...). J'ai donc un banc d'essai (complet?) pour le développement sur le 2560, car ce n'est pas facile de développer un truc en conduisant.
634  International / Réalisations et Projets Finis / Re: Détecter le contact de broches numériques entre elles on: August 09, 2013, 03:49:09 pm
Si j'ai bien compris, tu tentes de lire un clavier?

je trouve ton code super compliqué pour le peu qu'il fait, et à mon avis, ça fait peur...

peux-tu expliquer un peu plus? c'est quoi mackey?
635  International / Français / Re: Statut du taxi on: August 09, 2013, 03:41:06 pm
Tu as en effet 5 fils (5 lampes) et un commun qui doit sûrement être une alimentation +12 et non une masse.

De là, il te faut 5 convertisseurs 12V-5V, en utilisant simplement pour chaque, une résistance et un petit transistor NPN en collecteur ouvert. tu branches tes 5 sorties de transistors (les collecteurs) sur ton arduino préféré, 5 entrées avec pull-up, et hop. une entrée à 1 indique que le voyant correspondant est allumé.

si le commun de ton matériel est une masse, ça ne change rien, sauf que toutes tes entrées seront à 1, sauf celle du voyant allumé.

je laisse les copains te donner un schéma des transistors.

bonne soirée!
636  International / Français / Re: échange ecran lcd on: August 09, 2013, 03:33:49 pm
Ah ben tu as plein de chances! en général, les lcd sont limite faits sur mesure sur les appareils chers, donc les datasheet sont inexistantes.
637  International / Français / Re: ordi de bord on: August 09, 2013, 03:31:38 pm
la fatigue prenant le dessus, je te dirais juste que quand tu fais "if (eauPin > vent1_on)", le compilateur traduit en "if (A0 > 92)", ce qui sera toujours faux (A0 = qqchose comme 14 je crois).

il faut donc faire "if (analogRead(eauPin) > vent1_on)" pour déclencher une conversion de eauPin.

ensuite, ";void setup()" ne doit pas trop marcher (le point-virgule)

"vent1Pin = digitalRead(eauPin);" ne peut pas marcher, vent1Pin est un alias, une constante, tu ne peut pas lui assigner une valeur. par contre, digitalWrite(vent1Pin, digitalRead(eauPin)); devrait te rendre un petit service.

Je ne vais pas plus loin, j'aurais plus vite fait de réécrire ton code que de le corriger en t'expliquant.

relis tout et bon courage,

Cinci
638  International / Français / Re: échange ecran lcd on: August 09, 2013, 03:20:31 pm
Je récupère tout ce qui possède un LCD, mais à chaque fois, je tombe sur des écrans à la con, genre celui-là : http://forum.arduino.cc/index.php?topic=124824.0. mais si tu comptes ne rien en faire, il trouvera une petite place dans le tiroir des trésors.

Désolé, en échange, je n'ai pas de diode blourai...
639  International / Français / Re: ordi de bord on: August 09, 2013, 02:08:32 am
Salut,

Pour revenir à la lecture des infos analogiques, je me suis posé pas mal de questions. J'ai constaté que déjà, la référence du CAN, c'est VCC, et que le petit régulateur de l'arduino est vraiment crade, et VCC bouge beaucoup. Donc pour commencer, il faut lui donner une vraie référence bien stable. Il faut peut-être intervenir au niveau du core arduino également, car dans wiring_analog.c, on peut lire :

Code:
uint8_t analog_reference = DEFAULT;

void analogReference(uint8_t mode)
{
// can't actually set the register here because the default setting
// will connect AVCC and the AREF pin, which would cause a short if
// there's something connected to AREF.
analog_reference = mode;
}

L'idée d'un court-circuit n'est pas très engageante...

Pour les capteurs en eux-même, si on peut les déconnecter du circuit 12V, j'utilise un petit générateur de courant à base d'un PNP (genre 2N2905 ou 2N2907). Si on fait passer un courant constant dans une résistance, on obtient alors une tension constante, complètement indépendante de l'alimentation, c'est déjà un grand pas en avant! de plus, la tension obtenue est directement proportionnelle à la valeur de la résistance (mesure linéaire).
Par exemple, si on fait passer 1mA dans une résistance, alors la tension mesurée en mV sera égale à la résistance (utile pour faire des mesures, non?).

Autre exemple, on veut mesurer un capteur qui donne une résistance de 1000 à 3500 ohms, on en déduit que pour un courant de (5/3500) = 1,43mA, on peut alors mesurer une tension de 5V pour 3500ohms et 1,43V pour 1000ohms. La conversion donnera alors une valeur entre 293 pour 1000ohms et 1023 pour 3500ohms, sous une tension de référence AREF de 5V.

hi hi hi...
640  International / Français / Re: [Projet] Un tableau de bord numérisé on: August 09, 2013, 01:50:02 am
Salut la communauté,

Je reviens d'une semaine de vacances où je n'avais rien à faire de mes soirées une fois ma fille couchée. J'ai donc ressorti mon vieux projet (et oui, toujours d'actualité).

Après quelques changements de véhicule, il était temps de s'y remettre et de revoir certaines choses.

Comme je l'avais précisé, la nouvelle receveuse du gadget me simplifie grandement la tâche grâce à son calculateur d'injection qui me fournit en temps réel une trame de 37 octets sur l'état du moteur (température, rotation, capteurs, durée d'injection, avance allumage, défauts...). Il ne me reste donc plus grand chose à traiter : gestion de l'accélérateur (je remplace le câble par un potar et un servomoteur), vitesse en km/h, conso, quelques capteurs. Je me suis donc rabattu sur un MEGA2560.

Presque toutes les mesures seront traitées par interruptions, ce qui veut dire que loop() sera vide (enfin presque). Voici la liste des INTs que j'ai déjà prévues :

ISR (PCINT0_vect) : gestion d'un clavier matriciel 4x5, les touches sont bufferisées dans un FIFO.
ISR (USART3_RX_vect) : réception de la trame de données série du calculateur d'injection, les données remplissent un tableau de 37 bytes.
ISR (TIMER4_OVF_vect) et ISR (TIMER4_ICP_vect) : calcul de la vitesse en km/h et incrément des compteurs kilométriques
ISR (TIMER5_ICP_vect) : calcul de la consommation (xx,x l/100)
ISR (ADC_vect) : numérisation automatique de 8 entrées analogiques renseignant un tableau de 8 word
ISR (WDT_vect) : timer de déclenchement à intervalles réguliers (256ms) pour le régulateur de vitesse

Bref, l'idée est que toutes les variables de données se mettent à jour automatiquement, il suffit alors de les lire quand on en a besoin, c'est tout... De même, j'aurai 3 sorties servomoteur gérées directement par les sorties hard PWM du timer1, genre un simple OCR1A = valeur; suffit à changer la position du servomoteur. Pour les deux écrans du TDB, j'utilise USART 1 et 2 pour leur envoyer les données à afficher.

Tout ça est bien gentil, mais j'ai eu la chance d'ouvrir le wiring.c et d'y découvrir toute une initialisation barbare des timers, ainsi que de l'ADC. j'ai donc viré tout ça, histoire que le core arduino ne me configure pas les ressources de traviol pour rien (de même pour les fonctions delay(), micros()..., je les ai virées). Je configure le tout directement par les registres, en lisant le datasheet de l'AVR. J'ai aussi viré la gestion de l'USART3 pour pouvoir récupérer l'INT correspondante. J'ai aussi vu quelque part (dans le main.c je crois) qu'entre deux exécutions de loop(), il y avait un "doSerialEvents();", ce qui ne me plait pas trop, il faut que je vois ce que c'est et le virer également au besoin.
Ne serait-ce que pour la conversion analogique numérique, analogRead() prend un temps fou, car elle lance une numérisation et attend les 104µs de la conversion pour obtenir le résultat. Il faut savoir que 104µs représentent 1664 instructions (oh le beau nombre!), et que tout ça, c'est perdu dans un while(...){rien;}. sur 8 conversions à la suite, ça nous fait à peu près 13 500 instructions de perdues. Il faut quand même savoir que le CAN est indépendant, et qu'il fait les conversions tout seul dans son coin sans utiliser le CPU. J'utilise donc l'INT du CAN, déclenchée une fois la conversion terminée, et qui relance elle-même une nouvelle conversion puis rend la main au programme. Ca prend à peine 30 instructions contre les 1700 du core arduino. On apprend beaucoup en déchiffrant les datasheets...

Je pense gérer moi-même la gestion des ports série par la suite, car décidément, l'équipe arduino ne s'est pas trop occupée des temps de traitement...

Restera à voir si les interruptions ne se bouffent pas trop les unes-les-autres, que ça me laisse un peu de temps processeur pour le traitement...

A suivre!
641  International / Français / Re: Arduino et les freezes on: May 31, 2013, 11:04:59 am
Salut,

Il y a des tas de raisons pour avoir du freeze, et souvent, comme tu le dis, perturbations extérieures, ou boucles infinies (un while dont la condition ne se vérifie jamais par exemple).

Je ne vois pas d'autres solutions que de relire entièrement ton soft (surtout si tu as pompé des trucs tout faits sur le net).

Pour ton relais, ce n'est pas l'alternatif qui te gêne, mais la bobine elle-même du relais qui doit te renvoyer des saloperies sur l'alim (c'est un gros relais?) à chaque commutation.

tu n'as pas le choix que de bien te prendre la tête, alors bon courage!
642  International / Français / Re: Minitel et Arduino : c'est reparti pour un non-fonctionnement on: April 07, 2013, 02:17:21 am
à la fin de presentation() :

Code:
while(Serial1.available() <= 0) {   
  }
  Serial1.print(hautGaucheEfface);
  inByte = Serial1.read();

je ne suis pas sûr que ton test soit bon dans le while, j'ai l'habitude d'écrire while(!Serial1.available()){}.

Reste aussi que le minitel peut envoyer des choses, donc avant de faire ton while, fais un flush du tampon série.

Mais si tu as aussi un bug dans ta liaison USB... ?
643  International / Français / Re: 1er schema : on se moque pas on: February 09, 2013, 03:34:00 pm
étonnant, l'image est pourtant bien là et très parlante pour ton schéma. En fait, tu as fait trois circuits qui n'ont de commun que la masse, et même au niveau capteur, pourquoi utiliser un thyristor? j'imagine que c'est pour biper tant qu'on n'appuie pas sur le bouton?
644  International / Français / Re: TIMER1 on: February 09, 2013, 02:25:57 pm
Salut,

du fait que les timers ont trois comparateurs sur le mega, et deux seulement sur le uno, le mega a des registres en plus, et les bits ne sont pas au même endroit. mais le datasheet de atmel est vraiment très bien fait je trouve, et si tu connais déjà la bidouille de registres, alors tu t'en sortiras très bien!

Les arduinos sont assez polyvalents, donc l'utilisation des registres est longuement documentée (et c'est très bien)!
645  International / Français / Re: 1er schema : on se moque pas on: February 09, 2013, 07:49:52 am
aïe...

l'électronique de détection, c'est une spécialisation d'un métier, ne s'y frotte pas qui veut!

Je ne vois pas l’intérêt d'utiliser un montage où l'ampli-op est alimenté par le capteur, sauf si on maîtrise parfaitement la chose, ce qui je crois n'est pas le cas.

dans le montage de Fred, la sortie étant reliée à la masse, ça donnera toujours un zéro.

Pour faire un schéma, il faut toujours que les courants descendent (ce qui implique de savoir dans quel sens ils circulent, donc d'avoir un minimum de notions) du haut vers le bas.

C'est en faisant qu'on devient faiseur... je vais te refaire ton schéma dans une logique d'électronicien, on y verra tous un peu plus clair...



voilà, c'est TON schéma. mais qu'attends tu réellement de ton capteur?
Pages: 1 ... 41 42 [43] 44 45 ... 87