O que é Serial.begin (9600)?

Eu sei que isso é para inicializar algo:

Serial.begin(9600); 

Mas eu quero sabe o que realmente significa?

Comentários

Resposta

Serial.begin(9600) não imprime realmente nada. Para isso, você” d deseja usar Serial.print("Hello world!") para imprimir o texto ” Olá Mundo!” para o console serial. Em vez disso, ele inicializa a conexão serial a 9600 bits por segundo.

Ambos os lados da conexão serial (ou seja, o Arduino e seu computador) precisam ser configurados para usar a mesma velocidade de conexão serial para obter qualquer tipo de dados inteligíveis. Se houver uma incompatibilidade entre o que os dois sistemas pensam ser a velocidade, os dados serão distorcidos.

9600 bits por segundo é o padrão para o Arduino e é perfeitamente adequado para a maioria dos usuários, mas você poderia alterá-lo para outras velocidades: Serial.begin(57600) definiria o Arduino para transmitir a 57600 bits por segundo. Você “precisaria definir qualquer software que” estiver usando em seu computador (como o Monitor serial do IDE do Arduino) com a mesma velocidade para ver os dados sendo enviados.

Comentários

  • Baud e BPS são duas coisas diferentes … não consigo ‘ não encontrar o link que estava procurando agora.
  • e se eu colocar ” Serial .begin (0); ” ou ” Serial.begin (4000); ” . Quer dizer, eu quero saber qual é a diferença entre os números?
  • Serial.begin é usado para definir a velocidade de comunicação, em bits por segundo. Um byte é igual a 8 bits, mas as conexões seriais enviam um bit de início e fim para identificar o início e o fim de um byte específico para o sistema receptor. Portanto, são necessários 10 bits para enviar um caractere. Usar Serial.begin(0) informa ao Arduino que ele deve se comunicar com serial a 0 bits por segundo. Como você pode esperar, isso significa que o Arduino nunca enviará nenhum dado. Serial.begin(4000) fará com que o Arduino envie dados a 4.000 bits por segundo. Isso não é padrão, mas não tem problema.
  • Resumindo: mudar o número muda a velocidade. Tornar o número menor (por exemplo, Serial.begin(300)) faz com que o Arduino envie dados mais lentamente. Aumentá-lo, digamos, para 57600 enviará dados mais rápido. Tanto o sistema de envio quanto o sistema de recebimento precisam concordar sobre a velocidade a ser usada: o programa serial do ‘ do seu computador, como a janela do Arduino Serial Monitor, permitirá que você defina a velocidade em que seu computador receberá dados, mas você só pode selecionar as velocidades comuns: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600 e 11520 bits / seg. Você pode ‘ t inserir outras velocidades, como 4000. 9600 é geralmente bom.
  • Baud and BPS are two different things... can't find the link I was looking for now. – Aqui ‘ s uma explicação: Apêndice C: ” baud ” vs. ” bps ”

Resposta

Uma imagem vale 1000 palavras, então eles dizem, (1024 palavras se você trabalhar com computadores), então postarei algumas fotos …

Eu configurei meu Uno para enviar “Fab” a 9600 baud e capturei os resultados em um analisador lógico.

Comunicações seriais - 3 letras

As partes sombreadas em vermelho são o período” ocioso “entre os bytes.

A partir do gráfico acima, observe que o A linha de dados Tx (transmitir) é normalmente alta (1) até cair para indicar o início de um caractere (byte). Este é o bit de início . Em seguida, os 8 bits de dados (indicados por pontos brancos ) aparecem na taxa de baud (9600 amostras por segundo). Depois disso, a linha é elevada novamente. Este é o bit de parada (a parte vermelha). Então, vemos o bit inicial para o próximo caractere e assim por diante. A parte “stop” pode ser indefinidamente longa, mas deve ter pelo menos um bit de comprimento.


Mais detalhes para o primeiro caractere (a letra “F” ou 0x46 ou 0b01000110) podem ser visto aqui:

Comunicações em série - um único byte

  • A – sem dados (Tx é alto)

  • B – O “bit inicial”. A linha é baixada para informar ao receptor que um caractere (byte) está começando a ser enviado. O receptor espera um tempo e meio antes de amostrar a linha.

  • C – O primeiro caractere chega (a letra “F” ou 0x46 ou 0b01000110). Não há bit de clock como tal, os dados de entrada são simplesmente amostrados na taxa de baud (transmissão). Em contraste com a comunicação SPI, os dados chegam primeiro com o bit menos significativo (caso você não esteja enviando 8 bits por byte). Assim, vemos 01100010 (em vez de 01000110).

  • D – A parte final. Isso é sempre alto, para garantir que possamos distinguir entre o final deste byte e o início do próximo. Uma vez que o bit de início é zero e o bit de parada é um, sempre há uma transição clara de um byte para o próximo.

  • E – O bit de início para o próximo caractere.


Você pode ver a partir da captura do analisador lógico que T1 - T2 é 0,1041667 ms, e conforme isso acontece ou seja, 1/9600:

1 / 9600 = 0.00010416666 seconds 

Assim, a taxa de 9600 fornece o número de bits por segundo e o inverso é o intervalo de tempo entre os bits .


Outras considerações

  • A comunicação serial não é auto-sincronizada (ao contrário de SPI ou I2C e outros), portanto, o remetente e o receptor devem concordar com uma taxa de clock.

  • A taxa de clock não é exata no Arduino, porque o hardware tem que dividir o clock do sistema para obter um clock serial, e a divisão nem sempre é exata. Quase sempre há um erro, o valor é fornecido na folha de dados (valores citados para um relógio de sistema de 16 MHz, como no Uno):

    Erro de taxa de transmissão serial

  • Você pode variar o número de bits de dados, você não precisa enviar 8 deles, na verdade você pode enviar 5 a 9 bits.

  • Pode haver opcionalmente um bit de paridade enviado após os bits de dados.

    • Se você especificar a paridade “ímpar”, o bit de paridade é definido de forma que o número total de bits de 1 seja ímpar.
    • Se você especificar a paridade “par” , o bit de paridade é definido de forma que o número total de bits de 1 seja par.
    • Se você não especificar nenhuma paridade, o bit de paridade será omitido.

    Isso pode ajudar o receptor a detectar se os dados chegaram corretamente ou não.

  • O bit de paridade é enviado antes do bit de parada.

  • No caso de 9 bits de dados (conforme usado no protocolo SeaTalk), o bit de paridade é redefinido como um 9º bit de dados . Portanto, você não pode ter 9 bits de dados e um bit de paridade.

  • Você também pode ter dois bits de parada. Isso basicamente aumenta o tempo entre os bytes. dias “isso era para que o equipamento eletromecânico lento pudesse processar o byte anterior (por exemplo, para imprimi-lo).


Possível corrupção

Se você começa a ouvir dados seriais no meio de um fluxo, é bem possível que um bit 0 no meio do fluxo seja interpretado como um bit de início, e então o receptor interpretará tudo depois disso incorretamente.

A única maneira real de se recuperar disso é ter uma lacuna grande o suficiente, de vez em quando (por exemplo, 10 bits de comprimento) para que isso não aconteça.


Lógica invertida

Os bits mostrados aqui (nível lógico) não estão invertidos. Ou seja, um bit de 1 é HIGH e um bit de 0 é LOW. Se você tiver um equipamento RS232, provavelmente enviará algo como -12 V para um bit de 1 e +12 V para um bit 0. Isso é invertido porque um é menor um a zero, em termos de tensão.

Se você tiver esses dispositivos, precisará fazer a conversão de tensão e a inversão lógica. Chips como o MAX232 farão as duas coisas por você. Eles também podem fornecer os -12 V necessários para acionar esses equipamentos, gerando-os internamente com a ajuda de alguns capacitores fornecidos pelo usuário.


Regra geral da velocidade

Como, com um bit de início, 8 bits de dados e um bit de parada, temos um total de 10 bits, como uma regra rápida, você pode calcular o número de bytes você pode transmitir em um segundo dividindo a taxa de bits por 10.

Ex. A 9600 BPS, você pode enviar 960 bytes por segundo.


Código para reproduzir:

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

Resposta

; TLDR; Ele inicializa a porta de comunicação serial e define a taxa de transmissão. O dispositivo com o qual você está se comunicando (ou Arduino IDE Serial Monitor) deve ser configurado para uma taxa de transmissão correspondente. Depois de inicializar a porta, você pode começar a enviar ou receber caracteres. Referência serial do Arduino

Comentários

  • Não diminuir ou desrespeitar @ Nick- Gammon ‘ s excelente cobertura deste tópico.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *