Domanda:
Decodifica / analizza i seguenti segnali UART
user405714
2020-05-25 21:15:41 UTC
view on stackexchange narkive permalink

Ho inviato un 2 e un 9 utilizzando UART.La velocità di trasmissione è 9600, non c'è parità e ha 8 bit di dati.

Come sappiamo, 9 è rappresentato come 1001 in binario.Tuttavia, questo è ciò che ottengo dal mio segnale UART:

enter image description here

Un 2 è rappresentato come 0010 ma questo è ciò che ottengo dal mio segnale UART: enter image description here So di dover prestare attenzione all'inizio, ma a parte questo, ho difficoltà a vedere la logica in questo segnale.

NOTE:

Il segnale funziona, ma ho solo bisogno di aiuto per analizzarlo.

Senza nemmeno guardare la forma d'onda, potresti confondere i numeri binari ei codici di caratteri ASCII, ad esempio il valore numerico 2 rispetto al carattere "2" che ha il codice ASCII 0x32.Inoltre, non utilizzare tag casuali, i tag sono per ciò che una domanda è * su * ora ciò che era coinvolto tangenzialmente ma non ha alcun ruolo nel tuo post.
Il tuo ambito sembra abbastanza moderno da avere la decodifica UART, anche se forse è anche abbastanza nuovo da dover pagare per il privilegio.
Cinque risposte:
Michael Karas
2020-05-25 21:37:18 UTC
view on stackexchange narkive permalink

Annotiamo il tuo primo colpo di mirino.Quando lo facciamo, prendete nota che il bit di ordine più basso del valore binario viene trasmesso per primo.La notazione convenzionale in questo campo consiste nell'ordinare i bit in un byte come questo:

[Bit 7] [Bit 6] [Bit 5] [Bit 4] [Bit 3] [Bit 2] [Bit 1] [Bit 0]

Quindi, quando annoto e poi valuto le posizioni dei bit vengono capovolte dalle posizioni mostrate nelle riprese dell'ottica annotate.

enter image description here

Lo schema di bit rappresentato lì è 0b00111001.

È lo stesso di 0x39.

0x39 è il codice ASCII per un carattere "9".

Facciamo lo stesso per il tuo secondo mirino.

enter image description here

Qui lo schema di bit è rappresentato come 0b00110010.

È uguale a 0x32.

0x32 è il codice ASCII per il carattere "2".

La spiegazione ASCII ha senso ma non capisco perché il bit 0 viene saltato.
Per il carattere 9 scrivi solo 0b00111001, ma se includiamo il bit 0 sarebbe 0b100111001
I bit di inizio sono sempre un bit di livello zero e hanno la stessa larghezza.Le linee rosse della seconda immagine indicano effettivamente il bit 1. Il bit 0 non viene ignorato.
I bit di stop sono sempre un bit di un livello e hanno la stessa larghezza.Il bit di stop non fa parte dei dati a 8 bit UART.
Stai dicendo che il bit 0 è il bit di inizio?
No. Il bit di inizio è chiaramente indicato nelle mie annotazioni e non è il bit 0.
Ma perché non lo includiamo nello schema di bit che hai annotato allora?
Soprattutto se il bit 0 è un "1" come nella prima immagine.
Ho scritto i modelli di bit solo per la porzione di dati a 8 bit della trasmissione UART.Non ho incluso i bit di inizio e fine.
Allora come si ottiene un "1" alla fine di 0b00111001 quando l'ultimo bit nell'immagine prima del bit di stop è uno "0"?Sto parlando della prima foto in questo caso.
Sto dicendo che gli schemi di bit che scrivi non assomigliano agli schemi di bit che vedo nelle immagini.
Li stai leggendo al contrario.LSB significa che il bit meno significativo viene prima.Devi invertirli da sinistra a destra.
Ho indicato i numeri di bit nelle immagini.In questa disciplina il bit 0 è il bit meno significativo.
Mattman944
2020-05-25 21:27:51 UTC
view on stackexchange narkive permalink

Probabilmente hai inviato un ASCII 9, non un binario 9. ASCII 9 è 0x39.I bit vengono inviati prima a LSbit.

0011 1001 invertito è 1001 1100

enter image description here

Andy aka
2020-05-25 21:26:34 UTC
view on stackexchange narkive permalink

Gli UART di solito inviano prima il bit meno significativo, quindi ottieni questo per 9 e più in basso per 2: -

enter image description here

Frame di caratteri UART: -

enter image description here

Oh miseria, un voto negativo: qualcuno si sente abbastanza uomo da ammetterlo?
Non ho downvote, ma la tua risposta è l'unica che non menziona ASCII.
Justme
2020-05-25 21:27:15 UTC
view on stackexchange narkive permalink

Prima di tutto, quelli non sono i numeri 9 e 2, ma i simboli di caratteri ASCII "9" e "2", che corrispondono a 0x39 e 0x32.

Anche i bit vengono inviati per primi LSB.Ecco perché vedi un bit iniziale 0 iniziale, quindi 10011100 per "9" e 01001100 per "2".

aMike
2020-05-25 21:24:17 UTC
view on stackexchange narkive permalink

Il 2 che hai inviato è in realtà il carattere due, non il valore decimale di 2. Il codice ASCII per 2 è 0x32 o 0b00110010, che corrisponde a uno dei tuoiimmagini.Inoltre, i bit vengono inviati da LSB a MSB, quindi i livelli che vedi sull'ambito saranno 0,1,0,0,1,1,0,0 da sinistra a destra.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...