Contrôle de plusieurs boutons poussoirs depuis une seule entrée de Picaxe ?

RovDan

New Member
Bonjour à tous,

Existe-t-il un moyen de contrôler plusieurs boutons-poussoir en n'utilisant qu'une seule entrée d'un Picaxe ?

Par le passé, j'utilisais un autre micro contrôleur (PicBasic) qui utilisait le principe du pont diviseur : avec une résistance par bouton-poussoir, il mesure la tension présente sur son entrée et en déterminait ainsi automatiquement quel bouton-poussoir avait été actionné. Cela simplifiait grandement le câblage, ne nécessitait qu'une seule entrée du micro contrôleur et une seule ligne de programme.

Est-ce possible avec un picaxe ? J'ai parcouru toutes les commandes, notamment readadc. Mais dans ce dernier cas, il faut se livrer à un savant calcul et quelques lignes de programme. Il y a t il plus simple ?

Merci pour toutes les remarques ou conseils à ce sujet.

Daniel
 

BESQUEUT

Senior Member
Bonjour à tous,

Existe-t-il un moyen de contrôler plusieurs boutons-poussoir en n'utilisant qu'une seule entrée d'un Picaxe ?

Par le passé, j'utilisais un autre micro contrôleur (PicBasic) qui utilisait le principe du pont diviseur : avec une résistance par bouton-poussoir, il mesure la tension présente sur son entrée et en déterminait ainsi automatiquement quel bouton-poussoir avait été actionné. Cela simplifiait grandement le câblage, ne nécessitait qu'une seule entrée du micro contrôleur et une seule ligne de programme.

Est-ce possible avec un picaxe ? J'ai parcouru toutes les commandes, notamment readadc. Mais dans ce dernier cas, il faut se livrer à un savant calcul et quelques lignes de programme. Il y a t il plus simple ?

Merci pour toutes les remarques ou conseils à ce sujet.

Daniel
Bonsoir et bienvenue sur le forum.
Pourriez-vous publier le programme utilisé sur PicBasic ?
 

PieM

Senior Member
Par le passé, j'utilisais un autre micro contrôleur (PicBasic) qui utilisait le principe du pont diviseur : avec une résistance par bouton-poussoir, il mesure la tension présente sur son entrée et en déterminait ainsi automatiquement quel bouton-poussoir avait été actionné. Cela simplifiait grandement le câblage, ne nécessitait qu'une seule entrée du micro contrôleur et une seule ligne de programme.
l

Mis à part certaines entrées de certains picbasic sur 12 bits, exactement pareil pour le picaxe qui délivre un entier 8 bits ou 10 bits selon la commande readadc ou readadc10. donc un résultat 0 à 255 ou 0 à 1023
 

BESQUEUT

Senior Member
Mis à part certaines entrées de certains picbasic sur 12 bits, exactement pareil pour le picaxe qui délivre un entier 8 bits ou 10 bits selon la commande readadc ou readadc10. donc un résultat 0 à 255 ou 0 à 1023
Jusque là, il me semble avoir compris.
Ce qui m'étonne c'est que le PicBasic n'utilise qu'une seule ligne de programme pour faire manifestement plus que ReadADC qui ne semble pas convenir.
Mais pour le moment, on ne sait pas quel genre de calcul est fait automatiquement. C'est pour ça que j'ai demandé la source au cas où ça nous éclairerait sur ce que souhaite faire M. RovDan au final.
Cela dit, je l'invite à en dire un peu plus sur son besoin s'il souhaite des exemples de code optimisés.
 

jojojo

Senior Member
L'instruction ADKEYIN du pic basic est illustrée page 17 du manuel. (avec schéma).

C'est strictement un Readadc.
 
Last edited:

BESQUEUT

Senior Member
L'instruction ADKEYIN du pic basic est illustrée page 17 du manuel. (avec schéma).
C'est strictement un Readadc.
Pas tout à fait ...
Il semble que cette fonction fasse en plus une division !
Donc le programme équivalent en Picaxe est monstrueusement compliqué puisqu'il comporte deux fois plus de lignes :
READADC C.1, Touche
Touche=Touche/25
 

RovDan

New Member
Rebonjour,

Pour le montage électrique, une résistance de 100K relie l'entrée concernée au +5V. On place un premier bouton entre cette entrée et la masse. Si l'on souhaite un second bouton, il suffit de rajouter une R 10K entre l'entrée et le second poussoir. Nouvelle résistance de 10K pour le 3ème bouton.
Le Pic basic lit la tension présente sur son entrée. Il retourne la valeur 1 pour le 1er bouton appuyé, puis 2 pour le second etc...

La fonction ADCKeyIn du picbasic est expliquée à la page 13 du manuel

Concrètement, il suffit du code : ValeurBouton=ADCKeyIn(3) ' pour connaître le bouton appuyé sur le port 3 du Picbasic (avec 10 boutons maxi).

Effectivement, c'est faisable par calcul mais je trouve cela très lourd et autant de lignes de codes que de boutons. Je pensais que le Picaxe pouvait le faire aussi simplement que le PicBasic...

Daniel
 
Last edited:

BESQUEUT

Senior Member
Relire #6
Il suffit de 2 lignes de code au lieu d'une.
Ça ne me semble pas si "lourd" !
Par contre le Picaxe fait des tas de choses que ne fait pas le PicBasic. A vous de voir...
 

RovDan

New Member
Mon message origine n'était pas de dire que le PicBasic est mieux que le Picaxe. Ce dernier est plus moderne et possède plus d'instructions. Non, je posais simplement une question au cas où j'aurais loupé quelque chose.

Ceci, dit, avec le Picaxe, et en utilisant ReadADC, il faut bien une ligne de code pour chaque poussoir, sauf erreur de ma part, et calcul la tension ADC que l'on trouve selon le bouton actionné. Mais c'est vrai, c'est faisable.

Merci à tous pour vos remarques

Daniel
 

PieM

Senior Member
Ceci, dit, avec le Picaxe, et en utilisant ReadADC, il faut bien une ligne de code pour chaque poussoir,
Ben non ! pas plus que pour le picbasic.

Ensuite quand vous avez le nombre associé au poussoir, donc 1, 2 , 3, vous en faite quoi ?
Un test pour définir l'action ?

si c'est un test sur un byte qui vous gène, rien ne vous empêche de le ramener sur une valeur 0 - 10 par une simple division, et ce par une seule ligne de code en plus du readadc.
il n'y a pas de tension à calculer !! quelle qu'elle soit (pas forcément 5V d'alimentation sur Picaxe,) vous aurez toujours les valeurs 0 - 255 avec un readadc


Je doute un peu que la fonction du picbasic s'adapte aussi simplement de 2 à 10 poussoirs que dit la doc!
car 100k + 10k pour 2 poussoirs, c'est 0.45 V pour le poussoir 2
et 100k + 9*10k pour 10 poussoirs c'est 0.26 V pour ce même poussoir 2

je doute que le système ait une telle latitude d'interprétation du résultat !
 

RovDan

New Member
Je partage à 100% votre avis, PieM. Si cela fonctionne disons pour quelques poussoirs, il est fort probable que les erreurs de lecture deviennent gênantes lorsque les poussoirs sont nombreux. Personnellement, je n'ai jamais dépassé 4 poussoirs et je n'ai jamais eu de problème.

Pour l'exploitation, c'est très simple, un code du genre :

' gestion boutons
If ADKeyIn(Port)=3 then
gosub Poussoir3
elseif ADKeyIn(Port)=2 then
gosub Poussoir2
endif

Le seul inconvénient de ce principe, c'est qu'il y a une hiérarchie dans les poussoirs car un poussoir appuyé masque tous les autres poussoirs placés en aval de lui. Mais une fois qu'on le sait... !

Daniel
 

BESQUEUT

Senior Member
Pour l'exploitation, c'est très simple, un code du genre :

' gestion boutons
If ADKeyIn(Port)=3 then
gosub Poussoir3
elseif ADKeyIn(Port)=2 then
gosub Poussoir2
endif

Le seul inconvénient de ce principe, c'est qu'il y a une hiérarchie dans les poussoirs car un poussoir appuyé masque tous les autres poussoirs placés en aval de lui. Mais une fois qu'on le sait... !

Daniel
Ben (encore) NON : votre code ne "masque " aucun poussoir.

Par contre, en Picaxe, il existe une commande bien plus performante :
ReadADC Port, Poussoir
Poussoir=Poussoir/25
On Poussoir GOSUB Poussoir1,Poussoir2,Poussoir3,...
 

RovDan

New Member
Bah si, Besqueut, le poussoir le plus près de la borne du Picbasic, lorsqu'il est appuyé, réalise une mise à la masse de sa borne. De ce fait, si on appuie sur un poussoir situé EN AVAL de ce poussoir, la tension sur l'entrée du Picbasic ne changera pas et le PicBasic ne verra que le premier poussoir appuyé mais pas ses "suivants". C'est une question de schéma électrique et non de programmation. Regarde le schéma de la page 13 du manuel du Picbasic , tu vas comprendre.

En revanche, juste une question : pourquoi tu divises par 25 ? Un nombre magique ? :)

Cordialement,

Daniel
 

BESQUEUT

Senior Member
Je n'avais pas regardé le montage électrique.
On pourrait faire :
Code:
readadc Port,Touche
select case Touche
case > 124 : ' ce qu'il y a à faire pour chaque touche
case > 117 :
case > 109 :
case > 100 :
case >  90 :
case > 79 :
case > 66 :
case > 51 :
case > 33 :
case > 12 :
else :
endselect
Les valeurs sont calculée à partir du schéma indiqué. C'est un peu moins lisible, mais si ça vous gène, vous pouvez définir des symboles et ça devient :
Code:
SYMBOL Touche9=124
SYMBOL Touche8=117
SYMBOL Touche7=109
...



readadc Port,Touche
select case Touche
case > Touche9 :
case > Touche8 :
case > Touche7 :
etc...
Pour que mon programme fonctionne il faut un bête diviseur de tension :
9 résistances identiques en série + 2 à chaque bout de moitié entre plus V et la masse.
Du coup les 256 valeurs possibles sont divisée en 10 parties de 25 valeurs.
D'où la valeur "magique"
Les boutons sont tous reliés d'un coté à l'entrée du Picaxe et de l'autre entre chaque résistance.
Par contre, en l'absence de pression sur un bouton, l'entrée est en l'air.
Ça marcherait pour un commutateur rotatif, mais pour un clavier, ce n'est pas bon.

Vous n'aviez pas précisé vouloir détecter la pression simultanée de plusieurs boutons.
Si tel est le cas, il faut une progression géométrique des tensions.
Le nombre de combinaisons possibles est 2^n ou n est le nombre de boutons
Au delà de 4 boutons, ça me semble difficile à utiliser, mais pourquoi pas.
 
Last edited:

BESQUEUT

Senior Member
Bonjour,

Mon premier programme picaxe, à l'origine avec un 08M, avec beaucoup de maladresses, mais jamais de ratée depuis des années
http://electromag1.wifeo.com/gache-electronique-codee-programmable-picaxe-.php
MM
Oui : on se rejoint, sauf que vous répondez à ma question sur l'entrée "en l'air" avec une résistance de rappel à la masse 470 fois plus grande que les autres, donc négligeable.
Par contre je ne vois pas l'intérêt de la boucle
for pal=1 to 12
Une simple division aurait suffit il me semble ?

Par ailleurs les 10 résistances de 100 ohms représentent une consommation non négligeable en ces temps de COP21. Le montage PicBasic est meilleur de ce point de vue.
 
Last edited:

MGU

Senior Member
Oui : on se rejoint, sauf que vous répondez à ma question sur l'entrée "en l'air" avec une résistance de rappel à la masse 470 fois plus grande que les autres, donc négligeable.
Par contre je ne vois pas l'intérêt de la boucle
for pal=1 to 12
Une simple division aurait suffit il me semble

Par ailleurs les 10 résistances de 100 ohms représentent une consommation non négligeable en ces temps de COP21. Le montage PicBasic est meilleur de ce point de vue.
Il n'y en a pas 10, mais 12 (ouf, ça va déjà mieux).
Le for next fait partie des maladresses, comme les boucles d'attentes avec goto, etc
Mais j'ai pas démonté mon clavier.

MM
 

PieM

Senior Member
Si le but est de décoder n'importe quelle combinaison de BP, le schéma le plus adapté est sans doute le R 2R utilisé dans les conversions digital - analogique.
Pas de consommation et niveau analogique 0 au repos
 
Top