« Utiliser les PIC 16F et 18F/Exercices/Les ports et le langage C » : différence entre les versions

Une page de Wikiversité, la communauté pédagogique libre.
Contenu supprimé Contenu ajouté
Ligne 7 : Ligne 7 :
* soit utiliser d'avantage d'entrées,
* soit utiliser d'avantage d'entrées,
* soit multiplexer les entrées en deux étapes.
* soit multiplexer les entrées en deux étapes.
En utilisant 4 fils pour les lignes et 4 fils pour les colonnes, on peut différencier par croisement 16 touches. On utilise donc 8 fils reliés à 8 bits d'un PORT pour 16 touches. Pour nos 12 touches on peut câbler comme indiqué ci-dessus. Il s'agit ensuite de procéder en deux phases, une pour la détection de la colonne et une autre pour la détection de ligne.
En utilisant 4 fils pour les lignes et 4 fils pour les colonnes, on peut différencier par croisement 16 touches. On utilise donc 8 fils reliés à 8 bits d'un PORT pour 16 touches. Pour nos 12 touches on peut câbler comme indiqué ci-dessus.
[[File:Clavier12Touches.png|thumb|500px|Clavier 12 touches]]
Il s'agit ensuite de procéder en deux phases, une pour la détection de la colonne et une autre pour la détection de ligne.

<u>Question 1</u> : détermination du numéro de colonne
<u>Question 1</u> : détermination du numéro de colonne
Programmer les directions avec '''TRISB''' (PB6-PB3 en sortie et PB2-PB0 en entrée).
Programmer les directions avec '''TRISB''' (PB6-PB3 en sortie et PB2-PB0 en entrée).
Ligne 48 : Ligne 53 :
</source>
</source>
}}
}}







==Exercice 2 (d'après les TPs)==
==Exercice 2 (d'après les TPs)==

Version du 23 janvier 2011 à 16:47

Exercice 1

Interfaçage d'un clavier

Sur un PC, le clavier est complètement décodé. C'est à dire que lorsqu'une touche est appuyée, sa position sur le clavier est envoyée sur la liaison PS2. Le fait d'envoyer la position et non le code ASCII permet de gérer les claviers en divers langues.

Pour de petites applications, on utilise un clavier à 12 touches. Il est composé de simples contacts et le décodage est réalisé par le système informatique. Avec seulement 8 touches, un PORT de 8 bits en entrée suffit. Si le clavier possède plus de 8 touches, il faut:

  • soit utiliser d'avantage d'entrées,
  • soit multiplexer les entrées en deux étapes.

En utilisant 4 fils pour les lignes et 4 fils pour les colonnes, on peut différencier par croisement 16 touches. On utilise donc 8 fils reliés à 8 bits d'un PORT pour 16 touches. Pour nos 12 touches on peut câbler comme indiqué ci-dessus.

Clavier 12 touches

Il s'agit ensuite de procéder en deux phases, une pour la détection de la colonne et une autre pour la détection de ligne.

Question 1 : détermination du numéro de colonne Programmer les directions avec TRISB (PB6-PB3 en sortie et PB2-PB0 en entrée).

Tester si une touche est appuyée. Si oui sauvegarder dans une variable la valeur lue sur PORTB puis transformer cette valeur en numéro de colonne (0 à gauche et 2 à droite)

Quel est le code correspondant : sous-programme char lecture_colonne()

Question 2 : détermination du numéro de ligne

Programmer les directions avec TRISB (PB6-PB3 en entrée et PB2-PB0 en sortie).

Tester si une touche est appuyée. Si oui sauvegarder dans une variable la valeur lue sur PORTB puis transformer cette valeur en numéro de ligne (0 en haut et 3 en bas)

Quel est le code correspondant : sous-programme char lecture_ligne()

Question 3 : détermination du caractère

A partir des deux informations précédentes transformer le numéro de colonne et le numéro de ligne en caractère correspondant sur le clavier : '1' ou '2' ou ... ou '0' ou '#'


Exercice 2 (d'après les TPs)

Le PORTB est relié à un ensemble de LEDs permettant la réalisation de chenillards. Un chenillard est donné par le programme suivant :

// MikroC
main(){
	int i;
	TRISB=0x00; // 0 = sorties
	for(;;) { 
		for(i=0;i<6;i++) { 
			PORTB=(0x03<<i|0xC0>>i);
                  Delay_ms(1000);
		} 
	} 
}

Compléter la suite des états de ce chenillard (ceux où une ou plusieurs leds sont allumées).

Réponse : (noircir les cases correspondantes quand la led est allumée)