Hallo Holger,
gibt es denn in
Bascom keine möglichkeit, die interpolation für eine lookup tabelle automatisch durchführen zu lassen?
... doch, das ist doch die Möglichkeit 1. aus meinem Post!
Hier 'mal ein bißchen Code als Beispiel:
Code:
Dim Temp As Byte
Dim Ausgabe As Word , Ausgabe2 As Word
Dim Volt As Single
Dim S As String * 16
Dim Summ As Word
Dim Index As Word , Index2 As Word
'50 ADC-Messungen der geglätteten PWM über 1 Zyklusdauer (max. 101ms):
Summ = 0
For Temp = 1 To 50
Ausgabe = Irdistanz_lv 'ADC0: PWM (DC)
Summ = Summ + Ausgabe
Waitms 2 'alle 2ms
Next Temp
Summ = Summ / 50 '50 Messungen
If Summ < 15 Then Summ = 15
'Anfang der Tabellensuchschleife:
Index = 1
Do
Ausgabe2 = Lookup(index , Adcdata)
If Summ < Ausgabe2 Then
Index2 = Index - 1
Ausgabe = Lookup(index2 , Adcdata)
Volt = Ausgabe2 - Ausgabe
Volt = Volt / 10
Exit Do
End If
Index = Index + 1
Loop Until Index > 36
If Index = 37 Then
Volt = 3599
Else
Ausgabe2 = Summ - Ausgabe
Volt = Volt * Ausgabe2
Ausgabe = Index2 * 10
Volt = Volt + Ausgabe
Volt = Volt * 10
End If
Ausgabe = Volt
Locate 4 , 1
S = Str(ausgabe)
S = Format(s , "000.0")
Lcd "Dpw: " ; S ; " Grad"
')
Waitms 500
Loop
'Programm Ende:
End
'ADC-Messwerte für 0..360 Grad Peilung in 10 Grad-Schritten:
Adcdata:
Data 15% , 30% , 44% , 57% , 71% , 84% , 98% , 110% , 123% , 135% , 147%
Data 158% , 168% , 179% , 190% , 200% , 209% , 219% , 228% , 237% , 246%
Data 255% , 264% , 272% , 280% , 288% , 297% , 305% , 312% , 319% , 327%
Data 334% , 341% , 348% , 355% , 362% , 370%
Da habe ich einen CMPS03 (I2C-Kompass-Modul) nach Glättung der PWM mit einem ADC ausgelesen. (Das ist im Prinzip völlig unnötig, da man ja den I2C-Wert hat! Ich wollte aber 'mal sehen, ob das geht.)
Die Meßwerte stehen in der Tabelle Adcdata:
Der Code findet auch die Zwischenwerte der Tabelle unter der Annahme, dass die Intervalle linear sind. Lass dich nicht durch merkwürdige Variablennamen irritieren, z.B. Volt (wird im Programm auch noch für eine Spannung verwendet).
Es geht um die Suchschleife, wobei ich zugebe, dass sie nicht unbedingt selbsterklärend oder elegant ist. Jedenfalls gibt das Prog abhängig vom ADC-Wert (in Summ, Werte 15..370) die Himmelsrichtung als 0..3599 (dargestellt als 000.0 .. 359.9) aus.
Vielleicht kannst du daraus ja eine eigene Routine für deine Anwendung basteln! Zum Testen der Routine (ohne ADC) kannst du z.B. den Teil mit der "Suchschleife" in eine for...next Schleife von 15 bis 370 (FOR Summ = 15 To 370) tun und dir die Ausgabe auf dem LCD ansehen.
Gruß Dirk
Lesezeichen