Show Posts
Pages: 1 [2] 3 4 ... 12
16  International / Français / Re: [Interruptions] Filtrage necessaire ? on: February 27, 2012, 02:37:14 pm
Hello etheriel,

Le schéma de l'expérience que je viens de réaliser est extrêmement simple :


J'ai remplacé le bouton poussoir par les deux fils qui viennent de ta roue. Dans cette configuration, c'est le front montant que tu dois surveiller car lorsque les deux fils font contact, la tension appliquée au µC passe brusquement de 0V à +5V.

Tu peux également mettre la résistance entre le condensateur et le +5V. Le fil qui va au µC doit toujours provenir de la jonction entre la résistance et le condensateur. Dans ce cas, c'est le front descendant que tu dois prendre en compte.

Ce système composé d'une résistance et d'un condensateur présente quand même un plus grand risque d'erreur que les systèmes plus complexes.
17  International / Français / Re: [Interruptions] Filtrage necessaire ? on: February 27, 2012, 10:40:22 am
Quote
Pour mon expérience personnelle avec un poussoir référence :
http://www.gotronic.fr/cat-boutons-poussoirs-513.htm?&pagenumber=3  Poussoir D6
J'ai supprimé tout effet de rebond avec juste la résistance de tirage (dîte "pull up") en entrée micro et un condensateur de 100nF en // sur les broches du poussoir.
C'était osé de se limiter à un schéma aussi simpliste mais j'avais la flemme de câbler et j'ai tenté pour voir et ça a marché sans problème

Je viens d'essayer. ça marche !

J'ai fait 256 essais consécutifs avec une résistance pull-down de 10K et un condensateur céramique de 100nF en parallèle avec le bouton. Liaison au µC par un câble de 10 cm ==> pas un seul rebond.
Merci 68tjs. Cela va simplifier ma carte de développement et me faire gagner de la place.

P.S. Cela ne me fera pas gagner des sous car j'avais déjà acheté les CD40106 !
18  International / Français / Re: [Interruptions] Filtrage necessaire ? on: February 27, 2012, 01:24:33 am
Hello 68tjs

J'ai fait quelques petits tests avec un bouton poussoir du type tact switch comme pour le reset de l'Arduino. Le bouton est raccordé d'un côté à GND et de l'autre côté à +5V à travers une résistance de 10K. Le point commun entre le bouton et la résistance est raccordé à la pin PB0 d'un Atmega1284, ce qui correspond à l'entrée du Timer/compteur 0. Le quartz est de 16 MHz. L'état du compteur est affiché par 8 leds sur le port A. Le programme est écrit en assembleur.

Pour l'étude des rebonds à l'appui du bouton, je compte les fronts montants sur 40 tests consécutifs:
0,1,1,0,0,0,0,0,0,0,2,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0

Pour les rebonds au relâchement du bouton, je compte les fronts descendants:
4,1,3,2,3,3,0,0,8,4,0,2,1,1,2,2,16,1,1,0,2,0,1,0,1,0,66,1,0,7,2,0,0,2,4,2,10,3,0,1

Je me suis demandé si cela changerait quelque chose de mettre la résistance entre le bouton et GND et de raccorder le point commun au µC.

Dans ce cas, à l'appui du bouton, ce sont les fronts descendants qui constituent des rebonds:
0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,0,0

Au relâchement, les rebonds sont des fronts montants :
0,0,4,2,13,1,28,1,0,1,0,0,0,0,1,1,1,0,1,0,79,0,0,1,1,0,0,1,0,0,0,0,0,5,0,0,1,1,0,0

Ma conclusion ne concerne évidemment que mon bouton poussoir. Celui-ci montre des rebonds plus nombreux au relâchement sur 80 tests.

J'ai oublié de mentionner que le schéma que j'ai présenté provient du site suivant : https://sites.google.com/site/kfodorprojects/home/electronics-projects-1/hex-switch-debouncer-module, lui-même faisant référence à un article détaillé : http://www.ganssle.com/debouncing.pdf
19  International / Français / Re: [Interruptions] Filtrage necessaire ? on: February 26, 2012, 02:56:50 pm
Hello 68tjs,

C'est vrai, on peut faire un Trigger avec un LM393 ainsi qu'avec beaucoup d'autres amplificateurs opérationnels. Je n'ai jamais essayé le LM393 mais j'ai fait des essais avec un LM324 en mono-alimentation 5V et cela marche aussi bien qu'avec un Trigger "officiel" comme le CD40106. Personnellement, j'ai jeté mon dévolu sur le 40106 car il comporte 6 Triggers et avec 2 chips, je peux traiter jusqu'à 12 boutons ou interrupteurs.

Pour la valeur des résistances, tu plaides pour que R2 soit nettement inférieur à R1. Et c'est vrai que dans ce cas, lorsqu'on appuie sur le bouton, la tension chute très rapidement à zéro.
Cependant, les rebonds se produisent de la même manière quand tu relâches le bouton. Autrement dit, lorsque tu relâches le bouton, la tension commence à remonter vers le +5V mais les rebonds se produisent dans le sens inverse de l'appui : les rebonds sont formés par des micro-contacts qui se produisent encore avec le 0V. Comme R2 est faible, la rechute de tension est brutale. Si jamais le tension du condensateur vient de dépasser le seuil supérieur (qui fait passer la sortie à 1), cette brutale chute de tension risque éventuellement de faire repasser l'autre seuil à la baisse.
Lorsque R1 et R2 sont élevés, ils empêchent les variations brutales de la tension du condensateur, que ce soit à la hausse ou à la baisse et donc on se tient loin des zones à risque. Maintenant, je suis bien conscient que la marge est très large avec les valeurs que j'indique. J'ai fait des expériences avec diverses valeurs de résistances. Je suis descendu jusqu'à R1 = R2 = 1,8K et même ces valeurs ne m'ont donné aucun rebond mais il est clair que plus on descend, plus on s'approche de la possibilité d'un vilain rebond qui parvient tout juste à faire rebasculer le trigger.

Les valeurs du schéma que je propose retardent le signal de sortie de 20 à 30 ms, aussi bien pour le front montant que pour le front descendant, de sorte que la durée totale du signal de sortie est à peu près équivalent à la durée du signal entrant.
Si ce retard est un problème pour le programme, on peut réduire la valeur des résistances.

Je voudrais ajouter une information pour etheriel. Au lieu de capter la réponse par une interruption externe, il serait préférable de la capter par un timer configuré en compteur externe. En effet, une interruption provoque chaque fois un appel à une ISR (interrupt service routine) et cela fait perdre pas mal de cycles à l'Atmega. Un compteur s'incrémente automatiquement à chaque impulsion d'entrée, sans intervention logicielle, de sorte que l'Arduino peut traiter une fréquence d'impulsion plus élevée sans perte de données. Le compteur ne produit une interruption qu'à chaque overflow.
20  International / Français / Re: [Interruptions] Filtrage necessaire ? on: February 25, 2012, 05:46:34 pm
Hello etheriel,

Je viens justement de passer au moins 15 jours à discuter par mail avec un ami électronicien et à expérimenter concrètement des systèmes hardware anti-rebond en vue de fabriquer une carte de développement pour les AVR.

Ton problème est typiquement celui des rebonds produits par tout bouton-poussoir, interrupteur, etc...

Voici ci-dessous le montage qui m'a donné entière satisfaction. Avec un tel système il n'y a strictement plus moyen de produire le moindre rebond. Une pression (rapide ou lente) sur le bouton ne donne qu'une seule impulsion en sortie. Cette impulsion peut alors être détectée par une interruption externe (INT0 ou autre) sans aucun ajout de programmation d'attente.

 Le système se compose de 2 résistances, d'une diode et d'un condensateur de 100nF (un petit condensateur céramique. Ceci constitue un filtre RC déjà pas mal efficace. Ce filtre est suivi d'une porte du CD40106 qui est un chip comportant 8 portes qui sont des Triggers de Schmitt. Ces petites bêtes ont l'immense avantage d'avoir deux seuils de basculement différents, ce qui bloque tout rebond qui parviendrait encore à traverser le filtre. La sortie du Trigger se raccorde à l'Atmega à travers une résistance de 330 Ohms.

Si tu as des questions, je t'écoute.
21  International / Français / Re: Reprogrammer le firmware d'un disque dur avec un cable usb on: February 23, 2012, 02:34:00 pm
Hello Themails7,

Je suis très content que ton module fonctionne.

La Pin GND doit obligatoirement être raccordé au GND de ton circuit.
Les Pins 3,3V et 5V ne servent pas à alimenter le module. Il est alimenté par l'USB. Ces pins peuvent alimenter ton circuit à toi, s'il n'est pas trop gourmand.
22  International / Français / Re: Reprogrammer le firmware d'un disque dur avec un cable usb on: February 23, 2012, 02:51:49 am
Hello Themails7,

J'ai lu to MP. Sorry, ton message avait été déplacé et je l'avais raté.

Pour ton problème, je n'ai pas de solution miracle.
Es-tu certain de ta connexion Rx-Tx pour le test de loop-back ? Si oui, il faut tester tous les autres éléments de la chaîne.
  • Vérifier dans le Gestionnaire de Périphériques qu'un nouveau port COM est bien créé lorsque tu branches le module
  • Vérifier que ton logiciel de Terminal est bien connecté sur ce port COM
  • Pour ma part, j'utilise "Br@y's Terminal" https://sites.google.com/site/terminalbpp/
  • Vérifier ton câble de liaison USB en testant un autre périphérique USB avec ce câble
  • Si cela ne marche toujours pas, il y a des chances que le module soit en cause
  • Tout n'est pas encore perdu, mais çà devient plus difficile. Repère sur la datasheet du CP2102 les pin Rx et Tx et tâche de faire le loop-back à ce niveau
  • Si çà ne va pas, c'est vraiment la puce qui est foutue. Il n'y a plus qu'à renvoyer le module ou  en acheter un autre

Voilà du travail en perspective, en espérant que tu trouves rapidement le grain de sable dans le rouage.
23  International / Tutoriels et cours / Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5 on: January 24, 2012, 02:18:19 pm
Voici la comparaison de la compilation d'un programme avec Studio 5 (à gauche) et l'IDE Arduino (à droite). Le programme utilise la librairie OneWire et la transmission série pour afficher dans le terminal la T° d'une sonde DS18b20.



On voit donc (si on a des yeux comme des loupes) que le programme fait 5760 bytes dans Studio et 5838 bytes dans l'IDE.
Conclusion:
  • 1° pas de grosse différence entre l'IDE et Studio
  • 2° le Serial.begin n'entraîne pas d'augmentation de 10K

J'imagine qu'une telle augmentation signifie que toutes les fonctions de la librairie sont compilées en fichier .hex

En supprimant tous les appels à Serial, la compilation dans Studio donne 2344 bytes. Autrement dit, les appels à Serial me coûtent 5760 - 2344 = 3416 bytes.
24  International / Tutoriels et cours / Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5 on: January 23, 2012, 03:30:08 pm
Désolé, je viens de rentrer d'une semaine au soleil du midi.

Demain, j'essayerai une comparaison de taille du fichier hex avec l'ide et avec Studio.

Merci à Mitchbzh pour le rapport de l'essai avec l'IDE 1.0
25  International / Français / Re: [Phase 2 : tri] Des catégories pour le forum on: January 13, 2012, 02:12:58 pm
OK, OK.

Alors, interdit aux moins de 21 ans.
26  International / Français / Re: [Phase 2 : tri] Des catégories pour le forum on: January 13, 2012, 09:12:43 am
Et aussi "déballages exotiques", mais interdit aux moins de 18 ans  smiley-cool
27  International / Français / Re: [Phase 2 : tri] Des catégories pour le forum on: January 11, 2012, 05:36:40 pm
Voilà. J'ai voté.
Comme la plupart, j'ai limité le nombre de rubriques à des rubriques générales. Mais même le classement en rubriques générales peut être ardu. Par exemple, la plupart des topics concernent en même temps de la programmation Arduino, parfois aussi PC , du matériel et de l'électronique. Et certains projets commencent sous forme de quelques questions vagues de software ou de hardware et aboutissent après quelques semaines à un projet fini. Et, pour parler de mon expérience propre, un topic peut commencer comme un partage d'interrogation et évoluer vers un tutoriel.

Tout ceci pour dire que dès qu'un classement est adopté, il y aura pas mal de topics difficiles à classer ou pouvant aller dans plusieurs catégories à la fois.
28  International / Français / Re: Vitesse d'affichage du forum on: January 11, 2012, 03:32:06 am
Un nouvel essai pour joindre mon fichier donne toujours un échec ce matin : The upload folder is full. Please try a smaller file and/or contact an administrator.
29  International / Français / Re: Vitesse d'affichage du forum on: January 11, 2012, 03:27:24 am
Oui, Jean-François. Il est plus réactif. Avant, cela prenait parfois près d'une minute pour accéder à une page, de sorte que j'hésitais régulièrement à consulter une page. Et ce n'était pas seulement le forum mais aussi tout le reste du site Arduino.cc
Maintenant, l'attente est entre 1 et 5 secondes. Espérons que cela dure.

Cependant, hier soir je n'ai pas pu attacher à mon post un fichier compressé de 2500 bytes. Par contre, j'ai pu inclure le matériel en trois parties non compressées (total ~5000 bytes) sous forme de "code". La logique informatique est parfois obscure !
30  International / Tutoriels et cours / Re: [Résolu] Intégration du langage Arduino dans AVR Studio 5 on: January 10, 2012, 05:22:24 pm
Voici le fichier ReadMe.txt:
Code:
Studio 5 permet de compiler et de flasher les programmes et librairies Arduino.

Pour ce faire, il faut créer un répertoire nommé AVR_Studuino_xxxx (remplacer xxxx par le numéro de votre version de l'IDE Arduino, par exemple AVR_Studuino_0022).

Ce répertoire peut être placé n'importe où, par ex. dans ...\Mes Documents\AVRStudio pour rester dans l'environnement de Studio.

Les fichiers Environnement.txt et Template.txt sont à transférer dans le répertoire AVR_Studuino_xxxx.

Ouvrir Environnement.txt et suivre les étapes décrivant les fichiers à copier dans AVR_Studuino_xxxx.

Voici ensuite le fichier Environnement.txt:
Code:
Environnement.txt
-----------------

Ce fichier décrit la mise en place de l'environnement permettant à Studio 5 de compiler des programmes Arduino.

Les étapes 1 à 4 sont à mettre en place une seule fois et sont valables pour tous les programmes Arduino.


Etape 1 : Création du fichier « libcore.a »
  •  Compiler n’importe quel sketch dans l’IDE Arduino. Ne pas fermer l’IDE.
  •  Aller dans C:\Documents and Settings\[votre identité]\Local Settings\Temp\buildxxxxxxxxxxxxxxxxxx.tmp
  •  Copier le fichier « core.a » dans AVR_Studuino_xxxx
  •  Renommer la copie « libcore.a »

Etape 2 : Copie des fichiers headers du core
  •  Aller dans le répertoire ...\arduino-xxxx\hardware\arduino\cores\arduino
  •  Copier  tous les fichiers « .h » dans le répertoire AVR_Studuino_xxxx

Etape 3 : Copie d’avrdude
  •  Aller dans « …\arduino-xxxx\hardware\tools\avr\bin »
  •  Copier le fichier « avrdude.exe » dans AVR_Studuino_xxxx
  •  Aller dans « …\arduino-xxxx\hardware\tools\avr\etc »
  •  Copier le fichier « avrdude.conf » dans AVR_Studuino_xxxx

Etape 4 : Préparation de Studio 5
  •  Menu Tools ==> Extension Manager
  •  Installer AVRGCC C++(Beta)
  •  Installer Terminal Windows
  •  Fermer et relancer Studio 5

L'étape 5 est à effectuer à chaque nouveau projet

Etape 5 : Création d'un nouveau projet Arduino
  •  A l'ouverture de Studio, cliquer sur "New Project"
  •  Cliquer C++ puis C++ Executable Project
  •  Donner un nom au Projet et à la Solution puis cliquer OK
  •  Studio crée les répertoires [solution] dans AVRStudio et [Project] dans [Solution]
  •  Choisir le microcontrôleur
  •  Studio 5 propose alors un canevas de programme par défaut
  •  Remplacer le texte du canevas par le texte du fichier Template.txt
  •  Le début du fichier contient la suite des étapes à effectuer

Voici enfin le fichier Template.txt:
Code:
/******************************************************************
/* NOM DU PROGRAMME :
/* AUTEUR :
/* DATE :
/******************************************************************

PREPARATION DE L'ENVIRONNEMENT ARDUINO
--------------------------------------
Voir le fichier ...\AVR_Studuino_xxxx\Environnement.txt


PARAMETRES DE BUILD POUR PROGRAMME ARDUINO
-------------------------------------------

Etape 1 : Paramètres du compilateur C++

  Aller dans Project \ Properties \ Toolchain \ :

  C++ Compiler \ Directories :
•  ...\AVR_Studuino_xxxx
•  ...\AVRStudio\[Solution Name]\[Project Name]

  C++ Compiler \ Optimization :
•  Optimization Level : Optimize for size
•  Other optimization flags : -fdata-sections
•  Cocher la case "prepare functions for garbage collection"

  C++ Compiler \ Miscellaneous :
•  Other flags : "-fno-exceptions"
•  Cocher "Verbose"
•  Cocher "Do not delete temporary file"


Etape 2 : Paramètres du Linker C++

  C++ Linker \ Optimization :
•  cocher "Garbage collect unused sections"

  C++ Linker \ Miscellaneous :
•  -Wl,-lcore -Wl,-lm -Wl,-L"...\AVR_Studuino_xxxx"


Etape 3 : Faire un Rebuild
•  Menu ==> Build ==> Rebuild


Etape 4 : Modifier le fichier Makefile
•  0uvrir ...\AVRStudio\[Solution]\[Project]\Debug\Makefile
•  transférer la séquence -wl,-lcore.........AVR_Stduino_xxxx" à la fin de la ligne
•  Sauvegarder Makefile

Etape 5 : Utiliser le Makefile modifié
•  Aller dans Project \ Proterties \ Build :
•  Cocher la case "Use External Makefile"


Etape 6 : pour utiliser une Librairie
•  Décommenter et compléter #include <[Library Name]> en début de programme
•  Dans la fenêtre "Solution Explorer", clic droit sur le [Project Name]
•  Add ==> Existing Item. Ajouter les fichier .h et .cpp de la Librairie


Etape 7 : pour "uploader" le programme
•  Menu Tools ==> External Tools
•  Title : Upload Arduino
•  Command : ...\AVR_Studuino_xxxx\avrdude.exe
•  Arguments : -C "...\AVR_Studuino_xxxx\avrdude.conf" -v -v -p atmega328p -c stk500v1 -P COM3 -b 57600 -U flash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":i
•  Dans la ligne ci-dessus, adapter le chemin du répertoire, l'atmega utilisé et le Port COM
•  L'upload s'obtient par Menu Tools ==> Upload Arduino



*******************************************************************
DEBUT DU PROGRAMME
******************************************************************/



#include <WProgram.h>
//#include <[Library Name]>
#define F_CPU 16000000UL // Fréquence du microcontrôleur


void setup()
{                

}

void loop()
{

}
Pages: 1 [2] 3 4 ... 12