PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Port abfragen



Max K.
11.03.2009, 18:16
Hi,

überall steht, dass man die Ports (z.B. Port 14) auch als Eingang abfragen kann.
Ich habe das ganze ausprobiert(Drahtverbindung zwischen Y1[Masse] und port 14). Mein Code sieht wie folgt auf:


define p14 port[14]
deact p14
gosub SUBSYS_PWR_ON
#loop
if p14=on then LED1_F=on else LED1_F=off
SYS SYSTEM
goto loop


Wenn ich nun die Drahtverbindung herstelle leuchtet die LEDE nicht! Ich verstehe nicht was ich falsch mache, überall (auch hier im Forum) kann man lesen, dass es genau so geht!

ikarus_177
11.03.2009, 20:10
Hi,

hab zwar schon lange nichts mehr mit dem RP5 gemacht, die zweite Zeile sticht mir aber sofort ins Auge. Zuerst definierst du den Port, danach deaktivierst du ihn... das kann nicht funktionieren.

Viele Grüße

Dirk
11.03.2009, 21:28
Hallo Max,

probier mal:

define p14 port[14]
deact p14
gosub SUBSYS_PWR_ON
#loop
if p14=on then LED1_F=on else LED1_F=off
LBYTE=EXTPORT
SYS SYSTEM
goto loop


Du solltest für die LED-Ansteuerung die Unterprogramme benutzen, die dafür angegeben sind (LED1ON, LED1OFF ...).

Gruß Dirk

Max K.
12.03.2009, 15:14
Erstmal danke für die Antworten.
Zum Ausprobieren hatte ich noch keine Zeit, aber vorab nochmal eine kurze Frage zum Code:
Was bewirkt das "LBYTE=EXTPORT" genau? Ich möchte ja am Ende wirklich verstehen, was ich da eigentlich für einen Code benutze!

Max K.
12.03.2009, 17:23
So, ich habe es nun getestet: Es führt zu einer (für mich) sehr komischen Reaktion:
Zuerst sind alle LEDs aus, wie es sein soll. Wenn ich nun meinen Draht in die Buchse Y14 (Port 14) stecke, geht LED1 an (es flackert ein Bischen, ist aber die meiste Zeit an), wenn ich das andere Ende des Drahtes mit Y1 (Masse) verbinde, geht LED1 wieder aus. Ich kann das nicht nachvollziehen, da mir unerklärlich ist, wie der Roboter das bloße Einstecken des Drahts in die Buchse bemerken kann, wenn der Draht mit sonst garnichts verbunden ist. Es fließt ja kein Strom. Wenn ich nun den Strom jedoch zum fließen bringe, geht LED1 wieder aus.

Wenn ich nun aber den Port 14 mit Y20 (beides +BATT) verbinde, hört das leichte Geflacker auf und LED1 leuchtet gleichmäßig.

Ich verstehe überhaupt nichts mehr, wie kann das sein? ](*,)


@ikarus_177
Das "deact" macht das "define" nicht rückgängig, es verhindert nur, dass der Port manuell auf on bzw. off gesetzt ist (kann man in dem Fall auch weglassen, habe ich getestet, ändert nichts).

Dirk
12.03.2009, 18:24
Ich kann das nicht nachvollziehen, da mir unerklärlich ist, wie der Roboter das bloße Einstecken des Drahts in die Buchse bemerken kann, wenn der Draht mit sonst garnichts verbunden ist.
Doch, das kann er merken, und zwar über Wechselspannungseinstreuungen, die von deinem Körper kommen. Da der Eingang sehr hochohmig ist, hält er das teilweise für einen H-Pegel und die LED flackert.
Normalerweise vermeidet man das, indem man einen Pullup-Widerstand (zwischen +5V und dem Eingang, z.B. 4,7 kOhm) schaltet und den Taster dann nach Masse. Oder: Man machts umgekehrt und verwendet einen Pulldown-Widerstand nach Masse und legt den Taster zwischen +5V und den Eingang.
Dann kriegt man ein definiertes Potenzial am Eingang.

Gruß Dirk

Max K.
12.03.2009, 18:31
Ich habe nun noch etwas heraus gefunden:
Das Problem tritt nur auf, wenn ich "gosub SUBSYS_PWR_ON" und/oder "SYS SYSTEM" aufrufe.
Nun kann ich das ja nicht einfach vermeiden, da dann die LEDs nicht funktionieren.
Ich weiß absolut nicht weiter! Weiß jemand vielleicht warum das Problem im Zusammenhang mit diesen Befehlen auftritt und wie ich das ganze umgehen kann?

Dirk
12.03.2009, 18:36
Das Problem tritt nur auf, wenn ich "gosub SUBSYS_PWR_ON" und/oder "SYS SYSTEM" aufrufe.
Unsinn. Wenn du diese Systemprogramme nicht aufrufst, funktioniert dein Programm auch nicht, daher kannst du dann auch nichts beobachten.

Den Grund für deine Beobachtungen habe ich schon oben erklärt.

Gruß Dirk

Max K.
13.03.2009, 12:05
Srry, ich habe meine Antwort geschrieben, ehe ich deine kannte (du hast gepostet, während ich schrieb).

Ich glaube ich habe die ganze Zeit etwas falsch verstanden: Ich dachte, ich muss den Port nur mit Y1(Masse) verbinden (Gleichstrom, 2 Pole, einer Y1, der andere der Port). Verstehe ich das jetzt richtig, dass ich den Port (über einen Wiederstand) mit Y20 (+BATT) und mit Y1 (Masse) verbinden muss?

Falls es beim Beantworten hilft:
Letztendlich möchte ich für den Robby einen Bumper bauen (z.B. mit einem (umgebauten) Taster). Ich möchte nun eigentlich nur wissen an was ich den Taster anschließen muss, um beim drücken einen geschlossenen Stromkreis zu haben, den ich über mein Programm feststellen kann und somit auf eine potenzielle Kollision reagieren kann.

Auf jeden Fall schonmal danke für die Antworten, ich stand irgendwie total auf dem Schlauch (bin auch noch etwas neu in Robotik und Hardwarenahem)!!!!!! =D>

Dirk
13.03.2009, 20:42
Ich möchte nun eigentlich nur wissen an was ich den Taster anschließen muss, um beim drücken einen geschlossenen Stromkreis zu haben, den ich über mein Programm feststellen kann ...
Am besten finde ich immer die Lösung mit Pullup-Widerstand.
Also:
4,7 kOhm zwischen +5V und dem Eingangs-Pin,
Taster (Bumper) zwischen Eingangs-Pin und GND/Masse.

Stößt der CCRP5 irgendwo an, schließt der Bumper und der Eingang hat Low-Pegel. Sonst: High-Pegel.

Gruß Dirk

Max K.
14.03.2009, 09:02
Danke, jetzt verstehe ich es! Ich stand die ganze Zeit total auf dem Schlauch (wusste am Anfang nichtmal, dass es den +5V Pol gibt, habe aber dann in den Plan geguckt).