2

P

Priya

Guest
Tenho de Cirrus Logic CS5550 ADC.A produção é de registar a forma

- (2 ^ 0) (2 ^ -1) (2 ^ -2) ..........(2 ^ -23)

Este é um registo de 24 bits.É indicada na ficha técnica que: Estes registos contêm o último valor da medição dos resultados AIN1 e AIN2.Os resultados serão dentro do intervalo de -1,0 <= AIN1, AIN2 <1,0.O valor é representado em 2
de notação complementar, com o binário ponto lugar à direita do MSB (MSB tem um coeficiente negativo. Estes valores são 22 bits de comprimento. A 2 bits menos significativos, (localizada na extremidade do lado direito) não têm significado, e sempre terá um valor de "0". eu uso esse ADC para pesagem escala pedido. Como posso utilizar a saída do ADC para calcular o peso? Até agora tratou ADC's que dão saída em código binário e Posso directamente mapa correspondente em peso. Eu não tenho idéia com as 2
da forma complementar.

Ajuda-me.

 
A fim de calcular um valor complementar 2
do que você precisa para inverter todos os bits e, em seguida, adicione uma.

Por exemplo, assinada por inteiro com 16 bits:

1 = 0001
-1 = FFFF
(1 invertendo terá FFFE
em seguida, adicionar 1 você conseguir FFFF)

Assim, são positivos número simplesmente representado com valor binário e negativos são reperesented com o valor binário que nulo um binário positivo com a mesma magnitude.

O MSB é o sinal (sinal bits) de número: se 0, o número é positivo, negativo, se 1.

2
do complemento é usado geralmente para representar assinado inteiros.

 
veja aqui

http://www.vb-helper.com/tutorial_twos_complement.html

 
Para converter este formato 2
do complemento para o que você está familiarizado com uma é bastante simples.

Você só precisa de inverter a pouco mais alto do que você lê
polPor exemplo
1 (0x001 torna-se 801).-1 (0xFFF) torna-se (7FF).Desta forma, o valor mais elevado corresponde a mais alta tensão reais, menor valor corresponde a mais baixa tensão real.

atenciosamente

 
Oi,
MSB
-------------------------------------------------- ----------------------
| - (2 ^ 0) | (2 ^ (-1)) | (2 ^ (-2)) | (2 ^ (-3)) | (2 ^ (-4)) | (2 ^ (-5 )) |
-------------------------------------------------- ----------------------

-------------------------------------------------- ---------------------------
| (2 ^ (-6)) | (2 ^ (-7)) | (2 ^ (--

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Legal" border="0" />

) | (2 ^ (-9)) | (2 ^ (-10)) | (2 ^ (-11)) |
-------------------------------------------------- ---------------------------

-------------------------------------------------- ---------------------------------
| (2 ^ (-12)) | (2 ^ (-13)) | (2 ^ (-14)) | (2 ^ (-15)) | (2 ^ (-16)) | (2 ^ ( -17)) |
-------------------------------------------------- ---------------------------------

-------------------------------------------------- ---------------------------------
| (2 ^ (-1

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Legal" border="0" />

) | (2 ^ (-19)) | (2 ^ (-20)) | (2 ^ (-21)) | (2 ^ (-22)) | (2 ^ (-23)) |
-------------------------------------------------- ---------------------------------
LSB

Isto significa que o valor está em fração.Não é?Vai existir, entre -1 a 1, como é assinado um registo.Se este registo tem valor 0x808080, então ela deve ser como (-1 1 * (2 ^ (--

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Legal" border="0" />

) 1 * (2 ^ (-16))) = (-1 0,00390625 0,0000152587890625) = -0,9960784912109375?Devo mapa deste valor em pesos?

Ajudem-me?

 
Oi,
Como está o processamento da saída do ADC?FPGA / DSP.
Parece que você está utilizando alguns transformador.Você não precisa mapear os valores.Você pode apenas usar algumas operações lógicas para convvert-la em 2s complemento.Alguns deles são sugeridas em respostas anteriores.Verifique qual é a referência de tensão para o ADC.Isso irá determinar se a entrada é de -1 a 1 ou qualquer outro intervalo.Se tiver mais problemas PM-me.
BR

 
Estou usando Atmels 89C51 microcontroller.Porque é necessário converter em 2
de forma complementar.Já o resultado está em complemento a 2
do formulário.Antes eu tinha tratado ADUC816.O 16-bit resultado estará disponível no registo de dados em código binário.Suponha que o resultado no registo é
0010 0101 1111 1001 b = 0x25F9.Gostaria de mapa este valor correspondente em peso por 0x25F9 / x = y e z = y * 0.1.em que 0.1 é a resolução e z é o meu peso resultante.Aqui com 2
do complemento de saída como devo proceder?

 
Oi,
Eu tinha um olhar para a ficha.U'r é problema
como mapear a produção de peso?
Parece que você tem que ter em conta o ganho e offset.Se você já tiver feito isso fazer ignorar isso.Pode demorar um tempo até que alguém pode realmente ter o seu problema e ajudá-lo.
BR

 
Priya,

o seu valor, 0010 0101 1111 1001 b = 0x25F9, é um valor positivo, por isso você precisa 0x25F9 em escala eng unidades (ou seja, 25F9 (hex) = 9721 (dezembro) e y = 9721 / x. Sabe referido valor é positivo, porque MSB = 0.

Caso contrário, se número seria 1101101000000111 = DA07 você reconhecer esse valor como negativo.Assim, teste MSB, se o 1, o valor é negativo.Neste caso, subtrair uma das DA07.(isto é, 1101101000000111-1 = 1101101000000110 = DA06).Então invertido resultado.ou seja, inv (DA06) = 25F9 = 9721 * -1 = -9721.Por último a fazer escala em eng unidades.

 
É parecido com este, o 2 ^ -23 corresponde ao valor mínimo de AIN1 o que provoca uma mudança na LSB?

 
Eu downloaded datasheet deste bebê e tenho uma leitura rápida.É um complexo embora um caracterizado um.Se você ler página 22 do Cirrus Logic doc (DS630PP1) você teria uma resposta à última pergunta.

Eu suponho que você queira usar o formato assinado (-1 a 1), para 2 ^ -23 e 2 ^ -22 estão localizadas à direita
do lado da palavra (LSB) e tenham sido declarados sempre "zero" de modo não irá contribuir para resolução.A verdade será LSB (segundo eles) 2 ^ -21 assim resolução será de 22 bits, embora a palavra inteira é de 24 bits.

Outra coisa invulgar formato alegam.Eles disseram que o número é a representação binária de -1 a 1 (assinado formato), de modo que o ponto binário é colocado à direita do MSB (2 ^ 0).No entanto eu acho que você pode considerá-lo um 2 ^ 23 números binários e racionalizar com ele (2 ^ 23) -1 / 2 ^ 23 para números positivos (por isso nunca igual a 1) e 2 ^ 23 / 2 ^ 23 *- 1 pela negativa.

 
Como os últimos 2 bits são sempre 0, devo assumir a 24 bits (ou seja, considerando últimos 2 bits como zero) e mapa em peso ou devo dar os primeiros 22 bits sozinho (rejeitando os últimos 2 bits e 22 bits tratar como valor) eo mapa em peso.

 
Eu fi-lo assim.É correto?2 ^ 24 = 16777216.Eu quero o meu peso em kg, com resolução de 0.1.Assim, divididos 16777216/1500 = 11184 (2BB0).2BB0 quando representada em forma fraccionada dá 0,001333237.
Eu calcular quantos 0,001333237 estão no resultado obtido.A saída digital 0xFFFFFF mapas a 0 peso, 0x000000 de 75 kg para 150 kg e 0x7FFFFF mapas.Esse valor dividir por 10 dá o peso.

int DigitalOutput longo;
int RaiseToPower;
int ShiftBit;
float CalculatedValue = 0.0f;
float sinal = (DigitalOutput & 0x800000)?-1.0f: 1.0f;
float weightvalue;
int WeightInt;

para (RaiseToPower = 23; RaiseToPower> 0; RaiseToPower -)
(
if (DigitalOutput & ((long) 1 <<ShiftBit))
(
CalculatedValue = 1.0f / (float) ((long)
1 <<RaiseToPower);
)
ShiftBit ;
)
weightvalue = sinal * CalculatedValue;
WeightInt = weightvalue/0.001333237;
WeightInt = WeightInt 750;
weightvalue = (float) WeightInt/10;

Atenciosamente,
Priya.

 

Welcome to EDABoard.com

Sponsor

Back
Top