Serial.begin (): Pourquoi ne pas toujours utiliser 28800?

Dans de nombreux exemples de code en ligne, les utilisateurs ajoutent la ligne Serial.begin(9600) dans le bloc de configuration.

Quand je regarde ce que Serial.begin() est sur la documentation officielle, il dit que cela contrôle le transfert de données bit par seconde.

Donc la question évidente est, pourquoi ne pas utiliser 28800, le taux de transfert le plus élevé? Pourquoi les gens se contentent-ils de 9600? Quelle est la limitation ici?

Commentaires

  • Pour info, la plus haute prise en charge par un arduino branché sur USB est en fait 115200, et 57600 est souvent le deuxième plus courant baud que vous voyez.

Réponse

Pourquoi les gens régler?

Les gens sinstallent parce que cest plus que suffisant. Lutilisation la plus courante consiste simplement à imprimer des éléments sur un terminal pour le débogage. 9600 bauds équivaut à 960 caractères par seconde, soit 12 x 80 lignes de caractères par seconde. À quelle vitesse pouvez-vous lire? 🙂

Si votre programme utilise le port série pour le transfert de données en masse, vous choisirez de ne pas régler.

Quest-ce que la limitation …

Les limites de la série sont élevées. Directement, vous pouvez utiliser 115200 bauds dans vos programmes et cela fonctionnera. Le terminal Arduino autorisera un maximum de 115200, mais dautres programmes tels que RealTerm vous permettraient dexécuter plus haut.

Le matériel série fonctionnera à 1 M bauds. Si vous lisez autour de vous, vous verrez que les gens ont utilisé jusquà 1 M en contrôlant directement lUART. Vous pouvez bénéficier de débits en bauds élevés pour des utilisations telles que la transmission via une puce Bluetooth. Si vous utilisez linterface série matérielle pour échanger dune puce à lautre avec une courte distance, alors 1 M baud est tout à fait possible. Pensez à tous les appareils SPI et I2C qui fonctionnent très bien à une fréquence dhorloge de 1 MHz.

Sur de plus grandes distances, vous commencerez à avoir des problèmes de bruit lors de lutilisation de la signalisation de niveau logique (0 à 5V). Pour utiliser de plus grandes distances, vous ajouteriez un émetteur-récepteur pour fournir une signalisation robuste, généralement RS-232 et moins fréquemment RS-485. Avec RS-232, vous pouvez exécuter un méga bit à des distances de 10 « s de pieds.

La vitesse dhorloge du microprocesseur sera la vraie limite. Avec un UART matériel, le processeur doit charger un octet sur lUART tous les 10 bits (pour N81). Ainsi, lorsque vous arriverez à 1 M bauds, il sera difficile pour le processeur 16 MHz de garder lUART alimenté en données. Un nouvel octet sera envoyé toutes les 160 impulsions dhorloge, ce qui représente très peu de lignes de code. Pour une courte rafale de données, vous pouvez atteindre ce taux. Le message est que le processeur sera à court de vitesse avant que lUART ne soit la limite.

Remarque, tout cela sapplique à HardwareSerial , le numéro de série du logiciel est très différent.

Commentaires

  • Veuillez noter que 2M est archivable avec hw serial, mais limplémentation darduino ‘ semble trop lente et envoie beaucoup de déchets. Voir atmega328p ds pour trouver le peu magique pour doubler votre vitesse. Ajoutez également que 9800 bauds est un très vieux standard, et beaucoup des capteurs utilisent cette valeur en standard, même si elle peut être configurée pour plus, comme xbee, gps, etc. La négociation de la vitesse de transmission automatique en série sur USB peut également remplacer la vitesse de transmission sélectionnée, mais je pense quelle nest pas utilisée par arduino (mais cela peut être sur leonardo)
  • 9600 8N1 est également un paramètre par défaut de facto. De nombreux appareils dotés dune interface série sont livrés avec ce paramètre et doivent être configurés si une autre vitesse (ou des bits de données, un bit de parité, un bit darrêt) est nécessaire.
  •  » cest plus quassez rapide  » – Bonne réponse, mais je ne suis pas du tout daccord avec ce point. La plupart des implémentations de sortie de débogage sont bloquantes, il est donc très souhaitable de rendre la sortie de débogage aussi rapide que possible pour éviter des changements excessifs dans le temps dexécution du code.
  • Si vous ‘ vous effectuez un transfert de données en masse. Idéalement, vous ‘ utilisez SPI, nest-ce pas?

Réponse

En plus de toutes les réponses intéressantes, il convient de mentionner que définir la vitesse série sur XXX bits / s nimplique pas nécessairement XXX bits / s sur le matériel.

Les horloges – même à base de quartz – sont imparfaites et sujettes à la dérive. De plus, comme lhorloge série est généralement générée par un pré-diviseur de puissance de deux et un compteur (entier), toute valeur ne peut pas être obtenue avec précision étant donné une fréquence dhorloge de base. Avec laide des bits de démarrage / arrêt, la communication série asynchrone peut être tolérante à une certaine dérive dhorloge. Mais cela a des limites.

Par exemple, si votre ATmega328PA fonctionne à 1MHz, vous pouvez atteindre 9600b / s à 0,2% derreur. Mais à 14400b / s, lerreur est de -3,5% (communiquant en fait à 13900b / s). Et à 28800b / s, lerreur est de + 8,5% (communiquant effectivement à 31200b / s).Tous ces chiffres proviennent de la fiche technique ATmega48PA-88PA-168PA-328PA, p200 .

Ce nest pas un problème lorsque deux appareils identiques communiquent ensemble (car ils communiquent en fait à la même vitesse). Cela peut être un problème lors de la communication entre différents appareils.

Laugmentation de la fréquence de base naméliore pas nécessairement la précision. Par exemple, exécuter le même ATmega328PA que ci-dessus à 2 MHz ne donne pas vraiment de meilleurs résultats car ceux-ci sont principalement dus à des erreurs darrondi. Mais le faire fonctionner à 1,8432 MHz donne des bps très précis de 2400b / s à 57,6 kHz.

Réponse

Je pense que cest un sorte de tradition dutiliser un taux de transfert qui nest pas le plus lent (300) mais pas non plus celui qui pourrait éventuellement causer des problèmes dans certaines configurations (28800 ou même 115200). Le port série du PC (le plus souvent un adaptateur USB FTDI232) peut supporter des débits plus élevés, mais pas votre matériel de bricolage. Donc, 9600 bps sest imposé comme une sorte de taux de transfert standard pour les exemples de code.

Réponse

Retour dans la nuit des temps , le « gold standard » pour les claviers distants (utilisant un modem téléphonique et des télétypes, si vous vous en souvenez) était de 9600 bauds, initialement réalisable uniquement sur une ligne téléphonique dédiée. Le temps passe, lentement; la technologie progresse rapidement; et la mémoire bouge encore plus lentement que le temps (semble-t-il). Nous pouvons communiquer régulièrement, au moins sur plusieurs mètres, à quelques ordres de grandeur plus rapides que 9600 bauds. Ce qui était autrefois considéré comme un étalon-or nest plus lor, mais toujours considéré comme un standard.

tl; dr: Cest de lhistoire, pas de la technologie.

Réponse

Je pense que la principale raison pour laquelle les gens utilisent 9600 la plupart du temps est que cest le débit en bauds par défaut dans lIDE Arduino. En outre, des débits de données plus rapides peuvent également être peu fiables si le signal série doit parcourir un long trajet – même si je nai aucune idée de la raison pour laquelle cela a été sélectionné comme vitesse optimale.

Réponse

Temps de réaction humaine

Parce que peut arrêter le moniteur série lorsque votre Arduino se débat sur le port est requis par les utilisateurs 100% du temps, et la vitesse de transfert maximale est requise inférieure à 100% du temps.

9600 bauds est un compromis entre «facile à tuer un processus emballé» et «extrêmement lent».

Commentaires

  • 100% hé … intéressant;)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *