[TUTORIEL] Arduino/Genuino Zero + Akene v1

Forum de support et d'échange sur la carte Akeru (carte compatible Arduino développée par Snootlab et intégrant la technologie Sigfox) et du shield Akene pour Arduino (shield pour Arduino développée par Snootlab et intégrant la technologie Sigfox)

[TUTORIEL] Arduino/Genuino Zero + Akene v1

Message non lude Laetitia » Jeu 18 Aoû 2016 17:14

Bonjour,

Aujourd'hui nous apprendre à adapter l'Akene v1 pour une utilisation avec un Arduino Zero !

    Matériel
- Arduino/Genuino Zero
- Akene v1
- Câbles M/M

Librairie Akeru spécifique

    Que faire ?
Il faut tout d'abord rendre le shield compatible avec les entrées/sorties de l'Arduino Zero. En effet, celui-ci fonctionne sous 3.3V, mais les pins de l'Akene fonctionnent en 5V. Nous allons donc pirater le convertisseur de niveaux pour faire en sorte que l'on retrouve bien 3.3V de chaque côté de ce dernier !

On commence par plier la patte 5V du shield de manière à ce qu'elle ne s'enfiche pas dans l'Arduino Zero, puis on met un câble M/M entre les broches 5V et 3.3V du shield :

hack lvl shifter.jpg
hack lvl shifter.jpg (133.38 Kio) Vu 719 fois

Ensuite, il nous faut rediriger les RX/TX du modem Sigfox sur le nouveau port série utilisé. En effet, l'Arduino Zero ne supporte pas (pour le moment) la librairie SoftwareSerial... mais il possède 3 ports série matériels, utilisables en plus de la liaison USB lisible sur le moniteur série ! Ceux-ci sont désignés par Serial1, Serial2 et Serial3, et s'utilisent de la même manière que l'objet Serial que vous utilisez habituellement.

      Serial1
RX = D0 ; TX = D1

Pas de code supplémentaire à écrire ! Serial1 est reconnu automatiquement par l'IDE Arduino.

      Serial2
RX = D12 ; TX = D10

Il y a deux fichiers à modifier pour pouvoir exploiter l'objet Serial2 : il s'agit de fichiers de configuration spécifiques à l'Arduino Zero (téléchargés via le Boards Manager/Gestionnaire de Cartes de l'IDE), servant entre autres à définir les fonctions des pins du microcontrôleur.
Il faut faire un peu de spéléo pour les trouver ! Sur un PC avec Windows 7 le chemin d'accès au dossier qui nous intéresse ressemble à : C:\Users\Username\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.6\variants\arduino_zero. Une fois au bon endroit, nous avons deux fichiers à modifier :

  • variant.h

    Il faut ajouter à la suite des définitions des interfaces série :

    Code: Tout sélectionner
    // Serial2
    #define PIN_SERIAL2_RX       (34ul) // D12
    #define PIN_SERIAL2_TX       (36ul) // D10
    #define PAD_SERIAL2_TX       (UART_TX_PAD_2)
    #define PAD_SERIAL2_RX       (SERCOM_RX_PAD_3)

    Puis un peu plus bas :

    Code: Tout sélectionner
    extern Uart Serial2;

  • variant.cpp

    Il faut initialiser l'instance Serial2 en prenant exemple sur les deux existantes :

    Code: Tout sélectionner
    Uart Serial2(&sercom1, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX);

    Et activer les interruptions correspondantes, toujours en s'inspirant des lignes qui précèdent :

    Code: Tout sélectionner
    void SERCOM1_Handler()
    {
      Serial2.IrqHandler();
    }

      Serial3
RX = D5 ; TX = D2

Il faut modifier les mêmes fichiers de configuration que précédemment pour pouvoir exploiter l'objet Serial3.

  • variant.h

    Il faut ajouter à la suite des définitions des interfaces série :

    Code: Tout sélectionner
    // Serial3
    #define PIN_SERIAL3_RX       (45ul) // D5
    #define PIN_SERIAL3_TX       (44ul) // D2
    #define PAD_SERIAL3_TX       (UART_TX_PAD_2)
    #define PAD_SERIAL3_RX       (SERCOM_RX_PAD_3)

    Puis un peu plus bas :

    Code: Tout sélectionner
    extern Uart Serial3;

  • variant.cpp

    Il faut indiquer au microcontrôleur que les pins D2 et D5 peuvent être utilisées en tant que RX/TX en plus des fonctions déjà définies. Pour ce faire, il faut ajouter dans les descriptions des pins, à la suite des autres :

    Code: Tout sélectionner
    // 44..45 - SERCOM2
      { PORTA, 14, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SERCOM2/PAD[2]
      { PORTA, 15, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SERCOM2/PAD[3]

    Puis initialiser l'instance Serial3 :

    Code: Tout sélectionner
    Uart Serial3(&sercom2, PIN_SERIAL3_RX, PIN_SERIAL3_TX, PAD_SERIAL3_RX, PAD_SERIAL3_TX);

    Et enfin activer les interruptions :

    Code: Tout sélectionner
    void SERCOM2_Handler()
    {
      Serial3.IrqHandler();
    }

      Et ensuite ?
Une fois que vous vous êtes décidé et que vous avez fait la configuration nécessaire, reliez les RX/TX de l'Akene, respectivement aux TX/RX du nouveau port série :

cablage Serial1.jpg
cablage Serial1.jpg (150 Kio) Vu 719 fois

Les RX/TX de l'Akene sont respectivement sur D5 et D4, ici on utilise Serial1.

Enfin, il ne reste qu'à définir le port série utilisé dans le sketch ! Cela se fait de manière assez simple :

Code: Tout sélectionner
Akeru akene(&Serial1);

Indiquez bien évidemment le port série sur lequel vous avez câblé l'Akene. Si la communication ne fonctionne pas, inversez les RX/TX, il s'agit d'une erreur courante !

Remarques :

  • Les manipulations matérielles détaillées dans ce tutoriel sont à effectuer pour une utilisation de l'Akene avec n'importe quelle carte fonctionnant sous 3.3V.
  • Une fois le convertisseur de niveaux modifié, la ligne 5V de la zone de prototypage délivrera du 3.3V.
  • Si vous avez un sketch fonctionnant sur Arduino Uno que vous voulez porter sur Arduino Zero, il vous faut changer de librairie (passer de la version AVR à la version ARM citée en début de tutoriel) puis éditer le constructeur. C'est tout !
  • Il est possible de rendre les modifications matérielles permanentes en remplaçant les câbles M/M par des fils soudés sur les pastilles servant à dupliquer les broches (si vous le faites n'oubliez pas de couper la patte 5V du shield) :
hack lvl shifter_def.jpg
hack lvl shifter_def.jpg (196.03 Kio) Vu 719 fois

Les fichiers variant.h et variant.cpp en version modifiée pour ajouter le support des ports Serial2 et Serial3 sont également disponibles ci-dessous pour ceux qui auraient un doute... ou la flemme ;)

variant.h
(6.98 Kio) Téléchargé 28 fois

variant.cpp
(18.94 Kio) Téléchargé 33 fois
"If it's itchy, scratch it !" - "DIY or die"

RTFM (À lire avant de poster) - ANDb (Arduino Noob Database)
Avatar de l’utilisateur
Laetitia
 
Messages: 286
Inscription: Mar 7 Aoû 2012 15:07
Localisation: Toulouse

Retourner vers Akeru et Akene

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité