Commercial
Protocole UART
Introduction
UART est un protocole de communication utilisé pour échanger des données entre des appareils. Parmi les protocoles populaires pour microcontrôleurs les plus utilisés UART (UART, SPI et I2C), UAR a été le premier développé.
UART signifie Émetteur-Récepteur Asynchrone Universel (Universal Asynchronous Receiver and Transmitter). Les protocoles synchrones ont des liens séparés pour l’horloge et les données : les liens de données et d’horloge sont utilisée pour déclencher la lecture (ou l’écriture) des données. UART est asynchrone, ce qui signifie qu’il n’utilise que des liens de données et pas de signal d’horloge. Les données sont transmises à une vitesse définie, donc le récepteur et l’émetteur doivent être configurés à la même vitesse (appelé baud rate) afin que la communication soit établie. UART à normalement 2 liens de données, nommés Transmission (TX) et Réception (RX), afin de permettre aux données d’être envoyées dans les deux sens (full duplex).
La trame UART
La connexion de données UART est au niveau logique haut en repos quand aucune donnée n’est transmise. La transmission des données commence par tirer la ligne au niveau logique bas pour 1 bit. Après ce bit de démarrage (Start Bit), les bits de données (Data Bits) sont transmis. Ceci se termine par un bit d’arrêt (Stop Bit) puis la ligne revient au niveau logique haut.

Par exemple, voici une transmission du nombre binaire 01011110 (hexadécimam 0x7A)

Certaines variations sur la trame sont possibles, mais le tramage illustré au-dessus est de loin le plus commun. Nous reviendrons sur ces variations plus tard dans cet article. Lors de la transmission de multiples octets, ceux-ci s’enchainent les uns à la suite des autres sans de temps de repos (idle time) entre eux.
Par exemple, ci-dessous la séquence hexadécimale de 0x1A9E2B est présentée :

Baud Rate
La vitesse à laquelle la communication intervient est appelée, le baud rate. Le baud rate exprime un nombre de bits par seconde (bps), et des vitesses couramment utilisées sont 9 600, 19200 et 115200. Pour un tramage de 1 bit d’arrêt et pas de bit de parité (nous en reparlerons plus tard), on envoie 10 bits pour transmettre 8 bits de données (c’est-à-dire 1 octet) ; donc à 9 600 bauds, cela nous donne un débit de données de 960 octets par seconde soit un peu plus d’une milliseconde par octet.
Comme le protocole est asynchrone et qu’aucun signal n’existe d’horloge, l’émetteur et le récepteur doivent utiliser leurs horloges internes (telle que l’horloge système d’un microcontrôleur). Parfois, il est impossible pour l’émetteur ou le récepteur de générer exactement le baud rate demandé, car les vitesses possibles sont souvent un facteur de la vitesse de l’horloge interne de l’émetteur/récepteur – Dans ce cas, la vitesse actuelle va dévier de la vitesse demandée d’un certain pourcentage, mais lorsque la déviation reste dans une certaine tolérance, alors les communications vont s’effectuer, sachant que la limite usuelle de déviation possible pour que la communication s’effectue est de 3 %. La datasheet du microcontrôleur (ou de l’émetteur-récepteur) peut être utilisée pour calculer les vitesses exactes possibles (et donc le pourcentage de déviation pour les autres vitesses).
Auto-ajustement de la vitesse
Certains systèmes supportent l’autobauding, ou le récepteur va automatiquement détecter la vitesse après avoir analysé quelques données reçues. Ceci est fait en mesurant la largeur de la plus petite impulsion dans les données. Par exemple, si la plus petite impulsion à une largeur de 8.86µs, alors la vitesse est de 115200bps.
Contrôle de flux
Le protocole peut aussi avoir des liens supplémentaires liés au contrôle du flux, qui indique au transmetteur quand le récepteur est occupé et ne peut pas immédiatement recevoir de nouvelles données. Ceci peut être très utile, par exemple, dans le cadre d’un module radio (par ex. Bluetooth) qui prend les données reçues en UART et les transmet dans l’air et que le débit air est moins important de la vitesse sur la ligne UART (même temporairement si les voies de données sont congestionnées par d’autres trafics). Les lignes de contrôle de flux, sont appelées Demande d’envoi (Request to Send) (RTS) et Autorisé à envoyer (Clear to Send) (CTS). La connexion RTS est connecté à la connexion CTS de l’autre émetteur-récepteur et vice versa. L’émetteur-récepteur qui souhaite transmettre surveille la ligne CTS de l’autre émetteur-récepteur (connecté à la broche RTS du premier émetteur-récepteur), qui tire la ligne CTS haute quand il est prêt à recevoir des données.
Variations de protocole
De loin, la variation la plus utilisée du protocole UART est 8N1 qui veut dire :
- 8 bits de données ;
- Pas de bits de parité ;
- 1 bit d’arrêt ;
Le nombre de bits de données peut varier de 5 à 9 (même si la majorité des UART des microcontrôleurs supportent uniquement 8 ou 9 bits). Quand un neuvième bit est utilisé, c’est souvent pour indiquer si la trame contient des données ou un message de contrôle.
Avoir deux bits d’arrêt permet un contrôle d’erreur supplémentaire sur la trame (si les deux bits de stop sont absents, alors il y a une erreur).
La Parité est une autre forme de contrôle d’erreur ou un bit additionnel est défini selon que le nombre de 1 dans la trame est pair ou impair. Par exemple: pour la parité paire, si le nombre de 1 dans les données est 3 ainsi le bit de parité sera défini pour que le nombre de 1 dans la trame soit 4 (pair). Pour la parité impaire, si le nombre de 1 dans les données est de 4 alors le bit de parité sera défini à 1 pour que le nombre de 1 dans la trame soit de 5 (impair).
Vous trouverez de nombreux exemples de différentes simulations UART dans notre portfolio d’exemples. Vous pouvez aussi mettre en place des tests grâce au modèle terminal RS232 (TTY) associé à un microprocesseur dans Proteus.
A présent nos deux pics sont à 3.5V et nos creux à 1.5V, ce qui nous donne toujours une amplitude pic à pic de 2V (donc un gain de x2).
Erreur de protocole
Différentes erreurs de protocole peuvent apparaître, quand le signal ne conforme pas au standard UART, et un nombre important de microcontrôleurs ont intégré de quoi détecter et remonter ces erreurs. Des erreurs peuvent survenir à cause d’interférence sur la ligne de communication, par ex. des interférences électro-magnétiques (IEM), des paramétrages incorrects de protocole ou vitesses (bauds) non identiques.
- Erreur de tramage : le(s) bit(s) de stop ne sont pas détectés à la position attendue
- Erreur de parité : la parité est incorrecte ;
- Erreur de bruit : des transitions (impulsions) ont été détectées, sur la ligne, qui sont plus courtes que le baud rate. Certains microcontrôleurs ont une fonctionnalité de sur-échantillonnage qui lit la ligne UART plus d’une fois par bit, et cette fonctionnalité est utilisée pour détecter du bruit.
Câblage
Une erreur très commune (et très facile à faire) est de ne pas câbler la communication correctement. Il est important de se rappeler que le RX d’un côté va dans le TX de l’autre côté et vice-versa. La même chose s’applique aux lignes de contrôle de flux, RTS d’un côté relié à CTS de l’autre côté et vice-versa. Pour rendre ça plus compliqué, certains fabricants nomment les pins de leurs périphériques pour une connexion sur l’hôte ! Ces périphériques doivent donc avoir le RX de l’hôte câblé sur le RX du périphérique (et ainsi de suite). C’est toujours une excellente idée de vérifier le câblage UART avec la datasheet du périphérique. Par exemple, ici un extrait de la datasheet d’un module GSM ou les pins sont nommés depuis le point de vue du module :

Ici un autre extrait de datasheet d’un module GSM qui a les broches nommées relativement à l’hôte.

Le schéma de nommage SPI de MISO (Master-In-Slave-Out) (Hôte-entrée-Périphérique-sortie) / MOSI (Master-Out-Slave-In) (Hôte-sortie-Périphérique-entrée) est beaucoup mieux pour éviter ces erreurs bêtes (et coûteuses), cependant cela ne s’applique pas à l’UART. Quand vous faites votre schéma il peut être utile de nommer les liens avec précision (comme Bluetooth_TX) pour éviter les erreurs.
Couche physique
Les communications UART peuvent intervenir sur différents schémas hardware. Lies liaisons TTL, RS232 et RS485 en font partie :
- TTL veut dire Transistor to Transistor Logic (voir notre article sur les signaux analogiques et digitaux) et est utilisable pour des communications de courte distance. Le niveau haut est usuellement 5V ou 3.3V et bas 0V.
- RS232 était très commun sur les ordinateurs, mais a été remplacé par l’USB. Le niveau haut se situe entre -3V et -15V et le niveau bas entre 3V et 15V. RS232 ayant été remplacé par l’USB, des convertisseurs USB-série sont très communs (comme le FT32 par ex.) qui se présente en port COM virtuel sur le PC.
- RS485 est une implémentation en paires différentielles, qui offre une meilleure immunité aux interférences électromagnétiques (IEM), et autorise une communication sur de plus grandes distances. Voir notre article sur la conception haute vitesse pour plus d’information sur les paires différentielles.
Conclusion
Même si c’est un des premiers protocoles de communication à avoir été développé, l’UART est toujours aussi pertinent et populaire de nos jours. Comprendre ce protocole permet de d’appréhender son implémentation dans les applications et savoir déboguer un souci (avec un oscilloscope par ex.). Proteus intègre un terminal virtuel ainsi qu’un oscilloscope pour fonctionner en simulation UART, en plus de la grande sélection de composants UART présents dans les bibliothèques de composants.
Copyright Labcenter Electronics Ltd. 2024
Traduction française
Copyright Multipower France 2024
Les convertisseurs numériques analogiques
Introduction
Les convertisseurs numériques analogiques (CNA en français ou DAC en anglais pour Digital to Analogue Converter) convertissent un nombre numérique (utilisé par les ordinateurs tel un microcontrôleur) en une tension analogique. Ils réalisent la fonction inverse aux convertisseurs analogiques numériques (CAN en français ou ADC en anglais pour Analogue to Digital Converter).
Pour plus d’information sur les signaux analogiques et numériques, veuillez vous reporter à notre article dédié sur le sujet.
Il existe deux types principaux de ‘Digital to Analog converter’ appelés respectivement ‘Binary Weighted’ et ‘R-2R’.
DAC Binary Weighted

La figure ci-dessus représente un DAC binary weighted de 4 bits. Si vous n’êtes pas familier avec le système binaire, veuillez vous référer à l’article sur les systèmes de numération. Le DAC peut prendre une valeur décimale comprise entre 0 et 15 (entre 0 et 1111 en binaire), pour générer une tension analogique dont le niveau correspond au nombre. Si la tension d’alimentation est 5V (l’état des blocs logiques commutent entre 0V et 5V), ainsi les pas de tension obtenus sont de 5V/15 = 0,333V



La valeur de chaque résistance est :

Où :
- t est le nombre total de bits (4 dans notre cas).
- n est le numéro d’un bit particulier (à partir de 0).
- et k est une constante arbitraire (1k dans l’exemple de la figure).
Bien évidemment pour transférer la tension sur une charge depuis ce DAC nous aurons besoin d’un amplificateur tampon (voir notre article sur les amplificateurs opérationnels) :

Plus de bits (donc une précision supérieure) peuvent être ajoutés en augmentant simplement le nombre d’entrées avec des résistances de valeurs correctes.
L’inconvénient du DAC binary weight est qu’il requiert potentiellement un grand nombre de résistances de valeurs très précises (ce qui impacte sur le coût).
DAC R-2R
Le DAC R-2R ne nécessite que 2 valeurs de résistances, une étant le double de l’autre.

L’inconvénient de ce type de DAC est que la tension de sortie est limitée à

de la tension d’alimentation où t est comme précédemment le nombre total de bits.
Une autre façon de penser cela est de dire que la tension est limitée à (résolution-1)/résolution, où la résolution du DAC est le nombre de pas (16 pour un DAC 4 bits).
Pour un DAC 4 bits avec une tension d’alimentation de 5V, on obtient 15/16 x 5V = 4,96V

Cependant, ceci peut être corrigé avec un amplificateur de gain précis, comme nous le verrons plus loin.
Les pas de tensions pour une tension d’alimentation de 5V et un DAC 4 bits, en tenant compte de la limite de tension de sortie à 4,69V, seront de 4,69V/15 = 0,31V

Ceci peut être corrigé pour tenir compte de la tension d’alimentation totale, grâce à un amplificateur de gain précis, pour délivrer 0,333V (comme dans le cas d’un DAC binary weighted)

A nouveau, comme pour le DAC binary weighted, un amplificateur est nécessaire pour piloter une charge. Pour mettre à l’échelle la sortie en relation avec la tension d’alimentation totale, un gain de

peut être utilisé sur l’amplificateur, où t est toujours le nombre de bits. Le gain est donné par résolution/(résolution -1), 16 dans notre cas pour un DAC 4 bits.
En définitive pour RA=R (10k dans notre exemple) et

Pour un DAC 4 bits on obtient R x 15, soit 10k x 15 = 150k dans cet exemple. Nous aurons ainsi les 5V en sortie.

En résumé il suffit d’une résistance de simple précision pour tirer partie de toute la dynamique d’alimentation disponible par comparaison avec la série de résistances de précision nécessaires dans le cas d’un DAC binary weighted.
Autres types de DACs
Un autre type de DAC est le PWM filtré, où le signal PWM passe dans un R-C filtre passe-bas (voir l’article sur les signaux PWM). Cependant ceci nécessite un circuit relativement compliqué pour générer le PWM avec un faible temps de réponse inférieur à celui des DAC résistifs présentés ici.
Dans Proteus vous trouverez des exemples de circuits avec conversion analogique numérique dans notre bibliothèque de projets exemples. Tous ceux-ci peuvent être simulés dans la version de démonstration pendant une période d’essai.
Copyright Labcenter Electronics Ltd. 2024
Traduction française
Copyright Multipower France 2024
Comprendre les Bootloaders : La Clé des Mises à Jour des Microcontrôleurs
Comprendre les Signaux Électroniques : Différences entre Analogique et Numérique et leur Conversion
Ayez un aperçu des condensateurs de découplage! Découvrez quand et comment les utiliser.
Amplificateurs Opérationnels : Guide Complet pour l’Électronique Analogique
La Transformée de Fourier : Décomposition et Analyse de Signaux en Électronique
PCB Multicouches : Comprendre l’Empilement des Couches et son Impact sur la Fabrication
Découvrez ce qu’est un convertisseur boost qui permet d’obtenir une tension plus élevée et comment il fonctionne.
Découvrez ce qu’est un convertisseur buck qui permet d’obtenir une tension plus basse et comment il fonctionne. Un projet de simulation Proteus est disponible en fin d’article !!!
Communication I2C
Introduction
I2C (ou IIC) contraction de Inter-IC Communication, est un des plus populaires protocoles de communication implémenté sur les microcontrôleurs. Il est couramment utilisé pour interagir avec des capteurs mais se retrouve également dans beaucoup d’autres applications.
I2C est un protocole de communication synchrone, ce qui signifie qu’il existe une ligne horloge dédiée (voir les protocoles de communication synchrones/asynchrones).
Communication I2C
Bien que l’I2C n’utilise que deux lignes de communication (horloge et données), il peut prendre en charge plusieurs périphériques sur le même bus I2C. Cela est réalisé en utilisant un schéma d’adressage où chaque périphérique sur le bus a une adresse unique. La communication commence par l’envoi de l’adresse du périphérique avec lequel la communication est prévue, et le périphérique adressé doit ensuite accuser réception en indiquant qu’il est présent et prêt à communiquer.
Comme il n’y a qu’une seule ligne de données (SDA – données sérielles), utilisée à la fois pour l’envoi et la réception de données (mode half-duplex), un mécanisme est nécessaire pour permettre au maître et au périphérique esclave de contrôler la ligne de données sans conflits. Il est essentiel d’éviter les contentions sur le bus, où un périphérique tente d’écrire un niveau haut sur le bus tandis qu’un autre périphérique tente d’écrire un niveau bas sur le bus, ce qui créerait un court-circuit.
Pour y parvenir, on utilise un mécanisme open-drain ; où chaque périphérique ne peut mettre le bus qu’à un niveau « bas » ou le « relâcher », et des résistances de tirage sont utilisées pour ramener la ligne à un niveau haut lorsqu’elle est relâchée (si vous n’êtes pas familier avec les termes open-drain ou résistance de tirage, veuillez consulter notre article sur le sujet). La ligne d’horloge (SCL – Horloge sérielle) utilise également ce mécanisme, et quelques techniques innovantes sont utilisées pour ajouter des fonctionnalités utiles au protocole I2C – nous en parlerons plus en détail sous peu.
Le diagramme ci-dessous illustre les caractéristiques typiques d’une séquence de communication I2C.
La communication débute avec le bus I2C en état de repos – les lignes d’horloge et de données ne sont pas activées et sont donc tirées vers le haut par les résistances de tirage. Ensuite, la communication est initiée par le maître (le périphérique initiant la communication) tirant d’abord la ligne SDA puis la ligne SCL vers le bas – cela est défini comme une condition de départ (Start).
Ensuite, le maître transmet l’adresse sur 7 bits du périphérique avec lequel il souhaite communiquer, suivie d’un bit « lire ou écrire » qui indique si le maître souhaite écrire (0) ou lire (1) à partir du périphérique. La ligne de données est considérée comme valide (lue par les esclaves) sur les fronts montants de la ligne d’horloge, et les données sont transmises en commençant par le bit le plus significatif (MSB).
Après que l’adresse a été transmise, et en supposant que l’esclave adressé est présent sur le bus I2C, le maître relâchera la ligne de données (open drain), et l’esclave maintiendra la ligne de données basse pendant un cycle d’horloge pour accuser réception (ack) qu’il est présent et prêt à communiquer. Si l’esclave n’est pas présent sur le bus, alors la résistance de tirage tirera la ligne de données vers le haut, et le maître saura que l’esclave n’est pas disponible.
À ce stade, les données peuvent être transmises entre le maître et l’esclave. Si des données sont lues, alors l’esclave transmettra les données (pendant que le maître continue de piloter la ligne d’horloge), ou si des données sont écrites, alors le maître transmettra les données. Après chaque octet de données, il y a un seul bit d’acquittement (Ack), pendant lequel le récepteur (qui peut être le maître ou l’esclave, selon le côté qui a transmis les données) doit maintenir la ligne de données basse pour indiquer qu’il a reçu la communication (et qu’il est prêt à passer à la communication suivante si nécessaire).
Etirement d'horloge
Les périphériques esclaves sur le bus I2C ont la capacité de retarder leurs réponses (s’ils sont toujours occupés et ne sont pas encore prêts à répondre) en maintenant la ligne d’horloge (SCL) à un niveau bas, une fonctionnalité connue sous le nom d’« étirement d’horloge » (clock stretching) ; une fois prêt à répondre, l’esclave relâche la ligne d’horloge et la transmission des données se poursuit. Ceci est similaire aux lignes de contrôle de flux dans l’UART (CTS/RTS), mais sans nécessiter de lignes de communication supplémentaires (notez que le protocole SPI n’a pas de fonction de contrôle de flux).

Un ou plusieurs octets de données peuvent être communiqués en séquence, avec un acquittement (ack) survenant après chaque octet.
Redémarrage
Parce que les périphériques esclaves peuvent avoir une multitude de valeurs disponibles à lire (telles que plusieurs valeurs de capteurs ainsi que des valeurs de réglages), l’esclave peut exiger que le maître émette d’abord une instruction indiquant ce qu’il souhaite lire avant de procéder à la lecture effective. Dans ce cas, le maître émettra d’abord une écriture avec les données indiquant ce qui doit être lu, puis le maître émettra immédiatement après une lecture. Cependant, il n’y a pas d’arrêt émis entre les deux. À la place, le maître utilise une condition de redémarrage (repeated start), suivie de l’adresse de 7 bits et du bit de lecture/écriture d’1 bit, maintenant réglé sur lecture, pour passer de l’écriture à la lecture. Pour émettre un redémarrage, le maître place d’abord la ligne de données à un niveau haut, puis la ligne d’horloge, et ensuite le maître abaisse la ligne de données suivie de la ligne d’horloge.

Débit et distances
La communication sur le bus I2C se déroule généralement à des vitesses de 100 kHz ou 400 kHz. Ces vitesses relativement basses conviennent bien pour de petites quantités de transmission de données, mais le SPI (utilisant des horloges dans la plage des mégahertz, et éventuellement en mode Dual ou Quad) est généralement préféré pour des applications à haut débit où de grandes quantités de données doivent être transmises. L’I2C est plutôt utilisé pour des communications sur des distances relativement courtes, cependant, des mécanismes existent permettant la transmission d’I2C sur des paires différentielles pour communiquer sur des distances plus longues (veuillez consulter notre article sur la conception à haut débit pour plus d’informations sur les paires différentielles).
Proteus inclut un instrument analyseur de protocole I2C en mode DUAL (maître ou esclave) à placer sur les liens du schéma. Cela vous permet ensuite de saisir et d’injecter des séquences I2C dans la simulation en cours et de visualiser les paquets reçus en provenance d’autres périphériques sur le bus I2C. C’est un excellent outil pédagogique qui permet un test rapide et facile des firmwares en mode maître et en mode esclave. Vous trouverez beaucoup d’exemples de projets qui incluent des communications I2C avec des capteurs ou des projets multi-processeurs. Tous ceux-ci peuvent être simulés dans la version de démonstration.
Copyright Labcenter Electronics Ltd. 2024
Traduction française
Copyright Multipower France 2024