Electromag1 Circuits électroniques et Picaxes

Petit site pour ceux qui bricolent en électronique en général et sur les PICAXES en particulier.
Les PICAXES sont des microprocesseurs (PIC de Microship) programmables en BASIC. Pleins de qualités, pas chers, ultra faciles à programmer.
Tout (ou presque) est sur le site du distributeur Gotronic (voir les liens).
Les pages  seront ajoutées ou modifiées petit à petit.
Dans le but d'améliorer ce blog, communiquez moi vos remarques et les erreurs que vous pouvez constater.
Pour me contacter: Envoyez un mail à l'adresse : mag1mic@free.fr .  Tout message reçoit une réponse
Pour retourner au menu, Cliquer sur "LISTE DES PAGES", ici ou en haut de la colonne de gauche
Pour laisser un message, allez dans le "LIVRE D'OR"
Bonne visite
 
 

Décodage de clavier matriciel économique


Voici une alternative à la méthode présentée sur cette page.
Elle est économique par le nombre de broches du µC nécessaires.
Il fallait 7 broches pour un 12 touches et 8 pour un 16 touches, il n'en faut maintenant que 3 ou 4.

 
Le schéma:

Le principe est simple: les lignes sont reliées à un pont diviseur donnant 1, 2, 3, 4 volts. Un appui sur une touche établit un contact entre la ligne et la colonne correspondante.
Les broches B.1 à B.4 du picaxe 14M2 sont les entrées de 4 ADC. Sans aucun appui, les niveaux des entrées ADC sont fixées à 5V par des R de 100k.
Quand une touche est appuyée, la valeur lue sur l'ADC nous donne le numéro de la ligne et le numéro de l'ADC donne la colonne correspondante. On connait donc la touche utilisée.
Pour un clavier 12 touches, on enlève une colonne et une broche du µC est libérée. Ce qui économise 4 broches du µC dans les deux cas.
Les tensions de 1 , 2, 3 , 4 volts correspondent respectivement aux mesures ADC 8 bits de : 51 , 102 , 153 , 204.
En prenant une marge de +/- 25, on défini quatres fourchettes de 25 à 74 , 75 à 124 , 125 à 174 , 175 à 225. Aucun risque d'erreur de mesure.
Le T2400 au lieu de N2400 figurant dans les serout vient de l'utilisation d'un kit FRM010 qui n'est plus disponible.

Le code:
;gestion clavier matriciel
;lignes alimentées par un diviseur de tension ; 1, 2, 3, 4 volts
;colonnes connectées à 3 ou 4 entrées ADC (12 ou 16 touches)
#picaxe 14M2
#no_data
symbol cpt=b1
symbol car=b2
symbol lec=b3
symbol num=b4
symbol LCD=B.0
dirsB=%000001        ;B.0 ne peut être qu'une sortie
    pause 1000
    serout LCD,T2400,(254,1,254,1,254,128,"Bonjour")
    pause 1000
    serout LCD,T2400,(254,1,254,128)        ;curseur col1 ligne1    
    do        
        do
            for cpt=1 to 4    ;n° de broche (B.1 à B.4)=> colonne
                readadc cpt,lec
                pause 100            
                if lec <= 225 then gosub affich    ;valeur=>ligne           
            next
        loop    
affich:              
        num=cpt-1        ;num de 0 à 3 pour le lookup
        select case lec
            case 175 to 225    ; pour 4 Volt
                lookup num,("1","4","7","A"),car        ;ligne 4
            case 125 to 174   ; pour 3 Volts
                lookup num,("2","5","8","0"),car        ;ligne 3            
            case 75 to 124  ; pour 2 Volts
                lookup num,("3","6","9","B"),car        ;ligne 2
            case 25 to 74  ; pour 1 Volts
                lookup num,("F","E","D","C"),car        ;ligne 1        
        endselect        
            serout LCD,T2400,(car)
        do
            readadc cpt,lec        ;attente relâchement            
        loop while lec <= 225
        pause 200            
        return
    loop


 

Décodage simplifié d'un clavier matriciel 12 touches:

Le schéma:
   
Les résistances de tirages sont remplacées par les pullup internes du µC sur les entrées ADC : B.1, B.2, B.3
Les R de pullup ont une valeur comprise entre 20k et 50k, ce qui a peu d'influence sur les tensions lues sur la pont diviseur de 5 R de 1k. On peut aussi faire l'économie d'une résistance en reliant directement la ligne 4 au 0V, et faire un autre étagement. On garde ici les valeurs simples de 1, 2, 3, 4 volts comme précédemment.

Démo:

Le code:
;gestion clavier matriciel
;lignes alimentées par un diviseur de tension ; 1, 2, 3, 4 volts
;colonnes connectées à 3 ou 4 entrées ADC (12 ou 16 touches)
#picaxe 14M2
#no_data
symbol col=b1
symbol car=b2
symbol lig=b3
symbol LCD=B.0
dirsB=%0001      ;B.0 ne peut être qu'une sortie, B1 à B3 en entrées
dirC.3=0                ;C.3 en entrée
    pullup %100000001110        ;pullup sur B1,B2,B3 et C3
      pause 1000
    serout LCD,T2400,(254,1,254,1,254,128,"Bonjour")
    pause 1000
    serout LCD,T2400,(254,1,254,128)        ;curseur col1 ligne1      
    do
       for col=1 to 3    ;n° de broche (B.1 à B.3)=> 3 colonnes
            readadc col,lig    ;col est le n° de colonne, lig donne la valeur ligne
            pause 100         
            if lig <= 225 then gosub affich    ;une touche appuyée => valeur=>ligne
            if pinC.3=0 then
                 serout LCD,T2400,(254,1)    ;raz LCD
            endif                                   
       next
    loop    
affich:              
     col=col-1        ;col de 0 à 3, le lookup commence à 0
    select case lig    ;sélection ft valeur ligne
        case 175 to 225    ; pour 4 Volt
            lookup col,("1","2","3"),car        ;ligne 4
        case 125 to 174   ; pour 3 Volts
            lookup col,("4","5","6"),car        ;ligne 3            
        case 75 to 124  ; pour 2 Volts
            lookup col,("7","8","9"),car        ;ligne 2
        case 25 to 74  ; pour 1 Volts
            lookup col,("*","0","#"),car        ;ligne 1        
    endselect        
      serout LCD,T2400,(car)
    col=col+1    ;retour au n° de broche µC
  do            
      readadc col,lig        ;attente relâchement touche            
  loop while lig <= 225             
  return

 



Créer un site
Créer un site