Pages

Affichage des articles dont le libellé est Mega. Afficher tous les articles
Affichage des articles dont le libellé est Mega. Afficher tous les articles

mardi 18 avril 2023

Utiliser l'UART d'une carte Arduino avec des caractéristiques non standard

Sur ce blog, vous avez sans doute déjà vu des articles concernant les liaisons séries (UART, RS232)  :

  • Lecture GPS
  • Lecture de badges RFID
  • Connexion à des écrans (NEXTION)
  • Module HC11 (sans fil)
  • Module Bluetooth
  • ...
Et quasiment à chaque fois, on utilise des connexions séries "standard" comme par exemple "9600 bauds" ou "115200 bauds" sur 8 bits et un bit de stop.
Exemple directement pris de l'IDE Arduino (légèrement nettoyé et retouché ;-))


    Il faut bien se dire qu'il existe des systèmes qui communiquent différemment. Il se peut que l'on communique avec un système avec 7 bits de données, un bit de parité paire et un bit de stop.
Cet article n'est pas un cours sur le port série, il est écrit pour utiliser autrement le port série d'une carte Arduino.
Pour rappel, ci-dessous le tableau résumant les connexions séries matérielles sur les cartes Arduino actuelles :

    Sur ces cartes, nous pourrons configurer les UART matériels avec des caractéristiques "exotiques". Cette configuration est très facile à mettre en œuvre sur les cartes "classiques" comme les UNO, NANO et surtout les MEGA qui possèdent 4 UART matériels de base.

Attention, ne pas essayer avec SoftSerial, vous allez avoir des soucis ;-)

👉Méthode :

Dans l'Example au-dessus, on peut lire ligne 4 :

Cela veut dire que l'on ouvre le port série (natif) avec 8 bits de données, pas de parité et 1 bit de stop et un débit binaire à 9600 bauds. C'est la configuration la plus standard que l'on connaisse (au collège, au lycée et chez les bidouilleurs).

MAIS, que faire quand la configuration n'est pas comme cette dernière ?
Arduino nous le dit !

    Pour faire simple, si on a une configuration classique, on écrit uniquement le débit binaire en paramètre de la méthode Serial.begin comme Serial.begin(115200). Si on a besoin d'une configuration différente, on ajoute un second paramètre qui donne le nombre de bits de données, la parité et le nombre de bits de STOP.

  • 8N1 par exemple veut dire : 8 bits de données - No Parity - 1 bit de STOP
  • 7E1 par exemple veut dire : 7 bits de données - Even Parity - 1 bit de STOP
  • 8O2 par exemple veut dire : 8 bits de données - Odd Parity - 2 bits de STOP

Even signifie paire et Odd signifie impaire.

Au final, si je veux configurer par exemple le port série 2 d'une carte MEGA avec 4800 bauds, 7 bits de données, une parité paire et 1 bit de stop, cela donnera une ligne comme celle-ci :


vendredi 30 novembre 2018

Utiliser un écran Nextion avec Flowcode et Arduino Mega

Suite à quelques articles sur l'écran Nextion, je vais montrer ici comment l'utiliser avec Flowcode et une Mega (plus pratique pour gérer un second UART).

Rappel : La famille d'écran Nextion a comme caractéristiques principales :

  • La facilité de mise en oeuvre : liaision Rx/Tx (pas de protocole spécial)
  • La variété de la gamme
  • Le logiciel simple à utiliser pour créer l'IHM
  • Le mode tactile efficace et rapide à mettre en place
Je vais ajouter dans cet article, donc dans le programme, une interruption. Pourquoi une interruption ?
Et.... qu'est-ce qu'une interruption ?

Une interruption, ben..... ça interrompt le programme. Voilà ! 
Pour faire simple, le programme principal tourne en boucle, fait son travail. Bref, tout se passe bien. Arrive un événement, qu'on attendait, bien sûr, mais on ne savait pas quand. Sans utiliser l'interruption, on risque tout simplement de le rater. Par contre, si on utilise l'interruption, le programme s'arrête net, lance un sous-programme défini à l'avance pour l'événement attendu et, dès que le sous programme est fini, le programme principal reprend là où il s'est arrêté.

Interruption (très) simplifiée :
Le programme se déroule, parfaitement, indéfiniment.... et ..... soudain, juste à la fin de l'action 2 survient l'événement attendu ! Le programme principal s'interrompt et le sous-programme d'interruption démarre. Quand celui-ci a fini, le programme principal reprend là ou il s'est arrête (on peut aussi le forcer à redémarrer à un autre endroit, en fonction des besoins)


Il est possible de déclencher une interruption de différentes manières et ici, on va la déclencher sur un changement de niveau d'une broche, en l'occurrence, la broche Rx3 (D14) de la Mega. Pourquoi ? Parce que c'est justement l'événement que l'on attend. 
Ah, je n'ai pas précisé quel était cet événement : l'appui sur un bouton du Nextion.

Dans mon exemple, je récupère la température issue d'un DHT11. Souci, ce composant bien que facile à utiliser présente un énorme défaut : il faut attendre une seconde entre chaque mesure. De ce fait, soit je mets une pause d'une seconde dans le programme, dans ce cas je peux rater l'arrivée d'une information sur le port série, soit je diminue la pause, mais dans ce cas, je ne sais pas quelle est la température....
D'où l'interruption : le programme fait son boulot, il mesure et affiche la température toutes les secondes et si un appui sur l'écran se produit, une interruption se déclenche.


IHM utilisée :
En mode simulation :

Vérification à l'analyseur logique (Avec Sigrok):

Le câblage :


Passons à Flowcode :

Le panneau utilisé :

Le programme se base sur le modèle IATR :

Initialisation :
Configuration de l'interruption :


Acquisition :
Traitement :
pour la ligne "n0.val=", il faut aller sur les autres articles Nextion de ce blog ;-)

Restitution :
Sous-programme "envoi"
Sous-programme d'interruption :
Et voilà :


En vidéo :
Désolé, pas facile de tenir le téléphone et l'écran tactile tout en visant bien ;-) ;-)



Une question ?









jeudi 1 novembre 2018

Envoi et réception d'un SMS avec Flowcode et une Arduino Mega

Les fabricants de modules GSM sont assez sympa avec nous... ils produisent des cartes et des chips utilisant quasiment toujours les mêmes commandes AT (quasiment !). Cela est très pratique dans la conception d'un projet devant utiliser un module GSM/GPRS.

Ici, j'utilise ce module :

Il est tout à fait possible de programmer en C avec l'IDE d'Arduino ou avec un module USB-UART. Cependant, cette méthode est un peu.... fastidieuse. Heureusement, Flowcode permet de faire la même chose mais très simplement. Par contre, il est nécessaire d'utiliser une carte MEGA pour une raison simple : Flowcode ne propose pas d'émulation logiciel pour le GSM (ni le GPS). Il faut dont un deuxième UART matériel si on veut accéder au port série durant la mise au point. Après, le passage à la UNO est possible.


Mode opératoire :


Le programme qui fait tout ça :
Channel 3 correspond à RX2/TX2 sur la Mega

C'est tout ? ......Oui !

Détails :
Penser à bien changer le numéro de portable ;-)

Câblage : (pas besoin d'alimentation externe avec ce module, il ne consomme pas beaucoup de courant).


U_RXD sur TX2
U_TXD sur RX2
Vcc_In sur 5V
Gnd sur Gnd


Et voilà !!!!!