Problemi con traslazione di scala

Salve

Sto lavorando su un arduino mega 2560 , cercando di creare un wattmetro per RF che manda i dati ad un nextion.
Il programma funziona bene legge il dato perfettamente , il problema è costruire una scala logaritmica sul display
come si fa? Forse sarà semplice ma io non riesco a venirne a capo . Se faccio una rappresentazione lineare, sul display funziona tutto ma non è reale . Avrei bisogno di un moltiplicatore di scala per poter traslare i dati su una scala logaritmica.

Grazie in anticipo per le eventuali risposte.

Buonasera e benvenuto, :slight_smile:
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Di che frequenze stai parlando ? ... perche' ci sono integrati gia predisposti per leggere dei segnali RF e darti la conversione logaritmica della potenza all'ingresso gia traslata in una scala lineare all'uscita ...

Si conosco gli AD8307 già usati in passato ma questa volta vorrei inviare all'arduino direttamente il segnale che vene dalla testina stockton dopo apportuno partitore , funziona già tutto ottengo un valore in watt che dovrei mandare al NEXTION , in questo caso uso una crop image quindi devo mandare un numero da visualizzare su una scala logaritmica , quindi questo numero dovrebbe essere moltiplicato per un numero variabile decrescente , come si ricava questo fattore di scala ?

Eseguendo il logaritmo?
In teoria log10() o log() per quello naturale. Reference.

Forse, però, non ho capito bene io la domanda…

Maurizio

Anche per me è un semplice:

y = k * log(x);

...sempre con x>0 naturalmente

Si perfetto la formula è corretta , o quasi , ma quanto vale la costante k?

Se facciamo un esempio , supponiamo di avere una potenza misuarata X = 100 watt e vogliamo trovare la corrispondente potenza Y da rappresentare nella scala . Il log(100) = 2 , se moltiplichiamo per k dovremmo ottenere Y che è la misura sul grafico. Nella realtà sul grafico il valore di 100 vale 200(l'ho ricavato da uno strumento esistente ) , per cui k dovrebbe essere 100 ma veramente è così?
Io ho cercato di far quadrare i conti in maniera empirica e sembra funzionare ma non è una vera funzione non mi fido tanto.

Sembra semplice ma non lo è ......

Aspetta, perche’ forse la cosa e’ un po piu complessa … “wattmetro per RF” non spiega bene tutto …

E’ un wattmetro per circuiti RF, con connessione diretta via cavo, o un wattmetro RF per emissioni, con un’antenna, con cui vuoi misurare la potenza trasmessa, oppure la densita’ di potenza per volume, o la potenza effettiva disponibile ad una data distanza ? … perche’ sono tipologie di strumenti diverse, con scale diverse … e vuoi la misura in W “puri”, in dbW, in dbm, o come ? … perche’ non parliamo del classico W=V*I soltanto nella RF, ed andiamo a complicarci la vita inutilmente rischiando anche di darti risposte sbagliate, se non abbiamo prima almeno queste informazioni, mi sa … :wink:

nexct:
per cui k dovrebbe essere 100 ma veramente è così?

Si, nauralmente 'k' varia se varia la base del logaritmo, ma la traslazione dei valori alla fine risulta identica.

Si tratta di un wattmetro che deve misurare i watt in uscita da un trasmettitore ho il dato in formato numerico e devo traslare questo dato su una barra grafica, ovviamente mantenendo l'andamento logaritmico.

Che k variasse era fuor di dubbio ma volevo capire l'algoritmo ,io ne ho inventato uno ma come sapete la matematica non si inventa , per cui sono alla ricerca di questo fattore moltiplicatore.

E' solo un problema di rappresentazione grafica e di scala .

Grazie per le risposte

La scala logaritmica permette di rappresentare valori grandi e valori piccoli con la stessa risoluzione relativa: ad esempio, permette di distinguere 8W da 10W allo stesso modo di 800W da 1000W.
Questa, ad esempio, è la funzione che ho usato nel contatore Geiger:

anOut=(log10(uSvph)+2)*51; // log10(0,01)=-2; log10(1000)=3
analogWrite(6, anOut);

L'algoritmo produce da 0 a 255 con valori in ingresso da 0,01 a 1000.

Con Excel puoi scrivere la formula, mettere dei valori e vedere come escono.

Grazie Gianluca per la risposta prendo atto della tua formula ma cosa è il 51? e perchè hai aggiunto +2 al log.
Capisco che così funziona ma vorrei capire come sei arrivato a questa formula.

Grazie

log10(0,01)=-2; log10(1000)=3

sommando 2:
log10(0,01) +2=0; log10(1000) +2=5

Moltiplicando per 51: 051=0; 551=255.

Risale a oltre tre anni fa. Ho sperimentato un po' con Excel e con carta e penna.

Che valori hai e che valori vuoi ottenere?

Non è richiesta tanta precisione , ho una scala che parte da 0 e arriva a 1200 watt , arduino mi fornisce il valore corretto poi lo devo incasellare in un bar graph . Con Arduino ottengo già i valori in watt .

Dopo qualche prova con Excel:
=(LOG10(A2)+2)*19,5 +1
dove A2 è la cella che contiene la potenza.

Da 0,01W a 1200W va da 1 a 100. Aggiungi un punto di discontinuità per 0W con indicazione 0.
Senza titolo-1.jpg

Senza titolo-1.jpg

Grazie con il file excel vado spedito.

Grazie tante

Manuel D.S.

Quella è solo un’immagine, ma ti do anche il file:

Scala logaritmica.zip (7.09 KB)

Una scala logaritmica per natura non inizia da zero, che si avrebbe infinitamente prima di 0,01W: sarebbe prima di 0,001, prima di 0,000001, prima di 0,0000000001, infinitamente prima! Se vuoi che inizi da zero, puoi scrivere qualcosa di simile a:
if (potenza<0.01) valore=0;

Si posso evitare di leggere prossimi allo zero anche perche il log(0) é indefinito e al di sotto di 1 si ottiene un valore negativo.

grazie dei consigli