Eu sei que isso é para inicializar algo:
Serial.begin(9600);
Mas eu quero saber o que realmente significa?
arduino-uno
serial
shajib0o
fonte
fonte
Respostas:
Serial.begin(9600)
na verdade, não imprime nada. Para isso, você gostaria de usarSerial.print("Hello world!")
para imprimir o texto "Olá, mundo!" para o console serial. Em vez disso, inicializa a conexão serial em 9600 bits por segundo.Ambos os lados da conexão serial (ou seja, o Arduino e o seu computador) precisam ser configurados para usar a mesma conexão serial rápida para obter qualquer tipo de dados inteligíveis. Se houver uma incompatibilidade entre o que os dois sistemas pensam que 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ê pode alterá-lo para outras velocidades:
Serial.begin(57600)
configuraria o Arduino para transmitir em 57600 bits por segundo. Você precisaria definir o software que estiver usando no computador (como o monitor serial do Arduino IDE) na mesma velocidade para ver os dados sendo enviados.fonte
Serial.begin(0)
informa ao Arduino que ele deve se comunicar com o 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 4000 bits por segundo. Isso não é padrão, mas é bom.Serial.begin(300)
), o Arduino envia os dados mais lentamente. Aumentando, digamos que o 57600 envie dados mais rapidamente. Tanto o sistema de envio como o sistema de recebimento precisam concordar com a velocidade a ser usada: o programa serial do seu computador, como a janela do Arduino Serial Monitor, permite definir a velocidade com a qual o computador receberá dados, mas você só pode selecionar dentre as opções comuns. velocidades: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600 e 11520 bit / s. Você não pode 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 está uma explicação: Apêndice C: "baud" vs. "bps"Uma imagem vale mais que 1000 palavras, por assim dizer, (1024 palavras se você trabalha com computadores), então vou postar algumas fotos ...
Configurei meu Uno para enviar "Fab" a 9600 baud e capturei os resultados em um analisador lógico.
As partes sombreadas em vermelho são o período "ocioso" entre os bytes.
Pelo gráfico acima, observe que a linha de dados Tx (transmissão) normalmente é alta (1) até cair baixa para indicar o início de um caractere (byte). Este é o bit inicial . Em seguida, os 8 bits de dados (indicados por pontos brancos) aparecem na taxa de transmissão (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 personagem, e assim por diante. A parte "stop" pode ser indefinidamente longa, porém deve ter pelo menos um bit de comprimento.
Mais detalhes para o primeiro caractere (a letra "F" ou 0x46 ou 0b01000110) podem ser vistos aqui:
A - sem dados (Tx é alto)
B - O "bit inicial". A linha é baixada para informar ao destinatário que um caractere (byte) está começando a ser enviado. O receptor aguarda um relógio e meio antes de amostrar a linha.
C - Primeiro caractere chega (a letra "F" ou 0x46 ou 0b01000110). Como não há bit de relógio, os dados recebidos são simplesmente amostrados na taxa de transmissão (transmissão). Ao contrário da 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 - O bit de parada. Isso é sempre alto, para garantir que possamos distinguir entre o final deste byte e o início do próximo. Como o bit inicial é um zero e o bit de parada é um, sempre há uma transição clara de um byte para o próximo.
E - O bit inicial para o próximo caractere.
Você pode ver na captura do analisador lógico que
T1 - T2
é 0,1041667 ms e, por acaso, é 1/9600: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
As comunicações seriais não têm relógio automático (diferentemente do SPI ou I2C e outros), portanto, o remetente e o destinatário precisam concordar com a taxa de clock.
A taxa de clock não é exata no Arduino, porque o hardware precisa dividir o relógio do sistema para obter um relógio serial, e a divisão nem sempre é exata. Quase sempre há um erro, o valor é dado na folha de dados (números citados para um relógio do sistema de 16 MHz, como no Uno):
Você pode variar o número de bits de dados, não precisa enviar 8 deles, na verdade, pode enviar de 5 a 9 bits.
Opcionalmente, pode haver um bit de paridade enviado após os bits de dados.
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 nono 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 apenas aumenta o tempo entre bytes. Nos "velhos tempos", isso era para que equipamentos eletromecânicos lentos pudessem processar o byte anterior (por exemplo, para imprimi-lo).
Possível corrupção
Se você começar 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 inicial e, em seguida, o receptor interpretará tudo após isso incorretamente.
A única maneira real de se recuperar disso é ter uma lacuna grande o suficiente, de tempos em tempos (por exemplo, 10 bits) para que isso não possa acontecer.
Lógica invertida
Os bits mostrados aqui (no nível lógico) não são invertidos. Ou seja, um bit é ALTO e um bit é BAIXO. Se você possui um equipamento RS232, provavelmente enviará algo como -12 V por 1 bit e +12 V por 0 bits. Isso é invertido porque um é menor que 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 -12 V necessários para acionar esse equipamento, gerando-o internamente com a ajuda de alguns capacitores fornecidos pelo usuário.
Regra geral da velocidade
Como, com um bit inicial, 8 bits de dados e um bit de parada, temos um total de 10 bits, como regra geral rápida, você pode calcular o número de bytes que pode transmitir em um segundo dividindo a taxa de bits por 10 .
Por exemplo. Em 9600 BPS, você pode enviar 960 bytes por segundo.
Código a reproduzir:
fonte
TLDR; Inicializa a porta de comunicação serial e define a taxa de transmissão. O dispositivo com o qual você está se comunicando (ou o Arduino IDE Serial Monitor) deve ser definido com 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
fonte