mardi 19 février 2013

Afficheur Alphanumérique (partie 1)

Préambule

Ce projet consiste à interfacer un afficheur alphanumérique 2x16 caractères avec la raspberry pi. Il va pouvoir indiquer différentes informations sur l'état de la raspberry pi en fonctionnement (exemples : information sur la mémoire, le micro processeur, les process, etc ...).

Ça a l'air d'être à la mode d'interfacer un afficheur à la raspberry pi. Vous trouverez sur la toile, de nombreux tutoriels pour le faire directement.
Je vais complexifier un peu la chose, rien de bien méchant, je vous rassure ;-)
L'afficheur va être contrôlé avec un micro contrôleur 8bits de la marque Microchip (Pic 16f876a) et dialoguera avec la raspberry pi via le bus I2C. Cela permettra d'appréhender la communication entre 2 micros via un bus série.

Architecture générale du projet















J'ai choisi ce micro contrôleur 8 bits parce qu'il est possible :
  • d'écrire le programme en C (je suis pas un grand fan de l'assembleur)
  • de compiler le programme sous Linux à l'aide du compilateur HI-TECH C compiler (il existe, de plus, une version demo et lite)
  • de le faire évoluer pour d'autres fonctionnalités.
  • de pouvoir découvrir de nouveaux aspects des systèmes embarqués.
  • de réduire les coûts de développement (quelques euros, voir dizaines d'euros avec le programmateur)

Le premier billet va illustrer les différents éléments de ce projet.
Le second billet va aborder les différents modules du micro contrôleur PIC 16f876a à mettre en place et finalement, le dernier billet montrera l'interface avec la raspberry pi.


Bus I²C


Le bus I2C est un bus de données série synchrone bidirectionnel half-duplex.
Plusieurs équipements, soient maîtres, soient esclaves, peuvent être connectés au bus.
Les échanges ont toujours lieu entre un seul maître et un (ou tous les) esclave(s), toujours à l'initiative du maître (jamais de maître à maître ou d'esclave à esclave).

La connexion est réalisée par l'intermédiaire de 2 lignes :
  • SDA (Serial Data Line) : ligne de données bidirectionnelle,
  • SCL (Serial Clock Line) : ligne d'horloge de synchronisation bidirectionnelle.
Les 2 lignes sont tirées au niveau de tension VDD à travers des résistances de pull-up (RP).
Le nombre maximal d'équipements n'est pas spécifié, mais est donné pour une capacité du bus (CB) maximum (qui dépend de la vitesse du bus).



source Wikipédia

Level Shifter I²C

 

D'après la documentation du raspberry pi, les GPIOs fonctionnent avec un niveau logique à 3,3v (circuit CMOS) alors qu'une partie des composants (c'est le cas du micro contrôleur PIC 16f876a) utilisant le bus I²C, fonctionnent avec un niveau logique à 5v (circuit TTL), il va falloir adapter le niveau logique 3,3v en niveau logique 5v pour éviter toute incompatibilité entre les deux équipements et garantir une bonne communication.

Philips, le concepteur du bus I²C, a anticipé ce genre de problème et a pondu une note d'application pour le résoudre.




Le schéma du shifter est basique, 2 mosfets à canal N et 4 résistances de pull-up et le tour est joué.




Explications


État 1 : En mode repos, les deux cotés de la ligne sont à l'état haut via les résistances de pull-up. Les broches gate et source du MOS-FET sont à 3,3v, donc la tension Vgs est en dessous de la tension de seuil (Vth), le MOS-FET ne conduit pas (bloqué).

État 2 : La raspberry pi "prend la main sur la ligne" (mise à l'état bas). La broche source du MOS-FET descend à 0v, alors que la broche gate reste à 3,3v, donc la tension Vgs augmente jusqu'à la tension de seuil (Vth), le MOS-FET devient conducteur (passant). De l'autre coté de la ligne, elle est mise à l'état bas via la conduction du MOS-FET.

État 3 :  Le micro contrôleur 8bits "prend la main sur la ligne" (mise à l'état bas). A travers la diode présente entre le drain et la source (non visible sur le schéma ci-dessus), la tension Vgs est mise à zéro jusqu'à ce que le MOS-FET devienne conducteur et à ce moment là, les deux cotés de la ligne sont à l'état bas à travers la conduction du MOS-FET.


Le site de vente de composants électronique sparkfun vend ce montage tout fait.

A noter que ce petit circuit peut s'appliquer à d'autres tensions (tout en gardant à l'esprit que la tension la plus faible doit être reliée à la broche gate) et d'autres utilisations autre que le bus I²C.

LCD Alphanumérique 2x16


L'afficheur est contrôlé via le contrôleur HD44780 permettant de piloter un dispositif d'affichage par cristaux liquides. Il peut communiquer avec l’extérieur soit avec une liaison série, soit avec une liaison parallèle et 2 modes de communication sont possibles (4 ou 8 bits).

Dans notre cas, ce sera une liaison parallèle en mode 4 bits.

La différence entre les 2 modes de communication :


mode 8 bits :

C'est le mode initial de l'afficheur, les données sont échangées via les broches D0 à D7.

mode 4 bits :

Afin de limiter le nombre de broches nécessaires pour commander l'afficheur, on peut travailler en mode 4 bits ou les données sont échangées via les broches D4 à D7 (les broches D0 à D3 sont mises à la masse).

Schéma de câblage :


  • La broche R/W est mise à la masse puisque l'on souhaite seulement écrire sur l'afficheur.
  • Les broches DB0 à DB3 sont mis à la masse car on va l'utiliser en mode 4 bits
  • Le potentiomètre RV1 va servir à régler le contraste de l'affichage



Datasheet du contrôleur HD44780 :




micro contrôleur 8 bits


Le micro contrôleur PIC16f876a va jouer le rôle de contrôleur LCD en interprétant les messages I²C arrivant de la raspberry pi pour afficher les informations sur l'écran.


 

Caractéristiques du pic16f876a :


20 MHz (max), environ 220 ko de mémoire flash, 2944 octets de RAM, 2048 octets d'eeprom, modules SPI, I²C, UART, PWM, Convertisseur Analogique Numérique, 4 ports d'entrées sorties multiplexés.

Schéma de câblage :


  • La tension de fonctionnement du micro contrôleur est 5v.
  • Le filtrage RC sur la broche MCLR permet de mettre en œuvre un mécanisme de protection lors du reset du système.
  • DB4 à DB7, RS et ENABLE sont les signaux provenant de l'afficheur LCD.
  • L'oscillateur de 8 MHz câblé permet d'utiliser le micro contrôleur en mode HS (High Speed)



























La datasheet du PIC16f876a :





Schéma électrique 


Schéma électrique de la carte d'extension


























Lien vers la deuxième partie du tutoriel : Afficheur alphanumérique (Partie 2)
Lien vers la troisième partie du tutoriel : Afficheur alphanumérique (Partie 3)

Aucun commentaire:

Enregistrer un commentaire