[Programmation] problème avec le keypad 16 touches
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

problème avec le keypad 16 touches



  1. #1
    didyi

    problème avec le keypad 16 touches


    ------

    Bonjour tout le monde
    j'ai un petit soucis avec le clavier 16 touches
    j'ai une maquette ou y a un pic 16f690 un afficheur 16*4 et un clavier(keypad) 4*4
    j'ai fais un programme qui affiche sur l' LCD
    maintenant je veux utiliser le clavier afin d'afficher par exempler '1' si j'appuie sur la touche 1 ..ect
    alors pour l'instant j'ai pas rentrée vraiment dedans
    j'ai juste essayé de trouvé la logique pour le faire
    je sais que le keypad fait une matrice 4*4
    j'ai mis les bits associés au lignes en entrée
    et ceux des colonnes en sorte
    j'ai le Keypad est lié avec le port C
    j'ai fais
    main
    ...
    bsf PORTC,0
    btfsc PORTC,4
    call LWD_Write1
    goto main
    ce script est juste pour tester si ce que je voulais faire va bien marché ou pas mais ça n'a pas marché
    si vous avez des idées ou des scripts qui peuvent m'aider je vous serai reconnaissant
    Bon Week-End

    -----

  2. #2
    Qristoff
    Animateur Électronique

    Re : problème avec le keypad 16 touches

    Salut,
    La gestion clavier n'est pas si compliqué en soit mais il faut gérer les anti-rebonds et la matrice. A coté, il existe des circuits tout fait qui interface le clavier en assurant l'anti-rebond et le matriçage. Regarde coté 74C922, il est obsolète mais encore bien pratique...
    Tout existe, il suffit de le trouver...!

  3. #3
    didyi

    Re : problème avec le keypad 16 touches

    Je peux pas le changer j'ai déjà le clavier et le pic implanté sur ma maquette je cherche juste moi pour l'instant à faire fonctionner un button et après je vais faire moi même le code pour le scanning et tout.
    je suis bloqué là y a un moment et je suis un peu en retard dans mon projet

  4. #4
    vincent66

    Re : problème avec le keypad 16 touches

    Bonjour,
    Perso j'utilise le 74C922 qui n'est pas si obsolete que ça, juste un petit vieux qui rend encore de bons services (clin d'oeil à Qristoff)...
    Pour utiliser directement les E/S d'un pic j'utilise le Port B et la fonction hard "interrupt on pin state change"...
    Mais si le port utilisé n'a pas cette fonction intégrée il faut passer par un scan soft continu... Ma méthode :

    -Connecter les colonnes à quatre sorties, connecter les lignes à quatre entrées avec résistance pull-op...
    - Utiliser un timer pour générer une interrupt toutes les 5ms... et lire l'état des quatre entrées en début de routine d'interruption...
    - Premièrement placer les quatre sorties colonnes à zéro... (si une des entrées est à zéro lors de la lecture c'est qu'une touche est pressée)...
    - Si une touche est pressée passer à la routine d'identification de laquelle...
    - Pour ceci placer la première colonne à zéro et les autres à un... si une touche de la première colonne est pressée on saura laquelle à la lecture des lignes suivantes...
    - Si aucune touche de la colonne n'est détectée comme pressée passer à la colonne suivante et ainsi de suite...
    - Si une touche est détectée comme pressée passer à la routine anti-rebond : si la touche est détectée pressée cinq fois de suite, soit pendant 20ms valider sinon reprendre le scan au début ...

    élémentaire mon cher whats'on ...
    -
    Leonardo était ingénieur "sans papier", et moi diplômé juste...technicien...

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

    Re : problème avec le keypad 16 touches

    Si tu n’as pas assez de ports libres sur ton µC, mais que tu as un port ADC disponible, tu peux opter pour une solution analogique. Le dessin joint montre le principe pour un clavier à 12 touches. La contrainte, c’est que toutes les résistances soient de valeurs différentes, sans tomber dans des 3 ohms ou 10 mégohms. L’identification de la touche appuyée se fait par la mesure de tension. Cette tension vaut VCC si aucune touche n’est pressée. C’est un peu tiré par les cheveux, mais ça fonctionne parfaitement.
    Images attachées Images attachées  
    Il vaut mieux être le deuxième mari d'une veuve, que le premier

  7. #6
    didyi

    Re : problème avec le keypad 16 touches

    MErci pour vos réponses
    alors ce que j'ai fait maintenant c'est



    Code HTML:
    	bsf STATUS,RP0 				;bank 1
    		bcf STATUS,RP1
    		bcf OPTION_REG,7	; Enable the pull up
    		bsf		STATUS,RP0	
    		bsf		STATUS,RP1	; Selection bank 3
    		movlw	0xF0			;configuration du port			
    		movwf	TRISC	
    		bcf	STATUS,RP0
    		movlw	0xF0			; 
    		movwf	PORTC
    		
    		bcf PORTC,Col1
    		call Wait5us
    		btfsc	PORTC,Lin1
    		call Ecrire
    goto main

    pour les variable j'ai

    Code HTML:
    Lin1	EQU	0
    Lin2	EQU	1
    Col1	EQU	4
    Col2	EQU	5
    Col3	EQU	6
    Col4	EQU	7	
    Lin3	EQU	3
    Lin4	EQU	2
    les sous programme utilisés sont :
    Ecrire
    Code HTML:
    movlw '*'
    		call LCD_Write
                    return
    Wait5us
    Code HTML:
    nop
    		nop
    		nop
    		return

    alors comme j'ai dis j'ai fait ça juste pour tester avant de commencer le processus de scanning
    Merci beaucoup encore pour vos réponses

  8. #7
    antek

    Re : problème avec le keypad 16 touches

    Et . . . ça marche ?

  9. #8
    didyi

    Re : problème avec le keypad 16 touches

    Non ça marche pas :/

  10. #9
    antek

    Re : problème avec le keypad 16 touches

    Citation Envoyé par didyi Voir le message
    Non ça marche pas :/
    T'aurais pas un schéma ?

  11. #10
    didyi

    Re : problème avec le keypad 16 touches

    Nom : schéma.jpg
Affichages : 112
Taille : 106,1 Ko
    Voici le schéma de la maquette

  12. #11
    didyi

    Re : problème avec le keypad 16 touches

    Nom : schémakeypad.jpg
Affichages : 112
Taille : 122,6 Ko

    le brochage du keypad
    tout en PORTC
    RC0:RC3 est aussi connecté avec D47 de l'afficheur LCD

  13. #12
    didyi

    Re : problème avec le keypad 16 touches

    J'ai enfin réussi à ecrire quelque chose qui marche
    mais j'ai deux problème un softoware et un hardware je pense
    le premier probleme c'est que je dois appuyer sur la button que je veux apparaître sur l'afficheur avant de compiler sur mplab
    par exemple si je veux afficher '6'
    je devrai appuyer d'abord sur 6 et après compiler pour l'afficher sur LCD
    et le deuxième comme vous pouvez voir sur le code j'ai met en commentaire tout les testes de la colonne 2
    parce que une fois je fais le test de col2 tout les autres testes qui suivent sont erronés autrement dit si je fais le teste de col2 et lin12 tout les buttons a près la touche 2 affichent 2 sur LCD et pareil pour le 5 et le 8.
    ce que je cherche maintenant si juste si vous pouvez me dire quoi faire pour rendre le programme plus autonome et qu'il suffit de le verser dans le microC
    et après si j'appuie sur 0 il s'affiche 0 et ainsi de suite
    Merci bien pour vos aides

    Code:
    #include p16f690.inc
    #include Adressage.inc
    
    		extern	LCD_CLEAR,INITLCD,LCD_Position,LCD_Write,Cycle_Write,Conv_ASCII,LCD_Position
    
    	org 0x00
    			call		INIT
    			call		INITLCD			
    		
    			call			LCD_CLEAR
    			movlw		0x55
    			call			LCD_Position
    
    
    ; ----------------------------------------ACQUERIR SWITCH ETAT-------------------------- 
    
    		
    
    		bsf STATUS,RP0 				;bank 1
    		bcf STATUS,RP1
    		bcf OPTION_REG,7	; Enable the pull up
    		bsf		STATUS,RP0	
    		bsf		STATUS,RP1	; Selection bank 3
    		movlw	0xF0			;configuration du port			
    		movwf	TRISC	
    		bcf	STATUS,RP0
    		movlw	0xFF			; 
    		movwf	PORTC
    debut		
    		bcf PORTC,Lin1			;
    		call Wait5us
    		goto test_cols
    Ligne2
    		bsf PORTC,Lin1
    		bcf PORTC,Lin2
    		call Wait5us
    		goto test_cols2
    Ligne3
    		bsf PORTC,Lin2
    		bcf PORTC,Lin3
    		call Wait5us
    		goto test_cols3
    Ligne4
    		bsf PORTC,Lin3
    		bcf PORTC,Lin4
    		call Wait5us
    		goto test_cols4
    
    		bsf  PORTC,Lin4
    		goto Fin
    Ecrire1
    		movlw	'1'
    		call	LCD_Write
    		goto Fin
    		
    Ecrire2
    		movlw	'2'
    		call LCD_Write
    		goto Fin
    Ecrire3
    		movlw	'3'
    		call LCD_Write
    		goto Fin
    Ecrire4
    		movlw	'4'
    		call	LCD_Write
    		goto Fin
    		
    Ecrire5
    		movlw	'5'
    		call LCD_Write
    		goto Fin
    Ecrire6
    		movlw	'6'
    		call LCD_Write
    		goto Fin
    Ecrire7
    		movlw	'7'
    		call	LCD_Write
    		goto Fin
    		
    Ecrire8
    		movlw	'8'
    		call LCD_Write
    		goto Fin
    Ecrire9
    		movlw	'9'
    		call LCD_Write
    		goto Fin
    
    EcrireA
    		movlw 'A'
    		call LCD_Write
    		goto Fin
    
    test_cols
    		btfss PORTC,Col1
    		goto	Ecrire1
    		;btfss	PORTC,Col2
    		;goto	Ecrire2
    		btfss	PORTC,Col3
    		goto	Ecrire3
    		btfsc	PORTC,Col3
    		goto	Ligne2
    
    
    test_cols2
    
    		btfss PORTC,Col1
    		goto	Ecrire4
    		;btfss	PORTC,Col2
    		;goto	Ecrire5
    		btfss	PORTC,Col3
    		goto	Ecrire6
    		btfsc	PORTC,Col3
    		goto	Ligne3
    
    test_cols3
    		btfss PORTC,Col1
    		goto	Ecrire7
    		;btfss	PORTC,Col2
    		;goto	Ecrire8
    		btfss	PORTC,Col3
    		goto	Ecrire9
    		btfsc	PORTC,Col3
    		goto	Ligne4
    
    
    test_cols4
    		btfss	PORTC,Col2
    		call	EcrireA
    		btfsc	PORTC,Col2
    		goto	debut
    
    
    
    	
    		
    		
    	
    
    
    		
    		
    		
    		
    		
    			
    
    
    	
    
    
    Fin
    			goto	Fin
    
    ; ------------------------ INIT
    
    
    INIT
    		bcf		STATUS,RP0
    		bcf		STATUS,RP1	; Selection bank 
    		
    		clrf    	PORTA			; init PORTA
    		clrf		PORTB			; Init PORTB
    		clrf		PORTC			; Init PORTC
    
    
    		
    		bsf		STATUS,RP0	
    		bsf		STATUS,RP1	; Selection bank 3
    
    		movlw	0x00			;Parametrage PORTA
    		movwf	TRISA
    		movlw	0x00			; Parametrage PORTB	0x_0
    		movwf 	TRISB
    		movlw	0xF0			; Parametrage PORTC 0xF_
    		movwf	TRISC
    		bcf		STATUS,RP0	; Bank 2
    		
    		clrf		ANSEL
    		clrf		ANSELH
    
    		bcf		STATUS,RP1	
    		
    		return
    Ecrire
    		movlw '*'
    		call LCD_Write
    		movlw 0x43
    		call LCD_Write
    		return
    
    Wait5us
    		nop
    		nop
    		nop
    		return
    
    
    
    		
    
    
    	end

  14. #13
    didyi

    Re : problème avec le keypad 16 touches

    Salut Salut

Discussions similaires

  1. clavier 6 touches avec 16f877
    Par srasra dans le forum Électronique
    Réponses: 0
    Dernier message: 25/01/2015, 22h41
  2. probleme programmation mikroc (keypad)
    Par rose2013 dans le forum Électronique
    Réponses: 0
    Dernier message: 14/03/2013, 14h53
  3. keypad+ pic 16f problème
    Par invite5e13ea58 dans le forum Électronique
    Réponses: 5
    Dernier message: 12/03/2011, 17h57
  4. pic avec clavier de 12 touches
    Par invite3ae2aae7 dans le forum Électronique
    Réponses: 4
    Dernier message: 21/04/2010, 21h39
  5. Problème de touches avec jeu Call Of Duty
    Par invite483d8df8 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 1
    Dernier message: 14/07/2008, 17h31
Découvrez nos comparatifs produits sur l'informatique et les technologies.