PDA

View Full Version : Conersione da decimale in binario


d@vid
16-03-2006, 18:27
Ad un convertitore A/D a 9 bit, con una tensione di fodo scala Vfs=5V, è applicato un ingresso di 1.2 V. Mi si kiede di calcolare il codice di parola digitale in uscita.


Poikè un convertitore A/D è un dispositivo ke fornisce in uscita l'equivalente binario del rapporto tra la tensione applicata all'ingresso (purkè inferiore alla sua tensione di fondo scala) e la sua tensione di fondo scala, divido le 2 grandezze, ottenendo 0.24 .

Ma come si esprime 0.24 (ke kiaramente è espresso in decimale) in forma binaria? Come trovo cioè i 9 bit presenti all'uscita del convertitore?

giannola
16-03-2006, 18:51
Ad un convertitore A/D a 9 bit, con una tensione di fodo scala Vfs=5V, è applicato un ingresso di 1.2 V. Mi si kiede di calcolare il codice di parola digitale in uscita.


Poikè un convertitore A/D è un dispositivo ke fornisce in uscita l'equivalente binario del rapporto tra la tensione applicata all'ingresso (purkè inferiore alla sua tensione di fondo scala) e la sua tensione di fondo scala, divido le 2 grandezze, ottenendo 0.24 .

Ma come si esprime 0.24 (ke kiaramente è espresso in decimale) in forma binaria? Come trovo cioè i 9 bit presenti all'uscita del convertitore?

0.24 in binario si scrive 0.001111011

d@vid
16-03-2006, 20:14
ma qual è la regola x farlo? :D

pietro84
16-03-2006, 22:45
Ad un convertitore A/D a 9 bit, con una tensione di fodo scala Vfs=5V, è applicato un ingresso di 1.2 V. Mi si kiede di calcolare il codice di parola digitale in uscita.


Poikè un convertitore A/D è un dispositivo ke fornisce in uscita l'equivalente binario del rapporto tra la tensione applicata all'ingresso (purkè inferiore alla sua tensione di fondo scala) e la sua tensione di fondo scala, divido le 2 grandezze, ottenendo 0.24 .

Ma come si esprime 0.24 (ke kiaramente è espresso in decimale) in forma binaria? Come trovo cioè i 9 bit presenti all'uscita del convertitore?

io ricordo che in un A/D a 5V e 9bit la sensibilità è 5/(2^9)V
quindi ogni volta che l'ingresso aumenta di 5/(2^9)V il valore binario in uscita si incrementa di una unità.

pietro84
16-03-2006, 22:52
se non ho sbagliato i conti il valori in uscita dovrebbe essere questo:

001111011

d@vid
17-03-2006, 08:16
ok, ma non mi avete indicato un criterio per farlo

VDSLDG
17-03-2006, 08:46
ok, ma non mi avete indicato un criterio per farlo

Le risposte precedenti sono giuste: il codice e' circa 001111011
arrotondando il 122,9 per eccesso o all'intero piu' vicino.

per ottenerlo basta fare due conti : 9 bit => 512 livelli
da cio' deriva, supponendo che la funzione di conversione sia lineare, che a ogni livello corrispondano 9,77mvolt.
Dividendo 1,2volt per 9,77mvolt si ottiene circa 122,9 che convertito in binario e' appunto 001111011.

In alternativa puoi usare la proporzione 5/1,2 = 512/x da cui x = 122,9

giannola
17-03-2006, 09:05
ok, ma non mi avete indicato un criterio per farlo
il criterio è banalissimo.
Prendi un numero decimale e lo moltiplichi per 2, se il risultato resta decimale allora scrivi 0 e continui, se il numero supera la virgola scrivi 1 e riprendi a calcolare.
esempio:
0,24*2 = 0,48 (quindi 0), vai avanti 0,48*2 = 0,96 (sempre zero), 0,96*2 =1,92(a questo punto scrivi 1 e riprendi a calcolare come se nn ci fosse), 0,92*2 = 1,84.....

Prosegui fin quando nn hai l'approssimazione desiderata, nel tuo caso 9 cifre.
;)

pietro84
17-03-2006, 10:14
Le risposte precedenti sono giuste: il codice e' circa 001111011
arrotondando il 122,9 per eccesso o all'intero piu' vicino.

per ottenerlo basta fare due conti : 9 bit => 512 livelli
da cio' deriva, supponendo che la funzione di conversione sia lineare, che a ogni livello corrispondano 9,77mvolt.
Dividendo 1,2volt per 9,77mvolt si ottiene circa 122,9 che convertito in binario e' appunto 001111011.

In alternativa puoi usare la proporzione 5/1,2 = 512/x da cui x = 122,9

esatto è lo stesso ragionamento che fatto io

d@vid
17-03-2006, 17:07
il criterio è banalissimo.
Prendi un numero decimale e lo moltiplichi per 2, se il risultato resta decimale allora scrivi 0 e continui, se il numero supera la virgola scrivi 1 e riprendi a calcolare.
esempio:
0,24*2 = 0,48 (quindi 0), vai avanti 0,48*2 = 0,96 (sempre zero), 0,96*2 =1,92(a questo punto scrivi 1 e riprendi a calcolare come se nn ci fosse), 0,92*2 = 1,84.....

Prosegui fin quando nn hai l'approssimazione desiderata, nel tuo caso 9 cifre.
;)

era proprio quello ke intendevo
tnx :)


p.s.: il metodo è l'unico possibile vero? :p

d@vid
17-03-2006, 17:15
Le risposte precedenti sono giuste: il codice e' circa 001111011
arrotondando il 122,9 per eccesso o all'intero piu' vicino.

per ottenerlo basta fare due conti : 9 bit => 512 livelli
da cio' deriva, supponendo che la funzione di conversione sia lineare, che a ogni livello corrispondano 9,77mvolt.
Dividendo 1,2volt per 9,77mvolt si ottiene circa 122,9 che convertito in binario e' appunto 001111011.

In alternativa puoi usare la proporzione 5/1,2 = 512/x da cui x = 122,9
122,9 indica ke il numero decimale 0.24 corrisponde al 123° livello di quntizzazione sui 512 a disposizione? :confused:
quindi non è ke 122,9 è un numero decimale ke va convertito in binario secondo il metodo indicato da giannola? :mbe:

pietro84
17-03-2006, 17:34
122,9 indica ke il numero decimale 0.24 corrisponde al 123° livello di quntizzazione sui 512 a disposizione?


esatto. Questo è il ragionamento che va fatto

giannola
17-03-2006, 17:46
era proprio quello ke intendevo
tnx :)


p.s.: il metodo è l'unico possibile vero? :p
no ne conosco uno per la conversione dei floating point (IEEE 754, guarda su wikipedia).
Il vantaggio è che non devi più approssimare il numero fino all'ennesima cifra, ma puoi averne una rappresentazione completa.
Lo svantaggio è che è particolarmente laborioso.

d@vid
17-03-2006, 17:55
esatto. Questo è il ragionamento che va fatto
e da qui, ke modo usi poi x sapere a quale stringa di 9 bit corrisponde il 123° livello?

pietro84
17-03-2006, 18:51
e da qui, ke modo usi poi x sapere a quale stringa di 9 bit corrisponde il 123° livello?

basta convertire in base 2 il numero 123

d@vid
18-03-2006, 13:29
basta convertire in base 2 il numero 123
e come faccio?
se seguo il metodo precedente, avrei:
123*2=246 --> 0 oppure 1???
246*2=492 --> 0 oppure 1???
...

:confused:

giannola
18-03-2006, 13:40
e come faccio?
se seguo il metodo precedente, avrei:
123*2=246 --> 0 oppure 1???
246*2=492 --> 0 oppure 1???
...

:confused:
diviso due fin quando nn è più divisibile.
Il moltiplicare per due vale solo per i decimali, infatti un numero tipo 12.25 va diviso.
Il 12 lo dividi per 2 e il 25 lo moltiplichi, poi metti insieme il numero.

12 = 1100.01

pietro84
18-03-2006, 15:57
e come faccio?
se seguo il metodo precedente, avrei:
123*2=246 --> 0 oppure 1???
246*2=492 --> 0 oppure 1???
...

:confused:

è banale.
per esempio convertiamo il numero 12.
dividi sempre per due e prendi in considerazione il resto:

12:2=6 resto 0
6:2= 3 resto 0
3:2= 1 resto 1
1:2= 0 resto 1

quindi il numro 12 espresso in base 2 è : 1100

pietro84
18-03-2006, 16:42
no ne conosco uno per la conversione dei floating point (IEEE 754, guarda su wikipedia).


potresti postare direttamente il link? :)

giannola
18-03-2006, 16:48
potresti postare direttamente il link? :)

http://it.wikipedia.org/wiki/IEEE_754