calcolo ADC - help

Salve

Ho testato i vostri codici e ottengo risposta diversa dalla tua!

Mi sa che si deve fare con Keil IDE, ma io non sono certo al 100 percento

MaverickMax

 
Provare a cambiare questo:
Temp = 680 * ((adc_result [6] -82) / (920-82));

A questo:
Temp = 680L * (adc_result [6] -82) / (920-82);
o questo:
Temp = (long) 680 * (adc_result [6] -82) / (920-82);

Si noti che ho rimosso la parentesi (come ha spiegato Silvio), e ho aggiunto "L" o "(lungo)" in modo che il calcolo utilizza long int al posto di int (come spiegato Artem).Se il vostro compilatore è conforme allo standard ANSI C, allora int lungo è di almeno 32 bit, e questo è molto per questo calcolo.

Se questa roba sembra un po 'misterioso per voi, provate afferrando un buon libro di programmazione C, e leggere la sezione sulla valutazione espressione intera.

 
Ho ottenuto che funziona ora

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

 
Salve

Vi è ancora una cosa da fare come ho solo bisogno di ottenere il picco di tensione di picco ....

Lasciare presumere che 300V da picco a picco (150V di picco)

Secondo il max e min di ADC, esso è di 950 e 500.Quindi 950 sarebbe 150 V e 500 rappresenta-150V.

Quindi ho bisogno di determinare il OV (di riferimento), che sarebbero 725

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

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

È giusto?(Im terribile in matematica!

<img src="http://www.edaboard.com/images/smiles/icon_cry.gif" alt="Piangi o Molto Triste" border="0" />

)

Si prega di correggere se il mio calcolo non è corretto

MaverickMax

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

ma tenete a mente che si ottiene un valore negativo in modo temporaneo deve essere "firmato a lungo" tipo.

 
Sì e no.You need to put "L" o "(lungo)" l'equazione in modo che la moltiplicazione non overflow.La temp "variabile" può essere a 16 bit.

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

Un altro modo per evitare overflow 16-bit è quello di utilizzare le costanti più piccoli, che hanno lo stesso rapporto.Tuttavia, diventa più difficile per modificare l'equazione, se le modifiche di taratura leggermente ADC:

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

 
Sì, ha ammesso lo stesso errore, come Maverickmax originariamente fatto.))

 

Welcome to EDABoard.com

Sponsor

Back
Top