PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sharp



Larzarus
26.05.2006, 17:01
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...








$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

PicNick
26.05.2006, 17:06
Config seh' ich nicht. Zum Beispiel:
Config Adc = Single , Prescaler = Auto

Larzarus
26.05.2006, 17:25
THX jetzt funzt es schon mal aber die letzte lampe leuchtet irgendwie nie....

PicNick
26.05.2006, 19:05
Beim GP wirds nicht mehr als ca ~500 (2,6 V bei 10cm)

Larzarus
26.05.2006, 19:56
kann mir einer da vielleicht die zahlen sagen.
Also die abstufungen die mir das genauste ergebnis zeigen ....

Phönix
27.05.2006, 17:42
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.

Larzarus
27.05.2006, 19:58
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....

Phönix
27.05.2006, 23:21
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

shaun
28.05.2006, 01:31
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.

Phönix
28.05.2006, 11:41
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?

Larzarus
28.05.2006, 23:14
Super sache jungs endlich mal leute die ahnung haben :-) Weiter so ihr seit echt ne hilfe. Was macht ihr so mit den mikro C´s und wie alt seit ihr. Was für Job denn ich möchte später auf jedenfall etwas da mit zu tun haben.

Larzarus
28.05.2006, 23:37
Es funzt

thx super ich freu mich richtig

Also hier eine muster lösung für RN control 1.4
Sharp sensoren

nur mit entfernung messen hab ich ncoh nichts gemacht...
werden mir jetzt ein paar motoren kaufen und gucken wie ich das zum laufen bekomme..

ich schreibe auch eine Dokumentation dazu

also wer als mit helfer mit rein will bitte melden....
Diese Doco soll es jedem ermöglichen mit dem Rn board einen funktionfähigen roboter zu bauen...


Werde mir demnächst die Pwm anschauen also den link poste ich hier wer weite helfen will ab und zu mal hier rein sehen .....






$regfile = "m32def.dat"
$crystal = 16000000


Config Porta = Input
Config Portc = Output
Config Adc = Single , Prescaler = Auto
Dim A As Word

Enable Interrupts

Start Adc

Do
'1 = aus
'0 = an


A = Getadc(0)

If A > 65 Then Portc.7 = 1 Else Portc.7 = 0
If A > 140 Then Portc.6 = 1 Else Portc.6 = 0
If A > 180 Then Portc.5 = 1 Else Portc.5 = 0
If A > 220 Then Portc.4 = 1 Else Portc.4 = 0
If A > 270 Then Portc.3 = 1 Else Portc.3 = 0
If A > 350 Then Portc.2 = 1 Else Portc.2 = 0
If A > 400 Then Portc.1 = 1 Else Portc.1 = 0
If A > 532 Then Portc.0 = 1 Else Portc.0 = 0



Waitms 10
Loop
End

Phönix
28.05.2006, 23:39
So was freut uns doch immer gern! Danke! :-)

Ich bin 20 Jahre und seit Jahren Teilnehmer beim Robocup. Vielleicht hat schonmal jemand was davon gehört?

www.robocup2006.org

Werde im Winter anfangen Mechatronik zu studieren.

VG Phönix

Larzarus
28.05.2006, 23:48
Sehr geil ich werde im winter 2007 auch mechatronik studieren.
können ja ICQ nummern austauschen .

https://www.roboternetz.de/phpBB2/viewtopic.php?p=186125#186125

helft mir weiter bitte:-)

PWM wie was wo.....

Was PWM ist weiß ich schon... wie man sie proggt aber wo lege ich die PWM auf die Ausgänge

Phönix
29.05.2006, 15:15
Was für einen Controller hast du?

Larzarus
29.05.2006, 19:30
ich habe eine Mega32 auf einer rn-contol 1.4

Phönix
29.05.2006, 19:58
Naja, der mega32 hat max 4 PWM-Signale. Die liegen an den Pins:

OC0 / OC1A / OC1B / OC2 (OC steht für Oszillator)

Wie jetzt genau auf der RN-Control genau diese PINs herausgeführt erden, weiß nicht, weil ich keine RN-Control besitze. ( Bin Eigenbauer :-) ) Aber vermutlich alle über Stiftleisten, musst du halt mal nachschauen.

Für was willst du den die PWM verwenden? Wahrscheinlich, um einen Motor zu betreiben, oder?

Die Programmierung müsste ich jetzt nachschauen, weil ich die schonm lang nicht mehr verwendet hab. Du programmierst in Bascom? (Nach deinen Quellcodebeispielen). Schau doch mal in die Bascom Referenz, da stht das gut beschrieben.

Für noch mehr Fragen einfach schreiben!

VG Phönix

Larzarus
29.05.2006, 20:58
nein hat sich schon erledigt aer trotzdem danke wie siehts aus mit ICQ nummer wollen wir tauschen per PM könnten dann immer Mechatronik sachenund soweiter austauschen Presentationen usw was hatl so anfällt