-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: CCRP5 mit C-Control I: Digitalports ansprechen&auslesen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    05.07.2005
    Ort
    Karlsruhe
    Beiträge
    25

    CCRP5 mit C-Control I: Digitalports ansprechen&auslesen

    Anzeige

    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

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    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.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791

    Digitalport auslesen

    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

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.062
    Blog-Einträge
    2
    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

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    05.07.2005
    Ort
    Karlsruhe
    Beiträge
    25
    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

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    "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

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    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

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    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.

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    05.07.2005
    Ort
    Karlsruhe
    Beiträge
    25
    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?

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791

    Uref des CCRP5

    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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •