Objectifs
- Comprendre le principe de fonctionnement d’un temporisateur
- Savoir utiliser LCD dans son projet
- Savoir utiliser un clavier 4×4 avec µC
- Savoir utiliser un relais de puissance dans son montage électronique
- Savoir utiliser la librairie Keypad du MikroC
- Savoir créer une nouvelle fonction
- Et autres astuces pratiques
Exemples d’applications
- Relais électroniques temporisés
- Programmation de la mise en marche d’une machine
- Ouverture d’une porte, portail programmable
- Déclanchement temporisé d’un contacteur
- La minuterie de sécurité
- Etc.
Principe de fonctionnement
A travers le présent projet on va tenter de montrer comment utilise un clavier 4×4 avec un afficheur LCD. Le projet consiste à la réalisation d’une temporisation numérique. Les touches « 0 » à « 9 » du clavier permettent de saisir la valeur de minuterie en milliseconde, la validation de la saisie et le déclenchement du temporisateur sont assurer par la touche ON/C du clavier. L’afficheur permet d’observer la valeur acquise par le clavier (Exemple : 1023) ainsi le début du cycle « Start ».
Après l’appui sur la touche ON/C, une temporisation logicielle est lancée et on allume en parallèle la LED rouge D1. La LED reste allumée pour une durée égale à la durée de la temporisation. La LED deviendra éteinte à la fin du tempo, et le cycle recommence.
Tout savoir sur la librairie Keypad
Keypad_Init()
Initialisation du clavier. La fonction nécessite la définition du port pour lequel le clavier est connecté avant son utilisation. La fonction ne dispose d’aucun argument en entrée et en sortie (void).
Keypad_Key_Press()
La fonction retourne une valeur en format char allant de 1 à 16 (16 touches du clavier) dans le cas d’utilisation d’un clavier 4×4 et 1 à 12 pour le clavier 3×4. Elle renvoie la valeur « 0 » lorsqu’aucune touche n’est actionnée. Il est indispensable d’initialiser le clavier avant l’utilisation de la fonction.
Keypad_Key_Click()
La fonction renvoie une valeur comprise entre 1 et 16 en fonction de la touche actionnée, elle renvoie 0 dans le cas échéant. La fonction nécessite aussi l’initialisation du clavier.
C’est quoi la différence entre Keypad_Key_Press() et Keypad_Key_Click()
- Keypad_Key_Press: La fonction renvoie en boucle la valeur de la touche actionnée tant que la touche est actionnée. D’une autre façon, il faut actionnée la touche rapidement pour un renvoi simple ou bien ajouter un délai après la fonction. La fonction est peu pratique, car on cherche à avoir une seule valeur au moment de l’appui sur une touche. Dans le cas d’un appui simultané, la fonction renvoie en boucle rapide les valeurs des touches actionnées.
-
Keypad_Key_Click: La fonction renvoie une valeur unique au moment de l’appui, elle bloc l’envoie tant que la touche est actionnée. Lorsque plusieurs touches sont actionnées, la fonction ne renvoie aucune valeur, il faut relâcher l’ensemble des touches avant de réactiver la fonction. La fonction est plus pratique et efficace. Elle sera utilisée dans notre programme. Voir un exemple ICI.
Nouvelles fonctions
- char_2_int(): Convertir un caractère en une valeur entière
- key_2_val(): Convertir la valeur acquise du clavier (1-16) à la touche correspondante en format ASCII
- str_2_int(): Convertir une chaine de caractère en une valeur entière
Voir le programme principal concernant la définition des nouvelles fonctions
Le clavier – Comment Ça Marche ?
Concrètement un clavier est un assemblage des boutons poussoirs sous forme d’une matrice de taille nxm, avec n le nombre de ligne et m le nombre des colonnes. Dans notre exemple, on dispose de 4×4=16 boutons poussoirs. Ci-dessous un schéma illustratif du clavier 4×4:
La lecture du clavier consiste à l’envoi d’un signal logique « 1 » dans l’une des colonnes (ou lignes) et lire l’état des colonnes. En effet, on dispose de 4 colonnes, la valeur acquise nous permettra d’obtenir la touche actionnée. La valeur acquise est nulle lorsqu’aucune touche n’est actionnée. Le microcontrôleur envoie le niveau haut ligne par ligne en boucle, puis il lit l’état des colonnes pour ensuite en déduire la touche actionnée. Ci-dessous un exemple de lecture d’un clavier 4×4 de la touche « = » :
- Le µc active la colonne 1. Le mot envoyé par le µc vaut « 1000 »
- Le µc lit l’état des lignes DCBA : Dans ce cas il est égal à « 0000 » car aucune touche (ON/C, 1, 4, 7) n’est actionnée
- Le µc désactive la colonne 1 et active la colonne 2. Le mot envoyé est égal à « 0100 »
- Le µc lit l’état des lignes DCBA : Dans ce cas il est égal à « 0000 » car aucune touche (0, 2, 5, 8) n’est actionnée
- Le µc désactive la colonne 2 et il active la colonne 3. Le mot envoyé est égal à « 0010 »
- Le µc lit l’état des lignes DCBA : dans ce cas il est égal à « 1000 » car la touche « = » est actionnée.
- Etc.
Lorsque le µC détecte une valeur non nulle dans les broches BCDA, il mémorise l’état puis il en déduit la touche actionnée. En effet, les fonctions illustrées précédemment permettent d’itérer l’ensemble des étapes en boucle.
Étapes de simulation
Important: le temps effectif est relativement long suite à l’utilisation d’une boucle « for » pour exécuter la temporisation. Nous avons réduit le nombre d’itérations en utilisation une division par 16 (décalage à droite de 4 bits de la valeur) afin d’être plus précis. De plus le modèle ISIS n’exécute pas le programme en temps réel, donc plus de retard. Je vous recommande d’utiliser une valeur faible (<10 000) afin d’observer visuellement les résultats. Néomoins, le programme sera plus efficace en utilisant un kit de développement.