Inhoudsopgave:

Een CMUCam2 koppelen aan een OOPIC: 5 stappen
Een CMUCam2 koppelen aan een OOPIC: 5 stappen

Video: Een CMUCam2 koppelen aan een OOPIC: 5 stappen

Video: Een CMUCam2 koppelen aan een OOPIC: 5 stappen
Video: TFG Rehabilitación Del Robot Móvil Cybot 2024, November
Anonim

Door arsinioVolg meer van de auteur:

Twee OOBoards met elkaar verbinden met I2C
Twee OOBoards met elkaar verbinden met I2C
Twee OOBoards met elkaar verbinden met I2C
Twee OOBoards met elkaar verbinden met I2C

Overzicht van de interface van een CMUCam2 naar en OOPIC.

Stap 1: De adapterkabel maken

De adapterkabel maken
De adapterkabel maken

1. Ga naar radioshack en koop er 2: mannelijke DB-9 soldeerbekerconnector2. soldeer pin 5 op connector A aan pin 5 op connector B (als je goed op de connector kijkt, zijn ze gemarkeerd)3. soldeer pin 2 op connector A aan pin 3 op connector B (als je goed op de connector kijkt, zijn ze gemarkeerd)4. soldeer pin 3 op connector A naar pin 2 op connector B (als je goed op de connector kijkt, zijn ze gemarkeerd)

Stap 2: Wijzig de baudrate op de CMUCam

Wijzig de baudrate op de CMUCam
Wijzig de baudrate op de CMUCam

Wijzig de baudrate van de CMUCamera naar 9600 baud (voeg een jumper toe aan positie 0).

Stap 3: Sluit de standaard programmeerkabel aan en upload code

Sluit de standaard programmeerkabel en uploadcode aan
Sluit de standaard programmeerkabel en uploadcode aan

Sluit de standaard programmeerkabel aan en upload je code. Hier is een voorbeeldcode om u op weg te helpen. Deze code volgt beweging met behulp van de LF- en FD-opdrachten. Het schakelt IOLine 7 (aangesloten op een LED) en spiegelt de trackingstatus-LED op de CMUCam.

&apos******** seriële poort gerelateerde objecten ********Dim serialPort As New oSerialPortDim txBuff As New oBuffer27 &aposchange de 27 om de buffer groter/kleiner te makenDim rxBuff As New oBuffer10Dim serialActive_LED As New oDIO1Dim toggleSerial_Button As Nieuw oDIO1Dim toggleSerial_Event als nieuw oEventDim toggleSerial_Wire als nieuw oWireDim serialReceive_Event als nieuw oEventDim serialReceive_Wire als nieuw oWire&apos******** debug-gerelateerde objecten ********Dim statLED als nieuw ******** ************************************&apos* Generieke subroutines *&apos****** ****************************************Sub main &apositialize alles main_init &aposset ons uitvoermasker om volg alleen het massamiddelpunt CMUCAM_setOutputMask(2, 3) &aposload ons initiële verschilframe CMUCAM_loadDiffFrame() &aposstart de verschilberekening CMUCAM_startDiffCalc(10)End SubSub main_init &apositialize a status LED statLED. IOLine = 7 statLED. Direction = cvOutput serial &aposinitialize onze()Eind zo b&apossprocesses ontvangen pakkettenSub processPacket() Dim mx As Byte Dim my As Byte &aposcheck voor zowel Mx als My om 0 te zijn &aposgrant als ze niet 0 zijn, zal de locatie uit zijn (dwz &aposT 12 34) &aposmaar dan zullen ze&apost voldoen aan de 0 criteria rxBuff. Locatie = 2 mx = rxBuff. Value rxBuff. Location = 4 my = rxBuff. Value &apostthe led moet knipperen in harmonie met de tracking-LED op de camera If (mx = "0") And (my = "0") statLED = 0 Anders statLED = 1 End IfEnd Sub'********************************************* ****&apos* CMU Cam Functies *&apos*************************************** *******&aposseert de gegeven led naar aan, uit, automatisch&aposparam ledNum aantal leds (0, 1)&aposparam val off, on, auto (0, 1, 2)Functie CMUCAM_ledSet(ledNum As Byte, val As Byte) Omdat Byte &aposVString&apost goed werkte in de nieuwe compiler… &aposniet zeker over de oude &apostxBuff. VString = "L0 0" &aposdeze commandostring handmatig instellen txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 &aposthe s tr$ functie zuigt…dus nu gebeurt dit txBuff. Value = serial_toChar(ledNum) txBuff. Location = 2 txBuff. Value = " " txBuff. Location = 3 txBuff. Value = serial_toChar(val) txBuff. Location = 4 txBuff. Value = 13 &apossend de opdracht serial_SendBufferEnd Sub&aposlaadt het initiële verschil frameSub CMUCAM_loadDiffFrame() &aposstel onze opdrachtreeks handmatig in txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 txBuff. Valux = "F" tB = 1 txBuff. Value = "F" tB = Waarde = 13 &apossend the command serial_SendBufferEnd Sub&aposstart berekening van frameverschillen&aposparam drempeldrempel (0-9)Sub CMUCAM_startDiffCalc(thresh As Byte) Dim tens As Byte &apossetup onze commandostring handmatig txBuff. Location = 0 txBuff. Valux = "F." 1 txBuff. Value = "D" txBuff. Location = 2 txBuff. Value = " " txBuff. Location = 3 tientallen = thresh/10 txBuff. Value = serial_toChar(tens) txBuff. Location = 4 tientallen = thresh/10 txBuff. Value = serial_toChar(thresh-tiens) txBuff. Location = 5 txBuff. Value = 1 3 &apossend the command serial_SendBufferEnd Sub&aposseert het uitvoermasker&aposparam packetType type pakket dat moet worden gemaskeerd (0, 1, 2, enz.) zie pagina 46&aposparam mask mask mask value to apply (0-255)Sub CMUCAM_setOutputMask(packetType As Byte, mask As Byte) Dim honderden As Byte Dim tens As Byte &apossetup onze commandoreeks handmatig txBuff. Location = 0 txBuff. Value = "O" txBuff. Location = 1 txBuff. Value = "M" txBuff. Location = 2 txBuff. Value = " " &apospacket type txBuff. Locatie = 3 txBuff. Value = serial_toChar(packetType) txBuff. Location = 4 txBuff. Value = " " &aposmask om txBuff. Location = 5 honderden = mask/100 txBuff. Value = serial_toChar(honderden) txBuff. Location = 6 tientallen (mask-hundreds)/10 txBuff. Value = serial_toChar(tens) txBuff. Location = 7 txBuff. Value = serial_toChar(mask-hundreds-tens) &aposcarriage return txBuff. Location = 8 txBuff. Value = 13 &apossend the command *********************************************&apos* Algemene seriële subroutines *&apo s**************************************************&apositialiseert de serie portSub serial_init() &apositialize een knop om de seriële poort in en uit te schakelen (aanzetten om te draaien, uitschakelen om te programmeren) toggleSerial_Button. IOLine = 5 toggleSerial_Button. Direction = cvInput toggleSerial_Wire. Input. Link(toggleSerial_Button. Value_Wire. Serial_Wire. Serial_Wire. Link(toggleSerial_Event. Operate) toggleSerial_Wire. Operate = cvTrue &apositialiseer een gebeurtenis om onze gegevens te bufferen serialReceive_Wire. Input. Link(serialPort. Received) serialReceive_Wire. Output. Link(serialReceive_Event. Operate =repositialReceive_Event. Operate) = 0 &apositialize onze seriële poort serialPort. Baud = cv9600 &aposinitialize onze seriële status-LED serialActive_LED. IOLine = 6 serialActive_LED. Direction = cvOutput &aposwait here totdat onze seriële poort wordt geactiveerd While serialPort. Operate = cvFalse WendEnd Sub&aposcopies-gegevens in onze ontvangstbuffer en controleert op pakketvoltooiingSub serialRe ceive_Event_Code() &apos.received wordt onwaar wanneer 4byte buffer leeg is While(serialPort. Received = cvTrue) &aposcopy de byte naar onze buffer rxBuff. Value = serialPort. Value &aposcheck voor einde van pakket If rxBuff. Value = 13 &aposprocess pakketprocesPacket() &aposreset de buffer naar het begin rxBuff. Location = 0 Else rxBuff. Location = rxBuff. Location + 1 EndIf WendEnd Sub&apostschakelt de seriële poort voor programmering in en uit Sub toggleSerial_Event_Code() If serialPort. Operate = cvFalse serialPort. Operate1Active = cvTrue serialPort. Operate = cvFalse serialActive_LED = 0 End IfEnd Sub&aposconverteert een getal van één cijfer naar een teken Functie serial_toChar (inVal As Byte) As Byte Dim ReVal As Byte Select Case inVal Case 0 retVal = "0" Case 1 retVal = "1" Case 2 retVal = "2" Geval 3 retVal = "3" Geval 4 retVal = "4" Geval 5 retVal = "5" Geval 6 retVal = "6" Geval 7 retVal = "7" Geval 8 retVal = "8" Geval 9 retVal = "9" End Selecteer serial_toChar = retValEnd Function&apos sen ds de gegevens in txBuff&apos Opmerking: zorg ervoor dat de buffer aan het einde een regelterugloop (13) bevat!!. Value ooPIC. Delay = 1 &aposheeft dit misschien niet nodig &apossee of het een regelterugloop was If txBuff. Value = 13 &aposbreak uit onze lus Return End If &aposga naar het volgende teken txBuff. Location = txBuff. Location + 1 WendEnd Sub

Stap 4: Koppel de programmeerconnector los

Koppel de programmeerconnector los
Koppel de programmeerconnector los
Koppel de programmeerconnector los
Koppel de programmeerconnector los

Nadat de programmeerconnector is losgekoppeld, bevestigt u de nieuwe kabeleenheid zoals hieronder weergegeven. Met de adapter die in stap 1 is gemaakt, moet de CMUCam rechtstreeks op de OOPIC. kunnen worden aangesloten

Stap 5: Druk op de knop om seriële communicatie te initialiseren

De knop op IOLine 5 start de seriële communicatie tussen de CMUCam en de OOPIC. Aangezien de seriële poort wordt gebruikt voor zowel programmering als de CMUCam, zou er waarschijnlijk een gecontroleerde manier moeten zijn om tussen beide te schakelen.

Het programma wordt pas uitgevoerd als op deze knop wordt gedrukt. Als u nogmaals op de knop drukt, wordt de seriële poort inactief, zodat u deze kunt programmeren. De LED op IOLine 6 geeft de huidige status van de seriële poort weer (aan betekent actief, uit betekent gereed voor programmering).

Aanbevolen: