Qu'est 您所在的位置:网站首页 arduino9600 Qu'est

Qu'est

#Qu'est| 来源: 网络整理| 查看: 265

Une image vaut 1000 mots, alors ils disent, (1024 mots si vous travaillez avec des ordinateurs) donc je vais poster quelques photos ...

J'ai configuré mon Uno pour envoyer "Fab" à 9600 bauds et capturé les résultats sur un analyseur logique.

Communications série - 3 lettres

Les parties grisées en rouge correspondent à la période "inactive" entre les octets.

D'après le graphique ci-dessus, notez que la ligne de données Tx (émission) est normalement élevée (1) jusqu'à ce qu'elle descende bas pour indiquer le début d'un caractère (octet). Ceci est le bit de départ . Ensuite, les 8 bits de données (indiqués par des points blancs) apparaissent à la vitesse de transmission (9600 échantillons par seconde). Après cela, la ligne est de nouveau élevée. Il s'agit du bit d'arrêt (la partie rouge). Ensuite, nous voyons le bit de départ pour le caractère suivant, et ainsi de suite. La partie "stop" peut être indéfiniment longue, mais elle doit être d'au moins une longueur de bit.

Plus de détails pour le premier caractère (la lettre "F" ou 0x46 ou 0b01000110) peuvent être vus ici:

Communications série - un seul octet

A - pas de données (Tx est élevé)

B - Le "bit de départ". La ligne est prise bas pour indiquer au récepteur qu'un caractère (octet) commence à être envoyé. Le récepteur attend une heure et demie avant d'échantillonner la ligne.

C - Le premier caractère arrive (la lettre "F" ou 0x46 ou 0b01000110). Il n'y a pas de bit d'horloge en tant que tel, les données entrantes sont simplement échantillonnées à la vitesse de transmission (transmission). Contrairement à la communication SPI, les données arrivent en premier sur le bit le moins significatif (au cas où vous n'enverriez pas 8 bits par octet). Ainsi, nous voyons 01100010 (plutôt que 01000110).

D - Le bit d'arrêt. Cette valeur est toujours élevée, pour garantir que nous pouvons faire la distinction entre la fin de cet octet et le début du suivant. Puisque le bit de début est un zéro et le bit d'arrêt est un, il y a toujours une transition claire d'un octet au suivant.

E - Le bit de départ pour le caractère suivant.

Vous pouvez voir à partir de la capture de l'analyseur logique qui T1 - T2est de 0,1041667 ms, et en l'occurrence, c'est 1/9600:

1 / 9600 = 0.00010416666 seconds

Ainsi, le taux de 9600 vous donne le nombre de bits par seconde et l'inverse est l' intervalle de temps entre les bits .

Autres considérations

Les communications série ne sont pas auto-synchronisées (contrairement à SPI ou I2C et autres), donc l'expéditeur et le récepteur doivent s'entendre sur une fréquence d'horloge.

La fréquence d'horloge n'est pas exacte sur l'Arduino, car le matériel doit diviser l'horloge système pour obtenir une horloge série, et la division n'est pas toujours exacte. Il y a presque toujours une erreur, le montant est indiqué dans la fiche technique (chiffres cités pour une horloge système 16 MHz, comme sur l'Uno):

Erreur de débit en bauds série

Vous pouvez varier le nombre de bits de données, vous n'avez pas à en envoyer 8, en fait vous pouvez envoyer 5 à 9 bits.

Il peut éventuellement y avoir un bit de parité envoyé après les bits de données.

Si vous spécifiez la parité "impaire", le bit de parité est défini de telle manière que le nombre total de 1 bits est impair. Si vous spécifiez la parité "paire", le bit de parité est défini de telle sorte que le nombre total de 1 bits soit pair. Si vous ne spécifiez aucune parité, le bit de parité est omis.

Cela peut aider le récepteur à détecter si les données sont arrivées correctement ou non.

Le bit de parité est envoyé avant le bit d'arrêt.

Dans le cas de 9 bits de données (tels qu'utilisés dans le protocole SeaTalk), le bit de parité est redéfini comme 9e bit de données. Par conséquent, vous ne pouvez pas avoir à la fois 9 bits de données et un bit de parité.

Vous pouvez également avoir deux bits d'arrêt. Cela rallonge simplement le temps entre les octets. Dans les temps anciens, c'était pour que les équipements électromécaniques lents puissent traiter l'octet précédent (par exemple pour l'imprimer).

Corruption possible

Si vous commencez à écouter des données série au milieu d'un flux, il est tout à fait possible qu'un 0 bit au milieu du flux soit interprété comme un bit de démarrage, puis le récepteur interprétera tout par la suite de manière incorrecte.

Le seul moyen réel de s'en remettre est d'avoir un espace suffisamment grand, de temps en temps, (par exemple 10 bits de long) pour que cela ne puisse pas se produire.

Logique inversée

Les bits représentés ici (niveau logique) ne sont pas inversés. C'est-à-dire qu'un bit 1 est HAUT et un bit 0 est BAS. Si vous avez un équipement RS232 qui enverra probablement quelque chose comme -12 V pour 1 bit et +12 V pour 0 bit. Ceci est inversé car un est inférieur à zéro, en termes de tension.

Si vous avez de tels appareils, vous devez effectuer une conversion de tension et une inversion logique. Des puces comme le MAX232 feront les deux pour vous. Ils peuvent également fournir les -12 V nécessaires pour piloter un tel équipement en le générant en interne à l'aide de quelques condensateurs fournis par l'utilisateur.

Règle générale de vitesse

Puisque, avec un bit de début, 8 bits de données et un bit d'arrêt, nous avons un total de 10 bits, en règle générale, vous pouvez calculer le nombre d' octets vous pouvez transmettre en une seconde en divisant le débit binaire par 10 .

Par exemple. À 9600 BPS, vous pouvez envoyer 960 octets par seconde.

Code à reproduire:

void setup() { Serial.begin(9600); Serial.print("Fab"); } void loop () { }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有