Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Journal

Rapports

Rapport TP3

01/10/2015
Rapport TP3

Pour ce tp l'objectif est de parvenir à allumer et éteindre la LED grâce a un interrupteur, et faire clignoter la LED une fois par seconde.
En l’absence d'un interrupteur physique, nous avons fait un branchement tout simple pour simuler son fonctionnement. Nous avons ainsi branché le "PIN20" au "vout" à l'aide d'un fil qu'on branchait pour simuler l’arrêt et qu'on branchait pour simuler l'allumage.

Pour le coté programmation, nous sommes partis du code du fichier "main.c" qui se trouve dans le répertoire samples qui fait clignoter une LED en C, nous avons compris comment il gérait l'allumage et l'extinction, et nous avons aussi compris comment il fallait faire pour gérer les périphériques (PINS et LED).

Le microcontrôleur sur lequel nous travaillons contient des registres qui permettent de gérer ses entrées sorties. Nous avons travaillé avec au moins 2 d'entre eux:

LPC_GPIOx->FIODIR : sert a définir si un pin est en entrée ou en sortie

LPC_GPIOx->FIOPIN : sert a voir si y a du courant ou non sur un pin en entrée, ou mettre ou couper le courant sur un pin en sortie

Après pour sélectionner le pin exact (ou la LED), il faut remplacer "x" par le numéro de registre et mettre à 1 le bit correspondant.

La table de correspondance entre les PINS et les informations nécessaires ci-dessus est disponible la : http://www.ece.gatech.edu/academic/courses/ece2035/readings/embedded/Mbed_Pin_IO_Tutorial.pdf .

LPC_PINCON->PINMODE3 : celui-la, nous ne savons pas si c'est un registre, mais il était nécessaire d’exécuter cette instruction pour faire fonctionner notre pin en entrée (ça nous a d’ailleurs pris beaucoup de temps a trouver) avant d’exécuter.
Pour sélectionner le mode et le décalage qu'il faut nous nous sommes aidés du fichier trouvé dans le site de mbed https://developer.mbed.org/users/elevatorguy/code/registers/file/276fb0fe230c/InOut.cpp , nous allons a la fonction InOut::mode() et choisissons la bonne commande par rapport au PIN sélectionné.


Apres cela, il suffit d’écrire le programme: une boucle pour gérer l'attente active et les test sur le PIN en entrée pour savoir s'il est branché ou non, et ainsi allumer ou éteindre la LED.

#include "LPC17xx.h"

volatile int g_LoopDummy;

int main()
{
int i;
LPC_GPIO1->FIOPIN &= (0 << 31);
LPC_PINCON->PINMODE3 |= (3 << (2*(31-16)));

while(1)
if(LPC_GPIO1->FIOPIN & (1 << 31)){
LPC_GPIO1->FIODIR |= 1 << 18; // P1.18 connected to LED1
LPC_GPIO1->FIOPIN ^= 1 << 18; // Toggle P1.18
for (i = 0 ; i < 7000000 && !g_LoopDummy ; i++)
{
}
}else{
LPC_GPIO1->FIOPIN &= 0 << 18; // P1.18 connected to LED1
}

return 0;
}


Pour gérer la vitesse de clignotement, nous avons fait un test visuel. Nous avons modifié le nombre d’itérations de la boucle for et testé avec un chronomètre. Nous avons vu que si on fait 7000000 itération, la LED clignote environ une fois par seconde.

Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article