ADC beregning - hjelp

Hei

Jeg har testet dine koder og jeg får forskjellige svar fra deg!

Jeg regner det må gjøre med Keil IDE men jeg er ikke 100 prosent sikkert

MaverickMax

 
Prøv å endre dette:
Temp = 680 * ((adc_result [6] -82) / (920-82));

Til dette:
Temp = 680L * (adc_result [6] -82) / (920-82);
eller denne:
Temp = (long) 680 * (adc_result [6] -82) / (920-82);

Legg merke til at jeg fjernet parens (som Silvio forklart), og jeg lagt til "L" eller "(lang)" slik beregning bruker lang int istedenfor int (som Artem forklart).Hvis kompilatoren følger ANSI C-standarden, så lenge int er minst 32 biter, og det er rikelig for denne beregningen.

Hvis slike ting virker litt mystisk for deg, prøve å ta tak i en god C-programmering bok, og les avsnittet om heltall uttrykk evaluering.

 
Jeg har fått den arbeider nå

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Smil" border="0" />MaverickMax

 
Hei

Det er en ting å gjøre som jeg bare kreve å få Voltage topp til topp ....

La oss anta at 300V peak til peak (150V peak)

Ifølge maks og min av ADC, er det 950 og 500.Så 950 ville være 150 V og 500 representerer-150V.

Derfor har jeg behov for å fastslå OV (Referanse) som vil være 725

(950-500 = 225, 225 500 = 725)

temp = 150 * (adc_result [5] -725) / (950-500)

Er det riktig?(Im forferdelig i matte!

<img src="http://www.edaboard.com/images/smiles/icon_cry.gif" alt="Gråter eller Veldig trist" border="0" />

)

Rett hvis utregningen er feil

MaverickMax

 
temp = 150 * (adc_result [5] -725) / (950-725)

men husk at du vil få negativ verdi, slik temp må være signert lenge "type.

 
Ja og nei.Du må sette "L" eller "(lang) i ligningen slik at multiplikasjon ikke overløp.Den "temp" variable kan være 16-bit.

temp = 150L * (adc_result [5] -725) / (950-725);
temp = (long) 150 * (adc_result [5] -725) / (950-725);

En annen måte å unngå 16-bit overløp er å bruke mindre konstanter som har samme forhold.Men blir det vanskeligere å endre ligningen hvis ADC kalibrering endres litt:

temp = 2 * (adc_result [5] -725) / 3;

 
Ja, innrømmet i samme feilen som Maverickmax opprinnelig gjorde.))

 

Welcome to EDABoard.com

Sponsor

Back
Top