Sommaire TinyCLR OS

[Mise à jour le : 13/2/2020]

Programmes réalisés dans le tuto

  • 1. Blink - Sortie logique
  • 2. MesureAngle - Entrée analogique, sortie série asynchrone
  • 3. Ventilation - Entrée analogique, sorties PWM et série asynchrone

Pour mener à bien ce tutoriel, vous devez disposer d’une carte Fez T18.

Microsoft Visual Studio 2017 ou 2019 (Community) doit être installé sur le PC.

Le firmware de la carte doit être à jour. Si ce n’est pas le cas : suivez le "Guide d’installation" ou voir la vidéo "Updating BrainPad’s Firmware - Tech Talk 041".

Les vidéos du cours sur les fondamentaux du langage C#, accessibles sur le site MVA sont un excellent préalable ou un complément à ce tutoriel.

Cahier des charges du programme 1 : faire clignoter la LED “LED1” de la carte FEZ T18 !

  • Ouvrir l’IDE Visual Studio en cliquant sur l’icône suivante : puis sélectionner : Fichier → Nouveau projet ou [Ctrl+Maj+N],
  • Dans la boîte de dialogue “Nouveau projet” sélectionner : Installé → Visual C# → TinyCLR et TinyCLR Application.

  • Donner le nom “Blink” à l’application puis cliquer sur Ok.

Remarque: L’emplacement identifié ci-dessous peut changer en fonction de la version du logiciel et de l'arborescence des répertoires du PC.

  • Cliquer sur Program.cs dans la fenêtre Explorateur de solution

L’IDE est alors configuré comme sur la copie d’écran ci-dessous (ou un équivalent selon sa version) :

Remarque: Les espaces de nom sont des racourcis. Le projet en contient plus ou moins selon son type.

Le projet Blink est contenu dans la solution Blink. Vous allez écrire le code source du programme dans le fichier Program.cs.

Etape 2 : Installer des bibliothèques dans le projet

  • Effectuer un clic droit sur Références dans l'explorateur de solution (s'il n'est pas visible : Affichage → Explorateur de solution)

  • Cliquer sur “Gérer les packages NuGet…“

  • Afficher la bibliothèque présente en vous plaçant sur l'onglet “Installé”.

  • Sélectionner nuget.org dans “Source de package”.

  • Se placer dans l'onglet “Parcourir” et entrer GHIElectronics.TinyCLR.pins .

  • Cliquer sur GHIElectronics.TinyCLR.Pins puis “Installer” pour placer les bibliothèques dans le projet.

  • Cliquer sur “J'accepte”. La liste des bibliothèques installées est accessible dans Références.
  • Refaire les mêmes opérations pour installer GHIElectronics.TinyCLR.Devices

  • Fermer le gestionnaire de paquets

Etape 3 : Editer le code source du programme

  • Cliquer sur Program.cs dans l'explorateur de solution pour faire apparaître le squelette du programme.

a) Déclarer les espaces de nom

Une partie du code a été renseigné par Visual Studio. C’est le cas de la liste des espaces de noms installés par défaut et de la structure minimum du corps de programme (repère 2 de la copie d'écran ci-dessus).

Pour le moment seuls les espaces de nom suivants sont présents :

*.cs
using System;
using System.Collections;
using System.Text;
using System.Threading;
 
namespace Blink
{
    class Program
    {
        static void Main()
        {
        }
    }
}

Modifier cette liste pour qu'elle corresponde au code ci-dessous.

*.cs
using System;
using System.Collections;
using System.Text;
using System.Threading;
using GHIElectronics.TinyCLR.Devices.Gpio;
using GHIElectronics.TinyCLR.Pins;
 
namespace Blink
{
    class Program
    {
        static void Main()
        {
        }
    }
}

b) Construction d'un objet virtuel “led” pour contrôler la LED “LED1” de la carte

Entrer le code ci-dessous.

led.cs
       static void Main()
        {
            var gpio = GpioController.GetDefault(); // Ces deux lignes ouvrent la broche
            var led = gpio.OpenPin(FEZ.GpioPin.Led1); // sur laquelle est connectée LED1
            led.SetDriveMode(GpioPinDriveMode.Output); // Cette ligne la configure en sortie
        }

Remarque : Vous pouvez constater l’effet de l’autocomplétion (intellisense) au fur et à mesure de l'écriture du code. Les propositions faites par le logiciel sont une aide précieuse lors de l’écriture du code.

Il n’est pas nécessaire d’écrire complètement un mot : un appui sur la touche tabulation permet de l’insérer lorsqu'il est sélectionné.


c) Partie exécutive du programme (le corps du programme) : à placer dans une boucle infinie

Ecrire le mot while . Le logiciel vous propose un gabarit (template) de code.

Appuyer deux fois sur la touche de tabulation . Le logiciel construit la structure while pour vous.

Compléter la structure while avec le code ci-dessous :

*.cs
        static void Main()
        {
            var gpio = GpioController.GetDefault(); // Ces deux lignes ouvrent la broche
            var led = gpio.OpenPin(FEZ.GpioPin.Led1); // sur laquelle est connectée LED1
            led.SetDriveMode(GpioPinDriveMode.Output); // Cette ligne la configure en sortie
        }
        while {
                led.Write(GpioPinValue.High);
                Thread.Sleep(100);
                led.Write(GpioPinValue.Low);
                Thread.Sleep(100);
              }

Etape 4 : Générer la solution

La fenêtre de sortie donne des informations pendant l’exécution d’un programme. Elle est utile lors de sa mise au point ou pour remplacer un périphérique d’affichage.

Si la fenêtre de sortie n'est pas présente, vous pouvez là faire apparaître en sélectionnant : Affichage → Sortie ou [Ctrl+Alt+O].

Dans l'éditeur, sélectionner : Générer → Générer la solution ou [Ctrl+Maj+B]. S'il n’y a pas d’erreurs dans le code le logiciel indique :

Etape 5 : Transférer le programme et l'exécuter

Vérifier que l’éditeur est en mode .

Pour transférer et exécuter le programme dans la carte, cliquer sur ou appuyer sur la touche F5.

Après une série d’actions, l’IDE doit afficher Prêt sur un fond rouge en bas et à gauche de la fenêtre.


La LED de la carte doit clignoter !


Etape 6 : Tester le programme en mode pas à pas

Pour mettre un programme “au point” (déboguer), il est possible de l'arrêter, de le redémarrer ou de le mettre en pause.

Pour bien comprendre les possibilités du débogueur, vous allez faire fonctionner le programme en mode pas-à-pas.

Cliquer sur l'icône “Arrêter”, ajouter l'espace de nom :

using System.Diagnostics;

et modifier la boucle while comme ci-dessous :

*.cs
            while (true)
            {
                led.Write(GpioPinValue.High);
                Debug.WriteLine("Led1 éclairée");
                Thread.Sleep(100);
                led.Write(GpioPinValue.Low);
                Debug.WriteLine("Led1 éteinte");
                Thread.Sleep(100);
            }

Placer un point d’arrêt (rond rouge) en cliquant à gauche du mot while comme ci-dessous.

Relancer le programme (touche F5 ou ). Celui-ci s’arrête sur while. Vous pouvez l’exécuter ligne par ligne (mode pas-à-pas) en appuyant sur la touche F10. (Un appui exécute une ligne)

Résultat attendu dans la fenêtre de sortie et comportement de la LED

Exercices


Exercice 1
Modifier le programme pour que la LED clignote à une fréquence de 4Hz avec un rapport cyclique de 1/10



Cahier des charges du programme 2 : afficher la position angulaire d'un axe sur un LCD.


Matériels

  • Carte FEZ T18 et shield
  • Potentiomètre
  • Afficheur LCD 2 lignes de 16 caractères et module


    Etape 1 : Créer le projet

    Reprendre la démarche vue dans le programme 1. Nommer le projet MesureAngle.

    Etape 2 : Installer des bibliothèques dans le projet

    Installer les bibliothèques du projet précédent et ajouter Webge.TCLR.Displays.ELCD162.

    Etape 3 : Editer le code source du programme

    1. Modifier la liste des espaces de noms comme ci-dessous (on conserve seulement ceux qui sont utiles au projet !)

    using.cs
    using System;
    using System.Diagnostics;
    using GHIElectronics.TinyCLR.Devices.Adc;
    using GHIElectronics.TinyCLR.Devices.Gpio;
    using GHIElectronics.TinyCLR.Pins;
    using Webge.TCLR.Displays;
    using System.Threading;

    2. Partie déclarative du programme

    Compléter le fichier ”Program.cs” avec les extraits de code ci-dessous:

    a. Déclaration des constantes

    const.cs
    namespace MesureAngle
    {
        class Program
        {
            static void Main()
            {
              // Constantes
              const UInt16 delay = 500;   // En ms
            }
        }
    }

    b. Déclaration des variables

    var.cs
     // A la suite du code précédent, entrer :
     // Variables
     var Npot = 0;
     var Angle = 0;

    c. Configuration des entrées, sorties

    es.cs
    // A la suite du code précédent, entrer :
     
    // Création des objets pour une carte FEZ T18
    //-----------------------------------------------------------------
    // CAN
    var adc = AdcController.GetDefault();
    var Potentiometre = adc.OpenChannel(FEZ.AdcChannel.A5); // Potentiomètre connecté sur I5 Tinkerkit
     
    // Afficheur
    var lcd = new ELCD162();  // Connecté sur SERIAL Tinkerkit    

    d. Initialisation de l'afficheur

    init.cs
     // A la suite du code précédent, entrer :
    // Initialisation
    //-----------------------------------------------------------------
    lcd.Init(); lcd.CursorOff();

    3. Partie exécutive du programme

    while.cs
     // A la suite du code précédent, entrer :
    while (true)
     {
       // Lire la position angulaire
       Npot = Potentiometre.ReadValue();
     
       // Calcul de la position angulaire
       Angle = 270*Npot/4095;
     
       // Afficher la position angulaire
       lcd.ClearScreen();
       lcd.PutString("Pos = " + Angle.ToString("F1") + "deg");
       Thread.Sleep(delay);
     }

    Etape 4 : Générer la solution

    Reprendre la démarche vue dans le programme 1.

    Etape 5 : Transférer le programme et l'exécuter

    Reprendre la démarche vue dans le programme 1.


    Exercices

    Exercice 2
    Modifier le programme pour qu'une LED simulant une alarme (à rajouter sur la carte) s'éclaire si l'angle n'est pas compris dans l'intervalle [120°, 150°C]. En C#, le OU logique se code ||, le ET logique se code &&. Pour laConstruction de l'objet virtuel “led”, entrer le code ci-dessous.

    led.cs
           static void Main()
            {
                var gpio = GpioController.GetDefault(); // Ces deux lignes ouvrent la broche
                var led = gpio.OpenPin(FEZ.GpioPin.A0); // sur laquelle est connectée LED1
                led.SetDriveMode(GpioPinDriveMode.Output); // Cette ligne la configure en sortie
            }

    Exercice 3
    Remplacer le potentiomètre par un module thermomètre GHI pour afficher la température ambiante sur le LCD.
    Traitement : T ← 0,0185N - 20,5


    Cahier des charges du programme 3 : régler la vitesse d'un ventilateur entre 0 et 100% de sa valeur maximum à partir de la mesure de la position de l'axe d'un potentiomètre. Afficher le réglage sur un LCD


    Matériels

    • Carte FEZ T18 et shield
    • Shield Ardumoto
    • Potentiomètre
    • Ventilateur 12V - 200mA
    • Afficheur LCD 2 lignes de 16 caractères et module ELCD162

    Montage à réaliser

    Etape 1 : Créer le projet

    Reprendre la démarche vue dans le programme 1. Nommer le projet Ventilation.

    Etape 2 : Installer des bibliothèques dans le projet

    • GHIElectronics.TinyCLR.Pins
    • GHIElectronics.TinyCLR.Devices
    • Webge.TCLR.Displays.ELCD162

    Etape 3 : Editer le code source du programme

    1. Modifier la liste des espaces de noms comme ci-dessous (on conserve seulement ceux qui sont utiles au projet !)

    using.cs
    using System;
    using System.Diagnostics;
    using GHIElectronics.TinyCLR.Devices.Adc;
    using GHIElectronics.TinyCLR.Devices.Gpio;
    using GHIElectronics.TinyCLR.Devices.Pwm;
    using GHIElectronics.TinyCLR.Pins;
    using System.Threading;
    using Webge.TCLR.Displays;

    2. Partie déclarative du programme Compléter le fichier “Program.cs” avec les extraits de code ci-dessous:

    a. Déclaration des constantes

    const.cs
    namespace MesureAngle
    {
        class Program
        {
            static void Main()
            {
              // Constantes
              // aucune
            }
        }
    }

    b. Déclaration des variables

    var.cs
     // A la suite du code précédent, entrer :
     // Variables
     var Npot = 0.0;
     var ConsigneVentilation = 0.0;

    c. Configuration des entrées, sorties

    es.cs
    // A la suite du code précédent, entrer :
     
    // Création des objets pour une carte FEZ T18
    //-----------------------------------------------------------------
    // CAN 12bits
    // Voir le programme 2
     
    // Signal PWM
    var pwm = PwmController.FromName(FEZ.PwmChannel.Controller3.Id);
    var CdeVentilation = pwm.OpenChannel(FEZ.PwmChannel.Controller3.D11);
    pwm.SetDesiredFrequency(5000);
     
    // GPIO
    var gpio = GpioController.GetDefault();
    var SENS = gpio.OpenPin(FEZ.GpioPin.D13);
    SENS.SetDriveMode(GpioPinDriveMode.Output);
    SENS.Write(GpioPinValue.Low);
     
    // Afficheur
    // Voir le programme 2   

    d. Initialisation de l'afficheur

    init.cs
    // A la suite du code précédent, entrer :
    // Initialisation
    //-----------------------------------------------------------------
    CdeVentilation.SetActiveDutyCyclePercentage(0); // Commande Ventilation = 0%
    CdeVentilation.Start();
    lcd.Init(); lcd.CursorOff();

    3. Partie exécutive du programme

    while.cs
     // A la suite du code précédent, entrer :
    while (true)
     {
       // Lire la position angulaire
       // Voir le programme 2
     
       // Calculer la consigne de ventilation en %
       // Voir le programme 2
     
       // Commander le ventilateur
       // Voir la méthode dans Initialisation ci-dessus 
     
       // Afficher la consigne de ventilation sur le lcd
       // Voir le programme 2
     }

    Etape 4 : Générer la solution

    Reprendre la démarche vue dans le programme 1.

    Etape 5 : Transférer le programme et l'exécuter

    Reprendre la démarche vue dans le programme 1.

    Exercice

    Ecrire l'algorithme du programme “Ventilation”


    Sources des exemples Les sources des exemples (compilées avec Visual Studio Community 2017) sont téléchargeables ici.


  • tinyclros/fezt18pap.txt
  • Dernière modification : 2022/08/04 09:02
  • de phil