touches sensitives sans peine !
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

touches sensitives sans peine !



  1. #1
    chmoldu

    Lightbulb touches sensitives sans peine !


    ------

    Bonjour,

    avec un microcontroleur du genre AT tiny de chez ATMEL, ou bien un quelconque PIC ou encore un MSP430, il est très facile d'implémenter des touches sensitives par effet capacitif.

    Comment ça marche ?

    ;
    Code:
    ;                              VCC 
    ;                                |
    ;                                |
    ;                                _
    ;                               | |
    ;                           R  | | 2.2M
    ;                               | |
    ;                                T
    ;                                |                ||
    ;                 _             |                ||
    ; PINy(x)   _/  <-------+-----------|| touche sensitive : Cts ~ 25 pF
    ;                                |                ||
    ;                                |                ||
    ;                            _____
    ;    capacité parasite _____ Cp ~ 5 pF
    ;                                |
    ;                                |
    ;                              ___
    ;                              ////
    la touche sensitive ? deux surfaces de 3x3 cm, en vis à vis de part et d'autre d'un CI époxy double face.
    Avec les caractéristiques de permitivité de l'époxy "FR4", on arrive à une capacité de l'ordre de 25 pF.
    lorsqu'on ne touche pas la surface cuivrée , la capacité Ce vue sur l'entrée PINy(x) vaut : Ce = Cp = 5 pF
    lorsqu'on touche la surface cuivrée la capacité Ce vue sur l'entrée PINy(x) vaut : Ce = CP + Cts = 30 pF

    En partant d'un tension de 0V, la tension sur PINy(x) va monter jusqu'à VCC selon une constante de temps T = RC (0,63 VCC au bout de T, ce qui est proche du seuil de basculement de 0 à 1 qui vaut 0,7 VCC)

    on calcule les deux temps : Tp = R x Cp = 11 µs quand on ne touche pas le cuivre,
    Tts = R x (Cp + Cts) = 66 µs quand on touche le cuivre.

    et on voit qu'en scrutant l'entrée PINy(x) au bout d'un délai intermédiaire (40 µs par exemple)
    dans le premier cas (où l'on ne touche pas le cuivre) elle sera à 1
    dans le deuxième cas (où l'on touche le cuivre), elle sera à 0 !

    D'où le "driver" pour touches sensitives :

    bascule la PINy(x) en sortie
    force la PINy(x) à 0
    bascule PINy(x) en entrée
    TopChrono:
    goto TopChrono tant que T < 40 µs
    lit PINy(x)
    inverse l'état du bit
    Fin:

    On ne peut plus simple !
    Evidemment on peut scruter un port complet, c'est-à-dire scruter l'état de 8 touches capacitives à la fois, sans multiplexage.

    après un essai effectué sur ATtiny2313, j'ai implémenté deux touches sensitives "+" et "-" sur un montage définitif utilisant un ATtiny461, et ça a marché du premier coup !

    Pour un ATtiny ATMEL, voilà à quoi ressemble le listing de programmation :

    Code:
    ; Name: AVR_CAP_KEY.avr 
    ; Title:  capacitive keys driver
    ; Version: 1.0 
    ; Last updated: 2011.09.05 
    ; Target: ATtiny 1 MHz, up to 16 MHz
    
    ;START COPY TO CONFIG FILE
    
    ;#######################;
    ; GENERAL SETTING                       ;
    ;#######################;
    ;.set FREQUENCY         = 1             ; MHz
    ;------------------------------------;
    
    ;---------------------------------------;
    ; AVR CAP_KEY I/O usage                   ; 
    ;---------------------------------------;
    ;.equ PORT_CAP_KEY      = PORTX      ;
    ;.equ DDR_CAP_KEY       = DDRX       ;
    ;.equ INPUT_CAP_KEY     = PINX         ;
    ;.equ PLUS_CAP              = y             ; PLUS KEY
    ;.equ MINUS_CAP            = z             ; MINUS KEY
    ;.equ ZZZ_CAP                = ...           ; and so on, up to 8 keys
    ;---------------------------------------;
    
    ;---------------------------------------;
    ; AVR CAP_KEY registers usage           ;
    ;---------------------------------------;
    ;.def   rTEMP1              = r..    (16-23);
    ;.def   rPARAM              = r..    (16-23);
    ;---------------------------------------;
    
    ;---------------------------------------;
    ; AVR CAP_KEY Declarations               ;
    ;---------------------------------------;
    ;.equ CAPKEYDISCRI      = int(40*FREQUENCY/3); tempo de 40 µs
    ;.equ CAPKEYSET         = (1<<PLUS_CAP)|(1<<MINUS_CAP); up to 8 keys
    ;---------------------------------------;
    ;STOP COPY TO CONFIG FILE
    
    ;---------------------------------------;
     CapKeyScan:                                    ;
    ;---------------------------------------;
                                                           ; in  : 
                                                           ; use : rTEMP1, rPARAM
                                                           ; out : rPARAM
                                                           ;       rPARAM = 0 and SREG bit Z=1 if no touch
        in      rTEMP1, OUT_CAP_KEY         ; 
        cbr     rTEMP1, CAPKEYSET            ; set PORT CAPKEY bits in low state (cbr=bitwise nand)
        out     OUT_CAP_KEY, rTEMP1        ; and to disable the pull up resistor on CAPKEY inputs !
        in      rTEMP1, DDR_CAP_KEY         ; load DDR CAPKEY
        sbr     rTEMP1, CAPKEYSET            ; then configure CAP KEY bits as output (sbr=bitwise or)
        out     DDR_CAP_KEY, rTEMP1       ; to discharge CAP KEY inputs capacitance
        in      rTEMP1, DDR_CAP_KEY        ; load DDR CAPKEY
        cbr     rTEMP1, CAPKEYSET           ; then configure CAP KEY bits as input (cbr=bitwise nand)
        out     DDR_CAP_KEY, rTEMP1       ; and wait...
        ldi     rTEMP1, CAPKEYDISCRI        ;
    CapKeyScanLoop:                            ; duration loop in µs = 3 cycles / MHz
        dec     rTEMP1                              ; decrement loop count
        brne    CapKeyScanLoop               ; loop while count <> 0
        ldi     rPARAM, CAPKEYSET            ; rPARAM = 0b00001100, for example
        in      rTEMP1, INPUT_CAP_KEY      ; rTEMP1 = 0bxxxxxxxx
        and     rTEMP1, rPARAM                ; rTEMP1 = 0b0000xx00
        eor     rPARAM, rTEMP1                ; rPARAM = 0b0000yy00, x bits are inverted ( y = 1 - x )
        ret                                             ;
    ;-------------------------------------;

    -----
    Dernière modification par gienas ; 09/12/2011 à 18h32. Motif: Ajouté les balises code obligatoires pour les programmes

  2. #2
    Tropique

    Re : touches sensitives sans peine !

    Rebonjour chmoldu,

    Pourrais-tu poster un schéma plus compréhensible? Parce que là, c'est franchement imbuvable!!!
    Si tu n'as pas d'éditeur de schéma, tu peux télécharger LTspice gratuitement pour l'utiliser juste en éditeur de schéma. Ce n'est pas d'une beauté extraordinaire, mais au moins c'est clair, et la prise en main se fait en quelques secondes:
    http://forums.futura-sciences.com/pr...s-faq-etc.html
    Pas de complexes: je suis comme toi. Juste mieux.

  3. #3
    invitefaaca50b

    Re : touches sensitives sans peine !


  4. #4
    chmoldu

    Re : touches sensitives sans peine !

    voilà pour le schéma

    et pour l'idée, il s'agit bien de touches sensitives, mais sans le "matos" qui va avec, ça peut rendre service...
    Images attachées Images attachées  
    Dernière modification par chmoldu ; 10/12/2011 à 13h21.

  5. A voir en vidéo sur Futura
  6. #5
    calamus

    Re : touches sensitives sans peine !

    Bonjour,

    Pour moi qui n'arrive tjs pas à faire fonctionner la fonction mtouch du 16F707 de microchip, cette solution me parait plus simple...
    Je vais tester mais le petit problème est que la surface à toucher doit être directement la surface cuivrée.
    Merci pour cette idée

  7. #6
    chmoldu

    Re : touches sensitives sans peine !

    je ne comprends pas la question : " le petit problème est que la surface à toucher doit être directement la surface cuivrée".

    1- il y a deux surfaces de part et d'autre d'un CI double face : on touche la surface isolée, c'est-à-dire celle qui est en vis à vis de celle qui est raccordée sur l'entrée du microprocesseur.
    2- sur l'application que j'ai faite, la surface que l'on touche est de plus isolée par du vernis : il n'est même pas nécessaire d'établir un contact électrique entre le doigt et cette surface...

  8. #7
    calamus

    Re : touches sensitives sans peine !

    Ok pour cette précision. J'ai développer un contrôleur MIDI avec le 16F707, ça fonctionne bien mais j'aimerai remplacer 10 entrées digitales par des entrées capacitives. Si je n'arrive pas à faire fonctionner la détection capacitive de ce microcontroleur, je pense que je m'orienterai vers votre méthode.

Discussions similaires

  1. Touches sensitives capacitives
    Par Tropique dans le forum Projets électroniques
    Réponses: 31
    Dernier message: 19/01/2014, 18h12
  2. touches sensitives
    Par invitecff0bc04 dans le forum Électronique
    Réponses: 2
    Dernier message: 12/04/2010, 14h28
  3. Touches sensitives on/off
    Par christo448 dans le forum Électronique
    Réponses: 16
    Dernier message: 27/04/2008, 17h46
  4. Problemes touches sensitives
    Par invite55a6e528 dans le forum Dépannage
    Réponses: 4
    Dernier message: 28/07/2006, 09h41
  5. PB touches sensitives sur plaque à induction
    Par invitec2fcb7ed dans le forum Dépannage
    Réponses: 4
    Dernier message: 19/03/2006, 11h12
Découvrez nos comparatifs produits sur l'informatique et les technologies.