Informazioni su LSB e MSB

3

In riferimento a un documento di controllo dell'interfaccia, ho riscontrato difficoltà nel comprendere questo concetto. C'è un parametro con LSB di 0.0625 e MSB di 2048 che dovrebbe essere trasmesso da un apparecchio all'altro. L'intervallo è compreso tra 0 e 2400.

Questo dovrebbe essere trasmesso usando solo una parola. Questo è 2 byte.

Ora il problema è: ho capito che questo parametro viene misurato da un sistema di misurazione con una risoluzione di 0,0625. Dato che è un numero decimale, come possiamo trasmettere questo parametro di intervallo continuo usando 2 byte che sono puramente interi (l'intervallo senza segno per 2 byte è da 0 a 65535)?

Questo parametro è la velocità, che viene misurata da un sistema avionico INS-GPS e viene trasmessa alla CPU usando solo 2 byte.

Come dovrei capire questo?

Come possiamo rappresentare un parametro decimale continuo come parametro intero discreto?

    
posta Ãjay 26.01.2018 - 18:35
fonte

2 risposte

11

TL; DR:

La seguente funzione farà la conversione dal valore fisico al codice a 16 bit:

short valueToCode(double value) {
    return round(16.0 * value);
}

Spiegazione lunga

Un valore a 16 bit senza segno ha 16 bit (ovviamente), quello più a sinistra chiamato MSB (bit più significativo) e il più a destra è l'LSB (bit meno significativo).

Leggere come numeri interi normali, 1 bit nei conti posizione LSB per un valore 1 e 1 bit in posizione MSB fornisce 32768.

Nel tuo caso, il numero a 16 bit è pensato per rappresentare i numeri con una parte frazionaria, un LSB in piedi per 0,0625 (= 1/16) e l'MSB per 2048 (= 32768/16). Questo è coerente, il che significa che ottieni sempre il numero frazionario dividendo il codice a 16 bit di 16. Oppure, se vuoi trovare il codice che più corrisponde a qualche valore frazionario desiderato, moltiplicalo per 16 e prendi il numero intero più vicino.

Alcuni esempi (fornendo il valore che si desidera ottenere, il codice che fornisce più da vicino quel valore e il valore effettivo):

Desired       Code (dec + bin)          Resulting Value
    0.0625      1 = 0000000000000001       0.0625  (the LSB case)
    0.1         2 = 0000000000000010       0.125
    1.0        16 = 0000000000010000       1.0
   20.5       328 = 0000000101001000      20.5
 2048.0     32768 = 1000000000000000    2048.0    (the MSB case)
    
risposta data 27.01.2018 - 16:42
fonte
9

Questa è una documentazione scritta male. Suppongono che tu sappia che stanno usando un formato numerico a Punto Fisso.

LSB 0.0625 and MSB 2048

Questo sarebbe stato più facilmente compreso se fosse stato scritto come potere di 2.

0.0625 == 2-4

2048 == 211

Quindi, si finisce con un numero di punto fisso nel seguente formato.

MSB —> LSB

| 211 | 210 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | . | 2-1 | 2-2 | 2-3 | 2-4 |

O

000000000000.0000

Per informazioni dettagliate, consulta questo Introduzione al formato numero punti fisso

    
risposta data 27.01.2018 - 00:03
fonte

Leggi altre domande sui tag