Go Down

Topic: keypad déporté et arduino (Read 2220 times) previous topic - next topic

fdufnews

#15
May 01, 2013, 11:07 pm Last Edit: May 03, 2013, 08:47 am by fdufnews Reason: 1

Quote
(taux de scan de la matrice) en ramassant/recuperant ce qui traine (perturbations)


Qu'est-ce qui fait que les perturbations sont moins importantes sur la liaison série ?

Déjà le signal de la liaison série il ne parcourra que 10m. Alors que la scan de la matrice en parcourra 20 (10 aller + 10 retour).
Ensuite comme l'a indiqué Artouste tu peux facilement ajouter du contrôle d'intégrité dans un message série.


Quote
un petit MCU faisant le scan clavier et transferant en asynchrone bas debit l'info sera plus robuste sur la longueur


Désolé mais je comprends pas pourquoi :-( ?

Qqn a-t-il une explication électrique pour expliquer cette différence, c'était la le but de ma question.

Explications au-dessus

marcha

@fdufnews
Quote
Déjà le signal de la liaison série il ne parcourra que 10m. Alors que la scan de la matrice en parcourra 20 (10 aller + 10 retour).

Non, cela ne change rien, le retour de la laison série se faisant par la masse tu as aussi 20m

Quote
Ensuite comme l'a indiqué Artouste tu peux facilement ajouter du contrôle d'intégrité dans un message série.

Oui, mais le contrôle d'intégrité avec la matrice peut se faire aussi simplement par plusieurs lectures successives. Tant que l'utilisateur
presse assez longtemps sur la touche :-) ce qui doit pas être un problème dans le cas présent.


@anthology
Quote

sur les ligne du keypad certain mettent des résistances d'autre non
utile ou pas utile ?


Résistance PULL-UP ou en série sur la ligne ?

Si tu lis par balayage, tu vas activer une patte en sortie sur une ligne du clavier
et lire via une autre patte une colonne. Si tu te trompes et met les pattes en
sorties tu risque de griller ton cpu. Les résistances en série permettent de limiter le courant.

Quant à une PULL-UP je vois pas trop l'intérêt avec un arduino car il fourni assez de courant en
sortie à HIGH (si qqn peut confirmer ?)

Quote

de combien puis je déporté le keypad sans avoir trop de "perte" sur les câbles


Cela va déprendre de la qualité de ton câble, des perturbations qu'il peut y avoir. La perte
n'est pas forcement un problème, mais après il faut amplifier le signal (je maitrise pas du
tout cet aspect là)

Quote

suis je obliger d'utiliser deux fois 7 pin de l'arduino
ou puis je brancher les deux keypad en parallèle ?


Tu peux brancher en // en faisant attention de respecter chaque ligne et colonne. Mais tu
ne pourra pas distinguer quel clavier est utilisé.

Sinon tu peux brancher les lignes en // et séparer les colonnes, cela t'économise 4 pattes et
te permet de balayer un clavier après l'autre.

Quote

Les résistances sont peut être des filtres anti rebonds ?


Malheureusement pas. Mais elles ont une influence dans la forme du signal. Le câble n'étant
pas parfait, il se comporte également comme un inductance et une capacité avec également
une résistance. Les hautes fréquences seront plus atténuées que les basses. Donc il faut
s'attendre à ce que le signal idéalement carré soit "arrondi".

Pour filtrer les rebonds et autres parasites cela peut se faire avec l'arduino. Quand tu balaye
ton clavier tu active une ligne et tu attends un peu, ensuite tu lis plusieurs fois la touche
à des intervalles choisis. (perso je procèderai par tâtonnement + observation oscillo, mais
il y a surement une méthode plus académique)

Ce qui est important, si tu dois saisir un code au clavier, c'est d'attendre que la touche soit
relâchée avant de refaire une lecture pour discriminer le cas d'une double pression volontaire
(deux fois le même numéro dans le code secret) d'un effet de rebond.

Le fait d'avoir un long câble relié sur l'arduino risque de le faire planter en cas de perturbation.
Je pense qu'il te faut utiliser le watchdog interne.

Je te conseil également d'appliquer un signal carré au début de ton câble et de le mesurer
à la sortie d'une paire torsadée. Cela te permet d'avoir une idée de la dégradation de signal
à laquelle il faut t'attendre.

Normalement avec un câble cat 5 de seulement 10m, ça doit pas être un problème.

Si qqn a un conseil sur où il faut connecter le blindage du câble ?

anthology

j'ai vu les deux
pullup et en série sur la ligne
c'est pour ça que je doute

pour les perte je pense pas en avoir énormément sur 10m ( 20m aller retour )
mais on sait jamais
pour les interférences de toute façon le blindage sera ( si besoin ) relié a une terre donc ca devrais limité un peu


pour la mise en // j'ai pas besoin de savoir quel clavier est utilisé donc pas de problèmes

le watchdog si j'ai bien comprit permet de redémarré l'arduino une fois de temps en temps

de toute façon je ferais des essaie avant le montage finale pour être tranquille

marcha

Quote
le watchdog si j'ai bien comprit permet de redémarré l'arduino une fois de temps en temps


Pas exactement. Le but du watchdog est de redémarrer le système seulement si ça va mal.

Voici un exemple:

Code: [Select]

#include <avr/wdt.h>

void setup ()
{
  wdt_enable (WDTO_1S);  // Initialise le watchdog avec un délais de 1 secondes
}

void loop ()
{
  wdt_reset ();  // remet à zéro le timeout du watchdog
  // fait des choses normales de l'application
}


Dans le cadre d'un fonctionnement normal, ton application envoie un signal au watchdog
avec la commande wdt_reset(). Tant que le watchdog reçoit ce signal avant
que le temps (timeout) soit écoulé, il n'intervient pas et remet le timeout à zéro.

Si le programme plante, par exemple à cause d'un parasite qui a fait gicler le pointeur programme ailleurs
dans la flash, il se peut que l'arduino exécute des instructions pas prévues. Le watchdog ne recevant plus
de signal durant le temps imparti, il intervient et redémarre l'arduino.

Il faut juste configurer le timeout avec un délais supérieur aux plus long temps que ton application peut prendre entre
deux appels à wdt_reset(). Parfois il faut ajouter un wdt_reset() dans certaines boucles de traitement trop longues.

anthology

ah pas mal ça
j'avoue que je ne connaissait pas
je vais de ce pas en mettre un peu partout ^^
sur les programmes qui ont besoin de tourner longtemps je vais en mettre
genre si j'attends 10 sec pour allumer un escalier ( mon ancien projet fini )
je met 11 sec pour être tranquille
si l'arduino plante, au bout de 11sec watchdog redémarre l'arduino
j'avoue c'est très bien penser ca

anthology

bonjour a tous
je remonte ce topic maintenant que j'ai tout pour pouvoir tester
première infos
mon code ne fonctionne pas ^^
le code compile sans problèmes mais rien ne bouge
je sort donc le tuto keypad sur le playground
rien non plus
hum bizarre
si quelqu'un a une idée je suis preneur
merci a vous

anthology

après moult essaie sur une nano et une uno
j'ai changer de version de l'IDE et tout marche
j'avoue ne pas comprendre pourquoi mais bon ^^
dans les deux cas j'ai utiliser les exemple du keypad pour vérifier
ça marche sous 1.01 mais pas sous 0.23
merci a vous

PS: pas besoin des pullup ça marche niquel sans

lve123

Bonjour
utilise un 74c922 pour le clavier déporté; voir la datasheet.
A+


anthology

merci a toi de cette proposition
je vais essayer avec mes 10m de cable
si ca ne marche pas effectivement je vais tester dautre solution comme la liaison série et ton 74c922

Go Up