Archiv verlassen und diese Seite im Standarddesign anzeigen : CCRP5 mit C-Control I: Digitalports ansprechen&auslesen
[az-real]
05.07.2005, 16:34
Hi,
is vielleicht ne dumme Frage, aber ich steh echt aufm Schlauch: Ich möchte meinen RP5 mit Kollisionssensoren erweitern, die z.B. einfach einen elektrischen Kontakt herstellen (primär will ich damit die Lebensdauer des Sensorpanels bei Betrieb des Roboters in Stuhlbeinverseuchtem Gebiet erhöhen).
Es müsste doch prinzipiell gehen, dass ich dann einfach bei Kontakt (=Kollision) UREF auf einen der Digitalports lege, der dann logisch High liefert, bzw. in CCBASIC den Wert "on" hat, wenn ich ihn z.B. per Programmschleife abfrage, oder? Irgendwas scheine ich aber noch falsch zu machen. Mein Code dazu:
Portinitialisierung:
define P16 port[16]
Abfrage des Ports:
#exp
if P16=on THEN beep 100,1,0
pause 5
goto exp
Kann mir einer sagen, wie man normalerweise vorgeht, wenn man so nen Digitalport von außen ansprechen und im Programm auslesen wil? Ich würde mich freuen, wenn mir zu dieser Aufgabenstellung jemand ein kurzes Beispielchen geben könnte...
danke schonmal
Raphael
Also kurz ein Auszug aus der Anleitung:
Benutzung eines Digitalports als Eingang
Digitaleingänge werden zur Abfrage von Schaltzuständen verwendet. Wird ein Digitalport als Eingang benutzt,
führt er im unbeschalteten Zustand undefinierten Pegel der z.B. mit einem PULL UP-Widerstand festgelegt
werden muss. Ist beispielsweise ein Reedkontakt an diesem Portangeschlossen, wird bei offenem Schalter eine
logische Eins (,,wahr”) vom Port gelesen, bei geschlossenem Schalter eine logische Null (,,falsch”).
Achten Sie bitte unbedingt darauf, daß je nach Beschaltung des Ports und der logischen Aussage, die Ihr
Programm beinhalten soll, der eingelesene Wert eventuell invertiert werden muß (NOT-Operator, siehe Befehlsbeschreibung)!
Wie sieht denn deine Aussenbeschlatung aus, oder ist dir noch garnicht klar, wie sie aussehen muss? Falls nicht, ist dein Programm theoretisch richtig, du bräuchtest dann aber einen Pulldown Widerstand, dern Port im Falle von keiner Kollision runter (off) zieht.
Wenn dir das noch nicht klar ist, dann frag. ;-)
Hallo Raphael,
Dein Prog sieht so gut aus.
Normalerweise ist Port 16 beim Robby ohne Erweiterungsplatine auch frei.
Der Port sollte auch Eingang sein, wenn das Prog nicht vorher auf den Port schreibt (z.B. mit "P16=On"). Zu Sicherheit kann man voranstellen: "DEACT P16", dann ist P16 sicher als Eingang geschaltet.
An den Port 16 musst Du dann Deinen Schalter gegen Masse anschliessen. Port 16 ist an der in Fahrtrichtung rechten Leiste der 5. Kontakt (Y16) von hinten. Masse (GND) liegt an derselben Leiste am 4. Kontakt (Y17) von hinten.
Gruß Dirk
Hallo Raphael,
hat der RP5 die Möglichkeit, die Drehzahl seiner Motoren zu messen ? Oder kann er vielleicht die Batteriespannung einlesen ?
Die meisten selbstfahrenden Bastelroboter fahren gegen Stuhlbeine und bleiben hängen. Sie scheinen irgendwie alle kein Gefühl zu haben. Jeder normale Mensch merkt, wenn er einen Berg hoch oder gegen eine Wand läuft.
Wenn also eine Roboter merken könnte, das sich plötzlich sein Belastungszustand ändert, dann könnte er daraus schließen, dass er irgendwo hängt.
Man braucht also keine Abstandsensoren, Berührungsschalter, Ultraschallnäherungssensoren oder Bumper sondern schlichtweg ein Belastungssensor der Motoren. Alle genanten Sensoren haben oft das Problem, dass sie am Hinderniss vorbeischauen, der Roboter also trotz Sensor nichts merkt und am Hinderniss hängen bleibt.
Und die Belastung der Motoren beeinflußt folgendes: Drehzahl oder Batterielast.
Viele Grüße,
stochri
[az-real]
06.07.2005, 09:27
Erstmal danke an alle...
@RCO: Das in der Anleitung hab ich gelesen, hab ein bißchen rumprobiert und kein brauchbares Ergebnis erhalten, deshalb wollte ich lieber nochma nachfragen...
@Dirk: Das war in etwa die Vorgehensweise, die ich mir vorgestellt hab. Allerdings kriege ich in meinen Augen willkürliche Ergebnisse, wenn ich diese Beschaltung teste, d.h. wenn ich den Port mit Masse verbinde spricht mein Programm mal an und mal nicht, und wenn der Port "mit nix" verbunden ist ebenfalls. Irgendwas kann da nicht ganz stimmen... muss ich vielleicht den Port allgemein per Pull-Up-Widerstand hochziehen?
@Stochri: Das wäre die elegante Alternative, die ich immer mehr in Erwägung ziehe. Der RP5 kann sowohl Spannung als auch Motorstrom messen und entsprechend darauf reagieren. Das Problem ist dann nur die Richtungsunterscheidung und die Tatsache, dass tatsächlich eine Kollision stattfinden muss, damit die Spannung fällt/derStrom steigt. Also braucht man eh eine Art "Stoßstange", und die wollt ich dann halt gleich richtungsunterscheidend mit Kontakten versehen. Ich denke, die Strom/Spannungssache sollte man aber auf jeden Fall implementieren, da es ja -wie ich an anderer Stelle in diesem Forum gelesen habe- z.B. auch passieren kann, dass sich irgendwelche Staubteile im Getriebe o.ä. einnisten und blockieren....
Sonst noch jemand ne Idee zu der Digitalport-Sache? Wie sprecht ihr eure Ports an?
MfG
Raphael
pebisoft
06.07.2005, 10:15
"Man braucht also keine Abstandsensoren, Berührungsschalter, Ultraschallnäherungssensoren oder Bumper sondern schlichtweg ein Belastungssensor der Motoren. Alle genanten Sensoren haben oft das Problem, dass sie am Hinderniss vorbeischauen, der Roboter also trotz Sensor nichts merkt und am Hinderniss hängen bleibt."
wer zu spät kommt den bestraft das leben. du kannst doch nicht warten bis der robby irgendwo gegengefahren ist und dann evtl ausweichen. weichst du mit deinem fahrbahren gegenstand (fahrrad/moped/auto) auch erst aus, wenn du gegen hindernisse gefahren bist und merkst "auch so, ich habe einen gegendruck verpürt, jetzt weiche ich aus".
"ich bin dagegen das schüler mit 17 jahren den autoführerschein bekommen"
mfg pebisoft
Hallo Raphael,
... muss ich vielleicht den Port allgemein per Pull-Up-Widerstand hochziehen?
... ja, das ist richtig!
4,7 kOhm an Plus 5 V müsste funktionieren!
Gruß Dirk
wenn ich diese Beschaltung teste, d.h. wenn ich den Port mit Masse verbinde spricht mein Programm mal an und mal nicht, und wenn der Port "mit nix" verbunden ist ebenfalls.
Also das so ein Ergebniss eintritt, wenn der Port garnicht verbunden ist, wundert mich nicht. WEnn du ihn allerdings mit Masse verbindest, sollte das nicht passieren. Wegen dem Pullup habe ich ja gefragt, wie deine Außenbeschlatung ausseiht, vielleicht könntest du einfach mal ne Skizze posten, wo der Taster ist und wie du was wo angeschlossen hast.
[az-real]
07.07.2005, 16:30
Hi,
nochmals danke an alle, ich hab das Probkem erkannt und beseitigt: Offensichtlich waren meine Akkus ein bißchen zu leer und die "willkürlichen" Ergebnisse sind dadurch entstanden. An was man nicht alles denken muss ;)
@RCO:
Ich hab jetzt die Variante mit Pull-Down-Widerstand im nicht-Kollisionszustand gewählt. Warum ich nicht näher auf die Außenbeschaltung eingegangen bin: Es gibt da nicht viel zu berichten, bis jetzt ist das nur ein Kontakt, der halt geschlossen wird, wenn der RP5 irgendwo dranstößt. Soll auch nicht superviel bringen, der Bot soll nur darauf reagieren können, wenn sein ACS was übersieht, ohne dass erst die Betriebsspannung einbrechen muss. Die Richtungsunterscheidung dabei mache ich eben mit drei "Fühlern" vorne links, rechts und frontal, die den Kontakt zu zwei Ports schließen (also Kollision links z.B. P15=High, Koll. rechts P16=High, Koll. frontal: beide High). Es gibt mit Sicherheit bessere Lösungen, aber für den Anfang tuts mir das :)
Gruß
Raphael
Nachtrag:
ähm... also so langsam weiß ich echt nicht mehr, wo mir der Kopf steht. Eben hats noch funktioniert, ich habe zwischen UREF und GND die 5V gemessen, die man erwarten sollte. Von einem Augenblick auf den anderen messe ich da aber 2,48 V, also die Hälfte... das war mir vor dem Laden schon aufgefallen, ich habs dann aber auf meine Unfähigkeit geschoben. Diesmal bin ich mir aber ganz sicher. Gibts hierfür eine logische Erklärung? Mein Multimeter stimmt, die Akkuspannung beträgt etwa 8 V, die 2,48 V UREF messe ich auch, wenn ich alle Testaufbauten abhänge, an denen kanns also auch nicht liegen. Irgendeine Idee?
Hallo [az-real],
... die 2,48 V UREF messe ich auch, wenn ich alle Testaufbauten abhänge, an denen kanns also auch nicht liegen. Irgendeine Idee?
Uref des CCRP5 ist mit einem LM385 fest auf 2,5 Volt eingestellt.
Also: Nicht von aussen mit einem Spannungsteiler beschalten!
Gruß Dirk
[az-real]
09.07.2005, 15:25
äh... ok... danke. Ich weiß, so langsam nerve ich, aber kannst du mir einfach kurz erklären, wie ich oben beschriebene Schaltung dann am besten realisiere? Bzw. wo krieg ich dann am besten meine 5V her, die ich bei Kontakt/Kollision auf den Digitalport legen will?
Danke für die Geduld...
Hallo [az-real],
für Plus kannst Du VCC des CCRP5 nehmen. Liegt an der in Fahrtrichtung linken Leiste ganz hinten (Y91).
Die Schaltung sieht also dann so aus:
- 4,7 kOhm zwischen VCC und Digitalporteingang
- Schalter zwischen GND und Digitalporteingang
- evtl. kleiner Kondensator (10/22 nF) parallel zum Schalter
Viel Erfolg!!
Gruß Dirk
[az-real]
09.07.2005, 22:24
Ok, danke, jetzt hats endgültig geklappt. Die Sache funktioniert auch recht gut, solange der Bot langsam genug fährt... bei hohen Geschwindigkeiten kommt er allerdings nicht schnell genug zum Stehen.
N Gruß
Raphael
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.