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éfinit 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. Il est remplacé par un driver à base de 18M2
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