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: |
Kais Fallouh (Lundi AM) Romain Lebbadi-Breteau (Mercredi PM) |
Section 2: |
Tristan Rioux (Mardi PM) Gaëtan Florio (Jeudi AM) |
|
Section 3: |
Luciano Garin-Iriarte (Lundi PM) Ely-Cheikh Abass (Jeudi PM) |
|
Section 4: |
Dorine Dantrun (Mardi AM) Meriam Ben Rabia (Vendredi AM) |
|
Section 5: |
Amélie Simard (Mercredi AM) Abdul-Wahab Chaarani (Vendredi PM) |
|
Section 6: |
Marc-Antoine Manningham (Mardi soir) Laurent Bourgon (Jeudi soir) |
Programmation des microcontrôleurs AVR
La première question à se poser est: qu'est-ce qu'un microcontrôleur? Un microcontrôleur est un microprocesseur qui contient en plus des éléments électroniques supplémentaires utiles au contrôle de systèmes comme des minuteries (timers en anglais), des interfaces série, des convertisseurs analogiques/numériques, etc... L'ajout de ces éléments évite aux concepteurs de systèmes d'avoir à les introduire eux-mêmes dans leurs circuits. Ainsi, avec une seule puce microcontrôleur, on peut arriver à éliminer des composantes qu'il faudrait ajouter sur le circuit imprimé si l'on avait recours à un microprocesseur qui n'a pas de périphériques intégrés.
Un microcontrôleur est donc plus gros qu'un microprocesseur? Oui et non. Oui au sens où il contient des éléments supplémentaires. Par contre, on peut aussi répondre non puisque les microcontrôleurs sont en général moins performants que les microprocesseurs. Cette raison vient du fait que les microprocesseurs sont utilisés dans des systèmes où il y a de grandes exigences de traitement d'information. Les dernières consoles de jeux ou les PC les plus récents doivent satisfaire des utilisateurs toujours plus exigeants et en recherche de performance. Les microcontrôleurs sont plutôt employés pour des tâches de contrôle, de commande et d'interface où cette exigence est moindre.
Dans un cours d'architecture des ordinateurs (comme INF1600), on programme généralement les microprocesseurs en langage d'assemblage. Ici, nous programmerons des microcontrôleurs en C et C++. La programmation prendra donc des couleurs un peu particulières pour nous. Quelques points importants:
Le microcontrôleur ne tourne pas un système d'exploitation comme Windows ou Linux. Il y a bien des services qu'un OS peut fournir dont on devra apprendre à se passer...
Un microcontrôleur évolue généralement dans un système où il n'y a ni souris, ni écran, ni clavier. Il faudra s'y faire...
Le compilateur employé est GCC. Tous les éléments de programmation procédurale sont les mêmes (for, if-then-else, main, etc...)
L'allocation dynamique de mémoire (new, delete, malloc, etc...) ne sera pas utilisée sur le microcontrôleur. Elle pourrait être possible, mais le contexte ne favorise pas son utilisation.
La librairie STL de C++ n'est pas disponible non plus...
Les instructions d'entrées/sorties cin, cout, cerr ne font pas beaucoup de sens dans la plupart des cas avec un microcontrôleur puisqu'on traite rarement des chaînes de caractères et qu'il n'y a pas d'écran ni de clavier...
L'électronique supplémentaire que possède le microcontrôleur se contrôle entièrement en accédant à des registres par des adresses précises. Comme ces adresses ne changent pas, on les remplace souvent par des mnémoniques. Cette remarque deviendra plus claire plus tard.
Les possibilités de déverminage du code sont limitées. L'affichage d'une DEL et le recours aux appareils de laboratoire (l'oscilloscope en particulier) sont souvent nécessaires.
Alors, que faut-il pour programmer un microcontrôleur AVR? Il y a une librairie appelée AVRLibC qui est l'équivalent d'une librairie C standard, mais adaptée pour le contexte d'un microcontrôleur AVR. Il y a plusieurs façons d'accéder à la documentation de cette librairie:
Une copie en format PDF est disponible sur le site web du cours (mais, avec quelques centaines de pages, le document est lourd à consulter.
Ce site documente également la librairie AVRLibC en format HTML, mais sa version peut être légèrement différente par rapport à la version de la librairie installée au laboratoire.
Ce qu'il y a d'intéressant avec la documentation de Atmel sur le ATMega324PA (aussi très lourde – plusieurs centaines de pages!) est qu'on y trouve des schémas logiques de toute la circuiterie, mais également des bouts de code en C et en assembleur pour en faciliter l'utilisation, la compréhension et la programmation. Si jamais le site de Atmel est fermé pour entretient (oui, ça arrive de temps à autre...), voici la copie sur le site web du cours.
Le document de Philippe Proulx
Un des meilleurs documents pour comprendre comment aborder les divers aspects du cours en offrant un résumé des principaux principes est le document de Philippe Proulx. Il est très utile d'avoir ce document à portée de la main en laboratoire.
Évidemment, les concepts de programmation seront introduits au fur et à mesure des exercices et avec références à ces documents au besoin.