Quest-ce que Serial.begin (9600)?

Je sais que cest pour initialiser quelque chose:

Serial.begin(9600); 

Mais je veux savez ce que cela signifie vraiment?

Commentaires

Réponse

Serial.begin(9600) nimprime rien. Pour cela, vous » voudriez utiliser Serial.print("Hello world!") pour imprimer le texte  » Bonjour le monde! » à la console série. Il initialise plutôt la connexion série à 9600 bits par seconde.

Les deux côtés de la connexion série (cest-à-dire lArduino et votre ordinateur) doivent être configurés pour utiliser la même vitesse de connexion série afin dobtenir nimporte quel type de données intelligibles. Sil y a « une discordance entre ce que les deux systèmes pensent que la vitesse est alors les données seront brouillées.

9600 bits par seconde est la valeur par défaut pour lArduino, et est parfaitement adéquate pour la majorité des utilisateurs, mais vous pouvez le changer à dautres vitesses: Serial.begin(57600) réglerait lArduino pour quil transmette à 57600 bits par seconde. Vous devez définir le logiciel que vous utilisez sur votre ordinateur (comme le Moniteur série Arduino IDE) à la même vitesse afin de voir les données envoyées.

Commentaires

  • Baud et BPS sont deux choses différentes … ne peut ‘ trouver le lien que je cherchais maintenant.
  • et si je mettais  » Série .begin (0);  » ou  » Serial.begin (4000);  » . Je veux dire que je veux savoir quelle est la différence entre les nombres?
  • Serial.begin est utilisé pour définir la vitesse de communication, en bits par seconde. Un octet est égal à 8 bits, mais les connexions série envoient un bit de début et darrêt pour identifier le début et la fin dun octet particulier au système récepteur. Ainsi, 10 bits sont nécessaires pour envoyer un caractère. Lutilisation de Serial.begin(0) indique à lArduino quil doit communiquer avec série à 0 bits par seconde. Comme vous vous en doutez, cela signifie que lArduino nenverra jamais aucune donnée. Serial.begin(4000) obligera lArduino à envoyer des données à 4000 bits par seconde. Ce nest pas standard, mais autrement très bien.
  • En bref: changer le nombre change la vitesse. Rendre le nombre plus petit (par exemple Serial.begin(300)) permet à lArduino denvoyer les données plus lentement. Laugmenter, disons à 57600, enverra des données plus rapidement. Le système denvoi et le système de réception doivent se mettre daccord sur la vitesse à utiliser: le programme série de votre ordinateur ‘, comme la fenêtre Arduino Serial Monitor, vous permettra de définir la vitesse à laquelle votre ordinateur recevra des données mais vous ne pouvez sélectionner que parmi les vitesses courantes: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600 et 11520 bit / s. Vous pouvez ‘ saisir dautres vitesses, comme 4000. 9600 est généralement une bonne chose.
  • Baud and BPS are two different things... can't find the link I was looking for now. – Ici ‘ une explication: Annexe C:  » bauds  » vs  » bps  »

Réponse

Une image vaut 1000 mots, alors on dit, (1024 mots si vous travaillez avec des ordinateurs) donc je posterai quelques photos …

Jai configuré mon Uno pour envoyer « Fab » à 9600 bauds et capturé les résultats sur un analyseur logique.

Communications série - 3 lettres

Les parties ombrées en rouge correspondent à la période » inactive « entre les octets.

À partir du graphique ci-dessus, notez que le La ligne de données Tx (émission) est normalement au niveau haut (1) jusquà ce quelle baisse pour indiquer le début dun caractère (octet). Il sagit du bit de départ . Puis 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 à nouveau élevée. Cest le bit darrêt (la partie rouge). Ensuite, nous voyons le bit de début du caractère suivant, et ainsi de suite. La partie « stop » peut être indéfiniment longue, mais elle doit avoir au moins une longueur de bit.


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

Communications série - un seul octet

  • A – pas de données (Tx est élevé)

  • B – Le « bit de départ ». La ligne est mise à létat bas pour indiquer au récepteur quun 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 ny a pas de bit dhorloge 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 avec le bit le moins significatif (au cas où vous nenvoyez pas 8 bits par octet). Ainsi, nous voyons 01100010 (plutôt que 01000110).

  • D – Le bit darrêt. Ceci est toujours élevé, pour nous assurer 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 que le bit darrêt est un un, il y a toujours une transition claire dun octet au suivant.

  • E – Le bit de début pour le caractère suivant.


Vous pouvez voir à partir de la capture de lanalyseur logique que T1 - T2 est de 0,1041667 ms, et comme cela se produit soit 1/9600:

1 / 9600 = 0.00010416666 seconds 

Ainsi le débit de 9600 vous donne le nombre de bits par seconde et linverse est 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), par conséquent lexpéditeur et le destinataire doivent se mettre daccord sur une fréquence dhorloge.

  • La fréquence dhorloge nest pas exacte sur lArduino, car le matériel doit diviser lhorloge système pour obtenir une horloge série, et la division nest pas toujours exacte. Il y a presque toujours une erreur, le montant est indiqué dans la fiche technique (chiffres indiqués pour une horloge système à 16 MHz, comme sur lUno):

    Erreur de débit en bauds série

  • Vous pouvez faire varier le nombre de bits de données, vous n’avez pas à envoyer 8 dentre eux, 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 une parité « impaire », le bit de parité est défini de telle sorte que le nombre total de 1 bits soit impair.
    • Si vous spécifiez une parité « paire » , le bit de parité est défini de telle manière 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 darrêt.

  • Dans le cas de 9 bits de données (tel quutilisé dans le protocole SeaTalk), le bit de parité est redéfini comme un 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 darrêt. Cela ne fait quallonger le temps entre les octets. jours « cétait pour quun équipement électromécanique lent puisse traiter loctet précédent (par exemple pour limprimer).


Corruption possible

Si vous commencez à écouter des données série au milieu dun flux, il est fort possible quun bit 0 au milieu du flux soit interprété comme un bit de début, puis le récepteur interprétera tout de manière incorrecte.

Le seul vrai moyen de sen sortir est davoir un intervalle suffisamment grand, de temps en temps, (par exemple 10 bits de long) pour que cela ne puisse pas arriver.


Logique inversée

Les bits affichés ici (niveau logique) ne sont pas inversés. Autrement dit, un bit 1 est HIGH et un 0 bit est LOW. Si vous avez un équipement RS232 qui enverra probablement quelque chose comme -12 V pour un bit 1 et +12 V pour un bit 0. Ceci est inversé car un 1 est moins e un 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 le -12 V nécessaire pour faire fonctionner un tel équipement en le générant en interne à laide de quelques condensateurs fournis par lutilisateur.


Règle de vitesse

Puisque, avec un bit de départ, 8 bits de données et un bit darrêt, nous avons un total de 10 bits, en règle générale, vous pouvez calculer le nombre doctets 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 () { }  

Réponse

; TLDR; Il initialise le port de communication série et définit la vitesse de transmission. Le périphérique avec lequel vous communiquez (ou le moniteur série Arduino IDE) doit être réglé sur un débit en bauds correspondant. Une fois que vous avez initialisé le port, vous pouvez commencer à envoyer ou à recevoir des caractères. Référence série Arduino

Commentaires

  • Ne pas diminuer ou manquer de respect @ Nick- Lexcellente couverture de Gammon ‘ sur ce sujet.

Laisser un commentaire

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