PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RP6 mit M32 mit kleinem Greiferumbau und Problemen



spriti1988md
06.07.2014, 16:38
Hallo an alle :)
Als Frischling habe ich ein paar Probleme was mein Projekt angeht. Es sieht wie folgt aus:

Ich habe den RP6v2 mit der Erweiterung M32 und dem Display darauf versehen. Habe vorn auf dem RP6 einen Greifer der über 3 Servos realisiert ist aufgebaut. Dazu noch einen Sharp 2D120X mit kleiner Elektronik zu stabiliserung der Spannungen. 2 Servos für die beiden Greiferarme links und rechts und einen für das heben und senken des kompletten Arms. Sinn sollte sein, den kompletten Arm nach unten zu fahren, eine Dose oder Flasche zu greifen über die beiden Servos und über den 3. Servo die Flasche nach oben zu transportieren und hinten auf dem RP6 in ein Behälter fallen zu lassen.

Die Servos sind über eine Platine auf I/O Ports des M32, PC2-PC4. Den Sharp Sensor auf ADC 7.

Ich habe 2 Programme geschrieben um einfach zu testen ob dies passt. Die Funktion des Greifens und der Ablauf, passt perfekt. Wie auch die Auswertung des Sensors und Anzeige auf dem Display eines Wertes wie weit der Gegenstand weg ist. Dazu habe ich ein kleines Programm geschrieben um zu sehen wie der Robby per Fernbedienung läuft. Dies passt auch inkl. allen Bewegungen. Was I²C betrifft, da blick ich im Moment gar nicht durch auch was die Beispielprogramme angeht wie ich am besten Master-Slave herrichte und dann das Programm verschachteln muss.

Nun habe ich zuerst mal 2 Fragen:

1. Wie bekomme ich am besten das Signal des RC5, also der Auswertung des IR-Sensors auf das M32? Da steh ich auch was I²C angeht komplett danabene.
2. Wenn ich die Base als Slave nutze, muss ich auch ein Programm schreiben für den M32 um die Servos der Base anzutreiben oder?


Entschuldigt die Anfängerfragen, aber ich steh grad bei der I²C Verschachtelung und verbindung der einzelnen Programm ordentlcih daneben.
Danke euch schonmal vorab.
LG Marcel

Dirk
06.07.2014, 18:59
Hi Marcel,

zu 1:
- Auf der RP6v2 Base würde dann das I2C-Slave-Programm (RP6Base_I2CSlave.c) laufen.

zu 2:
- Dein Programm auf der M32 müßte dann die I2C-Master-Lib (RP6I2CmasterTWI) einbinden.
- Der Aufbau kann so etwa wie im Beispiel RP6Control_06_I2CMaster.c aussehen,- enthält also mindestens:

#include "RP6ControlLib.h"
#include "RP6I2CmasterTWI.h"
#define I2C_RP6_BASE_ADR 10

void I2C_transmissionError(uint8_t errorState)
{
writeString_P("\nI2C ERROR - TWI STATE: 0x");
writeInteger(errorState, HEX);
writeChar('\n');
}


int main(void)
{
initRP6Control();
initLCD();

I2CTWI_initMaster(100);
I2CTWI_setTransmissionErrorHandler(I2C_transmissio nError);

while(true)
{ // ... Dein Hauptprogramm
}
}

spriti1988md
07.07.2014, 13:43
Danke vorab Dirk :)
Noch was kleines, wie rufe ich jetzt z.B. Auf dem M32 die Daten der Base für meinen IR-Enpfänger ab um ihn mit einer Fernbedienung zu bedienen? Und muss ich die Ansteuerung der Servos vom Antrieb jetzt über das M32 machen?
Ich hab ein paar Probleme mit dem Verständnis was hier das ziehen der Daten von der Base aufs M32 angeht.

LG

Dirk
07.07.2014, 20:43
Hi Marcel,

Hier ein Beispiel für das Abfragen der RC5-Werte:


#define I2C_REG_RC5_ADR 27
uint8_t readBuf[3];

// ...

I2CTWI_transmitByte(I2C_RP6_BASE_ADR, I2C_REG_RC5_ADR);
I2CTWI_readBytes(I2C_RP6_BASE_ADR, readBuf, 2);
uint16_t rc5data;
rc5data = (readBuf[0] << 6) | (readBuf[1]);



Und muss ich die Ansteuerung der Servos vom Antrieb jetzt über das M32 machen?
Meinst du die Ansteuerung der Motoren des RP6v2?
Wenn ja: Ja, das must du jetzt von der M32 (als I2C-Master) aus machen.