Projet à microcontrôleur PIC 16F628A
Générateur 10 voies logiques
Il s'agit d'une carte qui fournit jusqu'à 10 sorties logiques indépendantes.
Les niveaux des sorties sont commandés par un ordinateur.
Dans l'exemple ci-dessous, un click sur le bouton "Validation" met à jour les 10 sorties (voie 10 au niveau 0, voie 9 au niveau 1 ...).
La communication entre l'ordinateur et la carte se fait par une liaison série RS232.
Le bouton poussoir SW1 permet de réinitialiser le microcontrôleur.
L'ouverture de l'interrupteur SW2 provoque la déconnexion des sorties (état haute impédance).
L'interrupteur SW2 est fermé en utilisation normale.
N.B. Les buffers 74LS365A ne sont pas indispensables.
On peut obtenir les 10 voies directement sur les broches du PIC, mais gare aux fausses manoeuvres !
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 3 fils et 2 connecteurs SubD 9 broches femelle).
L'ordinateur envoie 2 octets qui contiennent les niveaux désirés des 10 sorties :
Dans notre exemple, les octets (00000001) et (11011010) seront transmis au PIC après un click sur le bouton "Validation".
Le PIC reçoit ces 2 octets (sur la broche RX de l'UART), les décode, puis met à jour les sorties du port A (voies 7 à 10), et deux cycles plus tard (0,4 µs) les sorties du port B (voies 1 à 6).
Enfin, le PIC transmet (sur la broche TX de l'UART) à l'ordinateur un octet (0x55) qui indique que l'opération est terminée.
Avant-propos
Cette application a été écrite en C++ Borland Builder 5.
L'application fonctionne sous Windows NT4 et Windows XP (non testée sous Windows Vista, merci de me dire ce qu'il en est ...).
N.B. La gestion de la liaison RS232 nécessite l'installation du composant TComPort (la version 2.64 est suffisante) :
Procédure d'utilisation
-> Brancher le câble "null-modem" entre l'ordinateur et la carte (hors tension)
-> Câbler les sorties de la carte aux entrées du circuit idoine (hors tension)
-> Mettre la carte et le circuit sous tension
-> Fermer l' interrupteur SW2 de la carte
-> Ouvrir l'application
-> Configurer les paramètres de la liaison RS232C :
- 9600 bauds/s
- 8 bits de données
- Pas de bit de parité
- 1 bit de STOP
- Pas de contrôle de flux
-> Ouvrir le port
On se propose d'afficher Hello! sur un afficheur LCD alphanumérique.
On utilise 6 des 10 voies :
- Séquence (63 pas)
E (voie 6) |
RS (voie 5) |
DB7 (voie 4)
|
DB6 (voie 3) |
DB5 (voie 2) |
DB4 (voie 1) |
Instruction | Commentaires |
0
|
0
|
0
|
0
|
1
|
0
|
Set Function |
(à la mise sous tension, interface 8 bits par défaut) sélection du mode d'interface 4 bits (DB4 = 0) |
1
|
0
|
0
|
0
|
1
|
0
|
Set Function | validation RS R/W |
0
|
0
|
0
|
0
|
1
|
0
|
Set Function | validation DB7-DB0 |
0
|
0
|
0
|
0
|
1
|
0
|
Set Function (DB7-DB4) | sélection du mode d'interface 4 bits (DB4 = 0) |
1
|
0
|
0
|
0
|
1
|
0
|
Set Function (DB7-DB4) | validation RS R/W |
0
|
0
|
0
|
0
|
1
|
0
|
Set Function (DB7-DB4) | validation DB7-DB4 |
0
|
0
|
1
|
0
|
0
|
0
|
Set Function (DB3-DB0) |
afficheur 2 lignes (DB3 = 1) 5 x 8 points (DB2 = 0) Remarque : DB3 = 0 pour un afficheur 1 ligne |
1
|
0
|
1
|
0
|
0
|
0
|
Set Function (DB3-DB0) | validation RS R/W |
0
|
0
|
1
|
0
|
0
|
0
|
Set Function (DB3-DB0) | validation DB3-DB0 |
0
|
0
|
0
|
0
|
0
|
0
|
Display On/Off Control (DB7-DB4) | |
1
|
0
|
0
|
0
|
0
|
0
|
Display On/Off Control (DB7-DB4) | validation RS R/W |
0
|
0
|
0
|
0
|
0
|
0
|
Display On/Off Control (DB7-DB4) | validation DB7-DB4 |
0
|
0
|
1
|
1
|
0
|
0
|
Display On/Off Control (DB3-DB0) |
Affichage visible (DB2 = 1) Pas de curseur (DB1 = 0) |
1
|
0
|
1
|
1
|
0
|
0
|
Display On/Off Control (DB3-DB0) | validation RS R/W |
0
|
0
|
1
|
1
|
0
|
0
|
Display On/Off Control (DB3-DB0) | validation DB3-DB0 |
0
|
0
|
0
|
0
|
0
|
0
|
Entry Mode Set (DB7-DB4) | |
1
|
0
|
0
|
0
|
0
|
0
|
Entry Mode Set (DB7-DB4) | validation RS R/W |
0
|
0
|
0
|
0
|
0
|
0
|
Entry Mode Set (DB7-DB4) | validation DB7-DB4 |
0
|
0
|
0
|
1
|
1
|
0
|
Entry Mode Set (DB3-DB0) | Déplacement du curseur vers la droite (DB1 = 1) |
1
|
0
|
0
|
1
|
1
|
0
|
Entry Mode Set (DB3-DB0) | validation RS R/W |
0
|
0
|
0
|
1
|
1
|
0
|
Entry Mode Set (DB3-DB0) | validation DB3-DB0 |
0
|
0
|
0
|
0
|
0
|
0
|
Display Clear (DB7-DB4) | |
1
|
0
|
0
|
0
|
0
|
0
|
Display Clear (DB7-DB4) | validation RS R/W |
0
|
0
|
0
|
0
|
0
|
0
|
Display Clear (DB7-DB4) | validation DB7-DB4 |
0
|
0
|
0
|
0
|
0
|
1
|
Display Clear (DB3-DB0) | Efface l'affichage |
1
|
0
|
0
|
0
|
0
|
1
|
Display Clear (DB3-DB0) | validation RS R/W |
0
|
0
|
0
|
0
|
0
|
1
|
Display Clear (DB3-DB0) | validation DB3-DB0 |
0
|
1
|
0
|
1
|
0
|
0
|
Write data to RAM (DB7-DB4) | Affiche "H" (0x48) |
1
|
1
|
0
|
1
|
0
|
0
|
Write data to RAM (DB7-DB4) | validation RS R/W |
0
|
1
|
0
|
1
|
0
|
0
|
Write data to RAM (DB7-DB4) | validation DB7-DB4 |
0
|
1
|
1
|
0
|
0
|
0
|
Write data to RAM (DB3-DB0) | |
1
|
1
|
1
|
0
|
0
|
0
|
Write data to RAM (DB3-DB0) | validation RS R/W |
0
|
1
|
1
|
0
|
0
|
0
|
Write data to RAM (DB3-DB0) | validation DB3-DB0 |
0
|
1
|
0
|
1
|
1
|
0
|
Write data to RAM (DB7-DB4) | Affiche "e" (0x65) |
1
|
1
|
0
|
1
|
1
|
0
|
Write data to RAM (DB7-DB4) | validation RS R/W |
0
|
1
|
0
|
1
|
1
|
0
|
Write data to RAM (DB7-DB4) | validation DB7-DB4 |
0
|
1
|
0
|
1
|
0
|
1
|
Write data to RAM (DB3-DB0) | |
1
|
1
|
0
|
1
|
0
|
1
|
Write data to RAM (DB3-DB0) | validation RS R/W |
0
|
1
|
0
|
1
|
0
|
1
|
Write data to RAM (DB3-DB0) | validation DB3-DB0 |
0
|
1
|
0
|
1
|
1
|
0
|
Write data to RAM (DB7-DB4) | Affiche "l" (0x6C) |
1
|
1
|
0
|
1
|
1
|
0
|
Write data to RAM (DB7-DB4) | validation RS R/W |
0
|
1
|
0
|
1
|
1
|
0
|
Write data to RAM (DB7-DB4) | validation DB7-DB4 |
0
|
1
|
1
|
1
|
0
|
0
|
Write data to RAM (DB3-DB0) | |
1
|
1
|
1
|
1
|
0
|
0
|
Write data to RAM (DB3-DB0) | validation RS R/W |
0
|
1
|
1
|
1
|
0
|
0
|
Write data to RAM (DB3-DB0) | validation DB3-DB0 |
0
|
1
|
0
|
1
|
1
|
0
|
Write data to RAM (DB7-DB4) | Affiche "l" (0x6C) |
1
|
1
|
0
|
1
|
1
|
0
|
Write data to RAM (DB7-DB4) | validation RS R/W |
0
|
1
|
0
|
1
|
1
|
0
|
Write data to RAM (DB7-DB4) | validation DB7-DB4 |
0
|
1
|
1
|
1
|
0
|
0
|
Write data to RAM (DB3-DB0) | |
1
|
1
|
1
|
1
|
0
|
0
|
Write data to RAM (DB3-DB0) | validation RS R/W |
0
|
1
|
1
|
1
|
0
|
0
|
Write data to RAM (DB3-DB0) | validation DB3-DB0 |
0
|
1
|
0
|
1
|
1
|
0
|
Write data to RAM (DB7-DB4) | Affiche "o" (0x6F) |
1
|
1
|
0
|
1
|
1
|
0
|
Write data to RAM (DB7-DB4) | validation RS R/W |
0
|
1
|
0
|
1
|
1
|
0
|
Write data to RAM (DB7-DB4) | validation DB7-DB4 |
0
|
1
|
1
|
1
|
1
|
1
|
Write data to RAM (DB3-DB0) | |
1
|
1
|
1
|
1
|
1
|
1
|
Write data to RAM (DB3-DB0) | validation RS R/W |
0
|
1
|
1
|
1
|
1
|
1
|
Write data to RAM (DB3-DB0) | validation DB3-DB0 |
0
|
1
|
0
|
0
|
1
|
0
|
Write data to RAM (DB7-DB4) | Affiche "!" (0x21) |
1
|
1
|
0
|
0
|
1
|
0
|
Write data to RAM (DB7-DB4) | validation RS R/W |
0
|
1
|
0
|
0
|
1
|
0
|
Write data to RAM (DB7-DB4) | validation DB7-DB4 |
0
|
1
|
0
|
0
|
0
|
1
|
Write data to RAM (DB3-DB0) | |
1
|
1
|
0
|
0
|
0
|
1
|
Write data to RAM (DB3-DB0) | validation RS R/W |
0
|
1
|
0
|
0
|
0
|
1
|
Write data to RAM (DB3-DB0) | validation DB3-DB0 |
-> Cliquer sur le bouton "Ouvrir une séquence" et sélectionner le fichier sequenceLCD1.txt
-> Cliquer sur "Lecture continue" :
Les 63 pas de la séquence sont exécutés (1 pas toutes les 100 ms).
A la fin de la séquence, le message Hello! est affiché sur la première ligne à gauche du module LCD.
- 1 câble null-modem (femelle/femelle)
- 1 ordinateur avec port COM
Le code source a été écrit en langage assembleur avec l'environnement de développement gratuit MPLAB IDE de Microchip.
(C) Fabrice Sincère ; Révision 0.9.10