BASTIUniversal
02.01.2008, 12:16
Hi!
Ich habe das Problem, dass zwei neue Sensoren von meinem Mega8 so einiges an Rechenleistung bzw. Speicherplatz abverlangen.
Es handelt sich hier um einen Lufttemperatur und -druck (http://www.hoperf.com/pdf/HP03.pdf) Sensor und einen Luftfeuchte (http://www.hoperf.com/pdf/HH10D.pdf) Sensor.
Beim Druck/Temperatur Sensor müssen aus einem integrierten ROM elf Variablen ausgelesen werden und die eigentlichen Werte damit verrechnet werden.
'Dim C(7) As Word, A(4) As Byte, Vas(3) As Single, Var(1) As Word, D2cs As Long
Function Dut(byval D2 As Word) 'As Integer
D2c5 = D2 - C(5)
Vas(1) = D2c5 * D2c5
Vas(2) = Vas(1) / 16384
Var(1) = 2 ^ A(3)
If D2 < C(5) Then
Vas(2) = Vas(2) * A(2)
Vas(2) = Vas(2) / Var(1)
Vas(2) = D2c5 - Vas(2)
Dut = Vas(2)
Elseif D2 >= C(5) Then
Vas(2) = Vas(2) * A(1)
Vas(2) = Vas(2) / Var(1)
Vas(2) = D2c5 - Vas(2)
Dut = Vas(2)
End If
End Function
Function Dbr(byval D1 As Word , Dutb As Integer) 'As Word
Local Offset As Integer
Local Sens As Integer
Local Xb As Integer
Var(1) = C(4) - 1024
Vas(1) = Var(1) * Dutb
Vas(1) = Vas(1) / 16384
Vas(1) = Vas(1) + C(2)
Vas(1) = Vas(1) * 4
Offset = Vas(1)
Vas(1) = C(3) * Dutb
Vas(1) = Vas(1) / 1024
Vas(1) = Vas(1) + C(1)
Sens = Vas(1)
Vas(1) = D1 - 7168
Vas(1) = Vas(1) / 16384
Vas(1) = Sens * Vas(1)
Vas(1) = Vas(1) - Offset
Xb = Vas(1)
Vas(1) = Xb * 10
Vas(1) = Vas(1) / 32
Vas(1) = Vas(1) + C(7)
Dbr = Vas(1)
End Function
Function Tbr(dutb As Integer) 'As Integer
Vas(1) = Dutb * C(6)
Vas(1) = Vas(1) / 65535
Vas(2) = 2 ^ A(4)
Vas(2) = Dutb / Vas(2)
Vas(3) = Vas(1) - Vas(2)
Vas(3) = 250 + Vas(3)
Tbr = Vas(3)
End Function
Diese drei Funktionen brauchen bestimmt 40-50% vom Flash des Mega8 und die Berechnung dauert auch ne ganze Weile. Da ich gerne noch ein paar andere Sensoren und eine Funkübertragung einbauen wollte, brauche ich mehr Platz.
Wie kann ich also am besten die Rechnungen umstellen, verändern, durch andere Rechenoperationen schlanker gestalten? Sind Local-Variablen hier besser geeignet als "Globale"?
Danke!
Basti
Ich habe das Problem, dass zwei neue Sensoren von meinem Mega8 so einiges an Rechenleistung bzw. Speicherplatz abverlangen.
Es handelt sich hier um einen Lufttemperatur und -druck (http://www.hoperf.com/pdf/HP03.pdf) Sensor und einen Luftfeuchte (http://www.hoperf.com/pdf/HH10D.pdf) Sensor.
Beim Druck/Temperatur Sensor müssen aus einem integrierten ROM elf Variablen ausgelesen werden und die eigentlichen Werte damit verrechnet werden.
'Dim C(7) As Word, A(4) As Byte, Vas(3) As Single, Var(1) As Word, D2cs As Long
Function Dut(byval D2 As Word) 'As Integer
D2c5 = D2 - C(5)
Vas(1) = D2c5 * D2c5
Vas(2) = Vas(1) / 16384
Var(1) = 2 ^ A(3)
If D2 < C(5) Then
Vas(2) = Vas(2) * A(2)
Vas(2) = Vas(2) / Var(1)
Vas(2) = D2c5 - Vas(2)
Dut = Vas(2)
Elseif D2 >= C(5) Then
Vas(2) = Vas(2) * A(1)
Vas(2) = Vas(2) / Var(1)
Vas(2) = D2c5 - Vas(2)
Dut = Vas(2)
End If
End Function
Function Dbr(byval D1 As Word , Dutb As Integer) 'As Word
Local Offset As Integer
Local Sens As Integer
Local Xb As Integer
Var(1) = C(4) - 1024
Vas(1) = Var(1) * Dutb
Vas(1) = Vas(1) / 16384
Vas(1) = Vas(1) + C(2)
Vas(1) = Vas(1) * 4
Offset = Vas(1)
Vas(1) = C(3) * Dutb
Vas(1) = Vas(1) / 1024
Vas(1) = Vas(1) + C(1)
Sens = Vas(1)
Vas(1) = D1 - 7168
Vas(1) = Vas(1) / 16384
Vas(1) = Sens * Vas(1)
Vas(1) = Vas(1) - Offset
Xb = Vas(1)
Vas(1) = Xb * 10
Vas(1) = Vas(1) / 32
Vas(1) = Vas(1) + C(7)
Dbr = Vas(1)
End Function
Function Tbr(dutb As Integer) 'As Integer
Vas(1) = Dutb * C(6)
Vas(1) = Vas(1) / 65535
Vas(2) = 2 ^ A(4)
Vas(2) = Dutb / Vas(2)
Vas(3) = Vas(1) - Vas(2)
Vas(3) = 250 + Vas(3)
Tbr = Vas(3)
End Function
Diese drei Funktionen brauchen bestimmt 40-50% vom Flash des Mega8 und die Berechnung dauert auch ne ganze Weile. Da ich gerne noch ein paar andere Sensoren und eine Funkübertragung einbauen wollte, brauche ich mehr Platz.
Wie kann ich also am besten die Rechnungen umstellen, verändern, durch andere Rechenoperationen schlanker gestalten? Sind Local-Variablen hier besser geeignet als "Globale"?
Danke!
Basti