Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Codice per valore logaritmico

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Codice per valore logaritmico

Messaggioda Foto UtenteDryden » 23 mar 2012, 14:47

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
Avatar utente
Foto UtenteDryden
20 4
New entry
New entry
 
Messaggi: 97
Iscritto il: 1 gen 2011, 14:37
Località: Bolzano

0
voti

[2] Re: Codice per valore logaritmico

Messaggioda Foto UtenteGuidoB » 23 mar 2012, 16:27

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_/
Big fan of ƎlectroYou!       Ausili per disabili e anziani su ƎlectroYou
Caratteri utili: À È É Ì Ò Ó Ù α β γ δ ε η θ λ μ π ρ σ τ φ ω Ω º ª ² ³ √ ∛ ∜ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ∃ ∄ ∆ ∈ ∉ ± ∓ ∾ ≃ ≈ ≠ ≤ ≥
Avatar utente
Foto UtenteGuidoB
17,8k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 2809
Iscritto il: 3 mar 2011, 16:48
Località: Madrid


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti