Changes between Version 11 and Version 12 of IOC20_T01


Ignore:
Timestamp:
Jan 30, 2020, 6:31:07 AM (5 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • IOC20_T01

    v11 v12  
    139139* Exécuter le programme.
    140140
    141 == 2.2. Contrôle de GPIO en sortie ==
     141== 2.3. Contrôle de GPIO en sortie ==
    142142
    143143[[Image(htdocs:png/Raspberry-Pi-GPIO-Layout-Revision-2.png,500px,nolink)]]
     
    145145Dans cet exercice, on vous propose de manipuler une pin du GPIO en mode "sortie" pour contrôler le clignotement d'une LED à une fréquence donnée.
    146146
    147 * Avant de commencer à écrire du code, déterminez quelles sont les différentes étapes nécessaires depuis l'initialisation jusqu'à l'envoi des valeurs 0 ou 1 sur le GPIO.
    148147* Récupérer le répertoire lab1, exécuter la commande suivante dans un terminal et dans le dossier que vous souhaitez pour contenir votre code pour ce premier TP.
    149148{{{#!sh
    150 cp -rp /users/enseig/franck/peri/lab1 .
    151 }}}
    152 * Éditez le fichier lab1.c et ajoutez le code que vous pensez nécessaire à la réalisation de cet exercice.\\
    153   ATTENTION: ne changez pas les valeurs de GPIO_LED0, car vous risqueriez d'endommager la carte !RaspberryPi.
    154 * Ensuite, compilez-le grâce au Makefile (**Vous devez l'adapter**) qui vous est fourni.
    155   Qu'observez-vous ? Essayez de changer la fréquence de clignotement.
    156 
    157 {{{#!protected
    158 Il faut juste mettre leur nom dans leur Makefile
    159 }}}
    160 
    161 == 2.3. Contrôle de plusieurs GPIO en mode "sortie" ==
    162 
    163 Refaites le même exercice que précédemment, mais cette fois-ci configurez plusieurs GPIO en sorties.
    164 * La LED0 est connectée sur le GPIO 4, **la LED1 est connectée sur le GPIO 17**. Faites clignoter les deux LEDs.
    165 * Avant d'exécuter votre programme, vérifiez parce que le matériel est fragile, pour pouvez faire valider votre code avec le chargé de TP.
    166 
    167 Vous devez faire clignoter les deux LEDs a des fréquences différentes et, si possible, parametrable par des arguments en ligne de commandes.
    168 Je vous conseille de créer une thread par LED
    169 
    170 == 2.4. Lecture de la valeur d'une entrée GPIO ==
     149cp -rp /users/enseig/franck/IOC/lab1 .
     150}}}
     151* Éditez le fichier blink0.c\
     152  ATTENTION: ne changez pas les valeurs de GPIO_LED0, GPIO_LED1 et GPIO_BP, car vous risqueriez d'endommager la carte !RaspberryPi.
     153* Ensuite, compilez-le grâce au Makefile (**Vous devez l'adapter à votre carte et vos noms**) qui vous est fourni.
     154  Qu'observez-vous ? Changer la fréquence de clignotement.
     155
     156 **Questions sur le code de blink0.c **::
     157 1. A quoi correspond l'adresse `BCM2835_GPIO_BASE` ?
     158 1. Que représente la structure `struct gpio_s` ?
     159 1. Dans quel espace d'adressage est l'adresse `gpio_regs` ?
     160 1. Dans la fonction `gpio_fsel()`, que contient la variable reg ?
     161 1. Dans la fonction `gpio_write()`, pourquoi écrire à deux adresses différentes en fonction de la valeur val ?
     162 1. Dans la fonction `gpio_mmap()`, à quoi correspondent les flags de open ?
     163 1. Dans la fonction `gpio_mmap()`, commentez les arguments de mmap.
     164 1. Que fait la fonction `delay()` ?
     165
     166== 2.4. Contrôle de plusieurs GPIO en mode "sortie" ==
     167
     168Vous allez maintenant faire clignoter deux leds à des fréquences différentes et paramétrables sur la ligne de commande. Pour tous les exercices ci-après, vous devez changer votre Makefile en ajoutant les programmes à compiler.
     169
     170* Commencez par faire une copie du fichier `Blink0.c` en `blink0_pt.c`. Vous allez créer un thread Posix dans `blink0_pt.c` pour faire clignoter une led, c'est donc le même comportement que blink0 avec un pthread pour la partie `// Blink led ...` (à la fin de `main()`).
     171* Faites ensuite une une copie du fichier `Blink0_pt.c` en `blink01_pt.c`et faites clignoter les deux LEDs en utilisant deux pthreads.
     172
     173
     174== 2.5. Lecture de la valeur d'une entrée GPIO ==
    171175
    172176Maintenant que vous maîtrisez le contrôle d'un GPIO en sortie, passons au mode "entrée".
    173 Écrivez un programme qui configure la GPIO 18 en entrée. Vous devez afficher la valeur de ce GPIO dans une boucle infinie.
    174 
    175 * Une fois réalisé, compilez votre programme comme précédemment à l'aide du Makefile fourni.
    176 * Ensuite, copiez votre programme sur la carte comme indiqué dans l'exercice précédent.
    177 
    178 On veut détecter l'appui sur le bouton poussoir. Pour cela, vous allez lire sa valeur périodiquement toutes les 20ms. L'appui ou le relâchement correspond est présent quand deux valeurs lues successivement sont différentes. Quand le bouton n'est pas enfoncé, la valeur de la broche est à 1. La structure du programme suggéré.
     177
     178* Écrivez un programme `read_bp.c` qui configure la GPIO 18 en entrée (là où est connecté le bouton poussoir) et qui affiche la valeur de ce GPIO dans une boucle infinie.
     179* On veut maintenant détecter l'appui sur le bouton poussoir. Pour cela reprenez le programme `blink01_pt.c` et faite une copie en `blink01_bp_pt.c`. Dans un pthread, vous allez lire la valeur du bouton périodiquement toutes les 20ms. L'appui ou le relâchement est présent quand deux valeurs lues successivement sont différentes. Quand le bouton n'est pas enfoncé, la valeur de la pin est à 1. La structure du programme suggéré.
    179180{{{#!c
    180181val_prec = 1
     
    194195      comportement quand un relachement est detecte
    195196}}}
    196 
    197 Commencer par tester que vous savez détecter l'appui sans gérer les LEDs.
     197 Commencer par tester que vous savez détecter l'appui sans gérer les LEDs.
    198198
    199199Ensuite, faite un programme qui fait clignoter deux fois plus vite les LEDs lorsqu'on appuit sur le bouton une fois, et qui refait clignoter les LEDs normalement au nouvel appui.