-
Sharp
Hi ich habe den Sensors "ein Sharp GP2D12" an den ADC PORTA.0 angeschlossen und trotzdem bekomme ich keine LED zum leuchten wo liegt der fehler bitte um hilfe...
Code:
$regfile = "m32def.dat"
$crystal = 16000000
Config Porta = Input
Config Portc = Output
Dim A As Word
Enable Interrupts
Start Adc
Do
A = Getadc(0)
If a > 0 Then Portc.7 = 1 Else Portc.7 = 0
If a > 128 Then Portc.6 = 1 Else Portc.6 = 0
If a > 256 Then Portc.5 = 1 Else Portc.5 = 0
If a > 384 Then Portc.4 = 1 Else Portc.4 = 0
If a > 512 Then Portc.3 = 1 Else Portc.3 = 0
If a > 640 Then Portc.2 = 1 Else Portc.2 = 0
If a > 768 Then Portc.1 = 1 Else Portc.1 = 0
If a > 896 Then Portc.0 = 1 Else Portc.0 = 0
Waitms 10
Loop
End
-
Config seh' ich nicht. Zum Beispiel:
Config Adc = Single , Prescaler = Auto
-
THX jetzt funzt es schon mal aber die letzte lampe leuchtet irgendwie nie....
-
Beim GP wirds nicht mehr als ca ~500 (2,6 V bei 10cm)
-
kann mir einer da vielleicht die zahlen sagen.
Also die abstufungen die mir das genauste ergebnis zeigen ....
-
Es kommt darauf an wie genau deine Refernzspannung ist und was es für eine ist. Außerdem kommt es dann noch auf die Auflösung des AD-Wandlers an.
Muss man denke ich selbst einstellen, bzw. herausfinden, weil die Werte immer anders sind.
-
Also es ist ein 10Bit AD Wandler.
Und ich denke die Boardspannung von 5V ist die Referenzspannung.
Es ist das RN-Control 1.4
und nun....
-
Naja, ein Blick ins Datenblatt verrät, dass der Sensor maximal 2,6Volt ausgibt, dann nimmt der digitale Wert maximal
x = (1023 x 2,6V) / 5V
an, also 531,96 gerundet 532.
Alle anderen Werte schwanken dann, zwischen 0 und diesen 532,
die auch auf diese Weise berechnet werden können.
Um die Entfernung auszurechnen ist mehr Mathematik notwendig, da der Verlauf nicht gerade, also linear, sonder potentiell verläuft.
Es ergibt sich
x in cm
y ist der digitale Wert vom Controller
x = e^( ln(y / 3908) / -0,866)
Auf die herleitung verzichte ich, da die etwas aufwendiger ist. Hab ich in mühevoller Näherungsarbeit entwickelt, funktioniert aber sehr gut. Man
muss nur bedenken, dass der Sensor erst ab etwa 8cm messen, kann vorher gibt es falsche Messwerte (wegen dem Anstieg der Maximalspannung in der potentiellen Funktion, besser im Datenblatt sichtbar).
Hoffentlich hab ich jetzt nicht zu viel Mathe reingepackt, aber es müsste noch ein bisschen verständlich sein.
VG Phönix
-
Grauselige Funktion für die Implementierung in einem kleinen uC. Ich habe auch vor, einen dieser Sharps einzusetzen, wenn es sich nicht vermeiden lässt, aber ich traue dem Ding nicht und werde es wohl an einigen wichtigen Punkten kalibrieren und dazwischen linear interpolieren, nur, damit eine Motorregelung im richtigen Moment halbwegs um das richtige Mass abbremst. Wirklich messen würde ich mit den Dingern nicht wollen. Ich habe Deine Formel eben mal versucht, halbwegs sinnvoll polynominal approximieren zu lassen - erwartungsgemäss ein totaler Fehlschlag, die Fehler sind grandios, die Koeffizienten verschwindend, um 0 herum geht's sowieso nicht. Bin ich froh, dass ich halbwegs genaue Messungen nur von einer DMS-Brücke brauche und richtig genaue (für ein anderes Projekt) von PT2000-Sensoren, aber die lassen sich ja bestens approximieren.
-
Ich muss zugeben, diese Funktion ist nichts für jeden kleien Controller!
Mit einem kleinen Trick lässt sich das ganze aber sehr vereinfachen.
Man invertiert die zu berechnende Entfernung, leitet die Funktion ab und schon man eine (nähereungsweise) linerare und einfachere Funktion. Die Formel dazu kann wirklich jeder Controller (sogar nur eine Logikschaltung) :-)
x in cm
y ist der digitale Wert
x = 1855 / (y - 15)
Geht aber nur bei einem 8bit AD-Wandler und 5V-Referenz.
VG Phönix
PS: Dass hab ich vergessen. Bei der Funktion oben mit der e-Funktion und dem Logarithmus gilt die Funktion nur für einen 10bit AD-Wandler bei 5V-Referenz. Vielleicht lag es bei dir daran?