Evitare la confusione tra nessun input e uno zero in binario?


10

Supponiamo che stia trasmettendo dati tramite FM dove 0 è 2Hz e 1 è 4Hz. Il trasmettitore sta trasmettendo 2Hz quando non c'è ingresso. Se avessi inviato il binario ricevuto a una porta UART di un microcontrollore, come farebbe il microcontrollore a distinguere tra nessun dato e 0?

Questo diventa rilevante quando si trasmettono, ad esempio, caratteri ASCII. Supponiamo che la seguente stringa:

01000110 01101111 01101111 01100010 01100001 01110010

Poiché ho aggiunto spazi, potremmo tradurre questo in:

foobar

Ma a una macchina la stringa sarebbe simile a questa:

010001100110111101101111011000100110000101110010

Come creeresti quegli "spazi" in modo da non incasinare i caratteri ASCII quando ricevi binari?


5
Ecco come UART lo risolve, link . Arresta e avvia i bit, poiché zou lo inserisce in una porta UART zou dovrebbe anche trasmetterli.
Bence Kaulics,

Temo di non capire bene il tuo diagramma. Sembra che "Start Bit" sia semplicemente zero, il che conferma il mio problema. Ad esempio, come potrebbe conoscere la differenza tra 01111000 e 00111100 se la stringa fosse 000 01111000 000?
Allenph,

2
@Allenph, quando non si sta inviando il bus è inattivo ed è mantenuto in uno stato logicamente elevato. Quando si avvia la trasmissione di un pacchetto, il primo bit è sempre logicamente basso. Questo è il bit iniziale. Segue quindi otto bit di dati e quindi un bit di stop logicamente elevato. Il microprocessore sa quando arriva il bit successivo poiché conosce la velocità del bus che è stata configurata. Sia il microprocessore che l'unità che trasmettono al microprocessore devono essere configurati con la stessa velocità di trasmissione.
Mattias Johansson,

Risposte:


16

Se si alimenta qualcosa a una porta UART di un microprocessore, è necessario seguire il protocollo di comunicazione UART se si desidera che il microprocessore comprenda ciò che lo sta alimentando. Devi incorporare ogni carattere ASCI in un pacchetto UART che contiene un bit di inizio, un bit di stop e possibilmente un bit di parità, molte più informazioni sono disponibili sulla pagina di UART Wikipedia .

Quando non si invia il bus è inattivo e viene mantenuto in uno stato logicamente elevato. Quando si avvia la trasmissione di un pacchetto, il primo bit è sempre logicamente basso. Questo è il bit iniziale. Segue quindi otto bit di dati e quindi un bit di stop logicamente elevato. Il microprocessore sa quando arriva il bit successivo poiché conosce la velocità del bus che è stata configurata. Pertanto, è possibile trasmettere ad esempio due zero uno accanto all'altro. Sia il microprocessore che l'unità che trasmettono al microprocessore devono essere configurati con la stessa velocità di trasmissione, parità e numero di bit di arresto.


2
Un punto chiave è che il numero configurato di bit di stop è un minimo, non un massimo. Lo stato inattivo della linea seriale asincrona è un bit di arresto esteso. Quindi, se la radio deve essere inattiva a 0, la risposta semplice è invertire l'uscita UART prima di far funzionare la radio in modo che sia inattiva a 0, e 1 è un inizio. Quindi invertire i dati ricevuti prima di gestirli con un UART.
RBerteig,

6

Ci sono molte tecniche per questo. Potresti voler guardare i codici Manchester o NRZ. O codifica 8b / 10b , che mappa ogni 8 bit di dati su una sequenza di 10 bit che consente il recupero dell'orologio, la correzione degli errori e speciali simboli "virgola" che possono essere utilizzati per rilevare l'inizio e la fine di una trasmissione.


5

Tutti i caratteri ASCII hanno una larghezza di 8 bit, puoi vederlo in una tabella ASCII. I valori esadecimali dei caratteri ASCII non vanno oltre FF (1111 1111)

UART non può ricevere più di un byte di dati (8 bit) alla volta, oltre a quei dati a 8 bit ci sono bit STOP e START, PARITÀ e pochi altri, che puoi vedere nell'immagine mostrata sotto e che insieme formano il pacchetto di comunicazione UART.

inserisci qui la descrizione dell'immagine

Quindi, quando invii caratteri ASCII a UART, li invii uno ad uno, ed è così che viene creata la stringa. Sai già che la stringa è solo una matrice di caratteri.


4
ascii è 7 bit, non 8, tuttavia è comune metterlo in un morso di 8 bit per rendere banale l'allineamento. Permette anche altri set di caratteri e utf8.
hildred,

0

Il protocollo UART, come spiegato da Mattias, è un protocollo asincrono basato sul tempo. Ciò che definisce i confini tra i bit è il tempo impiegato dall'inizio del bit iniziale. Quindi il microcontrollore "campionerà" i bit (N+half)/baudratepochi secondi dopo l'inizio del bit di avvio. Il mezzo bit è solo per campionare nel mezzo dei bit in modo che possa avere una differenza di mezzo bit nei tempi tra il ricevitore e il trasmettitore (ricorda che le differenze sono cumulative e il caso peggiore si verifica nell'ultimo bit di ciascun frame, che di solito è, ma non sempre, a 8 bit, a seconda della configurazione). La chiave per farlo funzionare è avere il ricevitore e il ricetrasmettitore con baudrate il più vicino possibile.

Pertanto, il microcontrollore conta il tempo tra ciascun bit per sapere dove si trova ciascun bit all'interno di un frame. Il personaggio successivo passerà al frame successivo. Quando ogni fotogramma termina, il microcontrollore inizia ad ascoltare automaticamente il fotogramma successivo, quindi quando arriva il bit di avvio successivo sa già che dovrebbe iniziare un nuovo fotogramma. Ecco come i personaggi sono separati.

Inoltre, aggiungerò che in realtà non sono necessarie due frequenze per trasmettere a un microcontrollore che riceve UART. È possibile utilizzare una singola frequenza come OOK anziché due frequenze come FSK . Ha una maggiore efficienza spettrale e i circuiti sono molto più semplici, dal momento che è necessario solo un commutatore di onde portanti come trasmettitore e un singolo rilevatore di frequenza come ricevitore, praticamente come un codice Morse. Ricorda di utilizzare generalmente vettori con frequenze molto più alte del baudrate, altrimenti i circuiti più semplici non funzioneranno correttamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.