PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RP6 mit SRF10 und elekt. Kompass ausrüsten - Wie verbinden?



Deerah
17.05.2009, 16:36
Hilfe!^^

Ich bin relativ neu dabei mit meinem RP6...
Programmierung verstehe ich ja alles, bei mir haperts ein wenig am technischen...

Ich habe vor mit dem SRF10 und einem elektrischen Kompass-Modul die Steuerung erheblich zu verbessern. So wie hier quasi schon ein paar mal auch nach der entsprechenden Programmierung gefragt wurde.

Ich besitze (natürlich) die RP6 Base und auch die M32 Control Erweiterung.

Ich verstehe nun aber nicht, wie ich den SRF10 und den Kompass mit dem Roboter verbinden kann.... ich weiß die Module sind I2C-fähig.

Bedeutet das, dass ich sie an den I/O-Port des M32 irgendwie anschließen muss? Oder an die USRBUS / XBUS der Base? Oder verbinde ich die Experimentierplatte mit den beiden Ports und löte dann irgendwelche Schaltkreise zusammen??

Ihr seht, ich bin hilflos und weiß nicht was ich machen muss.... und was ich an Materialien brauche... bitte helft mir! Danke!!!

Dirk
17.05.2009, 17:01
Hallo Deerah,

Glückwunsch zum RP6.

Der I2C-Bus verbindet ja die RP6 Base und die Control M32.
Die beiden Pins des Busses sind SDA und SCL.

Wenn du andere I2C-Bausteine an den Bus anschließen willst, dann must du sie an diese beiden Pins anschließen (und natürlich auch noch GND verbinden).

Wo du den Anschluß machst, ist egal.

XBUS: Pins 10, 12 (GND = 1, 2, 14)
Experimentierplatine: SDA, SCL und GND sind beschriftet

Deine I2C-Bausteine brauchen dann noch eine Stromversorgung, die kannst du getrennt vom RP6 machen (z.B. bei Stromfressern) oder auch vom RP6 nehmen:

XBUS: Pins 3, 5 (+5V) oder Pins 4, 6 (Akkuspannung)
Experimentierplatine: VDD (+5V) oder +UB (Akkuspannung)

Gruß Dirk

Deerah
17.05.2009, 17:15
Okay, das verstehe ich....

Aber - nehmen wir zum Beispiel die Experimentierplatte....
Da ist ja nur 1 SCL und 1 SDA.... ich will aber ja zwei Module einbauen...
Und wie verbinde ich z.B. die Löcher des SRF10 mit den SCL/SDA- und Strom-Löchern???
Sind vllt. banale Fragen... gelötet hab ich schon, aber wie baue ich das da auf?? Nehm ich da irgendwelche Kabel??
Und wie sieht das aus mit Widerständen etc..., was ich da evtl. zwischen packen muss? Ich les da immer so viel, hab da aber kaum Ahnung von...

Hoffe du verstehst was ich meine...

Dirk
17.05.2009, 17:32
Da ist ja nur 1 SCL und 1 SDA.... ich will aber ja zwei Module einbauen...
Das ist ja ein I2C-BUS, d.h. da kann man viele Geräte gleichzeitig anschließen. Jedes wird dann über eine Adresse angesprochen.
Also: Alle SDAs und alle SCLs zusammenlegen.


Und wie verbinde ich z.B. die Löcher des SRF10 mit den SCL/SDA- und Strom-Löchern???
Ja klar: Mit Kabeln und verlöten. Alternativ Steckerlösungen mit Pfostenleisten. Widerstände brauchst du (bei den von dir geplanten Teilen) nicht.
Für die Stromversorgung braucht man manchmal noch Kondensatoren (100 nF keramisch und ggf. Elko) zwischen +5V und GND.

Gruß Dirk

Deerah
17.05.2009, 18:53
Hmm...

also würde ich jeweils 2 Kabel in SCL und SDA anlöten...

Was für Kabel nehm ich denn da?? Also ich hab noch keine Ausrüstung.... wollt gern einiges bei C kaufen, aber da gibt es so viele verschiedene Steckerverbindungen, Litzen, etc... ich komm überhaupt nicht klar, was ich brauche...

Dirk
17.05.2009, 19:29
Was für Kabel nehm ich denn da??
Für eigene (feste) Schaltungen auf den Experimentierplatinen:
Schaltdraht, isoliert, 0,2 mm² -> 606065
Versilberter CU-Draht, 0,6 mm -> 605581

Litzen zur flexiblen Verbindung:
Schaltlitze 0,14 mm², 25 m -> 605905 (rot)
Am besten verschiedene Farben nehmen.

Gruß Dirk

oberallgeier
17.05.2009, 19:37
... also würde ich jeweils 2 Kabel in SCL und SDA anlöten ...Einfach diese Seite anklicken:
https://www.roboternetz.de/wissen/index.php/I2C
und eine Bildschirmhöhe runterscrollen . . . danach löten *gggg*

Ach ja - willkommen im Forum. Und viel Erfolg bei Deinen Projekten.

Deerah
17.05.2009, 21:20
@Dirk: Danke!

@oberallgeier: Was willst du mit dem Hinweis auf den I2C-Artikel andeuten?? Falls du diee Schematik dort meinst, so lese ich aus ihr heraus, dass die Module in Reihe geschaltet werden... ist das so richtig?

Deerah
31.05.2009, 16:25
Hi,

also das mit dem Löten und Verbinden hat wunderbar geklappt!

Der Ultraschallsensor funktioniert auch wunderbar... hab mir den SRF08 geholt.

Nur hab ich Probleme mit dem Kompassmodul...
Die Software Revision Number auszulesen, funktioniert. D.h. es ist kein Verbindungsproblem.
Nur beim Auslesen der Himmelsrichtung spinnt das Ding irgendwie... ich vermute es liegt an der Programmierung, vllt. kann man jemand einen Blick drüber werfen... ansonsten liegt das vllt. am Gebäude.... aber das wär echt Mist...



uint16_t degree;
(...)
void task_CMPS(void)
{
uint8_t cmpsbuffer[2];
I2CTWI_transmitByte(CMPS_ADR, 2);
I2CTWI_readBytes(CMPS_ADR + 1, cmpsbuffer, 2);
degree = cmpsbuffer[1] + (cmpsbuffer[0] << 8);
setCursorPosLCD(1,9);
writeIntegerLCD(degree, DEC);
writeStringLCD_P(" ");
}

Dirk
01.06.2009, 18:42
Probier 'mal, die Zeile:
I2CTWI_readBytes(CMPS_ADR + 1, cmpsbuffer, 2);
... zu ändern in:
I2CTWI_readBytes(CMPS_ADR, cmpsbuffer, 2);

Gruß Dirk

Deerah
02.06.2009, 15:59
Macht merkwürdigerweise gar keinen Unterschied, obwohl in der englischen Anleitung steht, dass man an die normale Adresse das Register (in diesem Fall 2 für 2 und 3) schicken soll, und dann die Anfrage an die Adresse mit read bit high (also statt 0xC0 dann 0xC1) senden soll....

Ich hab mir die Daten nun per UART mal ausgeben lassen über:

(...)
uint8_t cmpsbuffer[2];
I2CTWI_transmitByte(CMPS_ADR, 2);
I2CTWI_readBytes(CMPS_ADR, cmpsbuffer, 2);
writeInteger(cmpsbuffer[0], DEC);
writeString_P(" | ");
writeInteger(cmpsbuffer[0], BIN);
writeChar('\n');
writeInteger(cmpsbuffer[1], DEC);
writeString_P(" | ");
writeInteger(cmpsbuffer[1], BIN);
writeString_P("\n==> ");
degree = cmpsbuffer[1] + (cmpsbuffer[0] * 256);
writeInteger(degree, DEC);
writeString_P(" | ");
writeInteger(degree, BIN);
writeChar('\n');
(...)
und hab halt gesehen, das da kein Rechenfehler vorliegt... die Binärzahl wird also wieder richtig zusammengesetzt... aber ich bekomme nur Messwerte zwischen 759 und 1231 ausgegeben... am jeweiligen Ende zählt es wieder in die andere Richtung hoch bzw. runter....

Hab nun dasselbe mit Register 1 gemacht, dort werden ja Zahlen zwischen 0 und 255 über nur ein Byte ausgelesen.... und auch da ist es genauso, die Werte liegen immer nur in einem gewissen Bereich.... woran liegt das???

Kann es sein, dass der RP6 selbst ein Magnetfeld erzeugt???

Christian3
07.07.2009, 22:31
Kann es sein, dass der RP6 selbst ein Magnetfeld erzeugt???
ja die motoren z.b

sechsrad
09.07.2009, 12:37
kalibrieren....kalibrieren den Kompass.