2

P

Priya

Guest
Ik heb CS5550 ADC van Cirrus Logic.De output register is van de vorm

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

Dit is een 24-bits register.Het wordt gegeven in de notitie dat: Dit register bevat de laatste waarde van de gemeten resultaten van AIN1 en AIN2.De resultaten worden binnen het bereik van -1,0 <= AIN1, AIN2 <1.0.De waarde wordt vertegenwoordigd in 2's complement notatie, met het binaire punt plaats aan het recht van de MSB (MSB een negatieve weging. Deze waarden zijn 22 bits lang zijn. De 2 minst significante bits, (uiterst rechts-side) hebben geen betekenis, en zal altijd een waarde van "0". Ik gebruik deze ADC voor het wegen van schaal toepassing. Hoe kan ik gebruik maken van de output van ADC voor de berekening van het gewicht? Wat ik behandeld met ADC's die output in binaire codering en Ik kan direct in kaart bijbehorende gewicht. Ik heb geen idee met de 2
is een aanvulling op vormen.

Help me.

 
Om een 2's complement waarde moet je aan invertsuiker alle bits en voeg vervolgens een.

Bijvoorbeeld voor ondertekend integer met 16 bits:

1 = 0001
-1 = FFFF
( 1 Inverteren heb je FFFE
Voeg vervolgens 1 die u
zult bereiken FFFF)

Dus, positieven aantal gewoon vertegenwoordigd met binaire waarde en negatieven zijn reperesented met de binaire waarde die nietig een positieve binaire met dezelfde grootte.

De MSB is het teken (teken-bits) van het aantal: als 0, het nummer is positief, negatief als 1.

2's complement wordt gebruikt meestal te vertegenwoordigen ondertekend integers.

 
Kijk hier

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

 
Omzetten van deze 2
is een aanvulling op het formaat dat u bekend bent met is heel simpel.

U hoeft alleen maar aan invertsuiker de hoogste bits van wat je leest
inchBijvoorbeeld 1 (0x001 wordt 801).-1 (0xFFF) wordt (7FF).Op deze manier worden de hoogste waarde komt overeen met hoogste werkelijke spanning,
de laagste waarde komt overeen met de laagste werkelijke spanning.

groeten

 
Hoi,
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="Koel" 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="Koel" border="0" />

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

Dit betekent dat de waarde is in de fractie.Is het niet?Het zal bestaan tussen -1 tot 1 als het gaat om een gesloten register.Als dit register waarde heeft 0x808080 dan moet het worden, zoals (-1 1 * (2 ^ (--

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

) 1 * (2 ^ (-16))) = (-1 0,00390625 0.0000152587890625) = -0.9960784912109375?Moet ik deze waarde in kaart gewichten?

Help me?

 
Hoi,
Hoe bent u de verwerking van de output van de ADC?FPGA / DSP.
Het lijkt alsof je met behulp van enkele processor.U hoeft geen kaart van de waarden.U mag alleen gebruik van een aantal logische operaties convvert in 2s complement.Sommigen van hen zijn voorgesteld in de vorige antwoorden.Check wat is de referentiespanning van de ADC.Dit zal bepalen of de inbreng is van -1 tot 1 of enkele andere reeks.Als u nog meer problemen PM me.
BR

 
Ik gebruik Atmels 89C51 microcontroller.Waarom is het nodig om te zetten in 2
is een aanvulling op vormen.Reeds het resultaat is in de 2
is een aanvulling op vormen.Voordat ik had behandeld ADUC816.De 16-bits resultaat beschikbaar zou zijn in de gegevens registreren in binaire codering.Stel dat het resultaat in het register wordt
0010 0101 1111 1001 b = 0x25F9.Ik kaart deze waarde in overeenkomstige gewicht per 0x25F9 / x = y en z = y * 0.1.waar 0,1 is de resolutie en z is mijn resulterende gewicht.Hier met 2's complement output hoe moet ik doorgaan?

 
Hoi,
Ik had een blik op de data sheet.Is u'r probleem
how to map the output naar gewicht?
Lijkt alsof je moet rekening houden met de gain en offset.Als je al gedaan kan negeren.Het kan een tijdje duren voordat iemand kan echt uw probleem en u helpen.
BR

 
Priya,

uw waarde, 0010 0101 1111 1001 b = 0x25F9, is een positieve waarde, dus je moet op schaal 0x25F9 in eng-eenheden (dwz 25F9 (hex) = 9721 (DEC) en y = 9721 / x. Je weet deze waarde is positief omdat MSB = 0.

Anders, als nummer zou 1101101000000111 = DA07 herken je deze waarde als negatief.Daarom, test MSB, als 1 van de waarde negatief is.In dit geval aftrekken een van DA07.(dwz 1101101000000111 - 1 = 1101101000000110 = DA06).Dan invertsuiker resultaat.dwz inv (DA06) = 25F9 = 9721 * -1 = -9721.Ten slotte doen de schaal in eng eenheden.

 
Is er zo uit ziet, de 2 ^ -23, komt overeen met de minste waarde van AIN1 dat een verandering in de LSB?

 
Ik gedownload notitie van deze baby en kreeg snel een lezing.Het
is een complex maar een functionaliteit.Als je leest pagina 22 van Cirrus Logic doc (DS630PP1) zou u een antwoord op deze vraag.

Ik veronderstel dat u wilt gebruiken ondertekend formaat (-1 tot 1) dus 2 ^ -23 en 2 ^ -22 bevinden zich aan de rechter-zijde van het woord (LSB) en ze zijn verklaard altijd "nul" dus niet zal bijdragen tot resolutie.De ware LSB wordt (na hen) 2 ^ -21 dus resolutie wordt een 22-bits, hoewel het volledige woord is 24 bits.

Nog een ding over ongebruikelijke formaat zij beweren.Ze zeiden dat het aantal is de binaire representatie van -1 tot 1 (gesloten formaat), dus de binaire punt is geplaatst aan de rechterkant van MSB (2 ^ 0).Maar ik denk dat je kunt beschouwen het als een 2 ^ 23 binair getal en rationalisering met (2 ^ 23) -1 / 2 ^ 23 voor positieve getallen (dus nooit gelijk aan 1) en 2 ^ 23 / 2 ^ 23 *- 1 voor negatieve.

 
Zoals de laatste 2 bits zijn altijd 0, moet ik nemen de 24 bits (dwz overweegt laatste 2 bits als nul) en kaart in gewicht of moet ik de eerste 22 bits alleen (ontdoen van de laatste 2 bits en behandelen als 22 bit waarde) kaart en in gewicht.

 
Ik deed het zo.Is dit correct?2 ^ 24 = 16777216.Ik wil mijn gewicht in kg met een resolutie van 0.1.Zo verdeeld 16777216/1500 = 11184 (2BB0).2BB0 wanneer vertegenwoordigd in fractionele vorm geeft 0.001333237.
Ik bereken hoeveel 0,001333237 in het verkregen resultaat.De digitale uitgang 0xFFFFFF kaarten tot 0 gewicht, 0x000000 tot 75kg en 0x7FFFFF kaarten tot 150kg.Deze waarde delen door 10 geeft het gewicht.

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

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

Groeten,
Priya.

 

Welcome to EDABoard.com

Sponsor

Back
Top