Projet à microcontrôleur PIC 16F84A / PIC 16F628A
Commande d'un afficheur 7 segments par liaison RS-232C
On se propose de commander un afficheur à LED 7 segments, à partir du clavier d'un ordinateur.
La communication se fait par une liaison série RS-232C.
2 circuits sont proposés :
UART = Universal Asynchronous Receiver Transmitter
Les paramètres de la liaison RS232C sont ici :
Au repos, le niveau logique est 1.
Le début de la transmission est marqué par un bit Start au niveau 0, suivi des 8 bits de données (bit de poids faible en premier).
La fin de la transmission est marquée par un bit Stop (niveau 1).
Notez que les niveaux logiques de la liaison RS232C ne sont pas compatibles avec la logique TTL.
Le rôle d'un circuit intégré de type MAX232 est de faire l'interface :
Exemple :
- Oscillogramme de la transmission du caractère '5' (0x35 en code ASCII, 00110101 en binaire) :
- Oscillogramme (niveau TTL) de la transmission des caractères 'B', '2' et 'h' (0x42, 0x32 et 0x68 en code ASCII) :
3-1- Circuit avec PIC 16F84A
3-2- Circuit avec PIC 16F628A
Le circuit est quasiment identique.
La différence se fait au niveau des broches RB1/RX/DT et RB2/TX/CK qui sont utilisées par l'UART du PIC 16F628A :
4-1- Programme du PIC 16F84A
A la mise sous tension, le segment g de l'afficheur est allumé.
Rappelons que le 16F84A ne possède pas d'UART (contrairement à son grand frère le 16F628A).
Il faut donc, par logiciel, simuler un UART :
Le µC attend l'apparition d'un front descendant sur l'entrée RA0, ce qui correspond au bit Start.
Compte tenu du choix de la vitesse de transmission, la durée du bit Start est 1/9600 # 104 µs.
Au front descendant, le µC attend 104 + 52 = 156 µs afin de se trouver au milieu du premier bit de donnée (obtenu par lecture du port A).
On attend ensuite 104 µs pour lire la valeur du 2ème bit de donnée, et ainsi de suite jusqu'au 8ème bit.
Le bit de Stop est mis à profit pour mettre à jour l'affichage :
Donnée | Caractère
(code ASCII) | Indication
de l'afficheur 7 segments |
0x30 | 0 | 0
|
0x31 | 1 | 1 |
0x32 | 2 | 2 |
0x33 | 3 | 3 |
0x34 | 4 | 4 |
0x35 | 5 | 5 |
0x36 | 6 | 6 |
0x37 | 7 | 7 |
0x38 | 8 | 8 |
0x39 | 9 | 9 |
0x20 | (barre
d'espace) | (afficheur
éteint) |
autres | segment
a allumé |
Puis le µC attend le prochain bit Start.
4-2- Programme du PIC 16F628A
Le programme est évidemment plus simple.
On utilise l'interruption de réception de l'UART.
Quand une donnée (8 bits) est reçue et décodée par l'UART, l'interruption est déclenchée, et la donnée est directement accessible dans le registre RCREG.
5- Communication entre l'ordinateur et la carte à microcontrôleur
5-1- Le câble
Il faut bien sûr un ordinateur qui possède un port COM, reconnaissable par son connecteur SubD 9 broches mâle.
Il faut brancher un câble "null-modem" (câble croisé) entre l'ordinateur et la carte.
Si vous n'en avez pas, vous pouvez facilement en faire un (il faut 2 fils et 2 connecteurs SubD 9 broches femelle).
5-2- Logiciel HyperTerminal
Ce logiciel est normalement installé avec Windows.
Si vous ne le trouvez pas, rechercher le fichier hypertrm.exe (démarrer -> Rechercher).
Autrement, vous pouvez le télécharger gratuitement à l'adresse suivante :
Lancer l'application HyperTerminal.
La fenêtre "Description de la connexion" s'ouvre et vous demande d'entrer un nom pour la nouvelle connexion (par exemple : PIC).
Choisir la valeur par défaut (COM1) dans le fenêtre "Connexion", puis :
Fichier -> Propriétés -> Paramètres -> Configuration ASCII -> Emission ASCII
cocher l'option "Reproduire localement les caractères entrés"
Quand vous appuyez sur une touche, HyperTerminal l'affiche à l'écran et transmet son code ASCII par la liaison RS-232C.
Le signal est décodé par le PIC et l'afficheur 7 segments est mis à jour :
(C) Fabrice Sincère