2's supplere produktionen i ADC ...

P

Priya

Guest
Jeg har CS5550 ADC fra Cirrus Logic.Produktionsgabet register er af den form

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

Dette er en 24-bit register.Det er givet i databladet, at: Disse register indeholder den sidste værdi af de målte resultater af AIN1 og AIN2.Resultaterne vil blive på mellem -1,0 <= AIN1, AIN2 <1,0.Værdien er repræsenteret i 2's komplement notation med binære punkt sted til højre for MSB (MSB have en negativ vægtning. Disse værdier er 22 bits i længden. De 2 mindste signifikante bits, (placeret på højre side) har ingen betydning, og vil altid have en værdi på "0". jeg bruge denne ADC for vejning skala ansøgning. Hvordan kan jeg bruge outputtet fra ADC at beregne vægten? Så vidt jeg behandlet ADC's, der giver output i binære koder og Jeg kan direkte kort i tilsvarende vægt. Jeg har ingen idé med 2's komplement form.

Hjælp mig.

 
For at beregne en 2's komplement værdi skal du invertsukker alle bits og derefter tilføje en.

For eksempel for undertegnet heltal med 16-bit:

1 = 0001
-1 = FFFF
(Invertering
1 har du FFFE
Derefter tilsættes 1
vil du opnå FFFF)

Så positive tal er blot repræsenteret med binær værdi og negativer er reperesented med binær værdi, null en positiv binære med samme størrelsesorden.

Den MSB er et tegn (tegn bit) i antal: Hvis 0, antallet er positiv, negativ, hvis 1.

2's komplement bruges normalt til at repræsentere underskrevet heltal.

 
kig her

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

 
Til at konvertere dette 2's komplement format til en du kender, er ganske enkel.

Du behøver kun at invertsukker højeste bid af, hvad du læse i.
F.eks 1 (0x001 bliver 801).-1 (0xFFF) bliver (7FF).På denne måde den højeste værdi svarer til højeste faktiske spænding, laveste værdi svarer til laveste faktiske spænding.

hilsen

 
Hej,
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="Kølig" 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="Kølig" border="0" />

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

Det betyder, at værdien er i fraktion.Er det ikke?Det vil eksistere på mellem -1 til 1, da det er en underskrevet register.Hvis dette register værdi har 0x808080 derefter skulle det være som (-1 1 * (2 ^ (--

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

) 1 * (2 ^ (-16))) = (-1 0,00390625 0,0000152587890625) = -0,9960784912109375?Skal jeg kort denne værdi i vægt?

Hjælp mig?

 
Hej,
Hvordan har du forarbejdning output fra ADC?FPGA / DSP.
Det virker som om, du bruger nogle processor.Du behøver ikke at kortlægge værdier.Du kan bare bruge nogle logiske operationer til convvert det i 2s komplement.Nogle af dem er foreslået i de foregående svar.Check, hvad der er den referencespænding til ADC.Dette vil afgøre, om input fra -1 til 1 eller anden række.Hvis du har flere problemer PM mig.
BR

 
Jeg bruger Atmels 89C51 microcontroller.Hvorfor er det nødvendigt at konvertere til 2's komplement form.Allerede resultatet i 2's komplement form.Før jeg havde behandlet ADUC816.Den 16-bit Resultatet ville være til rådighed i de data register i binære koder.Antag, at resultatet i register
0010 0101 1111 1001 b = 0x25F9.Jeg vil kort denne værdi i tilsvarende vægt af 0x25F9 / x = y og z = y * 0.1.hvor 0,1 er den beslutning, og z er min resultanten vægt.Her med 2's komplement output, hvordan skal jeg fortsætte?

 
Hej,
Jeg havde et kig på databladet.Er u'r problem
hvordan man kan kortlægge output til vægten?
Synes lige du er nødt til at tage hensyn til de få og modregning.Hvis du allerede har gjort det gøre ignorere dette.Det kan tage lidt tid, før nogen kan virkelig få dit problem og hjælpe dig med.
BR

 
Priya,

Deres værdi, 0010 0101 1111 1001 b = 0x25F9, er en positiv værdi, så du skal skala 0x25F9 i eng enheder (dvs. 25F9 (hex) = 9721 (DEC) og y =
9,721 / x. Du kender ovennævnte værdi er positiv, fordi MSB = 0.

Ellers, hvis antal vil være 1101101000000111 = DA07 du genkende denne værdi som negativ.Derfor test MSB, hvis 1 værdien er negativ.I dette tilfælde subtrahere en fra DA07.(dvs. 1101101000000111 - 1 = 1101101000000110 = DA06).Så invertsukker resultat.dvs inv (DA06) = 25F9 = 9721 * -1 = -9721.Endelig gør skalaen i eng enheder.

 
Er det ser sådan ud, de 2 ^ -23 svarer til mindst værdien af AIN1 som medfører en ændring i LSB?

 
Jeg hentede Datablad af denne baby og fik en hurtig behandling.Det
er en kompleks en selvom Fremhævede en.Hvis du læser side 22 i Cirrus Logic doc (DS630PP1),
som du ville have et svar på disse spørgsmål.

Jeg formoder, du vil bruge den underskrevne format (-1 til 1), så 2 ^ -23 og 2 ^ -22 er placeret til rigtige side af ordet (LSB) og de er blevet erklæret altid "nul", så vil ikke bidrage til beslutning.Den sande LSB vil være (efter dem) 2 ^ -21 så beslutningen vil blive en 22 bits, selvom hele ordet er 24 bit.

En anden ting omkring usædvanligt format som de hævder.De sagde, at antallet er den binære repræsentation af -1 til 1 (underskrevet format), så de binære punkt er placeret til højre for MSB (2 ^ 0).Men jeg tror du kan betragte det som en 2 ^ 23 binære tal og rationalisere den med (2 ^ 23) -1 / 2 ^ 23 for positive tal (så aldrig lig med 1) og 2 ^ 23 / 2 ^ 23 *- 1 for negative.

 
Som de seneste 2 bits er altid 0, skal jeg tage de 24 bits (dvs. overvejer seneste 2 bits som nul) og kort i vægt eller skal jeg tage det første 22 bits alene (idet de sidste 2 bits og behandling som 22 bit værdi) og kort i vægt.

 
Jeg gjorde det på denne måde.Er det korrekt?2 ^ 24 = 16777216.Jeg ønsker, at min vægt i kg med beslutning af 0.1.Så splittet 16777216/1500 = 11184 (2BB0).2BB0 når repræsenteret i fraktioneringseluering form giver 0,001333237.
I beregne, hvor mange 0,001333237 er i resultatet.Den digitale output 0xFFFFFF kort til 0 vægt, 0x000000 til 75kg og 0x7FFFFF kort til 150kg.Denne værdi divideres med 10 giver vægten.

lang int DigitalOutput;
int RaiseToPower;
int ShiftBit;
Svømmerens CalculatedValue = 0.0f;
Svømmerens tegn = (DigitalOutput & 0x800000)?-1.0f: 1.0f;
Svømmerens weightvalue;
int WeightInt;

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

Hilsen,
Priya.

 

Welcome to EDABoard.com

Sponsor

Back
Top