Contacts
Enseignant: Jérôme Collin, responsable (local M-4013, poste 5060)
Support technique supplémentaire: Laurent Tremblay (local M-4011, poste 7181)
Chargés de laboratoire: Section 1: Stefan Cotargasanu (Lundi AM)
Raphaël Tremblay (Mercredi PM)
Section 2: Ely Cheikh Abass (Mardi PM)
Manel Keddam (Jeudi AM)
Section 3: Tristan Rioux (Lundi PM)
Charles De Lafontaine (Jeudi PM)
Section 4: Paul Petibon (Mardi AM)
Julien Bourque (Vendredi AM)
Section 5: Sunnee Chevalier (Mercredi AM)
Meriam Ben Rabia (Vendredi PM)
Section 6: Ghali Chraibi (Mardi soir)
Xavier Caron (Jeudi soir)

Explications sur le fonctionnement de la carte microcontrôleur


«En moyenne, les véhicules modernes regroupent une centaine de microprocesseurs, une cinquantaine d'unités de commande électronique (ECU), huit kilomètres de câblage et 100 millions de lignes de codes informatiques»

-

Magazine CAA-Québec, hiver 2016


La carte mère est centrée sur un microcontrôleur de la série AVR de la compagnie Microchp. Le modèle précis utilisé est le ATmega324PA. Cependant, il y a plusieurs autres éléments qui entourent le microcontrôleur principal de la carte. Pour bien marquer que quelques-uns d'entre eux sont regroupés pour jouer des rôles précis, la carte a été divisée en sections distinctes et bien identifiées. De cette façon, il devient plus facile de comprendre le fonctionnement de la carte en regardant chacune de ces sections.


Une grande figure en format PNG donne le schéma logique du circuit de la carte mère au grand complet. La vue ci-dessous est celle de la réalisation physique de la carte (board level view). Cette réalisation physique est très complexe dans ses détails et la façon de l'obtenir ne sera pas expliquée ici (voir Wikipédia pour plus de détails sur les PCB). Elle n'est pas nécessaire pour l'instant puisqu'il suffit de simplement comprendre le fonctionnement de la carte et de bien pouvoir localiser les différentes parties.




Section Alimentation


Le milieu du bord droit de la carte est une section relativement grande identifiée «Alimentation». Le rôle des composants de cette section est de fournir une tension de 5 volts la plus stable possible. Avoir une tension à un voltage fixe peut sembler bien simple. Pourtant, bien des défaillances de circuits sont liées à des problèmes d'alimentation.


La puissance nécessaire au fonctionnement est transmise à la carte par le connecteur de 2.1 mm. Par la suite, la tension d'entrée est rectifiée, c'est-à-dire que peu importe la polarité, positive ou négative, de la tension d'alimentation, un redresseur remet la tension dans le sens voulu. Il n'y a donc pas moyen de brancher le fil d'alimentation de la carte à l'envers. Un autre problème est qu'on ne peut jamais supposer que la tension d'entrée ne varie pas. Un régulateur de tension s'assurera de ramener une tension d'entrée qui varie entre 6 et 12 volts à une valeur fixe de 5 volts. De gros condensateurs aident aussi le régulateur dans ce rôle dans cette partie de la carte. Évidemment, la tension d'alimentation (Vcc) et la masse (GND) sont distribuées partout sur la carte.


Du point de vue de l'utilisateur, l'aspect le plus important est vraiment de brancher l'alimentation et d'allumer l'interrupteur situé juste à côté du connecteur de 2.1 mm. Pour bien s'assurer que la carte est alimentée, une DEL identifiée «Alim» s'allume dès qu'il y a une tension présente sur la carte. C'est la première place où il faut regarder quand il y a un problème et rien ne semble fonctionner!...


Si on programme la carte, on utilise un câble USB. Or, un port USB peut fournir une tension régulée de près de 5 volts directement. Par contre, une fois passée au travers de la circuiterie de la carte mère, la tension disponible aux ports sera moindre. Donc, lorsque la carte mère est reliée à un PC par USB, le recours à une source d'alimentation externe est inutile et on peut donc se passer d'une source d'alimentation par le connecteur 2.1 mm. Dans ce cas, seul le câble USB alimente la carte. Rien cependant n'empêche l'utilisation de l'alimentation par le connecteur 2.1 mm et du câble USB simultanément.




Section Interface USB-ASP


Au bas de la carte, l'interface USB effectue la communication entre la carte et un PC. La communication avec un PC est nécessaire dans deux cas. Le premier est de faciliter la programmation du ATmega324PA à partir d'un PC. Sous Linux, un programme de chargement appelé AVRDude s'occupera de cette opération. De façon générale, ce programme est automatiquement appelé à partir d'un Makefile. Ainsi, du point de vue du programmeur sur le PC, la compilation se réalise de la même façon que pour toute autre application. La différence est que l'exécutable produit par la compilation n'est pas destiné à s'exécuter sur le PC, mais est plutôt téléchargé par AVRDude sur la carte. Une telle compilation est souvent appelée compilation croisée (cross-compilation en anglais). Sur la carte, la communication USB est gérée par un second microcontrôleur AVR, un ATmega8. Il contient un micrologiciel pour réaliser cette tâche.


De plus, il pourrait être intéressant d'émettre des données à partir du ATmega324PA par interface série RS-232 et de pouvoir les lire sur le PC en passant par le ATmega8 de l'interface USB. On pourrait ainsi voir le ATmega8 comme un convertisseur de données de RS-232 à USB. Le cavalier DbgEN devra être en place pour permettre à ce mécanisme de se réaliser. De plus, en plaçant le cavalier, les ports D0 et D1 seront utilisés par l'interface série et ne pourront pas servir à autre chose.


Section État


Cette section de la carte ne comporte qu'une DEL qui tourne au vert dès que le ATmega8 qui s'occupe de l'interface USB est en fonction et opère correctement. Elle tourne au rouge lorsqu'un programme est en train d'être chargé vers le Atmega324PA. Donc, de manière générale, si cette DEL n'est pas verte alors que la carte n'est pas programmée, on peut suspecter un problème sérieux avec la carte. Le plus souvent, on comprendra que le ATmega8 n'est tout simplement pas programmé pour réaliser l'interface USB et qu'il faudra le reprogrammer par l'interface ISP dont une description suit.


La DEL d'état reste éteinte si un câble USB ne relie pas la carte mère au PC, et ce, même si une tension appropriée est fournie à la carte par le connecteur 2.1 mm et que la DEL verte de la section «Alimentation» est allumée. Ce qu'il est intéressant de remarquer est que le Atmega8 est inutile lorsqu'il n'y a pas de communication USB possible entre le PC et la carte. Il est donc tout aussi inutile de l'alimenter. La consommation de la carte mère se trouve réduite par le fait même.


Section Prog / ISP-10


Il n'est pas nécessaire de programmer le ATmega324PA en utilisant l'interface USB de la carte. On pourrait tout aussi bien enlever la puce, la placer dans un programmeur de puce pour la programmer et la réenficher sur le support de puce. Cette manipulation deviendrait vite fastidieuse particulièrement lors du déverminage de programmes. Il existe une autre façon de faire qui consiste à laisser le ATmega324PA sur la carte mère et de connecter plutôt un câble de 10 fils par lequel transitera le programme à charger. Cette technique est appelée «In-System Programming». Il y a des variantes possibles de cette méthode de programmation selon le nombre de fils du connecteur. Ici, 10 fils sont utilisés, d'où le nom de l'interface ISP-10.




Programmeur universel de puces B+K Precision


Il est évident qu'il est préférable de programmer le ATmega324PA via l'interface USB. Cependant, cette approche n'est pas toujours possible. De plus, il faut également penser à programmer le ATmega8 qui, lui, ne peut pas être programmé par USB. Brancher un câble de 10 fils à la carte mère n'est cependant pas suffisant pour assurer une programmation des ATmega8 et ATmega324PA. Il faut que ce câble provienne d'un autre système ayant des capacités de programmation ISP. Un tel système s'obtient de divers manufacturiers d'équipement électronique. Un modèle très populaire vient de Microchip et se nomme STK500. Il s'agit d'une carte très sophistiquée et qui permet bien plus que la programmation ISP, mais son étude déborde un peu du contexte du cours. Microchip donne de nombreux détails sur le fonctionnement de la STK500. Le lecteur intéressé pourra poursuivre sur le sujet à partir de ce point.




STK500 pour programmer la carte mère par ISP


De plus petits programmeurs USB-ISP existent tel que celui d'nex par exemple




Mini programmeur ISP ASP (inex.co.th)


Acheter un programmeur ISP externe n'est cependant pas nécessaire. On peut en effet programmer la carte mère à partir... d'une autre carte mère, tout simplement. En effet, il est facile d'imaginer que si un programme dans le ATmega8 peut arriver à programmer le ATmega324PA de la carte, il n'est pas plus difficile de se servir du ATmega8 pour programmer d'autres microcontrôleurs sur d'autres cartes mères du même type, ou même de type différent. Votre carte à microcontrôleur est donc un programmeur ISP en prime! Une autre façon de voir les choses est de se dire que si le ATmega8 d'une seule carte a été programmé correctement, il est possible de programmer autant de cartes par ISP que nécessaire.




Carte mère (au bas) programmant une autre carte mère (au haut) par ISP


Les broches PrgSEL (Programming SELection) orientent la programmation. Si les deux broches de gauche (identifiées 1 et 2) sont reliées par un cavalier, le ATmega324PA de la carte sera programmé. Si ce sont les deux broches de droite (2 et 3), le ATmega8 sera programmé. Si aucun cavalier n'est mis en place, la carte mère devient un programmeur ISP. Dans ce cas, aucun de ses propres microcontrôleurs ne sera programmé, mais une autre carte connectée aux broches ISP-10 peut se faire programmer.


En général, on se limitera à programmer par ISP uniquement le ATmega8. D'ailleurs, on le programmera souvent une seule fois puisqu'il devra toujours exécuter le même code. Par la suite, on programmera le ATmega324PA en utilisant le câble USB.


Section Reset


Une remise à zéro du microcontrôleur ATmega324PA est souvent nécessaire. C'est souvent la meilleure façon de recommencer l'exécution du programme à partir du début. Appuyer sur ce bouton «Reset» (celui en jaune) effectue cette opération essentielle.


Section ARef


Le ATmega324PA permet la conversion de signaux sous forme de valeurs de tension à leur représentation sous forme numérique, ce que l'on appelle communément conversion analogique/numérique (CAN). Ce processus de conversion nécessite un ajustement de la valeur de la tension utilisée comme point de référence maximum. Un potentiomètre à vis permet d'ajuster avec précision cette valeur à l'aide d'un simple tournevis. Ainsi, si l'on doit convertir des valeurs de tension qui sont comprises entre 0 et 3 volts, on ajustera le potentiomètre pour avoir une valeur de référence analogique à 3 volts. Par contre, on l'ajustera à 5 volts si les valeurs sont dans un intervalle de 0 à 5 volts. Évidemment, si les valeurs vont de 0 à 35 volts, la situation présentera quelques problèmes et il faudra de l'électronique supplémentaire pour ajuster les échelles. Néanmoins, le fait de pouvoir ajuster la référence analogique demeure une caractéristique intéressante de la carte.


Section DEL Libre


Il peut devenir assez difficile de voir les effets d'un code qui s'exécute sur une carte à microcontrôleur. Il existe la possibilité d'avoir des systèmes complexes comme un dévermineur à distance sur la carte (remote debbuger) ou des émulateurs intégrés (In-Circuit Emulator). Il s'agit de systèmes qui, d'une façon ou d'une autre, retournent des valeurs au PC pour permettre au programmeur de savoir ce qui se passe sur la carte. L'étude de tels systèmes a de l'intérêt dans des cours avancés. Une autre méthode, moins puissante, mais beaucoup plus simple, consiste à faire allumer une DEL à certains moments ou sous certaines conditions lors de l'exécution du programme.


Sur la carte, une DEL bicolore et une résistance en série ont été placées pour être utilisées à cette fin. Si on place 5 volts dans un sens, la DEL prendra la couleur verte. Si on inverse le branchement, la DEL deviendra rouge). On peut même tromper l'oeil et inverser le branchement à un rythme tellement rapide que le passage entre le rouge et le vert est tel qu'on croirait que la DEL prend la couleur ambre (jaune foncé tirant sur le brun). Un connecteur IDC de deux broches dans cette section est identifié «+» et «-». Selon que l'on place les 4 différentes combinaisons possibles de 0 ou 5 volts sur ces deux broches, la DEL sera éteinte, verte ou rouge. Si rien n'est branché, la DEL est complètement déconnectée du reste du système.


Section Interrupt


Un processeur a presque toujours la capacité d'être interrompu par un signal extérieur. Le ATmega324PA a plusieurs lignes d'interruption externes. La carte mère peut utiliser la première, appelée INT0, pour la relier à un bouton-poussoir. Il devient donc possible pour un utilisateur de générer une interruption en appuyant simplement sur le bouton-poussoir noir (celui du haut) sur la carte. Cette caractéristique permet au programmeur de facilement tester du code contenant des interruptions. Par contre, il faudra placer un cavalier sur «IntEN» (Interrupt ENable) pour associer le bouton-poussoir à la ligne d'interruption. Ce faisant, le ATmega324PA ne peut utiliser le port D2 pour autre chose qu'une ligne externe d'interruption.





Le ATmega324PA et les Ports A, B, C et D


Le microcontrôleur principal vient dans un format de puce DIP (Dual In-line Package) de 40 broches. Cependant, Microchip produit d'autres microcontrôleurs de la même série qui pourraient tout aussi bien prendre place dans le support de puce de la carte à la place de ATmega324PA, puisque les fonctions des broches de tous ces microcontrôleurs sont compatibles. C'est la raison pour laquelle la documentation qui les décrit correspond souvent au même fichier PDF, car les différences entre eux sont trop peu nombreuses.


Puisque toutes les autres sections de la carte ont été décrites, il reste en fait peu à dire sur le microcontrôleur principal. D'ailleurs, 32 des 40 broches du ATmega324PA sont redirigées vers les connecteurs IDC pour s'interfacer avec le monde extérieur sans autre connexion à quelques composantes que ce soit. Ces 32 broches correspondent aux 4 ports, A, B, C et D de 8 bits du processeur. Il est d'ailleurs intéressant de remarquer que la carte ne s'approprie aucun de ces ports pour un usage interne à moins qu'un cavalier inséré sur la carte en détermine autrement. En effet, il est préférable de laisser ces ports libres pour que l'usager de la carte puisse les utiliser à sa guise pour une application particulière. L'utilisation de la carte pourra donc se faire en considérant que l'ensemble des caractéristiques du microcontrôleur demeurent accessibles sans restriction.


Il y a un détail un peu particulier à mentionner ici. La numérotation des connecteurs IDC sur la carte mère pour les 4 ports va de 1 à 8. Pourtant, la documentation de Microchip numérote les ports de 0 à 7. Cette confusion est un peu volontaire puisque durant la conception de la carte, il y a eu une volonté de respecter une notation très proche de celle utilisée par Microchip sur la STK500. D'ailleurs, cette confusion existe sur bien des cartes. La carte mère suit donc une convention fortement répandue bien que discutable. Pour rendre le texte un peu plus clair, on utilisera le terme «broche» pour signifier une numérotation de 1 à 8 et le terme «port» pour celle de 0 à 7.


Les connecteurs IDC associés à chaque port ont 10 broches. On notera donc que les deux broches à l'extrême droite de chacun des connecteurs sont la tension de fonctionnement, Vcc (5 volts), et la masse, GND. Vcc est toujours la broche du haut et GND celle du bas.


Section Mémoire


Une petite mémoire de 8 broches a été placée sur la carte mère. Cette mémoire série est accessible par un protocole série appelé I2C. Atmel (achetée par Microchip) préfèrait appeler ce protocole TWI (Two-Wire Interface). Peu importe, il est possible d'écrire et de lire dans cette mémoire de type EEPROM (Electrically Erasable Programmable Read Only Memory - mémoire morte effaçable et programmable électriquement). Le code C++ nécessaire pour accéder à la mémoire vous sera fourni en temps et lieu.


Pour utiliser la mémoire, il faut placer un cavalier sur MémEn (Mémoire ENable). À ce moment, par contre, on évitera d'utiliser les ports C0 et C1 puisqu'ils seront utilisés pour communiquer avec la mémoire. Si l'on retire le cavalier, la mémoire est déconnectée du circuit et les ports C0 et C1 sont libres pour usage général.


Cavaliers et configuration


Voici un petit tableau qui résume les configurations possibles des cavaliers:


Nom du cavalier

Position

Signification

VtgEN

En place

Le programmeur ISP fournit la tension à la carte mère (carte cible d'où le nom target)

Retiré

La carte mère doit avoir sa source d'alimentation propre durant sa programmation par ISP

PrgSEL

Sur positions 1 et 2

Le ATmega324PA sera programmé par ISP

Sur positions 2 et 3

Le ATmega8 sera programmé par ISP

Retiré

La carte mère est un programmeur ISP et peut programmer une autre carte

IntEN

En place

Le bouton-poussoir Interrupt soulève l'interruption INT0 du ATmega324PA et utilise le port D2.

Retiré

Le bouton-poussoir Interrupt est inutilisé et le port D2 est disponible pour usage général.

MémEN

En place

La mémoire série de la carte mère est accessible. Les ports C0 et C1 sont utilisés pour accéder à la mémoire.

Retiré

La mémoire série de la carte mère ne peut être utilisée. Les ports C0 et C1 sont libres pour usage général.

DbgEN

En place

La communication série du ATmega324PA peut être redirigée vers le ATmega8 puis renvoyée vers le PC par USB. Ports D0 et D1 utilisés pour la transmission.

Retiré

La communication série du ATmega324PA n'est reliée à aucun autre composant. D0 et D1 libres pour utilisation générale.