Ce site contient essentiellement des notes de travail. Le contenu est en constante évolution, et loin d'être achevé. (+ d'infos)
La plupart des documentations informatiques sont orientées Debian / Ubuntu.

Electronique/Protocoles/UART-USART

De Ordinoscope.net
Sauter à la navigation Sauter à la recherche

Introduction

Inversion par transistors (origine)
MAX232 (origine)

l'UART et le sériel sont presque pareils, mais aussi incompatibles:

  • l'UART a des niveaux TTL, c'est à dire que la tension du signal est entre 3.3V et 5V. La plupart des chips 3.3V semblent supporter un signal jusqu'à 5V.
  • le RS-232 a sa base à 0V, et son signal à 5, 9 ou 12V selon la génération.
  • l'UART a sa base à +nV (généralement 3.3V ou 5V), et son signal à 0V, c'est à dire exactement l'inverse du RS-232.

La conversion entre le sériel et l'UART est possible via:

  • un circuit d'inversion
  • un chip spécialisé (ex. MAX232)
  • un convertisseur USB / FTDI
  • l'utilisation du mode software qui inclut l'option d'inversion. Attention, cette méthode ne règle pas les différences de tension et peut faire fumer le microprocesseur. Par principe, n'utilisez que des convertisseurs USB / Sériel pour cette méthode.

Exemple

RS232 logic.png

  • Noir: hardware
  • Brun: software
  • Rouge: software INVERTED
  • Orange: identique au rouge, mais interprété en INVERTED (option de l'analyseur logique)

Exemple avec CCS sur un PIC

#include <16F690.h>
#fuses INTRC_IO, NOWDT, NOPROTECT, NOBROWNOUT, PUT, NOMCLR
#use delay(clock=4000000)
#use rs232 (stream=COM_A, baud=9600, parity=N, xmit=PIN_B7, rcv=PIN_B5)		// UART hardware
#use rs232 (stream=COM_B, baud=9600, parity=N, xmit=PIN_C3, rcv=PIN_C4)		// UART software
#use rs232 (stream=COM_C, baud=9600, parity=N, xmit=PIN_C1, rcv=PIN_C2, INVERT)	// UART software

void main () {
	int i = 0;
	while (1) {
		i++;
		fprintf (COM_A, "%u\n", i);
		fprintf (COM_B, "%u\n", i);
		fprintf (COM_C, "%u\n", i);
		delay_ms (1000);
	}
}

Recettes

Accéder à un port sériel semble tout simple, et pourtant ... L'ignorance a rempli les forums depuis la nuit des temps (et dans ce domaine les francophones excellent), où les questions intelligentes restent souvent orphelines d'une réponse adéquate. Si c'était si simple que cela, on devrait pouvoir trouver facilement des exemples fonctionnels. Désolé du peu d'exemples sur ce site, qui représente déjà des heures et de heures de recherches et de tests. En échange je peux vous assurer que je les ai testés positivement.

Références

Convertisseurs sériel / TTL