Inhaltsverzeichnis:

Anschließen einer CMUCam2 an eine OOPIC - Gunook
Anschließen einer CMUCam2 an eine OOPIC - Gunook

Video: Anschließen einer CMUCam2 an eine OOPIC - Gunook

Video: Anschließen einer CMUCam2 an eine OOPIC - Gunook
Video: Robo TXT Controller I2C - Pixy-Camera 2024, Juli
Anonim

Von arsinioFolgen Sie mehr vom Autor:

Verbinden von zwei OOBoards miteinander mit I2C
Verbinden von zwei OOBoards miteinander mit I2C
Verbinden von zwei OOBoards miteinander mit I2C
Verbinden von zwei OOBoards miteinander mit I2C

Übersicht über die Schnittstelle zwischen einer CMUCam2 und OOPIC.

Schritt 1: Herstellen des Adapterkabels

Herstellen des Adapterkabels
Herstellen des Adapterkabels

1. Gehen Sie zum Radioshack und kaufen Sie 2 davon: Männlicher DB-9-Lötbecheranschluss2. Löten Sie Pin 5 von Stecker A mit Pin 5 von Stecker B (wenn Sie genau auf den Stecker schauen, sind sie markiert)3. Löten Sie Pin 2 von Stecker A mit Pin 3 von Stecker B (wenn Sie genau auf den Stecker schauen, sind sie markiert)4. Pin 3 von Stecker A mit Pin 2 von Stecker B verlöten (wenn Sie genau auf den Stecker schauen, sind sie markiert)

Schritt 2: Ändern Sie die Baudrate der CMUCam

Ändern Sie die Baudrate der CMUCam
Ändern Sie die Baudrate der CMUCam

Ändern Sie die Baudrate der CMUCamera auf 9600 Baud (fügen Sie einen Jumper auf Position 0).

Schritt 3: Verbinden Sie das Standard-Programmierkabel und den Upload-Code

Schließen Sie das Standard-Programmierkabel und den Upload-Code an
Schließen Sie das Standard-Programmierkabel und den Upload-Code an

Schließen Sie das Standard-Programmierkabel an und laden Sie Ihren Code hoch. Hier ist ein Beispielcode, um Ihnen den Einstieg zu erleichtern. Dieser Code verfolgt die Bewegung mit den LF- und FD-Befehlen. Es schaltet IOLine 7 (angeschlossen an eine LED) um und spiegelt die Tracking-Status-LED auf der CMUCam.

&apos******** Serial Port Related Objects ********Dim serialPort As New oSerialPortDim txBuff As New oBuffer27 &aposändern Sie die 27 um den Puffer größer/kleiner zu machenDim rxBuff As New oBuffer10Dim serialActive_LED As New oDIO1Dim toggleSerial_Button As New oDIO1Dim toggleSerial_Event As New oEventDim toggleSerial_Wire As New oWireDim serialReceive_Event As New oEventDim serialReceive_Wire As New oWire&apos******** Debug-bezogene Objekte ********Dim statLED As New oDIO1&apos******** *************************************&apos* Generische Subroutinen *&apos******* ****************************************Sub main &aposiinitialize alles main_init &aposset unsere Ausgabemaske auf nur Schwerpunkt folgen CMUCAM_setOutputMask(2, 3) &aposladen Sie unseren anfänglichen Differenzrahmen CMUCAM_loadDiffFrame() &aposstarten Sie die Differenzberechnung CMUCAM_startDiffCalc(10)End SubSub main_init &aposinitialisieren Sie eine Status-LED statLED. IOLine = 7 statLED. Direction = cvOutput &aposinitialize unsere serielle Schnittstelle)Ende So b&apos verarbeitet empfangene PaketeSub processPacket() Dim mx As Byte Dim my As Byte &aposcheck für Mx und My auf 0. Location = 2 mx = rxBuff. Value rxBuff. Location = 4 my = rxBuff. Value &apostdie LED sollte gleichzeitig mit der Tracking-LED an der Kamera blinken Wenn (mx = "0") Und (my = "0") statLED = 0 Sonst statLED = 1 End IfEnd Sub&apos******************************************** ****&apos* CMU-Cam-Funktionen *&apos**************************************** *******&apossets die angegebene LED auf on, off, automatic&aposparam ledNum Nummer der LED (0, 1)&aposparam val off, on, auto (0, 1, 2)Funktion CMUCAM_ledSet(ledNum As Byte, val As Byte). tr$ Funktion ist scheiße…also passiert das jetzt txBuff. Value = serial_toChar(ledNum) txBuff. Location = 2 txBuff. Value = " " txBuff. Location = 3 txBuff. Value = serial_toChar(val) txBuff. Location = 4 txBuff. Value = 13 &apossende den Befehl serial_SendBufferEnd Sub&aposlädt die anfängliche Differenz frameSub CMUCAM_loadDiffFrame() &apossetze unseren Befehlsstring manuell txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 txBuff. Value = "F" txBuff. Buff = 2 txBuff. Location = 2 Wert = 13 &apossende den Befehl serial_SendBufferEnd Sub&aposstartet die Berechnung der Framedifferenzen&aposparam Thresh Thresh Threshold (0-9)Sub CMUCAM_startDiffCalc(thresh As Byte) Dim tens As Byte &apossetup unseren Befehlsstring manuell txBuff. Location = 0 txBuff. Value = "F" tx. Buff 1 txBuff. Value = "D" txBuff. Location = 2 txBuff. Value = " " txBuff. Location = 3 Zehner = Thresh/10 txBuff. Value = serial_toChar(Zehner) txBuff. Location = 4 Zehner = Thresh/10 txBuff. Value = serial_toChar(thresh-tens) txBuff. Location = 5 txBuff. Value = 1 3 &apossende den Befehl serial_SendBufferEnd Sub&apossets die Ausgabemaske&aposparam packetType Typ des zu maskierenden Pakets (0, 1, 2, etc) siehe Seite 46&aposparam mask Maskenwert anzuwenden (0-255)Sub CMUCAM_setOutputMask(packetType As Byte, mask As Byte) Dim Hunderte As Byte Dim tens As Byte &apossetup unseren Befehlsstring manuell txBuff. Location = 0 txBuff. Value = "O" txBuff. Location = 1 txBuff. Value = "M" txBuff. Location = 2 txBuff. Value = " " &apospacket type txBuff. Location = 3 txBuff. Value = serial_toChar(packetType) txBuff. Location = 4 txBuff. Value = " " &aposmaske zum Anwenden von txBuff. Location = 5 Hunderter = Maske/100 txBuff. Value = serial_toChar(Hunderter) txBuff. Location = 6 Zehner = (Maske-Hunderter)/10 txBuff. Value = serial_toChar(Zehner) txBuff. Location = 7 txBuff. Value = serial_toChar(Maske-Hunderer-Zehner) &aposcarriage return txBuff. Location = 8 txBuff. Value = 13 &apossende den Befehl serial_Send*BufferEnd ********************************************&apos* Allgemeine serielle Unterprogramme *&apo s************************************************&apositialisiert die Seriennummer portSub serial_init() &aposiinitialisieren Sie eine Schaltfläche zum Ein- und Ausschalten der seriellen Schnittstelle (zum Ausführen einschalten, zum Programm ausschalten) toggleSerial_Button. IOLine = 5 toggleSerial_Button. Direction = cvInput toggleSerial_Wire. Input. Link(toggleSerial_Button. Value) toggleSerial_Wire. Output. Link(toggleSerial_Event. Operate) toggleSerial_Wire. Operate = cvTrue &aposiinitialisieren Sie ein Ereignis zum Puffern unserer Daten = 0 &aposinitialisieren Sie unsere serielle Schnittstelle serialPort. Baud = cv9600 &aposiinitialisieren Sie unsere serielle Status-LED serialActive_LED. IOLine = 6 serialActive_LED. Direction = cvOutput &aposwarten Sie hier, bis unsere serielle Schnittstelle aktiviert wird Während serialPort. Operate = cvFalse WendEnd Sub&kopiert Daten in unseren Empfangspuffer und prüft auf PaketvervollständigungSub serialRe ceive_Event_Code() &apos.received wird false wenn der 4Byte Puffer leer ist While(serialPort. Received = cvTrue) &aposkopie das Byte in unseren Puffer rxBuff. Value = serialPort. Value &aposcheck auf Paketende If rxBuff. Value = 13 &aposprocess package processPacket() &apossetze den Puffer auf den Anfang zurück rxBuff. Location = 0 Else rxBuff. Location = rxBuff. Location + 1 EndIf WendEnd Sub&aposschaltet die serielle Schnittstelle für die Programmierung ein und ausSub toggleSerial_Event_Code() If serialPort. Operate = cvFalse serialPort. Operate ElActive._vTrue serial serialPort. Operate = cvFalse serialActive_LED = 0 End IfEnd Sub&aposkonvertiert eine einstellige Zahl in ein ZeichenFunction serial_toChar(inVal As Byte) As Byte Dim retVal As Byte Select Case inVal Case 0 retVal = "0" Case 1 retVal = "1" Case 2 retVal = "2" Fall 3 retVal = "3" Fall 4 retVal = "4" Fall 5 retVal = "5" Fall 6 retVal = "6" Fall 7 retVal = "7" Fall 8 retVal = "8" Fall 9 retVal = "9" End Select serial_toChar = retValEnd Function&apos sen ds die in txBuff&apos enthaltenen Daten Hinweis: Stellen Sie sicher, dass der Puffer am Ende einen Wagenrücklauf (13) enthält!!Sub serial_SendBuffer() &apositerate through, sende jedes Byte, end on carriage return txBuff. Location = 0 Während 1 serialPort. Value = txBuff. Value ooPIC. Delay = 1 &aposkönnte dies nicht brauchen &apossee wenn es ein Wagenrücklauf war If txBuff. Value = 13 &aposaus unserer Schleife ausbrechen Return End If &aposgehen zum nächsten Zeichen txBuff. Location = txBuff. Location + 1 WendEnd Sub

Schritt 4: Trennen Sie den Programmieranschluss

Trennen Sie den Programmieranschluss
Trennen Sie den Programmieranschluss
Trennen Sie den Programmieranschluss
Trennen Sie den Programmieranschluss

Sobald der Programmierstecker getrennt ist, bringen Sie die neue Kabelbaugruppe wie unten gezeigt an. Der in Schritt 1 hergestellte Adapter sollte es ermöglichen, die CMUCam direkt an die OOPIC. anzuschließen

Schritt 5: Drücken Sie die Taste, um die serielle Kommunikation zu initialisieren

Die Taste auf IOLine 5 startet die serielle Kommunikation zwischen der CMUCam und dem OOPIC. Da die serielle Schnittstelle sowohl für die Programmierung als auch für die CMUCam verwendet wird, sollte es wahrscheinlich eine kontrollierte Möglichkeit geben, zwischen den beiden umzuschalten.

Das Programm wird erst ausgeführt, wenn diese Taste gedrückt wird. Wenn Sie die Taste erneut drücken, wird die serielle Schnittstelle inaktiv, sodass Sie sie programmieren können. Die LED am IOLine 6 zeigt den aktuellen Status der seriellen Schnittstelle an (an bedeutet aktiv, aus bedeutet bereit zur Programmierung).

Empfohlen: