Différences
Ci-dessous, les différences entre deux révisions de la page.
| tinyclros:gpio:esnum [2020/04/08 10:26] – [5. Btn1 contrôle LED1 !] philippe | tinyclros:gpio:esnum [2025/06/19 19:29] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | [[tinyclros: | ||
| + | ===== TinyCLR OS - GPIO ===== | ||
| + | |||
| + | ** Rédacteur** : Philippe Mariano | ||
| + | {{ : | ||
| + | |||
| + | [Mise à jour le 8/4/2020] | ||
| + | |||
| + | * **Sources** | ||
| + | * Site GHI : < | ||
| + | ==== 1. Généralités ==== | ||
| + | « //Dans un système à base de **microcontrôleur**, | ||
| + | |||
| + | Pour éviter de faire référence à des valeurs électriques (tension ou intensité), | ||
| + | - **true** (« 1 » logique) correspondra par exemple à 5V ou 3,3V \\ | ||
| + | - **false** (« 0 » logique) correspondra à 0V. | ||
| + | |||
| + | {{ : | ||
| + | Un **microcontrôleur** dispose de broches pouvant être contrôlées par un logiciel. Elles peuvent se comporter comme des entrées ou des sorties, d'où le nom " | ||
| + | |||
| + | Le nombre de broches d’un microcontrôleur étant limité, il est fréquent d’avoir plusieurs fonctionnalités sur une même broche. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== 2. Les entrées, sorties numériques des cartes FEZ ==== | ||
| + | |||
| + | === 2.1 GPIO accessibles sur la carte FEZ === | ||
| + | Les connexions **D13** à **D0** peuvent être configurées en **entrée** ou en **sortie numérique**. On voit sur la copie d’écran ci-dessous qu’elles partagent la connectique avec d’autres fonctionnalités (PWM, SPI etc.). | ||
| + | {{ : | ||
| + | |||
| + | === 2.2 Bibliothèques à installer === | ||
| + | Un programme implanté dans une carte FEZ accède à ses entrées, sorties numériques par l’intermédiaire des **bibliothèques** (assemblys) \\ suivantes : \\ | ||
| + | {{ : | ||
| + | - **GHIElectronics.TinyCLR.Devices.Gpio** (les entrées, sorties)\\ | ||
| + | - **GHIElectronics.TinyCLR.Pins** (les définitions des broches) | ||
| + | |||
| + | Ces bibliothèques sont installées dans le projet sous la forme de paquets **NuGet** comme dans l' | ||
| + | |||
| + | L' | ||
| + | |||
| + | * // | ||
| + | * **Etape 2 : Installer des bibliothèques dans le projet** | ||
| + | |||
| + | === 2.3 Espaces de noms === | ||
| + | L' | ||
| + | <code csharp *.cs> | ||
| + | using GHIElectronics.TinyCLR.Pins; | ||
| + | using GHIElectronics.TinyCLR.Devices.Gpio; | ||
| + | </ | ||
| + | |||
| + | {{ : | ||
| + | ==== 3. Les entrées numériques ==== | ||
| + | Les entrées numériques permettent de détecter un état logique « 0 » ou « 1 ». | ||
| + | |||
| + | === 3.1 Précautions d' | ||
| + | > | ||
| + | |||
| + | {{ : | ||
| + | __Remarque__ : le processeur de la carte FEZ dispose de **résistances de rappel internes** pouvant être connectées par le logiciel. | ||
| + | |||
| + | === 3.2 Configuration d'une broche en entrée === | ||
| + | L’accès à une entrée numérique " | ||
| + | - Créer un objet de la classe **GpioController** et lui affecter le contrôleur GPIO de la carte ciblée avec la méthode **GetDefault**. | ||
| + | - Créer un objet de la classe **GpioPin** et lui affecter la broche à contrôler; ouvrir cette broche avec la méthode **OpenPin**. | ||
| + | - Configurer la broche en entrée ou en sortie (avec résistance de pull-up, etc.) en appliquant la méthode **SetDriveMode** à l' | ||
| + | |||
| + | {{ : | ||
| + | Les différentes configurations possibles pour une broche sont énumérées dans // | ||
| + | |||
| + | __Exemple__ : configuration de la broche connectée au bouton-poussoir BTN1 de la carte FEZ. | ||
| + | |||
| + | <code csharp *.css> | ||
| + | // 1. Création de l' | ||
| + | // contrôleur GPIO de la carte ciblée (à déclarer une seule fois). | ||
| + | var gpio = GpioController.GetDefault(); | ||
| + | // 2. Création de l' | ||
| + | // la broche associée au bouton-poussoir BTN1, | ||
| + | // broche ouverte par OpenPin, | ||
| + | var btn1 = gpio.OpenPin(FEZ.GpioPin.Btn1); | ||
| + | // 3. Configuration de la broche reliée à BTN1 en entrée avec | ||
| + | // une résistance de rappel | ||
| + | btn1.SetDriveMode(GpioPinDriveMode.InputPullUp); | ||
| + | </ | ||
| + | |||
| + | === 3.3 Lecture d'une broche === | ||
| + | La lecture d'une entrée numérique se fait avec une méthode **Read**() de la classe GpioPin. | ||
| + | |||
| + | __Exemple__ : Le bouton-poussoir BTN1 est utilisé pour commander la led LED1 de la carte FEZ. | ||
| + | <code csharp *.css> | ||
| + | if (btn1.Read()== GpioPinValue.High) | ||
| + | { | ||
| + | LED1.Write(GpioPinValue.Low); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | LED1.Write(GpioPinValue.High); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | {{ : | ||
| + | ==== 4. Les sorties numériques ==== | ||
| + | === 4.1 Précautions d' | ||
| + | {{: | ||
| + | {{ : | ||
| + | === 4.2 Configuration d'une broche en sortie === | ||
| + | L’accès à une sortie numérique " | ||
| + | - Créer un objet de la classe **GpioController** et lui affecter le contrôleur GPIO de la carte ciblée avec la méthode **GetDefault**. | ||
| + | - Créer un objet de la classe **GpioPin** et lui affecter la broche à contrôler; ouvrir cette broche avec la méthode **OpenPin**. | ||
| + | - Configurer la broche sortie en appliquant la méthode **SetDriveMode** à l' | ||
| + | |||
| + | {{ : | ||
| + | Les différentes configurations possibles pour une broche sont énumérées dans // | ||
| + | |||
| + | __Exemple__ : configuration de la broche connectée à la LED1 de la carte FEZ. | ||
| + | |||
| + | <code csharp *.css> | ||
| + | // 1. Création de l' | ||
| + | // contrôleur GPIO de la carte ciblée (à déclarer une seule fois). | ||
| + | var gpio = GpioController.GetDefault(); | ||
| + | // 2. Création de l' | ||
| + | // la broche associée à LED1. | ||
| + | // broche ouverte par OpenPin, | ||
| + | var btn1 = gpio.OpenPin(FEZ.GpioPin.LED1); | ||
| + | // 3. Configuration de la broche reliée à LED1 en sortie. | ||
| + | btn1.SetDriveMode(GpioPinDriveMode.OutPut); | ||
| + | </ | ||
| + | |||
| + | === 4.3 Ecriture sur une broche === | ||
| + | Une sortie numérique peut prendre l’état **true** ou **false**. Cet état est contrôlé avec la méthode Write. | ||
| + | |||
| + | __Exemple__ : Le bouton-poussoir BTN1 est utilisé pour commander la led LED1 de la carte FEZ. | ||
| + | <code csharp *.css> | ||
| + | if (btn1.Read()== GpioPinValue.High) | ||
| + | { | ||
| + | LED1.Write(GpioPinValue.Low); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | LED1.Write(GpioPinValue.High); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== 5. BTN1 contrôle Led1 ! ==== | ||
| + | |||
| + | <code csharp *.cs> | ||
| + | using GHIElectronics.TinyCLR.Devices.Gpio; | ||
| + | using GHIElectronics.TinyCLR.Pins; | ||
| + | using System.Threading; | ||
| + | |||
| + | namespace TCLR_FEZ_LED1_Btn1 | ||
| + | { | ||
| + | class Program | ||
| + | { | ||
| + | static void Main() | ||
| + | { | ||
| + | var gpio = GpioController.GetDefault(); | ||
| + | var LED1 = gpio.OpenPin(FEZ.GpioPin.Led1); | ||
| + | LED1.SetDriveMode(GpioPinDriveMode.Output); | ||
| + | var btn1 = gpio.OpenPin(FEZ.GpioPin.Btn1); | ||
| + | btn1.SetDriveMode(GpioPinDriveMode.InputPullUp); | ||
| + | |||
| + | while (true) | ||
| + | { | ||
| + | if (btn1.Read() == GpioPinValue.High) | ||
| + | { | ||
| + | LED1.Write(GpioPinValue.Low); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | LED1.Write(GpioPinValue.High); | ||
| + | } | ||
| + | Thread.Sleep(10); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | {{ : | ||
| + | <note tip>Le projet **TCLR_FEZ_LED1_Btn1** pour **Visual Studio Community 2017** est téléchargeable < | ||
| + | |||
| + | |||
| + | {{ : | ||
| + | ==== 6. Les interruptions ==== | ||
| + | Une **interruption** est un arrêt temporaire de l' | ||
| + | |||
| + | L’interruption est provoquée par une cause externe (action sur un bouton-poussoir, | ||
| + | |||
| + | On utilise les interruptions afin de permettre des **communications non bloquantes** avec des périphériques externes. | ||
| + | |||
| + | Une interruption tient compte de l’état logique présent sur une broche. Couramment, on la déclenchera sur **le front montant, le front descendant, ou chacun des fronts** d’un signal logique. | ||
| + | |||
| + | === 6.1 Précautions d' | ||
| + | Une interruption sera reconnue si le signal présente des fronts " | ||
| + | Les figures ci-dessous représentent un signal transmis à la fermeture du contact d’un anémomètre. Le signal de gauche n’est pas utilisable, car, à cause du rebondissement du contact, il contient quatre fronts montants au lieu d’un seul comme dans le cas du signal de droite. | ||
| + | {{ : | ||
| + | |||
| + | === 6.2 Configuration d'une entrée comme source d' | ||
| + | La configuration en entrée de la broche destinée à recevoir un évènement est identique à celle du paragraphe 4. | ||
| + | |||
| + | === 6.3 Evènement et gestionnaire d' | ||
| + | Un évènement est attaché à un gestionnaire (service d' | ||
| + | |||
| + | <code csharp *.cs> | ||
| + | using GHIElectronics.TinyCLR.Devices.Gpio; | ||
| + | using GHIElectronics.TinyCLR.Pins; | ||
| + | using System.Threading; | ||
| + | |||
| + | |||
| + | namespace TCLR_FEZ_LED1_Btn1_INT | ||
| + | { | ||
| + | class Program | ||
| + | { | ||
| + | private static GpioPin LED1; | ||
| + | |||
| + | private static void Main() | ||
| + | { | ||
| + | var gpio = GpioController.GetDefault(); | ||
| + | LED1 = gpio.OpenPin(FEZ.GpioPin.Led1); | ||
| + | LED1.SetDriveMode(GpioPinDriveMode.Output); | ||
| + | var btn1 = gpio.OpenPin(FEZ.GpioPin.Btn1); | ||
| + | btn1.SetDriveMode(GpioPinDriveMode.InputPullUp); | ||
| + | // Prise en compte de l' | ||
| + | btn1.ValueChanged += Btn1_ValueChanged; | ||
| + | |||
| + | Thread.Sleep(-1); | ||
| + | // d' | ||
| + | |||
| + | } | ||
| + | |||
| + | private static void Btn1_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e) | ||
| + | { | ||
| + | if (e.Edge == GpioPinEdge.RisingEdge) | ||
| + | LED1.Write(GpioPinValue.Low); | ||
| + | else | ||
| + | LED1.Write(GpioPinValue.High); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | {{ : | ||
| + | <note tip>Le projet **TCLR_FEZ_LED1_Btn1_INT** pour **Visual Studio Community 2017** est téléchargeable < | ||
| + | |||
| + | |||
| + | |||
| + | ==== 7. Tous les exemples ==== | ||
| + | * Exemples codés en C# pour la carte **Panda 3 (G80)** [[tinyclros: | ||