Le microcontroleur correspond au cerveau du robot. C'est lui qui va traiter les informations provenant des capteurs et qui va donner la réponse voulue aux servo-moteurs. Le microcontroleur est composé de quatre parties :
Un microprocesseur qui va prendre en charge la partie traitement des informations et envoyer des ordres. Il est lui-même composé d'une unité arithmétique et logique(UAL) et d'un bus de données. C'est donc lui qui va exécuter le programme embarqué dans le microcontrôleur.
Une mémoire de données (RAM ou EEPROM) dans laquelle seront entreposées les données temporaires nécessaires aux calculs. C'est en fait la mémoire de trvail qui est donc volatile.
Une mémoire programmable (ROM), qui va contenir les instructions du programme pilotant l'application à laquelle le microcontroleur est dédié. Il s'agit ici d'une mémoire non volatile puisque le programme à exécuter est à priori toujours le même. Il existe différents types de mémoires programmables que l'on utilisera selon l'application. Notamment :
- OTPROM : programmable une seule fois mais ne coute pas très cher.
- UVPROM : on peut la réefacéer plusieurs fois grâce aux ultraviolets.
- EEPROM : on peut la réefacéer plusieurs fois de façon électrique comme les mémoires flash.
La dernière partie correspond aux ressources auxiliaires. Celles-ci sont généralement :
- Ports d'entrées / sorties parallèle et série.
- Des timers pour générer ou mesurer des signaux avec une grande précision temporelle.
- Des convertisseurs A/N pour traiter les signaux analogiques.
Ci-dessous l'aspect d'un microcontroleur et le schéma des entrées / sorties :
16 Janvier 2005
Quelques base de la programmation en C++
16 Janvier 2005
ATMEGA16 d'ATMEL
Objectifs :
Prendre en main la programmation sur les microcontroleurs ATMEL et en particulier ATMEGA16 en vue d'un passage sur les microcontroleurs de type PIC de MICROCHIP et en particulier PIC16F84A.
Savoir utiliser un logiciel de programmation
Comprendre le fonctionnement du microcontroleur, son architecture
Tester les programmes
Commencer la programmation en C
Générer automatiquement le programme et l'implanter dans le système cible
Matériel :
Un ordinateur équipé de la carte à microprocesseur ATMEL STK500
Un afficheur LCD
Le microcontroleur ATMEGA16
Protocole :
Effectuer le précablage : le cordon RS232 - ou port série - branché sur l'ordinateur et sur la carte. De plus brancher la carte au secteur, la mettre sous tension et appuyer sur reset.
Lancement du logiciel CAVR : Après avoir double-cliquer, la fenêtre ci-dessous apparait.
Créer un nouveau projet : il faut pour cela cliquer sur FILE-NEW, puis choisir projet et valider. On evitera l'assistant en choisissant NO à l'écran. A ce stade il faut enregistrer notre projet.
Préparation au développement : Tout d'abord un menu à onglets permet de préparer l'environnement de programmation. Cliquer sur l'onglet du milieu, et dans le menu déroulant CHIP, choisir le processeur installé sur la carte (ATMEGA16). Choisir ensuite l'onglet AFTER MAKE, cocher la case Program the Chip. Puis valider les réglages avec OK.
La fenêtre de gauche affiche l'ensemble des fichiers rattachés au projet en cours alors que la fenêtre de droite affiche les notes liées au projet en cours. On ferme ces notes.
Premiers programmes : Pour ajouter un nouveau programme au projet actuellement vide, il faut faire MENU-FICHIER puis choisir NOUVEAU et sélectionner SOURCE. Il suffit ensuite de renommer le fichier et de l'enregistrer. Pour attacher le nouveau fichier au projet, il faut cliquer sur l'icone représentant les outils.
Compilation et téléchargement : Compilation et téléchargement du programme en cliquant sur PROGRAM : on tranfère ainsi le programme dans la mémoire flash du microcontroleur.
Programme 1 :
Les commentaires présents sur le programme nous permettent de comprendre le fonctionnement de certaines instructions :
delay_ms(X) : attendre X ms
while(1) : boucle infinie qui signifie exécuter la boucle tant que 1 = 1
#include < fichier> : inclure le contenu du fichier dans notre programme
Il a néanmoins fallu faire quelques modifications pour comprendre d'autres instructions. En marche normale, on observe le clignotement de la LED à 5Hz.
On remplace DDRB=0b11111111 par DDRB=0b11011111 et la LED ne s'allume pas - DDRB et 0 : mettre la sortie correspondante au bit en entrée = on reçoit un signal
- DDRB et 1 : mettre la sortie correspondante au bit en sortie = on envoit un signal
On remplace PORTB=~0b00100000 par PORTB=0b00100000 et on voit que que toutes les LED sauf la LED5 clignotent. Cela veut dire que ~ inverse les bits. - ~ = NOT : 1 devient 0 et 0 devient 1
- On peut également en déduire PORTB et 1 : mettre 0V en sortie (état bas)
- PORTB et 0 : mettre 5V en sortie (état haut)
On remplace void main(void) par void man(void) et le programme ne se compile pas. - La fonction void main(void) est la fonction principale du programme et est obligatoire. C'est la fonction éxécutée en première lors du démarrage du programme.
Programme 2 :
En appuyant sur un bouton poussoir, on allume la LED correspondante.
On remplace PINA par PORTA et le programme ne marche pas, en appuyant sur les boutons poussoirs, les LED ne s'allument pas. Cela nous permet donc de penser que : - PORT est l'accès aux sorties ou entrées en écriture (on met 1 ou 0 en sortie) alors que PIN est l'accès en lecture (voir si c'est 1 ou 0).
Programme 3 :
Dans ce programme simulant un chenillard, le signal lumineux se propage de proche en proche vers la gauche. Le programme fait donc un allumage successif de toutes les LED vers la gauche.
Voir les instructions en C++ fournies au départ
On remplace buffer=buffer << 1 par buffer=buffer << 2 et on voit que le signal lumineux ne se propage plus de LED en LED mais de deux LED en deux LED.
Application : réalisation d'une horloge binaire :
Les 8 LED symbolisent les 8 bits d'un octet, c'est à dire 255 valeurs en décimal. Notre horloge binaire doit donc compter comme ceci :
Application : réalisation d'une véritable horloge :
Le temps s'affiche sur l'afficheur LCD. Il nous faut donc trois variables : une pour l'heure, une pour les minutes et une pour les secondes. Pour des raisons de commodités, on fait avancer l'horloge d'un pas de 3 secondes. En effet l'afficheur étant très lent, il n'est pas capable de rafraichir son affichage assez rapidement toutes les secondes.
Voici le logigramme correspondant :
Application : mesure de la tension :
Très simple, ce programme lit la valeur de la tension disponible aux bornes de l'entrée protégée. Ensuite le microcontroleur affiche la valeur de la tension sur l'afficheur LCD.
Voici le logigramme correspondant :
13 Octobre 2004
PIC16F84A de MICROCHIP
Objectifs :
Prendre en main les PIC de chez MICROCHIP en sachant programmer ces microcontroleurs. Nous nous concentrerons sur un de ses membres, le PIC16F84A-20. Nous mettons pour le moment les ATMEL de côté : les PIC vont nous servir pour notre robot seulement et de plus ils nous sont gracieusement fournis par MICROCHIP. Le but est donc de créer un programme très simples car la technique sera à peu près la même que pour les ATMEL sauf qu'ici on utilisera des logiciels qui nous simplifierons la tâche.
Matériel :
Un ordinateur
Une plaque d'essai
Une LED
Un PIC16F84A-20, son quartz et ses deux condensateurs
Une alimentation +5V
Des câbles de connexion
Le logiciel LOGIPIC
Le logiciel MPLAB de MICROCHIP
Logiciel IC-PROG
Carte de programmation
Principe :
Le PIC16F84A-20 est un microcontroleur pouvant être programmé un très grand nombre de fois. Il possède 1K d'emplacements pour mettre des instructions et 64 emplacements de stockage temporaire type RAM. Enfin il y a 64 octets (ou emplacements) de stockage permanent dite EEPROM. Ce microcontroleur possède de plus 13 pattes pouvant être mises ou en entrée ou en sortie. Enfin celui-ci est capable d'exécuter une instruction en 200ns avec un quartz de 20 MHz. Il est ainsi capable de traiter 5 millions d'instructions par seconde.
On rentre le programme grâce au logiciel LOGIPIC qui permet de travailler sous forme de logigrammes. On rentre les grandes lignes du programme et il s'occupe du reste.
Ce logicel s'occupe tout seul de la gestion des instructions
et de la gestion des registres qui régissent le fonctionnnement de la PIC.
Ensuite on place le PIC sur son logement de la plaque de programmation, on la relie à l'ordinateur. On commence par assembler le logigramme, puis on le compile et on démarre IC-PROG comme la figure ci-dessous le montre :
On programme enfin le PIC grâce à IC-PROG après avoir effectué les derniers réglages.
Enfin on place le PIC sur la plaquette d'essai en respectant son schéma de branchement. On place aussi les récepteurs sur les PINS suivant ses besoins. On peut donc créer différents programmes qui nous permettront de prendre en charge notre robot.
Application : réalisation d'une LED clignotante :
Ce programme est très simple et est réalisé à partir du schéma de branchement fourni ci-dessus et du logigramme ci-dessous : il permet de faire clignoter une LED branchée sur RA2 à une fréquence de 0,15 Hz.
21 Novembre 2004
Bilan
A partir de ces quelques expériences, nous nous sommes rendus compte que même si les microcontroleurs ATMEL sont biens et la carte présentant de nombreuses possibilités agréables, il n'en reste pas moins qu'il faille maîtriser le language C++ et qu'à ce niveau là, le PIC est plus facile. De plus il est quand même agréable de pouvoir se servir de logigrammes pour programmer surtout quand MICROCHIP nous offre ses microcontroleurs.