Touch16 et cordon de programmation.

jojojo

Senior Member
Ben, là, je bloque.

En quelques mots, j'ai voulu, après avoir lu le très bon tuto de Michel, sur son site, concernant la commande "touch16", réaliser un clavier sans "mécanique".

Juste un PCB, avec 10 touches gravées.

Ben, ça marche ... Oui, mais non !

En fait, tant que le système est connecté à l'ordi, via le câble de programmation, c'est irréprochable. En mode autonome (câble débranché), plus rien !

Code :

Code:
#picaxe 18m2 

Setfreq m32

Let dirsB= %00000001
Let dirsC= %11001001

Symbol led=B.0
Symbol touche1=C.2
Symbol touche4=B.1
Symbol touche7=B.2
Symbol touche2=B.3
Symbol touche5=B.4
Symbol touche0=B.5
Symbol touche8=B.6
Symbol touche9=B.7
Symbol touche6=C.1
Symbol touche3=C.0



High led
pause 5000
low led


Do

Touch16 [%11101001],touche1,w13
if w13>0 then
	High led
	
	Pause 1500
Else
	Low led
End if

loop
Je n'ai mis que le code pour la touche 1.
Le paramètre [config] est modifié, juste pour coller à la vitesse demandée au 18M2 (32Mhz).

Avec l'AXE27 branché, cela fonctionne à merveille. Sans, il ne se passe rien ...

Si quelqu'un a une idée ...

Clavier_touch16.jpg

Merci.
 

MGU

Senior Member
Bonjour jojojo,

Bon, ce qui est bizarre, c'est que ça fonctionne même avec le cordon.
touche 16 renvoie un nombre fonction linéairement de la capacité qu'il mesure. Hors, même si la broche est en l'air, la capacité est faible, mais non nulle.

Si tu as un LCD série, il est utile de lire la valeur retournée par cette commande c'est en fait le seuil de comparaison à utiliser, elle dépend beaucoup des conditions d'utilisation.
Lorsque l'on touche la touche :confused:, cette valeur augmente. Ce que l'on peut faire, c'est mémoriser cette valeur "à vide" à la mise sous tension, ajouter une marge et fixer un seuil pour le test

Après, avec ou sans cordon, les conditions électrostatiques changent, l'équivalent du cordon usb est de relier le 0v du circuit à une prise de terre. Pour l'éviter, il est préférable de configurer les touches sous forme de peignes imbriqués avec le 0v sous l'isolant pour provoquer des variations de capacité nettes au toucher.

A suivre
MM
 

BESQUEUT

Senior Member
Si tu as un LCD série, il est utile de lire la valeur retournée par cette commande c'est en fait le seuil de comparaison à utiliser, elle dépend beaucoup des conditions d'utilisation.
Lorsque l'on touche la touche :confused:, cette valeur augmente. Ce que l'on peut faire, c'est mémoriser cette valeur "à vide" à la mise sous tension, ajouter une marge et fixer un seuil pour le test
Tout à fait ; et je dirais même plus : il est également utile de connaitre la variation de capacité quand on a un doigt sur la touche, ce qui permet d'avoir un ordre de grandeur de la "marge" à prendre.
 

jojojo

Senior Member
Hum... Bon.

Le problème est cerné.
Mais pas résolu.

Pour fonctionner, cette commande DOIT disposer d'une référence à la terre (moins alim).

Donc, bien-sûr, avec la masse du cordon de prog, ça baigne.
Avec mon alim de labo, ça baigne.

Mais, en autonome, sur pile, rien a faire.

Chuis vert !:mad:
 

BESQUEUT

Senior Member
Hum... Bon. Le problème est cerné. Mais pas résolu.

Pour fonctionner, cette commande DOIT disposer d'une référence à la terre (moins alim).

Donc, bien-sûr, avec la masse du cordon de prog, ça baigne.
Avec mon alim de labo, ça baigne.
Mais, en autonome, sur pile, rien a faire.
Chuis vert !:mad:
Bizarre...
Quelles sont les valeurs lues sans et avec le doigt en absence de mise à la terre ?
En cas d'absence de LCD, (et de port série opto-isolé) ces valeurs peuvent être écrites en EEPROM, puis lues plus tard via USB.
 

jojojo

Senior Member
Bizarre ...

Si je fais

Do
Touch16 [%11101001],touche1,w13
sertxd(#w13)
loop


w13 reste obstinément à 0 ...
 

MGU

Senior Member
Bonjour,

Oui, bizarre...
Faudrait refaire un essai par ex à 4MHz et sans modifier la config standard (sans les crochets), on doit dans tous les cas lire quelque chose.

"touch" mesure une capacité, mais laquelle ? Elle est normalement entre la broche "touch" et la broche 0v. Si la broche touch est seulement reliée à une plaque, cette capacité mesurée est entre la plaque, l'isolant et le doigt. Le potentiel du doigt est très aléatoire, fonction de l'environnement, (semelles, moquette, humidité etc) et sur pile, c'est pire, les deux potentiels sont aléatoires.
Il faut aider un peu le pauvre µC, en mettant par ex les deux pôles du condensateur (touch et 0v) côte à côte, il y aura une capacité résiduelle faible. Approcher un doigt derrière un isolant modifie le diélectrique entre les deux pôles, et donc la capacité et le système doit fonctionner.

Mais si w13 reste à 0, ça ne fonctionnera pas.

MM
 

BESQUEUT

Senior Member
Bizarre ...

Si je fais

Do
Touch16 [%11101001],touche1,w13
sertxd(#w13)
loop


w13 reste obstinément à 0 ...
Mais là on a bien une terre ! Et vous dites en #1 que dans ce cas ça marche ?
Vous devez voir des tas de zéro apparaître. C'est bien ça ?
Il faudrait à minima ajouter un espace, genre sertxd(#w13," ")
 

jojojo

Senior Member
Pour le tas de zéros, oui !
L'espace me donne juste un tas de zéros, séparés par ... Un espace.

Si je vire le sertxd, et reviens en config #1, je confirme, avec une terre, ça fonctionne.

Pour vous faire une idée, du truc, avec les touches :


Bon, ben, non.
On ne peut plus insérer d'images ? Chiant, ça !
 

jojojo

Senior Member
Je tente de nouveau (trois fois message "Désolé, Mozilla a planté").

...

Je confirme. Pas moyen d'insérer une image. "Echec de l'upload du fichier".

Bon, c'est pas mon jour ... Grrr !..
 

jojojo

Senior Member
Oui, Michel, j'en ai quelques uns en stock.
Je vais en brancher un sur le port actuellement occupé par la led.

Voila les photos, déjà (au fait, je suis passé par "pièces jointes", je confirme l’icône "insérer une image" ne fonctionne pas, ici) :

Touch_1.jpg

Touch_2.jpg

Edit: le PCB clavier, c'est du "fin" (0.8mm)
 

jojojo

Senior Member
Bon.
J'ai dessoudé le clavier, et n'ai gardé qu'un port, pour essais (C.1).

Puis, j'ai implémenté ce code (plus simple, on meurt !):


Code:
#picaxe 18m2 

Setfreq m32

Let dirsB= %00000001
Let dirsC= %11001001
Do
touch16 c.1,w0
sertxd(#w0) 'terminal réglé à 38400, soit plus rapide que mon LCD
loop

Puis, j'ai successivement soudé differentes capas, entre la broche C.1 et la masse: 10pf, 100pf, 1n, 10n, 100n.

En procédant de cette manière, ben, désolé, w0 reste obstinément à ...0.

Même tests, à 4, 8, 16 Mhz (en adaptant la vitesse du terminal). Pareil.

J'ai fouillé un peu dans le forum anglais, et j'y ai trouvé pas mal de déboires, concernant cette commande, et toujours des problèmes non résolus.

Je vais tout de même essayer de tester encore un peu, sur plaquette d'essais, en changeant de µP (vais tenter avec un 08M2, vu que Michel a su le faire fonctionner, et un 14M2, mais, cela ne va au final pas résoudre
mon problème, vu qu'il me faut dix entrées).

La vie n'est pas un long fleuve tranquille ... :(
 

BESQUEUT

Senior Member
En procédant de cette manière, ben, désolé, w0 reste obstinément à ...0.
Pas normal du tout.
Que ça donne des trucs très variables, donc difficiles à exploiter, soit...
Mais zéros, ça signe un gros problème.
Ce que je ne m'explique pas, c'est que vous dites en #1 que ça eu marché.
Or, d'après la doc, il ne faut pas donner un nom de port, mais le numéro d'une entrée ADC (et donc évidement utiliser une broche avec ADC).
Accesoirement, votre circuit avec les numéros semble fait pour que le doigt entre en contact électrique, ce qui n'est pas du tout recommandé.
 

jojojo

Senior Member
Ce que je ne m'explique pas, c'est que vous dites en #1 que ça eu marché.
Or, d'après la doc, il ne faut pas donner un nom de port, mais le numéro d'une entrée ADC (et donc évidement utiliser une broche avec ADC).
Accessoirement, votre circuit avec les numéros semble fait pour que le doigt entre en contact électrique, ce qui n'est pas du tout recommandé.
Ça "eut marché", et ça marche. AVEC une masse à la terre... Mais, ça, je m'en fiche. C'est un boitier de télécommande, alimenté par pile, je le redis.

La doc (page 248 du manuel d'origine) donne comme exemple "Touch16 C.1,w0". C'est bien le N° d'un port, et, le manuel Getting starting, page 32 stipule bien que le port C.1 accepte la commande Touch.

Pour finir, non. Le doigt n'est en rien en contact direct avec l'entrée du µP. Les photos sont claires, une face avec les N° de touche, l'autre face, avec les pads de capa.
Et de plus, pour éviter les problèmes d'humidité, j'ai pris soin de ne PAS enlever la résine de gravage, sur tout le clavier, recto, verso.

Donc ...

Sur un 08M2, câblé vite fait, sur la plaque d'essai, le port C.1 régit bien, avec l'alim de labo. Et paf ! PAS avec la pile !
 

PieM

Senior Member
Bonjour,
Or, d'après la doc, il ne faut pas donner un nom de port, mais le numéro d'une entrée ADC
En fait il s'agit d'une erreur. concernant les M2 il faut bien indiquer N° Pin et non le canal (par contre sur des X2 c'est peut être vrai!)

Georges, tu as quelle tension d'alim avec tes piles? et ton alim est-elle loin de ton clavier / picaxe ?
 

MGU

Senior Member
Ça "eut marché", et ça marche. AVEC une masse à la terre... Mais, ça, je m'en fiche. C'est un boitier de télécommande, alimenté par pile, je le redis.

La doc (page 248 du manuel d'origine) donne comme exemple "Touch16 C.1,w0". C'est bien le N° d'un port, et, le manuel Getting starting, page 32 stipule bien que le port C.1 accepte la commande Touch.

Pour finir, non. Le doigt n'est en rien en contact direct avec l'entrée du µP. Les photos sont claires, une face avec les N° de touche, l'autre face, avec les pads de capa.
Et de plus, pour éviter les problèmes d'humidité, j'ai pris soin de ne PAS enlever la résine de gravage, sur tout le clavier, recto, verso.

Donc ...

Sur un 08M2, câblé vite fait, sur la plaque d'essai, le port C.1 régit bien, avec l'alim de labo. Et paf ! PAS avec la pile !
Comme je l'ai déjà dit....C'est un problème de mesure de capacité et de répartition de charges électrostatiques.
Ce que je ferais: couper en deux avec une pointe les carrés des touches.
Relier une des moitiés au 0v.
Il faut une liaison de plus, mais il ne doit pas y avoir de problèmes de réalisation en reliant les moitiés 0v de proche en proche.
Pas de quoi tester sous la main actuellement, mais il me semble que un renvoi de 0v de la commande touche correspond à un défaut, genre court circuit ou dépassement de capacité.
MM

Un truc comme çà:

clavtouch.JPG

MM
 
Last edited:

jojojo

Senior Member
@Piem:

En fait il s'agit d'une erreur. concernant les M2 il faut bien indiquer N° Pin et non le canal
Ben ... Merci, je teste ça dès demain.
Si tu pouvais me dire où tu as trouvé cette info ...

La pile est une 9V 6LR61, avec un low drop 5V (LM1117 MP-5) derrière, le tout bien découplé (cf schéma).

Edit:

Le lien me semble bien. Vais pas dormir tout de suite, moi ...

Merci.
 

MGU

Senior Member
A part ça, une pile 9v avec un régulateur 5v, low drop ou pas, tu perds la moitié de l'énergie de la pile, qui est déjà très faible. Pourquoi pas 4,5 v avec des AA ou AAA ?

MM
 

BESQUEUT

Senior Member
Bon.
J'ai dessoudé le clavier, et n'ai gardé qu'un port, pour essais (C.1).

Puis, j'ai implémenté ce code (plus simple, on meurt !):


Code:
#picaxe 18m2 

Setfreq m32

Let dirsB= %00000001
Let dirsC= %11001001
Do
touch16 c.1,w0
sertxd(#w0) 'terminal réglé à 38400, soit plus rapide que mon LCD
loop

Puis, j'ai successivement soudé differentes capas, entre la broche C.1 et la masse: 10pf, 100pf, 1n, 10n, 100n.

En procédant de cette manière, ben, désolé, w0 reste obstinément à ...0. ... :(
Donc la les masses sont reliées et pourtant ce ne marche pas...
Je remarque que sur les touches vendues par ŕev-éd il y a un fil de masse et un plus à proximité du pad.
 

jojojo

Senior Member
Bon, merci à tout le monde

Piem, j'avais lu le truc, sur le forum englich, mais, au moins, cette fois j'ai noté le lien.


Je pose là-dessus, pour l'instant (J'ai un régulateur panneau solaire à finir pour jeudi, et là, c'est pas du perso, donc, il faut y aller).

MAIS ! Je ferais fonctionner ce truc, d'une façon ou d'une autre ...

A bientôt, donc ...
 

BESQUEUT

Senior Member
MAIS ! Je ferais fonctionner ce truc, d'une façon ou d'une autre ...
A bientôt, donc ...
A priori, tous les dessin de touchpad ont des pistes de masse au voisinage des pads, quand ce ne sont pas carrément des 1/2 pads : 1 à l'entrée du microcontrôleur, l'autre à la masse.
application-notes
Ce qui semble logique vu que pour un condo, il faut deux armatures.
Le sentiment que ça me donne, c'est que quand le bidule est la terre, c'est le bonhomme qui fait la deuxième armature, le retour se faisant par ses pieds et remontant vers le Picaxe via la connexion de terre.
Si on coupe la terre, le condo a peut-être une trop grand capacité ==> lecture zéro=hors norme ???
Par ailleurs, il est indiqué que l'isolant doit être le plus mince possible. A tester avec un simple scotch sur deux électrodes, une à l'entrée ana, l'autre au 0V.
 

MGU

Senior Member
Bon, merci à tout le monde
A bientôt, donc ...
Bonjour,

Le lien de BESQUEUT en #26 confirme ce qui a été dit précédemment.

J'ai refait quelques tests avec un 20M2 conclusion:

Les valeurs retournées pas touch16 dépendent totalement des conditions. Il est inutiles de faire des essais dans une configurations et espérer les utiliser dans une autre.

Si le clavier est destiné a être utilisé avec une alim batterie autonome, il faut mesurer les valeurs retournées sur un LCD alimenté dans les mêmes conditions.
A 32MHz, les valeurs a vide (aucune connexion sur les pattes du µC), sont de l'ordre de 30 ou 40000, pas pratique. Avec un octet de configuration %11101001, on passe à 5 à 6000, plus raisonnable.
Si le cordon de programmation est connecté, le doigt sur une plaque de CI (coté isolant), fait passer cette valeur à env 20000.
En condition autonome sur batterie, la variation passe de 6000 à 9000. Avec un seuil à 6700, on bascule en approchant le doigt à env 1 cm.
Avec des électrodes touch et 0v imbriquées, la variation sera plus faible mais plus stable et mieux localisée.

Les solutions pour faire quelque chose de fonctionnel sont là.

MM
 

BESQUEUT

Senior Member
J'ai refait quelques tests avec un 20M2 conclusion:

Les valeurs retournées pas touch16 dépendent totalement des conditions. Il est inutiles de faire des essais dans une configurations et espérer les utiliser dans une autre.

Si le clavier est destiné a être utilisé avec une alim batterie autonome, il faut mesurer les valeurs retournées sur un LCD alimenté dans les mêmes conditions.
A 32MHz, les valeurs a vide (aucune connexion sur les pattes du µC), sont de l'ordre de 30 ou 40000, pas pratique. Avec un octet de configuration %11101001, on passe à 5 à 6000, plus raisonnable.
Si le cordon de programmation est connecté, le doigt sur une plaque de CI (coté isolant), fait passer cette valeur à env 20000.
En condition autonome sur batterie, la variation passe de 6000 à 9000. Avec un seuil à 6700, on bascule en approchant le doigt à env 1 cm.
Avec des électrodes touch et 0v imbriquées, la variation sera plus faible mais plus stable et mieux localisée.

Les solutions pour faire quelque chose de fonctionnel sont là.

MM
OUI : si on lit quelque chose autre que zéro, ce n'est pas trivial mais c'est possible, à priori en mémorisant la valeur au démarrage comme expliqué en #2.
On doit même pouvoir recaler à chaque touche pour tenir compte d'une dérive dans le temps pour un Picaxe qui reste tout le temps sous tension...
Par contre, tant qu'on ne lit que des zéros, il y a un gros problème...
Je remarque juste que à vide, capacité la plus faible, donc fréquence élevée, le décompte monte à 40000. Ça me semble possible que dans une configuration un peu différente, on dépasse 65535 et c'est peut être ça le zéro ?
Heureusement, il y a l'octet de config : à tester donc...
 
Last edited:
Top