Pagina 1 di 1

Codice per valore logaritmico

MessaggioInviato: 23 mar 2012, 14:47
da Dryden
Salve a tutti :D

Sto progettando un cotrollo di umidità e temperatura con un PIC.

Per regolare il valore della temperatura uso un codice che restituisce un valore proporzionale tra il valore letto, il valore di soglia e un delta impostato, di seguito vi riporto la funzione in Mikrobasic commentata:
Codice: Seleziona tutto
Sub procedure Risc_Prop(dim soglia, Temp_Sens as word,
                        dim Delta as byte,dim byref out as byte)

dim out1 as word                         'variabile temporanea


out1 = 0

     if (Temp_Sens >= soglia) then       'se sensore > o = di soglia
          out1 = 0                       'variabile a 0
     else                                'altrimenti calcola valore proporzionale
          out1 = (soglia + Delta)
          out1 = (out1 - Temp_Sens)
          out1 = (out1 / Delta)
     end if

     If (out1 > 10) then                 'se il valore proporzionale è > 10
         out1 = 10                       'valore = 10
     end if

     out = out1                          ' estrapola valore finale


end sub


Tale funzione lavora egregiamente.

Sarei interessato però a capire come sviluppare una funzione simile, ma invece che darmi un valore proporzionale, vorrei un valore logaritmico solo che non so da dove cominciare per fare i conti.
Vorrei un cosiglio sulla strada da seguire, se avete un esempio , anche in C, sarebbe ottimo per capire come sviluppare il tutto.

Grazie a tutti

Re: Codice per valore logaritmico

MessaggioInviato: 23 mar 2012, 16:27
da GuidoB
Ciao,
se non hai a disposizione la funzione ln (logaritmo naturale) o non vuoi usarla perché è troppo lenta per la tua applicazione, puoi preparare una tabella con un po' di valori della funzione nell'intervallo che ti interessa. Per conoscere i valori intermedi tra punti già calcolati, puoi fare per esempio un'interpolazione lineare.
Il metodo della tabella (look-up table) è meno preciso ma molto più veloce che calcolare ogni volta funzioni trascendenti. Ovviamente, più punti pre-calcoli e migliore sarà la precisione. O_/