3. Console, terminal, moniteur: WTF?

Un terminal?

Dans cette section nous évoquons les différents moyens de communiquer avec un processeur. Ce n'est bien entendu pas spécifique à rforth1 ni aux PIC - même si certains éléments évoqués ici le sont...

Le port série

Les communications en série sont des communications très simples - qui consistent à envoyer bit à bit sur un fil des niveaux hauts ou bas qui sont la représentation de chaque bit des octets que l'on veut envoyer.

Protocole électrique

  • Le protocole RS232 est un protocole de communication série pour lequel l'état bas - 0, ON ou Space - correspond à une tension entre +3V et +15V, et l'état haut - 1, OFF ou Mark - à une tension entre -3V et -15V.
  • On trouve d'autres protocoles basées sur des communications en série mais sur des conventions électriques différentes: DMX512, RS423, RS422, ...
  • Les conventions d'état du RS232 diffèrent de celles de la logique CMOS, pour laquelle l'état bas est à 0V, et l'état haut à la tension d'alimentation (5V, 3.3V, ou moins selon le circuit).

Un des problèmes que l'on rencontre avec les ports série vient de l'incompatibilité de ses niveaux électriques avec la logique CMOS. Comme la plupart des circuits intégrés, le PIC18F est réalisé en logique CMOS. Il faut donc effectuer une adaptation de niveaux si jamais on veut le faire parler aver un PC... qui suit la norme RS232.

Conséquences opérationnelles

Pour faire parler un PIC avec un PC, il faut un circuit d'adapation de niveaux de type MAX232. TODO: Mettre le schéma de notre cable RS232<->PIC

Protocole logique

Signal d'horloge

Les protocoles série existent en deux familles : les protocoles synchrones et les protocole asynchrones.

  • Les protocoles asynchrones utilisent 3 fils utiles : une masse, et deux fils de données (un par sens). On peut adjoindre des fils dédiés au contrôle de flux, mais dans notre cas ce n'est pas utile.
  • Les protocoles synchrones utilisent un fil supplémentaire : un signal d'horloge, qui permettra à l'esclave de se synchroniser sur le rythme d'envoi du maitre.

Dans le cas du PIC, on va faire le plus simple possible au niveau matériel : donc pas de contrôle de flux matériel, pas de signal d'horloge. C'est d'autant plus aisé que l'UART intégré ne gère pas le contrôle de flux ni le synchrone.

Protocole de communication

L'envoi d'un octet sur le port série s'effectue de la façon suivante:

  • Envoi d'un bit 'start'
  • Envoi d'un mot (7 ou 8 bits)
  • Envoi d'un bit de parité (optionnel)
  • Envoi d'un bit de stop (optionnel)

Dans le cas de l'asynchrone, faute de signal d'horloge il faut en plus une vitesse de transmission approximative, qui sera affinée automatiquement par le matériel de réception. On passera sous silence les contrôles de flux matériel (avec des fils supplémentaires) et logiciels (XON, XOFF).

So what?

En résumé: la transmission série est une des plus simple qu'il soit - au moins au niveau matériel. Par contre, cette simplicité se fait au prix d'une grosse contrainte: l'utilisateur doit paramétrer exactement de la même façon les deux extrémitées de la ligne.

  • Conséquence 1: Il faudra programmer le PIC pour qu'il utilise une vitesse de transmission standard et des réglages connus
  • Conséquence 2: Il faudra dire au PC d'utiliser la même vitesse de transmission et les mêmes réglages de codage

Réglons la cible

Le processeur n'a en général aucune notion de sa vitesse de fonctionnement. Il n'a donc aucun moyen de savoir comment il doit diviser son horloge interne afin de générer (ou de recevoir) les données. Pour ça, pas de secret, il faut se palucher la notice technique.