Wat is Serial.begin (9600)?

Ik weet dat dit is om iets te initialiseren:

Serial.begin(9600); 

Maar ik wil weet je wat het werkelijk betekent?

Opmerkingen

Antwoord

Serial.begin(9600) drukt eigenlijk niets af. Daarvoor” zou je Serial.print("Hello world!") willen gebruiken om de tekst af te drukken ” Hallo Wereld!” naar de seriële console. In plaats daarvan initialiseert het de seriële verbinding met 9600 bits per seconde.

Beide kanten van de seriële verbinding (dwz de Arduino en uw computer) moeten worden ingesteld om dezelfde snelheid seriële verbinding te gebruiken om elke soort van begrijpelijke gegevens. Als er een verschil is tussen wat de twee systemen denken dat de snelheid is, dan worden de gegevens vervormd.

9600 bits per seconde is de standaardinstelling voor de Arduino en is perfect geschikt voor de meeste gebruikers, maar je zou het kunnen veranderen naar andere snelheden: Serial.begin(57600) zou de Arduino instellen om te verzenden met 57600 bits per seconde. Je zou de software die je op je computer gebruikt moeten moeten instellen (zoals de Arduino IDEs seriële monitor) op dezelfde snelheid om de verzonden gegevens te zien.

Opmerkingen

  • Baud en BPS zijn twee verschillende dingen … kan ‘ de link die ik nu zocht niet vinden.
  • wat als ik ” Serie .begin (0); ” of ” Serial.begin (4000); ” . Ik bedoel, ik wil weten wat het verschil is tussen de cijfers?
  • Serial.begin wordt gebruikt om de communicatiesnelheid in bits per seconde in te stellen. Eén byte is gelijk aan 8 bits, maar seriële verbindingen sturen een start- en stopbit om het begin en einde van een bepaalde byte naar het ontvangende systeem te identificeren. Er zijn dus 10 bits nodig om één teken te verzenden. Door Serial.begin(0) te gebruiken, vertelt de Arduino dat hij met 0 bits per seconde met serieel moet communiceren. Zoals je zou verwachten, betekent dit dat de Arduino helemaal geen gegevens zal verzenden. Serial.begin(4000) zorgt ervoor dat de Arduino gegevens verzendt met 4000 bits per seconde. Dit is niet standaard, maar verder prima.
  • Kortom: het veranderen van het nummer verandert de snelheid. Door het getal kleiner te maken (bijv. Serial.begin(300)), verzendt de Arduino gegevens langzamer. Als u het verhoogt, bijvoorbeeld naar 57600, worden gegevens sneller verzonden. Zowel het zendende systeem als het ontvangende systeem moeten het eens zijn over de te gebruiken snelheid: met het seriële programma van je computer ‘, zoals het Arduino Serial Monitor-venster, kun je de snelheid instellen waarmee uw computer ontvangt gegevens, maar u kunt alleen kiezen uit de gebruikelijke snelheden: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600 en 11520 bit / sec. Je kunt ‘ geen andere snelheden invoeren, zoals 4000. 9600 is meestal goed.
  • Baud and BPS are two different things... can't find the link I was looking for now. – Hier ‘ s één verklaring: Bijlage C: ” baud ” vs. ” bps ”

Antwoord

Een foto zegt 1000 woorden, zeggen ze, (1024 woorden als je met computers werkt), dus ik zal wat fotos posten …

Ik heb mijn Uno ingesteld om “Fab” te verzenden op 9600 baud en de resultaten vastgelegd op een logic analyzer.

Seriële communicatie - 3 letters

De rood gearceerde delen zijn de” inactieve “periode tussen bytes.

Merk op uit de bovenstaande afbeelding dat de Tx (verzenden) datalijn is normaal gesproken hoog (1) totdat deze laag wordt om het begin van een teken (byte) aan te geven. Dit is de startbit . Vervolgens de 8 databits (aangegeven door witte stippen ) verschijnen op de baudrate (9600 samples per seconde). Daarna wordt de lijn weer hoog gebracht. Dit is het stopbit (het rode gedeelte). Dan zien we het startbit voor het volgende personage, enzovoort. Het “stop” -gedeelte kan onbeperkt lang zijn, maar het moet ten minste één bitlengte zijn.


Meer details voor het eerste teken (de letter “F” of 0x46 of 0b01000110) kunnen hier te zien:

Seriële communicatie - een enkele byte

  • A – geen gegevens (Tx is hoog)

  • B – De “startbit”. De lijn wordt laag gehouden om de ontvanger te vertellen dat er een teken (byte) begint te worden verzonden. De ontvanger wacht anderhalve kloktijd voordat hij de regel bemonstert.

  • C – Het eerste teken komt aan (de letter “F” of 0x46 of 0b01000110). Er is geen klokbit als zodanig, de inkomende gegevens worden eenvoudig bemonsterd op de baud (transmissie) snelheid. In tegenstelling tot SPI-communicatie komen de gegevens als eerste aan met de minst significante bit (voor het geval u geen 8 bits per byte verzendt). We zien dus 01100010 (in plaats van 01000110).

  • D – Het stopbit. Dit is altijd hoog, zodat we onderscheid kunnen maken tussen het einde van deze byte en het begin van de volgende. Aangezien het startbit een nul is en het stopbit een één, is er altijd een duidelijke overgang van de ene byte naar de volgende.

  • E – De startbit voor de volgende teken.


Je kunt aan de logische analyse zien dat T1 - T2 0,1041667 ms is, en toevallig dat is 1/9600:

1 / 9600 = 0.00010416666 seconds 

Dus de snelheid van 9600 geeft je het aantal bits per seconde en het omgekeerde is het tijdsinterval tussen bits .


Andere overwegingen

  • Seriële communicatie wordt niet automatisch geklokt (in tegenstelling tot SPI of I2C en andere), dus zowel zender als ontvanger moeten een kloksnelheid overeenkomen.

  • De kloksnelheid is niet exact op de Arduino, omdat de hardware de systeemklok moet verdelen om een seriële klok te krijgen, en de verdeling is niet altijd exact. Er is bijna altijd een fout, het aantal staat vermeld in de datasheet (cijfers vermeld voor een 16 MHz systeemklok, zoals op de Uno):

    Seriële baudrate-fout

  • U kunt het aantal databits variëren, u hoeft niet te verzenden 8 van hen, in feite kun je 5 tot 9 bits verzenden.

  • Er kan optioneel een pariteit bit worden verzonden na de databits.

    • Als u “oneven” pariteit specificeert, wordt de pariteitsbit zo ingesteld dat het totale aantal 1-bits oneven is.
    • Als u “even” pariteit specificeert , wordt de pariteitsbit zo ingesteld dat het totale aantal 1-bits even is.
    • Als u geen pariteit opgeeft, wordt de pariteitsbit weggelaten.

    Dit kan de ontvanger helpen detecteren of de gegevens correct zijn aangekomen.

  • De pariteitsbit wordt vóór de stopbit verzonden.

  • In het geval van 9 databits (zoals gebruikt in het SeaTalk-protocol) wordt de pariteitsbit opnieuw gebruikt als een 9de databitDaarom kunt u “niet zowel 9 databits als een pariteitsbit hebben.

  • U kunt ook twee stopbits hebben. Dit verlengt in feite alleen de tijd tussen bytes. In de” oude dagen “dit was zodat langzame elektromechanische apparatuur de vorige byte kon verwerken (bijv. om deze af te drukken).


Mogelijke corruptie

Als je begint te luisteren naar seriële data midden in een stream, het is heel goed mogelijk dat een 0-bit in het midden van de stream wordt geïnterpreteerd als een startbit, en dan zal de ontvanger alles daarna verkeerd interpreteren.

De enige echte manier om hiervan te herstellen, is door van tijd tot tijd een voldoende grote opening te hebben (bijv. 10 bits lang) zodat dit niet kan gebeuren.


Omgekeerde logica

De bits die hier worden weergegeven (logisch niveau) zijn niet omgekeerd. Dat wil zeggen, een 1-bit is HOOG en een 0-bit is LAAG. Als je RS232-apparatuur hebt die waarschijnlijk zoiets als -12 verzendt V voor een 1-bit en +12 V voor een 0-bit. Dit wordt omgekeerd omdat een minder d is spanningsgewijs een nul.

Als je dergelijke apparaten hebt, moet je spanningsconversie en logische inversie uitvoeren. Chips zoals de MAX232 zullen beide voor je doen. Ze kunnen ook de -12 V leveren die nodig is om dergelijke apparatuur aan te drijven door deze intern op te wekken met behulp van een paar door de gebruiker geleverde condensatoren.


Vuistregel voor snelheid

Aangezien we met één startbit, 8 databits en één stopbit in totaal 10 bits hebben, kun je als snelle vuistregel het aantal bytes berekenen je kunt in een seconde verzenden door de bitsnelheid te delen door 10.

Bijv. Bij 9600 BPS kun je 960 bytes per seconde verzenden.


Code om te reproduceren:

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

Antwoord

; TLDR; Het initialiseert de seriële communicatiepoort en stelt de baudrate in. Het apparaat waarmee u communiceert (of de Arduino IDE Serial Monitor) moet worden ingesteld op een overeenkomende baudrate. Zodra u de poort heeft geïnitialiseerd, kunt u beginnen met het verzenden of ontvangen van tekens. Arduino Serial Reference

Reacties

  • Om @ Nick niet te verminderen of te minachten Gammon ‘ s uitstekende dekking van dit onderwerp.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *