Table des matières:

Interfaçage d'un CMUCam2 à un OOPIC : 5 étapes
Interfaçage d'un CMUCam2 à un OOPIC : 5 étapes

Vidéo: Interfaçage d'un CMUCam2 à un OOPIC : 5 étapes

Vidéo: Interfaçage d'un CMUCam2 à un OOPIC : 5 étapes
Vidéo: Hardware Interfacing and Control Over The Internet 2024, Juillet
Anonim

Par arsinioSuivez plus par l'auteur:

Connecter deux OOBoards ensemble en utilisant I2C
Connecter deux OOBoards ensemble en utilisant I2C
Connecter deux OOBoards ensemble en utilisant I2C
Connecter deux OOBoards ensemble en utilisant I2C

Vue d'ensemble de l'interface entre un CMUCam2 et un OOPIC.

Étape 1: fabrication du câble adaptateur

Fabrication du câble adaptateur
Fabrication du câble adaptateur

1. Allez sur radioshack et achetez-en 2: Connecteur de coupelle à souder DB-9 mâle2. soudez la broche 5 du connecteur A à la broche 5 du connecteur B (si vous regardez attentivement sur le connecteur, elles sont marquées)3. soudez la broche 2 du connecteur A à la broche 3 du connecteur B (si vous regardez attentivement le connecteur, elles sont marquées)4. souder la broche 3 du connecteur A à la broche 2 du connecteur B (si vous regardez attentivement sur le connecteur, elles sont marquées)

Étape 2: modifier le débit en bauds sur la CMUCam

Modifier le débit en bauds sur la CMUCam
Modifier le débit en bauds sur la CMUCam

Modifiez le débit en bauds de la CMUCamera à 9600 bauds (ajoutez un cavalier à la position 0).

Étape 3: connectez le câble de programmation standard et téléchargez le code

Connectez le câble de programmation standard et téléchargez le code
Connectez le câble de programmation standard et téléchargez le code

Connectez le câble de programmation standard et téléchargez votre code. Voici un exemple de code pour vous aider à démarrer. Ce code suivra le mouvement à l'aide des commandes LF et FD. Il basculera IOLine 7 (connecté à une LED) et reflétera la LED d'état de suivi sur la CMUCam.

&apos******** objets liés au port série ********Dim serialPort comme nouveau Nouveau oDIO1Dim toggleSerial_Event comme nouveau oEventDim toggleSerial_Wire comme nouveau oWireDim serialReceive_Event comme nouveau oEventDim serialReceive_Wire comme nouveau oWire&apos******** objets liés au débogage ********Dim statLED comme nouveau oDIO1&apos******** **************************************&apos* Sous-routines génériques *&apos****** ******************************************** Sub main &aposinitialize tout main_init &aposset notre masque de sortie à suivre uniquement le centre de masse CMUCAM_setOutputMask(2, 3) &aposcharger notre cadre de différence initial CMUCAM_loadDiffFrame() &aposstart le calcul de différence CMUCAM_startDiffCalc(10)End SubSub main_init &aposinitialiser une LED d'état statLED. IOLine = 7 statLED. Direction = cvOutput serialinit(port_sérialiser notre port)Fin dim b&aposprocesses a reçu des paquetsSub processPacket() Dim mx As Byte Dim my As Byte &aposcheck pour que Mx et My soient à 0 &aposgraned s'ils ne sont pas à 0, l'emplacement sera désactivé (c'est-à-dire &aposT 12 34) &aposmais alors ils ont gagné&aposto remplissent les 0 critères rxBuff. Location = 2 mx = rxBuff. Value rxBuff. Location = 4 my = rxBuff. Value &aposthe led doit clignoter à l'unisson avec la led de suivi sur la caméra Si (mx = "0") Et (my = "0") statLED = 0 Else statLED = 1 End IfEnd Sub&apos************************************************ ****&apos* Fonctions CMU Cam *&apos****************************************** *******&apossets la led donnée sur on, off, automatic&aposparam ledNum nombre de led (0, 1)&aposparam val off, on, auto (0, 1, 2)Fonction CMUCAM_ledSet(ledNum As Byte, val As Byte) Comme l'octet &aposVString fonctionnait correctement dans le nouveau compilateur… &pas sûr de l'ancien &apostxBuff. VString = "L0 0" &apossetup notre chaîne de commande manuellement txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 &aposthe s La fonction tr$ craint… alors maintenant, cela se produit 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 la commande serial_SendBufferEnd Sub&aposcharge la différence initiale frameSub CMUCAM_loadDiffFrame() &apossetup notre chaîne de commande manuellement txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 txBuff. Value = "F" = 2 txBuff. Location Valeur = 13 &apossend la commande serial_SendBufferEnd Sub&aposcommence le calcul des différences de trames&aposparam seuil de seuil (0-9)Sub CMUCAM_startDiffCalc(thresh As Byte) Dim tens As Byte &apossetup notre chaîne de commande manuellement txBuff. Location = 0 txBuff. Location = "Buff.". 1 txBuff. Value = "D" txBuff. Location = 2 txBuff. Value = " " txBuff. Location = 3 dizaines = thresh/10 txBuff. Value = serial_toChar(tens) txBuff. Location = 4 dizaines = thresh/10 txBuff. Value = serial_toChar (seuil-dizaines) txBuff. Location = 5 txBuff. Value = 1 3 &apossend la commande serial_SendBufferEnd Sub&apossets le masque de sortie&aposparam packetType type de paquet à masquer (0, 1, 2, etc) voir page 46&aposparam mask valeur du masque à appliquer (0-255)Sub CMUCAM_setOutputMask(packetType As Byte, mask As Byte) Diminuer les centaines As Byte Dim dizaines As Byte &apossetup notre chaîne de commande manuellement txBuff. Location = 0 txBuff. Value = "O" txBuff. Location = 1 txBuff. Value = "M" txBuff. Location = 2 txBuff. Value = " " &type de paquet txBuff. Location = 3 txBuff. Value = serial_toChar(packetType) txBuff. Location = 4 txBuff. Value = " " &aposmask pour appliquer txBuff. Location = 5 centaines = mask/100 txBuff. Value = serial_toChar(cents) txBuff. Location = 6 dizaines = (mask-cents)/10 txBuff. Value = serial_toChar(tens) txBuff. Location = 7 txBuff. Value = serial_toChar(mask-hundreds-tens) &aposcarriage return txBuff. Location = 8 txBuff. Value = 13 &apossender la commande serial_SendBus&aposcarriage ***************************************************&apos* Sous-routines sérielles générales *&apo s************************************************&aposinitialise la série portSub serial_init() &aposinitialise un bouton pour activer et désactiver le port série (activer pour exécuter, désactiver pour programmer) toggleSerial_Button. IOLine = 5 toggleSerial_Button. Direction = cvInput toggleSerial_Wire. Input. Link(toggleSerial_Button. Outial. Value_Wire. Serial_Serial) Link(toggleSerial_Event. Operate) toggleSerial_Wire. Operate = cvTrue &aposinitialize un événement pour mettre en mémoire tampon nos données serialReceive_Wire. Input. Link(serialPort. Received) serialReceive_Wire. Output. Link(serialReceive_RXEvent. Operate_apo) serialReceive_Wire. Output. Link(serialReceive_RXEvent. Operate_apo) = 0 &aposinitialise notre port série serialPort. Baud = cv9600 &aposinitialise notre LED d'état série serialActive_LED. IOLine = 6 serialActive_LED. Direction = cvOutput &aposwait ici jusqu'à ce que notre port série soit activé Tandis que serialPort. Operate = cvFalse WendEnd Sub&aposcopie les données dans notre tampon de réception et vérifie achèvement de paquetSous sérieRe ceive_Event_Code() &apos.received devient faux lorsque le tampon de 4 octets est vide While(serialPort. Received = cvTrue) &aposcopie l'octet dans notre tampon rxBuff. Value = serialPort. Value &aposcheck pour la fin du paquet Si rxBuff. Value = 13 &aposprocess packet processPacket() &aposreset le tampon au début rxBuff. Location = 0 Else rxBuff. Location = rxBuff. Location + 1 EndIf WendEnd Sub&aposactive et désactive le port série pour la programmationSub toggleSerial_Event_Code() Si serialPort. Operate = cvFalse El serialPort. Operate = cvTruLEDe serial = cvTruLEDe serialPort. Operate = cvFalse serialActive_LED = 0 End IfEnd Sub&aposconvertit un nombre à un chiffre en un caractère. 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" Cas 3 retVal = "3" Cas 4 retVal = "4" Cas 5 retVal = "5" Cas 6 retVal = "6" Cas 7 retVal = "7" Cas 8 retVal = "8" Cas 9 retVal = "9" End Select serial_toChar = retValEnd Function&apos sen ds les données contenues dans txBuff&apos Remarque: assurez-vous que le tampon contient un retour chariot (13) à la fin !! Sub serial_SendBuffer() &apositerate à travers, en envoyant chaque octet, se termine sur le retour chariot txBuff. Location = 0 Tandis que 1 serialPort. Value = txBuff. Value ooPIC. Delay = 1 &apos pourrait ne pas avoir besoin de cela &apossee s'il s'agissait d'un retour chariot Si txBuff. Value = 13 &aposbreak hors de notre boucle Return End If &aposgo au caractère suivant txBuff. Location = txBuff. Location + 1 WendEnd Sub

Étape 4: déconnectez le connecteur de programmation

Déconnecter le connecteur de programmation
Déconnecter le connecteur de programmation
Déconnecter le connecteur de programmation
Déconnecter le connecteur de programmation

Une fois le connecteur de programmation déconnecté, fixez le nouvel ensemble de câbles comme indiqué ci-dessous. L'adaptateur réalisé à l'étape 1 doit permettre à la CMUCam d'être directement branchée sur l'OOPIC

Étape 5: Appuyez sur le bouton pour initialiser la communication série

Le bouton sur IOLine 5 lancera la communication série entre la CMUCam et l'OOPIC. Étant donné que le port série est utilisé à la fois pour la programmation et la CMUCam, il devrait probablement y avoir un moyen contrôlé de basculer entre les deux.

Le programme ne s'exécutera pas tant que ce bouton n'est pas enfoncé. Si vous appuyez à nouveau sur le bouton, le port série deviendra inactif, vous permettant de le programmer. La LED sur IOLine 6 affiche l'état actuel du port série (allumé signifie actif, éteint signifie prêt pour la programmation).

Conseillé: