LOCODUINO

Adieu Uno, bonjour Uno !

.
Par : Christian

DIFFICULTÉ :

Que feriez-vous si Ferrari annonçait un nouveau modèle de voiture de sport à un prix inférieur à celui de votre berline ? Ne vous réjouissez pas trop vite : il y a peu de chance que Ferrari fasse une telle annonce. Mais c’est un peu ce qui se passe chez Arduino qui propose une nouvelle carte Uno pour un prix très inférieur à celui de la carte Uno R3 et qui est dotée d’un moteur de Ferrari et d’une mémoire d’éléphant. Voyons cela en détail.

Les nouvelles cartes Uno R4

La nouvelle carte Uno R4 (pour révision 4) est certainement appelée à remplacer la traditionnelle carte Uno R3 largement décrite et utilisée dans les articles de LOCODUINO. Elle se décline en deux versions, une minimaliste (si on peut dire) appelée Uno R4 Minima et une autre connectable en WiFi et Bluetooth appelée Uno R4 WiFi. Ces deux cartes sont en tous points similaires à une carte Uno (forme, dimensions et connecteurs) et travaillent en 5V, ce qui leur permet donc de remplacer la Uno R3 dans un projet déjà abouti sans qu’il soit nécessaire de revoir l’alimentation des composants électroniques reliés à la carte, sauf peut-être en ce qui concerne la consommation admissible sur une broche comme on l’explique plus loin. Ces deux cartes peuvent donc utiliser les cartes shield qui existaient pour la Uno R3. La grande différence est qu’elles utilisent un microcontrôleur 32 bits cadencé à 48 MHz, là où l’Uno R3 n’avait qu’un 8 bits cadencé à 16 MHz. La mémoire aussi a été augmentée puisque les cartes Uno R4 disposent de 256 kilo-octets de flash (32 pour la R3), 32 kilo-octets de SRAM (8 pour la R3) et 8 kilo-octets d’EEPROM (1 pour la R3) (voir au paragraphe suivant les remarques importantes au sujet de cette mémoire). Enfin, comme nous le verrons dans cet article, ces deux cartes disposent de ressources que n’avait pas la carte Uno R3 et qui peuvent se révéler très pratiques dans un projet de modélisme ferroviaire.

À l’heure où ces lignes sont écrites (juillet 2023), la carte Uno R4 Minima est proposée à 18 euros, la carte Uno R4 WiFi à 25 euros, alors que la carte Uno R3 est à 24 euros [1]. Nous allons décrire la carte Uno R4 Minima, puis nous rajouterons ce que la carte Uno R4 WiFi apporte encore en plus.

La carte Uno R4 Minima

Son prix attractif la prédestine à remplacer la carte Uno R3 dans la majorité des projets. La figure 1 montre cette carte et comme on peut le voir, son aspect est identique à celui d’une carte Uno R3 ; les connecteurs sont même mieux repérés sur leurs tranches, ce qui évite des erreurs de branchement. La prise USB est de type C, ce qui demande d’avoir un câble USB-C pour la programmer, mais c’est là la seule différence visible avec une carte R3 en dehors de la couleur et du design du circuit imprimé. La prise jack qui permet une alimentation autonome de la carte, accepte une tension comprise entre 6 et 24 V (la R3 était limitée à 20 V avec une recommandation à 12 V), ce qui est mieux car le 24 V est un standard industriel. Le régulateur est un convertisseur DC-DC avec une efficacité de 90% contrairement à la Uno R3 qui avait un régulateur linéaire (la chute de tension est convertie en chaleur), ce qui permettra d’alimenter sans chauffer une électronique externe.

Figure 1
Figure 1
La carte Uno R4 Minima (source Arduino)

La carte intègre un microcontrôleur 32 bits RA4M1 [2], un Arm Cortex M4 de marque Renesas, cadencé à 48 MHz, ce qui n’est pas un chiffre extraordinaire quand on sait que l’ESP32 peut aller jusqu’à 240 MHz. Ce microcontrôleur dispose d’une unité de traitement des nombres à virgule flottante (Floating Point Unit ou FPU), ce qui accélère les calculs en flottant uniquement, mais le fait d’être un 32 bits accélère les calculs entiers sur 16 et 32 bits. Il dispose également de 256 kB (kilo-octets) de mémoire Flash pour le programme (code flash memory), 32 kB de mémoire SRAM pour les données volatiles et 8 kB de mémoire Flash pour les données permanentes (data flash memory), équivalent de la mémoire EEPROM des cartes Uno R3.

La data flash memory est limitée à 100 000 cycles d’écriture/effacement d’après le constructeur (notice du microcontrôleur page 48), tout comme l’était la mémoire EEPROM des cartes R3. En conséquence, il ne faut jamais utiliser la fonction write() à l’intérieur de la boucle loop car, comme celle-ci est rejouée en permanence, la limitation serait vite atteinte. Cette data memory, appelée aussi EEPROM par Arduino, s’utilise de la même façon que l’EEPROM des cartes R3 grâce à la bibliothèque <EEPROM.h> . Des exemples d’utilisation sont donnés dans le Guide de l’EEPROM.

Au niveau des broches d’entrées-sorties, on retrouve comme sur la R3, 14 E/S numériques pouvant délivrer ou absorber 8 mA (c’était 20 mA pour la R3) et dont six délivrent un signal de type PWM (les mêmes broches que la R3), 6 entrées analogiques dont une peut être une véritable sortie analogique, pouvant donc délivrer une tension analogique comprise entre 0 et 5 V du fait que le microcontrôleur dispose d’un convertisseur numérique-analogique (DAC Digital to Analog Converter) sur 12 bits.

Les broches des cartes Uno R4 (Minima ou WiFi) délivrent ou absorbent un courant de 8 mA maximum alors que la carte Uno R3 permettait des courants de 20 mA. Afin de ne pas endommager la carte R4, il est nécessaire de tenir compte de cette limitation et de choisir des résistances de limitation de courant en conséquence. Une résistance de 1 ko limitera le courant à 3 mA à peu près, ce qui est suffisant pour une LED ; il est conseillé de ne jamais descendre en dessous de 470 ohms.

Au niveau communication, la carte dispose d’une UART sur les broches D0 (Rx) et D1 (Tx), d’un bus SPI (sur D10-D13 ou le connecteur ICSP), d’un bus I2C (sur A4 et A5) et d’un module CAN (sur D4 et D5) qui nécessite tout de même un transceiver (le bus CAN est largement utilisé par LOCODUINO dans certains projets de modélisme ferroviaire).

Enfin, la carte intègre une horloge temps réel (Real Time Clock ou RTC), ce qui permet de mieux gérer le temps au niveau de certains automatismes et un HID (Human Interface Device) qui permet, lorsque la carte est reliée à un ordinateur en USB, de simuler un clavier ou une souris. Il devient alors facile d’envoyer à l’ordinateur des caractères clavier ou des mouvements de souris.

La carte R4 Minima dispose également d’un connecteur SWD (Serial Wire Debug) [3] qui permet aux utilisateurs avancés et équipés de disposer d’options de debuggage.

La figure 2 montre les deux côtés du circuit imprimé d’une carte Uno R4 Minima.

Figure 2
Figure 2
Carte Uno R4 Minima (source Arduino)

Pour résumer, la carte Uno R4 Minima est une carte Uno telle que nous la connaissons, avec un microcontrôleur plus performant, une mémoire plus vaste (8 fois plus de Flash et 16 fois plus de SRAM), et qui dispose en plus d’une sortie analogique (sur A0), d’une horloge temps réel et d’un bus CAN (sur D4 et D5), le tout pour un prix beaucoup moins cher (75%).

Un sketch écrit pour la carte Uno R3 pourrait ne pas fonctionner sur les cartes Uno R4 (Minima ou WiFi), notamment s’il utilise directement les registres du microcontrôleur ou s’il utilise une bibliothèque externe non mise à jour pour les nouvelles cartes ou si une partie est écrite en assembleur. Les programmes qui utilisent le « langage Arduino » (encore appelé Arduino API) ne devraient pas présenter de problèmes sur les cartes R4 ; dans ce cas, il est alors possible d’améliorer le programme pour utiliser pleinement les nouvelles ressources des cartes R4.

Utilisation de la carte Uno R4 Minima

Il est bien-sûr nécessaire d’apprendre à utiliser ces nouvelles ressources et le site d’Arduino fournit une documentation abondante, mais hélas en anglais [4]. La curiosité nous ayant poussé à nous procurer ces deux cartes, nous décrirons en fin d’article quelques opérations dont vous pourrez vous inspirer pour vos propres programmes, surtout pour ceux qui ne comprennent pas l’anglais du site d’Arduino.

La description complète de cette carte se trouve sur cette page du site Arduino.

Juste après le tableau des spécificités techniques, vous pouvez accéder au schéma de la carte ainsi qu’à sa datasheet (Notice explicative) : je vous conseille de télécharger cette dernière sur votre ordinateur pour pouvoir vous y référer hors connexion (le code SKU Stock Keeping Unit ou UGS Unité de Gestion de Stock est ABX00080). Juste au-dessous se trouve un lien « ARDUINO DOCS » qui ouvre une nouvelle page qui vous permettra de choisir les sections qui vous intéressent, comme par exemple l’utilisation de la RTC ou bien du DAC. Ces sections vous proposent des exemples d’utilisation de la ressource avec schéma et programme : pas besoin d’être bilingue en anglais pour recopier le schéma et récupérer le programme et faire ainsi vos premières armes.

Auparavant, je vous conseille de faire un petit tour sur la « CHEAT SHEET » qui reprend tout ce qu’il y a à savoir pour utiliser la carte R4 Minima et qui renvoie vers les documentations nécessaires. Sur cette page, on trouve entre autre, la dénomination des broches d’entrée-sortie (numériques et analogiques), le DAC, la RTC, l’utilisation de l’EEPROM et des bus (SPI, I2C, USB Serial et UART, USB HID), le module CAN, et des indications sur le Bootloader.

Vous pouvez aussi développer le tableau des spécificités techniques ou consulter la compatibilité de la carte, notamment avec les logiciels de programmation ou bien avec les cartes shield qui existaient pour la carte Uno R3.

La carte Uno R4 WiFi

Maintenant que nous avons décrit la R4 Minima, voyons ce qu’apporte en plus la Uno R4 WiFi. Cette carte est architecturée autour du même microcontrôleur que la R4 Minima. La figure 3 montre les deux côtés de son circuit imprimé et déjà quelques différences notables nous sautent aux yeux : la présence d’une matrice de LED de 12 X 8, la présence d’un microcontrôleur ESP32-S3 de chez Espressif qui permet la connectivité de la carte en WiFi et Bluetooth et un connecteur Qwiic qui permet des connections en I2C avec des composants de l’écosystème Qwiic. De par sa connectivité, cette carte est compatible avec l’Arduino IoT Cloud (voir l’article « Entrez dans le monde des objets connectés » du Loco-Revue d’avril 2022 ainsi que l’article « Commandez une loco analogique avec votre smartphone » du loco-Revue de mai 2022). On le comprend, pour être exploitée au mieux de ses possibilités, cette carte est plutôt réservée à des gens confirmés qui ont déjà une solide expérience du monde d’Arduino.

Figure 3
Figure 3
Carte Uno R4 WiFi (source Arduino)
La carte Uno R4 WiFi opère en 5 V mais le microcontrôleur ESP32-S3 opère lui en 3,3 V. Il y a la possibilité de reprogrammer le firmware de l’ESP32-S3 mais cette opération peut se révéler dangereuse pour l’intégrité de la carte elle-même ; il faut donc avoir une très bonne raison de le faire et posséder les connaissances adéquates pour se lancer dans une telle opération.

On peut également remarquer sur la figure 3 un ensemble de trois broches additionnelles : OFF, GND et VRTC. La broche OFF permet de mettre la carte sur OFF alors que la broche VRTC permet de garder l’alimentation de l’horloge temps réel (RTC) pour que cette dernière puisse continuer à fonctionner.

La matrice de LED est idéale pour des projets qui nécessitent des animations ou l’affichage de courbes de données de certains capteurs sans recourir à d’autres composants.

Pour résumer, la carte Uno R4 WiFi pour un prix comparable à celui de la carte Uno R3, offre les mêmes ressources que la carte Uno R4 Minima avec en plus une matrice de LED de 12 X 8, une connectivité possible en WiFi ou en Bluetooth, une compatibilité totale avec l’IoT d’Arduino, et un connecteur Qwiic.

La carte R4 WiFi ne possède pas le connecteur SWD qui existe sur la carte R4 Minima.

Utilisation de la carte Uno R4 WiFi

La description complète de cette carte se trouve sur cette page du site Arduino.

Juste après le tableau des spécificités techniques, vous pouvez accéder au schéma de la carte ainsi qu’à sa datasheet : je vous conseille de télécharger cette dernière sur votre ordinateur pour pouvoir vous y référer hors connexion (le code SKU Stock Keeping Unit ou UGS Unité de Gestion de Stock est ABX00087). Juste au-dessous se trouve un lien « ARDUINO DOCS » qui ouvre une nouvelle page qui vous permettra de choisir les sections qui vous intéressent, quasiment les mêmes que celles décrites pour la R4 Minima avec en plus une section sur la matrice de LED.

Auparavant, je vous conseille de faire un petit tour sur la « CHEAT SHEET » qui reprend tout ce qu’il y a à savoir pour utiliser la carte R4 WiFi et qui renvoie vers les documentations nécessaires. Sur cette page, on trouve entre autre, la dénomination des broches d’entrée-sortie (numériques et analogiques), la matrice de LED, le DAC, la RTC, l’utilisation de l’EEPROM et des bus (SPI, I2C, connecteur Qwiic, USB Serial et UART, USB HID, le module CAN, l’ESP32-S3, le bridge USB), le WiFi et le Bluetooth.

Programmation des cartes Uno R4

Nous allons parler dans ce paragraphe de ce qu’il faut faire pour pouvoir utiliser ces nouvelles cartes avec l’IDE d’Arduino. Afin de relier la carte à l’ordinateur, il faut disposer d’un câble USB de type C (prise A normale du côté ordinateur et prise USB-C du côté carte, câble souvent repéré par la mention « USB > USB-C » sur l’emballage) [5]. La figure 4 montre un tel câble qui ne doit pas être confondu avec un câble mini USB ou micro USB (pour connaître les différentes prises USB, vous pouvez consulter ce site. On trouve ce genre de câble dans les boutiques de produits informatiques ou de téléphonie ou bien sur internet.

Figure 4
Figure 4
Prises d’un câble USB > USB-C

Ensuite, il faut importer dans l’IDE les fichiers nécessaires à la programmation des cartes Uno R4.

Avec l’IDE 2 :

Sélectionnez l’icône « Gestionnaire de carte » (1) et entrez dans la case de recherche Uno R4 (2) ; vous obtenez un package qui est fait pour les deux cartes Uno R4 Minima et Uno R4 WiFi. Il suffit alors de cliquer sur « INSTALLER » (3) comme le montre la figure 5.

Figure 5
Figure 5
IDE 2

Vous aurez à accepter que le logiciel modifie votre ordinateur, comme c’est le cas lorsqu’on veut installer un nouveau logiciel, et pour cela il faut que vous soyez administrateur. Après quelques secondes, vous obtenez le message « Platform arduino:renesas_uno@1.0.2 installed » (ou une version supérieure à la 1.0.2).

Avec l’IDE 1 :

La procédure est identique en allant chercher le Gestionnaire de carte dans le menu « Outils » ; dans la case de recherche, on tape Uno R4 pour obtenir le package Arduino UNO R4 boards et l’installer.

Premier essai avec Blink

Vous pouvez maintenant connecter la carte à l’ordinateur ; comme elle est alimentée, vous pouvez constater que la LED clignote puisque la carte est livrée programmée avec Blink. Modifiez Blink pour modifier le rythme de clignotement et téléversez le programme dans la carte après avoir choisi le bon type de carte ; cette fois le clignotement est modifié. Le programme Blink utilise 33576 octets de Flash soit 12% (le maxi étant 262144 octets) et 2524 octets de SRAM (le maxi étant 32768 octets, il reste donc 30244 octets disponibles).

Utilisation des nouvelles ressources des cartes Uno R4

Dans ce paragraphe, nous allons dire quelques mots au sujet des nouvelles ressources des cartes Uno R4 par rapport à ce que pouvait faire la Uno R3 que vous devez parfaitement connaître.

L’horloge RTC

Cette horloge temps réel est incluse dans le microcontrôleur de la carte et permet d’obtenir une datation de certains événements, ce qui peut être utile en modélisme ferroviaire pour faire partir des trains selon un horaire précis, ou bien gérer selon un certain ordre plusieurs arrivées en gare qui se succèdent. L’utilisation de la RTC nécessite une bibliothèque distribuée avec le noyau Arduino Renesas mais qu’il faut tout de même inclure dans le programme avec #include <RTC.h>. Les méthodes de la bibliothèque permettent d’initialiser l’horloge à une certaine date, puis d’extraire certaines informations comme le jour, le mois, l’heure afin de les afficher dans le moniteur série ou les traiter.

Le site Arduino propose un exemple pour afficher le temps qui s’écoule. De même qu’il existe Serial.begin(9600) ; pour initialiser la communication carte-ordinateur, il existe ici un RTC.begin() ; pour initialiser le fonctionnement de l’horloge (ligne 6). La ligne 8 permet de définir une date précise (startTime) : on remarque que le jour est un nombre mais que le mois est donné avec son nom (de même pour le jour de la semaine). La ligne 10 initialise l’horloge avec cette date précise. La ligne 17 extrait le temps de l’horloge puis arrivent les affichages. Notez que la ligne 22 transforme le mois en un nombre qui peut être affiché.

La bibliothèque est aussi capable d’afficher le temps qui s’écoule sous le format Unix (Unix Timestamp) qui représente le nombre de secondes écoulées depuis le 1er janvier 1970 à 00:00:00 UTC. Cette façon de faire est sans doute plus facile pour relativiser des événements entre eux.

Enfin, on peut générer une interruption à intervalle régulier, ce qui peut être pratique en modélisme ferroviaire pour surveiller périodiquement l’état d’un capteur. Comme le programme donné sur le site Arduino doit être complété pour fonctionner, je vous propose le programme suivant qui fait clignoter la LED de la carte à la fréquence d’un Hertz (il faut donc l’allumer ou l’éteindre deux fois par seconde). Le setup initialise l’horloge comme nous l’avons vu, puis la ligne 8 crée l’interruption qui exécute la fonction appelée « periodic_cbk ». Cette fonction change l’état de la LED puis imprime un message dans le moniteur avec un compteur qui augmente d’une unité à chaque appel.

#include <RTC.h>

void setup(){
  Serial.begin(9600);
  RTC.begin();
  RTCTime startTime(30, Month::JUNE, 2023, 13, 37, 00, DayOfWeek::WEDNESDAY, SaveLight::SAVING_TIME_ACTIVE);
  RTC.setTime(startTime);
  RTC.setPeriodicCallback(periodic_cbk, Period::N2_TIMES_EVERY_SEC);
}

void loop() {
}

void periodic_cbk() {
  static int compteur = 0;
  digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
  Serial.print("PERIODIC INTERRUPT : ");
  Serial.println(compteur);
  compteur++;
}

Vous pouvez trouver d’autres informations sur l’utilisation de la RTC en consultant cette page du site Arduino ou la bibliothèque sur le site de Github. Comme je l’ai dit, ceci peut être d’un intérêt certain en modélisme ferroviaire.

La carte Uno R4 WiFi comprend une broche appelée VRTC utilisée pour maintenir l’horloge en fonction même lorsque la carte n’est plus alimentée : il suffit d’appliquer une tension comprise entre 1.6 et 3.6 V sur cette broche.

Le DAC (Digital to Analog Converter)

La carte Uno R3 comprenait 6 entrées analogiques, pouvant recevoir une tension positive comprise entre 0 et 5 V : la fonction analogRead() convertissait cette tension en un nombre compris entre 0 et 1023, 0 pour 0 V et 1023 pour 5 V. Il n’était pas possible de réaliser l’opération inverse, c’est-à-dire partir d’un nombre compris entre 0 et 1023 et afficher la tension correspondante sur une sortie analogique. Avec les cartes Uno R4, c’est possible sur une seule sortie, la broche A0 car le microcontrôleur est muni d’un DAC (Digital to Analog Converter) ou encore convertisseur numérique vers analogique qui opère avec une résolution maximale de 12 bits. Par défaut, la résolution du DAC est de 8 bits mais il est possible de la régler avec la fonction analogWriteResolution(12) ;

On peut afficher un signal de type PWM sur certaines sorties (voir série d’articles PWM) : ce signal numérique constitué des deux tensions 0 et 5 V peut être considéré comme une tension de valeur moyenne dépendant du rapport cyclique du signal. Cela permet de moduler la brillance d’une LED mais dans certains cas ce n’est pas aussi précis qu’une vraie tension de valeur analogique, notamment dans le domaine d’un signal audio.

On peut donc utiliser cette nouvelle ressource pour reconstituer une forme d’onde : c’est un exemple qui était proposé [6] sur le site d’Arduino avec un montage utilisant un buzzer. Le code était fourni en deux parties, d’une part le programme utilisant la bibliothèque <Waveforms.h> et un header contenant la forme d’onde voulue (ici un signal en dents de scie). Ce code ayant été retiré, je vous le fournis ci-dessous.

Programme signal en dents de scie
(contient deux onglets : programme et fichier .h)

Notez que la résolution est sur 12 bits (voir sous-paragraphe suivant), ce qui signifie que le nombre (en lecture ou écriture) est maintenant compris entre 0 et 4095 au lieu de 1023. La figure 6 montre le signal obtenu sur la broche A0 observé avec un oscilloscope.

Figure 6
Figure 6
Signal analogique sur A0

L’exemple donné aujourd’hui sur le site Arduino utilise la bibliothèque <analogWave.h> et reconstitue une onde sinusoïdale dont la fréquence dépend du potentiomètre relié à l’entrée A5 (Figure 7). Comme indiqué, le son sur le buzzer reste tout de même très faible mais pourrait être amplifié en utilisant un haut-parleur de 4 ou 8 Ω et un module d’amplification trouvé sur internet. Il est aussi possible de jouer des mélodies, celle de Frère Jacques étant donnée en exemple.

Figure 7
Figure 7
Signal sinusoïdal sur A0
Allez bien copier le programme d’onde sinusoïdale sur le site Arduino car ce programme est aussi donné dans les exemples pour Arduino Uno R4 de l’IDE mais il contient actuellement deux erreurs aux lignes 9 et 14 qu’il faut corriger en remplaçant A0 par A5 (le point milieu du potentiomètre réglant la fréquence est sur l’entrée A5).

En modélisme ferroviaire, on peut utiliser cette ressource pour définir plusieurs sons différents qui peuvent alerter l’utilisateur d’un automatisme en cas de différents problèmes (panne de système, conflits de circulation, etc.).

La résolution de l’ADC (Analog to Digital Converter)

Le convertisseur analogique vers numérique transforme un signal analogique en un signal numérique. Par défaut, la résolution est réglée sur 10 bits, mais pour une meilleure précision, cette résolution peut être portée à 12 ou 14 bits avec la fonction analogReadResolution(). La résolution du DAC (inverse de l’ADC) est au maximum de 12 bits et peut être réglée avec la fonction analogWriteResolution(). Une fois la résolution réglée, on peut utiliser les fonctions analogRead() ou analogWrite() dans le programme. Lorsque l’ADC opère sur 10 bits, la valeur du signal numérique est comprise entre 0 et 1023, sur 12 bits elle est comprise entre 0 et 4095, sur 14 bits elle est comprise entre 0 et 16383.

Le HID (Human Interface Device)

De façon générale, les HID sont des composants conçus pour les humains, tels que claviers, souris, contrôleurs de jeux, etc. qui envoient des données à un ordinateur. Les cartes Uno R4 ont de construction, une interface pour les HID et peuvent ainsi émuler un clavier ou bien une souris grâce aux API Keyboard ou Mouse. Cependant, cette nouveauté ne présente pas un grand intérêt car il y avait la possibilité, grâce à Processing, d’utiliser une souris comme cela a été décrit dans l’article Ménage à trois (Ordinateur, Arduino, réseau). Nous renvoyons donc le lecteur qui voudrait découvrir le HID à cette page pour la R4 Minima ou à cette page pour la R4 WiFi.

Le bus CAN

CAN signifie Controller Area Network : c’est un protocole série principalement utilisé dans l’industrie et notamment l’industrie automobile. Sa robustesse, sa rapidité et sa fiabilité font que nous l’avons largement utilisé sur le site LOCODUINO. Les cartes Uno R4 possèdent un contrôleur CAN [7] incorporé au microcontrôleur, qui nécessite tout de même l’emploi d’un transceiver externe pour fonctionner [8]. Le bus CAN quant à lui utilise deux câbles pour communiquer : CAN high et CAN low. Sur les cartes Uno R4, les broches sont CAN0_RX pour recevoir et CAN0_TX pour transmettre, qui doivent respectivement être connectées avec CANRX et CANTX du transceiver.

Les broches CAN0_RX et CAN0_TX correspondent dans le microcontrôleur aux ports P102 et P103 respectivement (voir schémas des cartes). Sur une carte R4 Minima, les broches CAN0_RX et CAN0_TX (encore appelées CANRX et CANTX dans la doc Arduino) sont respectivement sur les broches numériques D5 et D4, alors que sur les cartes R4 WiFi, elles sont respectivement sur D13 et D10.

Entre les deux transceivers (un pour la carte R4 et un pour le périphérique), les broches CANH (high) doivent être reliées ensemble ainsi que les broches CANL (low). Ensuite, il est possible d’envoyer des messages grâce à la bibliothèque <Arduino_CAN.h> . Cette bibliothèque qui permet d’exploiter le bus CAN et qui n’existait pas pour les cartes Due à leur sortie, est donnée avec de nombreux exemples pour écrire ou lire le bus.

Sans transceiver externe, il n’est pas possible de communiquer avec d’autres composants CAN.

Le lecteur intéressé pour utiliser le bus CAN pourra consulter les articles du site LOCODUINO qui en parlent. La présence du contrôleur CAN est un plus indéniable sur ce genre de cartes en modélisme ferroviaire.

Broches de l’ampli opérationnel

Le microcontrôleur des cartes Uno R4 contient un ampli opérationnel qui peut être utilisé dans certains montages. La broche A1 est reliée à l’entrée non inverseuse (OPAMP+) et la broche A2 est reliée à l’entrée inverseuse (OPAMP-). La sortie de l’ampli opérationnel (OPAMP OUT) est reliée à la broche A3.

La matrice de LED

La carte Uno R4 WiFi incorpore une matrice de LED rouges et brillantes organisée en 8 lignes de 12 colonnes (voir figure 3). Cela permet d’afficher des motifs animés, du texte défilant ou encore des courbes de valeur de capteur, sans avoir besoin de composants additionnels. Une carte neuve est programmée avec une petite animation se terminant par l’affichage d’un cœur ; vous pouvez la retrouver dans les exemples pour cartes Uno R4 sous le nom « MatrixIntro ». La figure 8 montre comment ces 96 LED sont reliées aux différentes broches du microcontrôleur. Seulement onze broches sont nécessaires grâce à la technique de Charlieplexing qui exploite le fait que les sorties sont à trois états (HIGH, LOW ou haute impédance).

Figure 8
Figure 8
Branchement des LED de la matrice (source Arduino)

La matrice et son API (Application Programming Interface) sont développées pour être programmées de différentes façons selon les besoins. La bibliothèque utilisée est <Arduino_LED_Matrix.h> et il faut créer un objet de type LED Matrice. Ensuite, on démarre le fonctionnement de la matrice avec matrix.begin() ; dans la fonction setup. Il faut ensuite créer un motif (frame) et le charger dans un buffer qui l’affiche sur la matrice. Une animation est une série de motifs affichés les uns après les autres.

Pour contrôler 96 LED, il faut un espace mémoire qui soit au moins de 96 bits en taille, chaque bit donnant l’état de la LED correspondante, allumée ou éteinte. La bibliothèque propose deux façons de faire.

La première, c’est de recourir à un tableau d’octets à deux dimensions byte frame[8][12] composé de 0 et de 1 (la valeur 1 commande l’allumage de la LED et l’ensemble des 1 constitue le motif à afficher). Cette méthode permet de visualiser simplement le motif ou de modifier simplement un pixel mais prend plus d’espace mémoire que nécessaire puisqu’on utilise un octet là où un bit serait suffisant. La méthode pour afficher le motif est matrix.renderBitmap(frame, 8, 12) ;

La seconde méthode, moins gourmande en mémoire, est d’utiliser un tableau de trois entiers de 32 bits (soit au total 96 bits pour les 96 LED) unsigned long motif[], mais remplir un tel tableau de trois entiers de 32 bits n’est pas chose facile. Le mieux est de dessiner sur une feuille le motif avec des 0 et des 1 organisés en 8 lignes de 12 colonnes, puis grouper les 0 et les 1 par 32 en partant du coin supérieur gauche vers le coin inférieur droit. On obtient alors trois valeurs binaires qu’on peut facilement transformer en hexadécimal avec la calculette de Windows (ou de Mac OS) en mode programmeur. La méthode d’affichage est matrix.loadFrame(motif) ;

La page led-matrix du site d’Arduino explique les différentes méthodes de la bibliothèque. On y trouve aussi un outil qui permet de générer des motifs pour la matrice de LED. Les deux exemples proposés (affichage de smiley/cœur et clin d’œil) ont fonctionné sans problème sur ma carte Uno R4 WiFi.

Le connecteur Qwiic

La carte Uno R4 WiFi comprend sur sa partie arrière un connecteur Qwiic/STEMMA comme le montre la figure 9. Ce connecteur permet de relier plusieurs modules et de les contrôler en I2C ; il a été développé par SparkFun et Adafruit sous les noms de Qwiic ou STEMMA. Comme il intègre des broches I2C, il permet une simplification du câblage entre les différents modules reliés.

Figure 9
Figure 9
Le connecteur Qwiic (source Arduino)
La carte Uno R4 WiFi possède deux bus I2C et le connecteur Qwiic est relié au bus secondaire qui utilise un objet de type Wire1 plutôt qu’un objet de type Wire (un exemple est donné sur la page Arduino cheat sheet). Notez également que ce connecteur opère en 3.3 V seulement.

WiFi et Bluetooth

La carte Uno R4 WiFi peut être connectée en WiFi ou Bluetooth grâce à son microcontrôleur ESP32-S3 embarqué. Le WiFi et le Bluetooth partagent la même antenne et ne peuvent pas être utilisés en même temps.

Le WiFi dont le taux est de 150 Mbps, utilise la bibliothèque WiFiS3 incluse dans le noyau Uno R4. De nombreux exemples d’utilisation sont donnés à cette page.

Bluetooth 5 et Bluetooth LE sont disponibles avec une vitesse pouvant atteindre 2 Mbps.

La carte Uno R4 WiFi et l’IoT d’Arduino

La carte Uno R4 WiFi est parfaitement compatible avec l’IoT d’Arduino (Internet of Things) qui permet de créer très simplement des objets connectés. L’IoT d’Arduino utilise le cloud et constitue une façon différente de développer une application grâce à une interface conviviale qui écrit le programme à votre place, programme que vous n’avez plus qu’à compléter en fonction de vos besoins. L’interface vous permet également de créer un tableau de bord pour contrôler votre application depuis un smartphone ou une tablette, grâce à des widgets que vous placez où vous voulez sur votre écran.

Pour vous initier à l’IoT d’Arduino, vous pouvez vous référer aux deux articles de Loco-Revue précédemment cités ou bien à cette page si vous lisez l’anglais.

Allons voir sous le capot

Pour cela, il faut consulter la datasheet du microcontrôleur RA4M1 du fondeur Renesas dont le lien est donné sur le site d’Arduino. Celle-ci fait pas loin de 1500 pages en anglais, mais ce genre de document ne se lit pas d’une traite mais par morceaux en fonction de ce qu’on cherche. C’est là qu’on se rend compte que le microcontrôleur cache d’autres ressources qui n’ont pas été exploitées par la carte elle-même, par exemple, un DAC sur 8 bits à deux canaux, un SSIE (Serial Sound Interface Enhanced), quatre amplis opérationnels, 2 timers 32 bits et 6 timers 16 bits, une unité de toucher sensitif (CTSU pour Capacitive Touch Sensing Unit), un contrôleur DMA (Direct Memory Access) à quatre canaux permettant d’adresser 4 Giga-octets de mémoire, un contrôleur de segments LCD, et d’autres choses encore.

Contrairement au microcontrôleur ATmega328P qui utilisait une architecture de type Harvard, c’est-à-dire une mémoire pour le programme séparée de la mémoire pour les données (donc avec deux bus d’adresses distinctes), le microcontrôleur RA4M1 utilise une architecture de type von Neumann, soit un seul espace de stockage pour les instructions et pour les données. La section 4 de la datasheet (page 90) montre l’espace adressable qui va de l’adresse 0000 0000h à l’adresse FFFF FFFFh, soit 4 Giga-octets au total. Tout n’est pas à la disposition de l’utilisateur, mais on peut remarquer que la mémoire program flash va de 0000 0000h à 0004 0000h, soit 262144 octets (256 kB), la mémoire SRAM va de 2000 0000h à 2000 8000h, soit 32768 octets (32 kB) et la mémoire data flash va de 4010 0000h à 4010 2000h, soit 8192 octets (8 kB).

Comme le but d’un programme est de faire communiquer la carte avec d’autres composants, il peut être intéressant de chercher dans cette notice comment sont organisés les ports d’entrées-sorties : il y en a 10 numérotés de 0 à 9, suivi du numéro de broche (exemple P304). Tous les ports ne sont pas accessibles : le modèle de microcontrôleur à 100 broches accède à 84 ports mais le modèle à 64 broches qui équipe les cartes Uno R4 n’accède qu’à 52 ports. Et comme les cartes Uno R4 ne proposent que 20 broches pour communiquer (14 numériques et 6 analogiques), un choix a dû être fait par le constructeur (on peut trouver la correspondance entre carte et microcontrôleur dans les datasheets des cartes R4, section Pinout, et cette correspondance n’est pas forcément la même en fonction de la carte R4).

Le microcontrôleur est aussi doté d’une interface USB 2.0 Full Speed (USBFS) qui permet des vitesses de communication bien plus élevées comparé à la ligne série d’une carte Uno R3. Cet USBFS dispose d’un tranceiver USB interne qui permet tous les types de transferts définis dans la norme USB 2.0.

La page 48 de la datasheet du microcontrôleur résume ses caractéristiques. Pour un utilisateur expert, c’est toute une aire de jeu qui reste à explorer. Pour le modéliste ferroviaire, c’est sans doute trop jusqu’au jour où il trouve une application possible à ces ressources cachées.

Conclusion

Les cartes Uno R4 ont été créées pour upgrader la carte Uno R3 qui est devenue un standard du monde Arduino fortement utilisé. Si on les compare avec d’autres cartes à microcontrôleur 32 bits, elles sont perdantes car pour respecter ce standard, elles sous-utilisent le microcontrôleur de Renesas. Une carte ESP32 est sans aucun doute bien plus performante que la R4 WiFi. Et si on compare les deux versions de cartes R4, on peut aussi regretter que les ports du microcontrôleur ne se retrouvent pas sur les mêmes broches des connecteurs des cartes comme le montre la figure 10 (comme par exemple le bus CAN sur D4 et D5 ou bien sur D10 et D13 comme on l’a dit plus haut). Il faudra donc être extrêmement prudent si on veut remplacer, dans un projet abouti, une R4 Minima par une R4 WiFi.

Figure 10
Figure 10
Pinout des cartes R4 Minima et R4 WiFi (source Arduino)

Pour autant, si on reste dans le projet de remplacer une carte Uno R3 par une des deux cartes Uno R4, alors ces deux cartes sont parfaites. En effet, pour un prix inférieur (Uno R4 Minima) ou comparable (Uno R4 WiFi) à celui de la carte Uno R3, nous avons là une carte qui travaille en 5 V et dont l’agencement des broches est en tout point identique, mais avec un microcontrôleur plus rapide, plus puissant et de la mémoire en quantité supérieure. Il est donc tentant d’acheter cette carte qui, dans un montage déjà réalisé, peut remplacer la Uno R3 et permettre une mise à jour du programme pour avoir une réaction plus rapide, une précision augmentée et d’autres ressources utilisables, comme par exemple la matrice de LED de la R4 WiFi. Bien évidemment, la plupart des montages de modélisme ferroviaire peut se contenter d’un microcontrôleur 8 bits, mais pourquoi se priver si on peut avoir un 32 bits pour le même prix ? D’autant que rien ne nous garantit la disponibilité des cartes Uno R3 dans l’avenir même si Arduino affirme qu’elles continueront à être produites. Et même si la R4 WiFi s’adresse plutôt à des utilisateurs confirmés, la R4 Minima peut être utilisée par les débutants tout comme la Uno R3 l’était en son temps. J’espère vous avoir convaincu.

[1À ces prix, il faut ajouter les taxes et le transport.

[2C’est la version à 64 broches qui équipe la carte, mais il existe aussi des versions à 40, 48 et 100 broches.

[3Protocol spécifique ARM.

[4On peut utiliser le traducteur du navigateur lorsque l’option existe.

[5Si votre ordinateur est muni d’une interface USB-C, vous pouvez utiliser un câble USB-C > USB-C muni de deux prises identiques.

[6Cet exemple a été changé le 14 juillet 2023.

[7Au standard CAN2.0A/CAN2.0B.

[8Celui des exemples d’Arduino est un SN65HVD230 opérant en 3,3 V seulement, mais on peut aussi utiliser le MCP2551 ou le TJA1050 qui opèrent en 5 V.

18 Messages

  • Bonjour,

    En me basant sur les exemples fournis par Arduino.cc et forum Arduino, j’ai implanté un serveur Web et un serveur telnet sur une carte UNO R4.

    Mais cela ne fonctionne pas, quand un client web ou telnet se connectent en même temps, cela conduit à un plantage de la carte.
    Certains commentaires évoquent des problèmes de librairies

    Avez-vous des informations à ce sujet ?

    Georges

    Répondre

    • J’ai bien peur de ne pas avoir assez de connaissances dans ce domaine, car comme vous le savez, notre site est spécialisé en modélisme ferroviaire et nos besoins en WiFi sont beaucoup plus modestes. Pour écrire cet article, je me suis contenté de tester les exemples donnés sur le site Arduino et de voir si la carte R4 WiFi était bien compatible IoT. Tout a fonctionné, donc je me suis limité à cela.
      Je pense que le forum Arduino pourra vous apporter une réponse de meilleure qualité.
      Cordialement.

      Répondre

    • Bonjour,
       
      Je ne suis pas non plus spécialiste de l’ESP32 même si j’en ai fait un peu mais il y a cette réponse sur le forum d’Espressif qui indique qu’il ne peut y avoir qu’un seul socket qui écoute sur un ESP32 : https://esp32.com/viewtopic.php?f=4...
       
      Il y a également une limite du nombre de sockets qui de mémoire est par défaut de 4 et ne peut dépasser 10.

      Répondre

  • Adieu Uno, bonjour Uno ! 11 août 2023 15:56, par Dominique

    J’ai jeté un coup d’oeil rapide aux exemples CAN de l’Arduino R4 (CanRead et CanWrite).

    A première vue c’est assez simple mais un peu sommaire et pas aussi pratique que la bibliothèque ACAN de Pierre Molinaro qui est plus complète avec des fonctions de filtrage et de traitement associés.

    Répondre

  • Adieu Uno, bonjour Uno ! 3 septembre 2023 12:32, par Lucien Brisset

    Bravo pour cet article clair et précis permettant aux "Arduinotistes" de mettre en œuvre et surtout de comprendre certaines subtilités de la carte Uno R4.
    En tant que modélistes ferroviaire, j’ai toujours été passionné d’automatismes simples et créatifs. C’est pour cela que je préfère rester en DC plutôt qu’en DCC qui revient au fil des ans à accumuler un matériel très sophistiqué et surtout très couteux qui, à mon sens, sort de l’esprit "modéliste" et crée une sorte de ségrégation au détriment de la créativité décourageant du même coup les jeunes du modélisme ferroviaire.
    J’ai parcouru de nombreuses manifestations et expositions de clubs au cours des dernières années, j’ai admiré les immenses réseaux demandant des centaines voire des milliers d’heures de travail (Miniworld Lyon par exemple) mais comment devant ces magnifiques spectacles motiver des jeunes sans grandes ressources financières à pratiquer un tel Hobby. Je suis toujours désolé de voir que dans toutes ces manifestations magnifiques avec des circuits de plusieurs mètres de longueur, où circulent des monuments de mécanique et d’électronique, on a l’impression de se retrouver entre "retraités aisés" avec très peu de jeunes autour.
    Je pense que si l’on veut redynamiser notre hobby il faut revenir à des conceptions simples alliant créativité (les décors par exemple) et technicité abordable et compréhensive.

    Répondre

    • Adieu Uno, bonjour Uno ! 3 septembre 2023 15:29, par Christian

      Bonjour Lucien,
      C’est tout à fait ce que je pense : le modélisme, c’est avant tout construire. Le champ est varié et peut aller du décor au matériel roulant, en passant par l’électronique reproduisant un automatisme. Hélas, les modélistes, souvent âgés et aisés (parfois même fortunés), préfèrent acheter tout fait pour être sûrs que ça fonctionne. Pour preuve, le réseau en N sous Train Controller Gold, décrit dans les deux derniers Loco-Revue (août et septembre 2023), qui revient quand même à 2400 euros juste pour la commande ! Et il faut aussi des rails, des locos des wagons et du décor. Tant mieux pour son propriétaire s’il peut se le permettre, mais nous parlions des jeunes.
      La moindre locomotive coûte actuellement 350 euros (prix moyen), mais que faire d’une locomotive seule ? Pour un budget de 100 euros, un jeune peut s’acheter un drone qui vole immédiatement ou deux jeux vidéos ! Leur choix est vite fait...
      Au delà de l’économie réalisée, le DIY (faites le vous-même) permet en plus de fabriquer ce qui n’existe pas dans le commerce. Et cela permet d’apprendre quelque chose plutôt qu’utiliser un procédé industriel qui ne fera qu’évoluer pour nous forcer à nous rééquiper.
      En 10 ans, j’ai fabriqué à base d’Arduino, tout ce qu’on peut trouver sur un réseau de trains miniatures et mon plaisir est d’en faire profiter les autres. Enfin, ceux qui veulent...

      Répondre

  • Adieu Uno, bonjour Uno ! 3 septembre 2023 17:04, par Lucien Brisset

    Votre réponse m’a fait plaisir ! Enfin quelqu’un qui s’intéresse vraiment au modélisme ferroviaire dans son ensemble et c’est très important car c’est la source de la créativité, de la recherche et de la motivation à aller toujours plus loin sans se heurter à un mur de technologie et de sophistication qui ne se résout qu’à coup de modules électroniques couteux dont on ne maîtrise pas forcement les tenants et les aboutissants car ils sont créés par des ingénieurs en informatique dont l’esprit est assez loin du modélisme ferroviaire.
    Quand j’ai commencé le "train électrique" Jouef déposé sous l’arbre de Noel en 1955, j’étais émerveillé de le voir tourner en rond avec 2 piles 4,5V Wonder en série qui ne s’usent que si l’on s’en sert. J’imaginais déjà placer le long de la voie une voiture ou deux Dinky Toys, des animaux de ferme voir des soldats prêts à combattre ! Plus tard, bien plus tard j’ai commencé à partir d’un réseau tout simple genre Seetrak 400 de construire un circuit avec décors, gare de triage en m’inspirant du fameux catalogue Jouef de la fin des années 1960. J’ai au cours de ces années acheté aussi des locos en soldes de Jouef et Rocco. Et puis est venu Arduino et ... Locoduino avec sa technicité et sa créativité permettant de faire fonctionner les derniers neurones qu’il me reste et je dois dire que cela me permet à moindre coût d’éviter un Alsheimer précoce !
    Alors pourquoi ne pas suggérer à ces jeunes qui rêvent devant les circuits des exposition de modélisme ferroviaire de se dire je vais commencer par un petit circuit (Seetrack 400 par ex) en boucle avec évitement fixé sur une plaque de MDF de 3 mm achetée chez Bricodépot.
    Ensuite lui suggérer de s’initier à Arduino et de placer au niveau de aiguillages un capteur Hall ou deux pour connaitre la position de la locomotive et des aiguillages commandés par un servo-moteur ? Pourquoi ne pas lui demander de regarder sur le net ce qu’étaient les villes et villages dans les années 50-60 et d’essayer de reproduire une maison en carton peinte à la main et bien sûr aller plus loin ensuite ?

    Répondre

    • Adieu Uno, bonjour Uno ! 4 septembre 2023 09:52, par Christian

      Les jeunes sont capables de décider par eux-mêmes de ce qui les intéressent ou ce qu’ils veulent faire. Les peu nombreux qui s’intéressent aux trains miniatures sont souvent mal accueillis sur certains forums où on les infantilise et où on finit par les dégoûter.
      LOCODUINO est ouvert à tous et bien que nous soyons spécialisés en modélisme ferroviaire, nos montages peuvent aussi servir en robotique ou domotique, deux domaines qui sont peut-être plus en vogue.
      Cet espace étant réservé à discuter de l’article, je vous invite à ouvrir un fil sur notre forum afin de voir ce que ces jeunes pourraient attendre de nous. On les aidera avec bienveillance.
      Bien cordialement.

      Répondre

  • Gestion des interruptions 15 septembre 2023 16:27, par Philippe

    Bonjour,

    Je me suis offert une carte R4 minima parce que la R3 ne me semblait pas assez rapide pour faire tourner efficacement un analyseur de trames DCC. Malheureusement, mon analyseur de trames ne compile plus pour le R4, parce que cet analyseur se base sur des interruptions propres au R3.

    Les instructions rejetées sont par exemple
    ISR (INT0_vect)
    TCNT0 = 0 ;
    TCCR0B = 0b00000011 ;
    EICRA = 0b00000001 ;
    EIMSK |= (1 << 0) ;

    Dois-je revoir tout le traitement des interruptions ? Ou existe-t-il une bibliothèque qui assurerait la compatibilité ?

    Merci de votre aide,

    Philippe

    Répondre

    • Gestion des interruptions 15 septembre 2023 16:53, par msport

      Bonjour,
      il est peut être plus facile d’adapter un soft que de le créer pour un matériel donné.
      Cordialement

      Voir en ligne : ex-dccinspector

      Répondre

    • Gestion des interruptions 16 septembre 2023 09:31, par Christian

      La R4 ayant un microcontrôleur différent de la R3, aura aussi des timers différents et donc des registres de contrôle différents. En conséquence, vous ne pouvez pas utiliser des instructions qui concernent les registres des timers de la R3.
      Comme je l’ai expliqué dans l’article, un programme écrit pour la R3 ne peut tourner sur la R4 que s’il respecte l’API d’Arduino, c’est-à-dire les fonctions écrites pour Arduino qui libèrent le programmeur de se préoccuper de ce qui se passe sous le capot.
      En utilisant l’accès direct à des registres, vous vous limitez à un seul type de microcontrôleur alors qu’en utilisant les fonctions écrites pour Arduino, les registres sont positionnés comme il se doit, même si vous ne savez pas exactement ce qu’il se passe.
      Il ne s’agit pas seulement d’interruptions, même si celles de la R4 sont aussi différentes de la R3.
      Pour adapter votre programme, il va falloir vous plonger dans la documentation du microcontrôleur de la R4 et comprendre les différentes ressources de ce dernier afin de les utiliser au mieux : gros travail !

      Répondre

    • Gestion des interruptions 18 septembre 2023 16:44, par Philippe

      Merci de vos suggestions. Je vais analyser le code de l’ex-dccinspector. Et voir comment gérer des interruptions sans utiliser de code spécifique à un processeur.

      Répondre

  • Adieu Uno, bonjour Uno ! 29 septembre 2023 19:05, par yves2guilers

    La BaseStation de Gregg Berman, qui est utilisée pour faire le projet DCCpp_Uno, invoque-t-elle les registres timers ou respecte-t-elle l’API d’Arduino ?

    Répondre

  • Adieu Uno, bonjour Uno ! 29 septembre 2023 20:55, par msport

    La réponse est dans le code ...

    289. bitSet(TCCR1A,WGM10) ; // set Timer 1 to FAST PWM, with TOP=OCR1A
    290. bitSet(TCCR1A,WGM11) ;
    291. bitSet(TCCR1B,WGM12) ;
    292. bitSet(TCCR1B,WGM13) ;
    293.

    Répondre

  • Adieu Uno, bonjour Uno ! vive le DMA 14 décembre 2023 07:02, par yves2guilers

    Pour moi la grosse différence entre un Aduino R3 et un Arduino R4 est la présence d’un DMA pour le R4 qui permet de transférer des données d’une plage mémoire vers une autre plage mémoire sans intervention de la CPU, une fois le processus lancé.
    De même le R4 effectuera un transfert de la mémoire ( un tableau) vers un périphérique ou inversement. Ce transfère peut ou pas être cadencé par un timer.
    On peut citer deux exemples, générer une sinusoïde à une fréquence donnée avec un DAC, acquérir 30 points d’un capteur de distance imprécis puis calculer la moyenne de ces points. Je pense que pour l’instant cette fonctionnalité n’a pas encore été activée part l’équipe de développement de la fondation Arduino.

    Répondre

    • Adieu Uno, bonjour Uno ! vive le DMA 14 décembre 2023 10:08, par Christian

      J’ai évoqué le DMA dans le paragraphe "Allons voir sous le capot" mais si je n’ai pas développé, c’est que peu de projets de modélisme ferroviaire auront besoin de transférer des données entre le CPU et un périphérique. Je manque peut-être d’imagination pour l’instant.
      J’aurais aussi tendance à dire que chacun voit la ressource la plus importante de ce microcontrôleur en fonction de ses propres besoins et c’est tout à fait naturel. Encore une fois, pour ceux qui ont envie de découvrir, il y a plein de domaines à explorer dans cette nouvelle carte. C’est quand même réservé aux experts dont vous semblez faire partie puisque votre attention a été portée sur le DMA.
      Merci pour votre contribution : si vous exploitez le DMA dans le cadre d’un montage de modélisme ferroviaire, nous sommes preneur d’un article car nous cherchons de nouveaux auteurs et le site est ouvert à tous.
      Cordialement.

      Répondre

  • Adieu Uno, bonjour Uno ! 18 août 14:57, par Franck

    Bonjour,

    J’ai une carte UNO R4 Wifi et je souhaite utiliser les leds pour faire défiler des messages de debug.

    Mon gros problème, est que durant l’affichage du message qui défile (qui peut prendre une dizaine de seconde), le LOOP est bloqué. Donc le code est bloqué jusqu’à la fin du défilement du texte.
    Y a t-il un moyen pour que le code continue à s’exécuter durant le défilement du texte ?

    Merci pour votre aide.
    CDlt,

    Répondre

    • Adieu Uno, bonjour Uno ! 19 août 10:13, par Jean-Luc

      Bonjour,

      Il faut que vous coupiez le défilement de votre texte en pas élémentaires, ce qui doit se faire assez facilement, et qu’un pas s’exécute à chaque exécution de loop. Autrement dit, au lieu d’écrire une boucle for qui provoque le défilement, vous devez faire une itération de cette boucle à chaque loop.

      Répondre

Réagissez à « Adieu Uno, bonjour Uno ! »

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rubrique « Matériel »

Les derniers articles

Les articles les plus lus