PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sensor anschließen



time1
06.03.2010, 17:57
Hallo, ich bin neu hier im Forum.

ich habe seit fast einem Jahr einen Robby RP6 und programmiere den nach der beiliegenden Anleitung.
Mit der Zeit wird mir das aber etwas langweilig :-b , und so habe ich mich hier angemeldet.

Da ich kompletter Anfänger in Allem bin und nur Grundlagen der Sprachen C und Java und PhP habe, werde ich wahrscheinlich viele Fragen stellen müssen, bevor ich mein Ziel erreiche, dem Roboter mindestens einen Ultraschall-Sensor zu vermachen.

Zunächst hätte ich die Frage, wie ich an den Robby einen Sensor anschliesse, und softwaremässig anschliessen kann. Wenn möglich möglichst Anfängerverständlich bitte.

Danke schon im Vorraus

Mc Delta
06.03.2010, 19:01
Ich bin zwar auch neu hier aber ich würde mal sagen, dass man grundsätzlich nur die ADC PINs bestücken und auswerten kann. Meineswissens sind das die einzig freien. Ansonsten musst du dir ein erweiterungs board kaufen (mega 32 ) da ht man dann noh andere anschlussmöglichkeiten.

proevofreak
06.03.2010, 21:38
wo und wie du sensoren anschließen kannst hängt ganz vom jeweiligen sensor ab.
diesen ultraschallsensor http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=71&products_id=168 kannst du zum beispiel direkt an SDA und SCL am I²C bus betreiben.

mfg

time1
06.03.2010, 22:13
Danke für die schnellen Antworten.

Ein paar Fragen habe ich aber noch:

Das Ultraschall-Modul verwendet den I²C-Bus nur über die beiden Steckplätze?

Das heisst, dass ich den Anschluss "Mode" nicht brauche?

Aus welchen Registern kann ich denn dann die Entfernung "ziehen"?

mfG time1

radbruch
06.03.2010, 23:33
Hallo

Wenn man I2C mal außen vor läßt, kann man beim RP6 (Base) doch noch einiges mehr nutzen als nur die zwei freien ADC0- und ADC1-Anschlüsse. Hier mal eine kleine Zusammenstellung:

Am XBUS-Stecker sind die digitalen Pins PC0 und PC1 (SCL+SDA, XBUS 10+12) sowie der analoge Pin PA4 (E-Int, XBUS 8) verfügbar. PC0 und PC1 sind als I2C-Vorbereitung jeweils mit einem 4k7-PullUp angeschlossen (R32+33), PA4 hat als Interrupteingang einen 10k-PullDown (R34).

Auf der Platine im Bereich der LEDs SL1-6 befinden sich die Lötpads IO1-4, BPL und BPR. Das sind im Prinzip die LED-Anschlüsse, jeweils mit einem 2,2k Widerstand (R10-15 und einer LED (SL1-6) in Reihe gegen GND beschaltet. Bei BPL/R kommt noch der Taster mit seiner Schutzbeschaltung (R43-46) dazu. Das stört aber bei einer Verwendung als digitale Ein- oder Ausgänge nicht wirklich. Hier kann man zum Beispiel ein LCD mit 4-Bit-Schnittstelle oder Servos anschliesen:
http://radbruch.roboterbastler.de/rp6/greifer2/servoanschluss4_klein.jpg (http://radbruch.roboterbastler.de/rp6/greifer2/servoanschluss4.jpg)

Etwas exotisch (,weil bisher noch nicht beschrieben,) ist die Nutzung des Batteriepin ADC7 (PA7, UBAT). Dessen Anschluss an den Akku kann man zwischen den Lötpads UB1 und UB2 (neben XBUS2) an der Leiterbahn durchtrennen und in der Platinenmitte beim Lötpad UBAT anzapfen. Dann erhält man einen vierten nutzbaren ADC-Pin mit einem 100k-PullDown (R2). Die eigentliche Funktion der Batteriespannungsmessung erhält man mit einem Jumper zwischen UB1 und UB2 zurück.

Diese Pins habe ich bei meinem RP6 auf den USRBUS1 gelegt:

SL1 1 - 2 GND
SL2 3 - 4 Vcc
SL3 5 - 6 ADC0
SL4 7 - 8 ADC7
SL5 9 - 10 ADC1
SL6 11 - 12 Vcc
frei 13 - 14 GND

Ziel dieser Belegung war die Nutzung aller oben beschriebenen Anschlussmöglichkeiten. An 2-4-6 und 14-12-10 kann man dann direkt analoge Sensoren wie z.B. einen Sharp anschliesen, ebenso kann man auch jeweils ein Servo einstöpseln. An den Pins 1 bis 11 schliese ich mein LCD oder meine charliegeplexten LED-Reihen an. Die drei ADCs wären auch ein guter Anschlusspunkt für einen 3er-Liniensensor.
(Mit etwa diesem Aufbau, der wohl bei der Bee deutlich effektiver wäre, aber ohne zusätzliche Auswerteelektronik: http://www.electronicsplanet.ch/Roboter/myrobots/Olimpia/olimpia.htm)

Zum Thema USRBUS: Eine alternative Belegung zum Anschluß einer Erweiterungsplatine hat Dirk hier beschrieben:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=32549

Gruß

mic

[Edit]
UB1 und UB2 sind natürlich neben XBUS2. Danke für die Korrektur an TrainMen :)

time1
07.03.2010, 08:06
Das heisst, wenn ich jetzt einen Servo an GND und an BPL anschließe, kann ich den Servo ansteuern?

Was müsste ich denn genau in das Programm schreiben, dass er reagiert?

Mc Delta
07.03.2010, 08:32
Tut mir leid, dass ich dese Frage nich beantworten kann aber vielleiht interessiert dich das ja: Du könntest je einen Motor an IT1, SCL und SAD anschließen. Ein Pol muss natürlich an der Masse liegen damit das Ganze funktioniert Dabei ist wichtig das er mit 5-8 Volts auskommt und bei belastung nicht mehr als 0,5-1A zieht. Die kannst du dann wiefolgt ansteuern:


#include "RP6RobotBaseLib.h"

int main(void)
{
initRobotBase();

DDRA |= (E_INT1); // IT1 als Ausgang definieren
DDRC |= (SCL | SDA); // PC0 + PC1 als Ausgänge definieren

while (true)
{
PORTA |= E_INT1; // PA4 high
mSleep(5000);
PORTA &= ~E_INT1; // PA4 low

PORTC |= SCL; // PC0 high
mSleep(5000);
PORTC &= ~SCL; // PC0 low

PORTC |= SDA; // PC1 high
mSleep(5000);
PORTC &= ~SDA; // PC1 low
}

return 0; // Dieses kliene Programm steuert jeden Motor bzw. LED nacheinander 5 sek. lang an
}

time1
07.03.2010, 08:51
Danke, das Programm funktioniert super.

Aber kann man das auch auf andere Anschlüsse beziehen?

Mc Delta
07.03.2010, 09:06
Wenn du noch mehr hast. Natürlich kannst du noch die IO Ports bei den beiden Schrauben vorne an derPlatine benutzen. Habe ich aber noch nicht ausprobiert. Oder wenn ein Motor, lampe, LED usw. immer Leuchten soll kannst du die Bateriespannung an VDD (+) und GND (-) abgreifen. Die Ports kannst du meines wissens aber nicht über den Microcontroller ansteuern.

time1
07.03.2010, 11:38
Ich habe mal ausprobiert, was passiert, wenn ich an IO-Ports und GND ein Servo anschliesse:

GND & IO1 : schaltet wie SL1 (LED), d.H. ist an, wenn die LED an ist
GND & IO2 : schaltet wie SL2 (LED)
GND & IO3 : schaltet wie SL4 (LED)
GND & IO3 : schaltet wie SL5 (LED)

das müsste doch bedeuten, dass ich den Port nur in Verbindung mit den LED verwenden kann. ](*,)

Mc Delta
07.03.2010, 11:46
Eigentlich dürfte garnichts passieren, weil der Servo zwar Spannung krigt aber keinen Impuls der ihn auffordert nach links, mitte oder rechts zu springen. Damit das funktioniert musst du das impulskäbelchen an zB. SDA, SCL oder IT1 anschließen um regelmäßig Impulse senden zu können. Aber an der Stelle verweise ich nur noch auf den Beitrag zu Servo s.

Mc Delta
07.03.2010, 11:53
Zu deiner anderen Frage: Ja wenn SL1 bzw. SL-23456 an sind bekommt der zugehörige IO port auch saft. Wenn du verhindern wilst dass die LEDs leuchten müsstest du sie auslöten oder die Leiterbahnen durchtrennen.
PS
Ich habe es gersde mit einer Test LED ausprobiert.

Mc Delta
07.03.2010, 12:02
SL1=IO1
SL2=IO2
SL3=BPR
SL4=IO3
SL5=IO4
SL6=BPL

time1
07.03.2010, 12:43
@proevofreak:

das mit dem SCL und SDA-Anschluss, welche Anschlüsse sollte ich nehmen? ich habe zwei Anschlussmöglichkeiten dafür gefunden.

Mc Delta
07.03.2010, 12:51
Das ist egal die sind miteinander verbunden.

Mc Delta
07.03.2010, 12:57
Besitzt du eigentlich eine M32-erweiterung?
da sind glaub ich 3 Servo-Ports vorgesehen. Steht jedenfalls in meinem Datenblatt.

time1
07.03.2010, 13:15
Ja die M32 hab ich auch.
kann es sein, dass das die SV1 und SV2-Anschlüsse sind? Da hab ich aber nur zwei gefunden... :shock:

Mc Delta
07.03.2010, 13:17
Wieviele Pins haben die denn?

time1
07.03.2010, 14:29
jeweils einen. Eigendlich müssten das doch zwei oder drei sein, oder?

TrainMen
07.03.2010, 17:57
hi
@radbruch
genial mit dem ADC7 PA7 Pin, wieder einer mehr.
Übrigens hast du die Seiten verwechselt nicht USR2 sondern XBUS2 aber das sieht ja jeder selbst.
Trainmen

Mc Delta
07.03.2010, 17:59
Entweder 3 oder einer es kann sein dass das nur der Impuls-Kontakt ist. dann musst du die anderen Käbelcen an GND und VDD anschließen. (rot=VDD, schwarz=GND) Oder aneinen IO Port und Masse (GND) aber du musst wissen ob du die Spannungsversorgung unbedingt an und ausschalten können willst (das muss nich sein kostet nur wertvolle Pins)

SlyD
08.03.2010, 19:45
Du könntest je einen Motor an IT1, SCL und SAD anschließen. Ein Pol muss natürlich an der Masse liegen damit das Ganze funktioniert Dabei ist wichtig das er mit 5-8 Volts auskommt und bei belastung nicht mehr als 0,5-1A zieht.


Nur um das klarzustellen:
Einen Servo kann man da schon anschließen - aber keinen normalen Motor. Man kann KEINEN Motor direkt an die I/O Pins hängen!
Die sind natürlich nicht für solche Leistungen ausgelegt. 40mA max. besser auf 20mA begrenzen.

Für normle Motoren braucht man Motortreiber wie den L293D.
Servos haben den Motortreiber inkl. Feedback direkt im Gehäuse integriert und haben 3 Pins - Versorgung, Signal und Masse.
Die I/Os natürlich nur an den Signal Eingang anschließen...


Mit Servo Ports im Datenblatt der M32 sind die Pins mit Hardwaretimer Funktion gemeint - das hat nix mit Steckverbindern zu tun. Passende Steckverbinder für die Servos muss man sich selbst auf die Experimentierplatine löten.

Dank der schönen Software Servo Routinen von Dirk und Mic ist das mit den Hardware Timern aber nicht notwendig und man kann jeden Pin verwenden um Servos anzusteuern.

MfG,
SlyD