Supposons que je transmets des données par FM où 0 est 2Hz et 1 est 4Hz. L'émetteur transmet 2 Hz lorsqu'il n'y a pas d'entrée. Si j'alimentais le binaire reçu sur un port UART d'un microcontrôleur, comment le microcontrôleur ferait-il la différence entre aucune donnée et 0?
Cela devient pertinent lors de la transmission de caractères ASCII par exemple. Supposons la chaîne suivante:
01000110 01101111 01101111 01100010 01100001 01110010
Parce que j'ai ajouté des espaces, nous pourrions traduire cela en:
Foobar
Mais pour une machine, la chaîne ressemblerait à ceci:
010001100110111101101111011000100110000101110010
Comment créeriez-vous ces "espaces" pour ne pas gâcher les caractères ASCII lorsque vous recevez du binaire?
digital-logic
data
binary
Allenph
la source
la source
Réponses:
Si vous alimentez quelque chose vers un port UART d'un microprocesseur, vous devez suivre le protocole de communication UART si vous voulez que le microprocesseur comprenne ce que vous l'alimentez. Vous devez incorporer chaque caractère ASCI dans un package UART qui contient un bit de début, un bit d'arrêt et éventuellement un bit de parité, beaucoup plus d'informations sont disponibles sur la page Wikipedia UART .
Lorsque vous n'envoyez pas le bus est inactif et il est maintenu dans un état logiquement élevé. Lorsque vous démarrez la transmission d'un paquet, le premier bit est toujours logiquement bas. Ceci est le bit de départ. Suit ensuite huit bits de données puis un bit d'arrêt qui est logiquement élevé. Le microprocesseur sait quand le bit suivant arrive car il connaît la vitesse du bus que vous avez configurée. Par conséquent, il est possible de transmettre par exemple deux zéros côte à côte. Le microprocesseur et l'unité transmettant au microprocesseur doivent être configurés avec la même vitesse de transmission, la même parité et le même nombre de bits d'arrêt.
la source
Il existe de nombreuses techniques pour cela. Vous voudrez peut-être regarder le codage Manchester ou les codes NRZ. Ou le codage 8b / 10b , qui mappe tous les 8 bits de données à une séquence de 10 bits qui permet la récupération d'horloge, la correction d'erreurs et les symboles spéciaux "virgule" qui peuvent être utilisés pour détecter le début et la fin d'une transmission.
la source
Tous les caractères ASCII ont une largeur de 8 bits, vous pouvez le voir dans un tableau ASCII. Les valeurs HEX des caractères ASCII ne dépassent pas FF (1111 1111)
UART ne peut pas recevoir plus d'un octet de données (8 bits) à la fois, également à côté de ces données 8 bits, il y a des bits STOP et START, PARITY et quelques autres, que vous pouvez voir sur l'image ci-dessous et qui forment ensemble le paquet de communication UART.
Ainsi, lorsque vous envoyez des caractères ASCII à UART, vous les envoyez un par un, et c'est ainsi que la chaîne est créée. Vous savez déjà que la chaîne n'est qu'un tableau de caractères.
la source
Le protocole UART, comme Mattias l'a expliqué, est un protocole asynchrone basé sur le temps. Ce qui définit les limites entre les bits est le temps pris depuis le début du bit de départ. Ainsi, le microcontrôleur "échantillonnera" le bit
(N+half)/baudrate
secondes après le début du bit de démarrage. Le demi-bit est juste pour échantillonner au milieu des bits afin qu'il puisse y avoir une différence d'un demi-bit dans le timing entre le récepteur et l'émetteur (rappelez-vous que les différences sont cumulatives et que le pire des cas se produit dans le dernier bit de chaque trame, qui est généralement, mais pas toujours, 8 bits de large, selon la configuration). La clé pour le faire fonctionner est d'avoir le récepteur et l'émetteur-récepteur avec des vitesses de transmission aussi proches que possible.Ainsi, le microcontrôleur compte le temps entre chaque bit pour savoir où chaque bit se trouve dans une trame. Le personnage suivant ira dans le cadre suivant. Lorsque chaque trame se termine, le microcontrôleur commence à écouter automatiquement la trame suivante, donc lorsque le bit de démarrage suivant arrive, il sait déjà qu'il doit démarrer une nouvelle trame. Voilà comment les personnages sont séparés.
De plus, j'ajouterai que vous n'avez pas réellement besoin de deux fréquences pour transmettre à un microcontrôleur récepteur UART. Vous pouvez utiliser une seule fréquence comme OOK au lieu de deux fréquences comme FSK . Il a une efficacité spectrale plus élevée et les circuits sont beaucoup plus simples, car vous n'avez besoin que d'un commutateur d'ondes porteuses comme émetteur et d'un détecteur à fréquence unique comme récepteur, un peu comme le code morse. N'oubliez pas d'utiliser généralement des porteuses dont les fréquences sont beaucoup plus élevées que la vitesse de transmission, sinon les circuits plus simples ne fonctionneront pas correctement.
la source