Cuprins:

Interfațarea unui CMUCam2 cu un OOPIC: 5 pași
Interfațarea unui CMUCam2 cu un OOPIC: 5 pași

Video: Interfațarea unui CMUCam2 cu un OOPIC: 5 pași

Video: Interfațarea unui CMUCam2 cu un OOPIC: 5 pași
Video: Interfața unui sistem de operare 2024, Iulie
Anonim

De arsinio Urmăriți mai multe de la autor:

Conectarea a două OOBoards împreună folosind I2C
Conectarea a două OOBoards împreună folosind I2C
Conectarea a două OOBoards împreună folosind I2C
Conectarea a două OOBoards împreună folosind I2C

Prezentare generală a modului de interfață între CMUCam2 și OOPIC.

Pasul 1: Realizarea cablului adaptorului

Realizarea cablului adaptorului
Realizarea cablului adaptorului

1. Mergeți la radioshack și cumpărați 2 dintre acestea: Connector masculin DB-9 Solder Cup2. pinul de lipit 5 de pe conectorul A până la pinul 5 de pe conectorul B (dacă priviți cu atenție conectorul, acestea sunt marcate) 3. pinul de lipit 2 de pe conectorul A până la pinul 3 de pe conectorul B (dacă priviți cu atenție conectorul, acestea sunt marcate) 4. pinul de lipit 3 de pe conectorul A până la pinul 2 de pe conectorul B (dacă priviți cu atenție conectorul, acestea sunt marcate)

Pasul 2: Schimbați rata Baud pe CMUCam

Modificați rata Baud pe CMUCam
Modificați rata Baud pe CMUCam

Schimbați rata de baud a camerei CMUC la 9600 baud (adăugați un jumper în poziția 0).

Pasul 3: Conectați cablul de programare standard și încărcați codul

Conectați cablul de programare standard și încărcați codul
Conectați cablul de programare standard și încărcați codul

Conectați cablul de programare standard și încărcați codul. Iată câteva exemple de cod pentru a începe. Acest cod va urmări mișcarea folosind comenzile LF și FD. Acesta va comuta IOLine 7 (conectat la un LED) și va reflecta LED-ul de stare de urmărire pe CMUCam.

& apos ******** obiecte legate de portul serial ******** Dim serialPort As New oSerialPortDim txBuff As New oBuffer27 & aposchange 27 pentru a face bufferul mai mare / mai mic Dim 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 related related ******** Dim statLED As New oDIO1 & apos ***** ************************************** și apos * Subrutine generice * & apos ****** **************************************** Sub main & aposinitialize everything main_init & aposset our output mask to urmează doar centrul de masă CMUCAM_setOutputMask (2, 3) și descarcă cadrul diferenței noastre inițiale CMUCAM_loadDiffFrame () & aposstart calculul diferenței CMUCAM_startDiffCalc (10) End SubSub main_init & aposinitialize a status LED statLED. IOLine = 7 statLED. Direction = serial) Sfârșitul Su b & aposprocese primite pachete Sub procesPacket () Dim mx As Byte Dim my As Byte & aposcheck atat pentru Mx cat si My pentru a fi 0 & aposgranted daca nu sunt 0, locatia va fi dezactivata (adica & aposT 12 34) & apos dar apoi au castigat & apost indeplinesc 0 criterii rxBuff. Location = 2 mx = rxBuff. Value rxBuff. Location = 4 my = rxBuff. Value & aposthe led ar trebui să clipească la unison cu LED-ul de urmărire al camerei If (mx = "0") And (my = "0") statLED = 0 Else statLED = 1 End IfEnd Sub & apos ****************************************** **** & apos * Funcții CMU Cam * & apos *************************************** ******* și afișează ledul dat la pornit, oprit, automat și aposparam led Numărul de led (0, 1) și aposparam val oprit, pornit, automat (0, 1, 2) Funcție CMUCAM_ledSet (ledNum As Byte, val As Byte) Întrucât Byte & aposVString nu funcționa și apostează chiar în noul compilator … & nu sunt sigur de vechiul & apostxBuff. VString = "L0 0" & apossetup șirul nostru de comandă manual txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 & aposthe s funcția tr $ e de rahat … așa că acum se întâmplă txBuff. Value = serial_toChar (ledNum) txBuff. Location = 2 txBuff. Value = "" txBuff. Location = 3 txBuff. Value = serial_toChar (val) txBuff. Location = 4 txBuff. Value = 13 & apasă comanda serial_SendBufferEnd Sub & descarcă cadrul diferenței inițiale Sub CMUCAM_loadDiffFrame () & apasă manual șirul de comenzi txBuff. Location = 0 txBuff. Value = "L" txBuff. Location = 1 txBuff. Value = "F" txBuff. Location = 2 txBuff. Valoare = 13 & apossend comanda serial_SendBufferEnd Sub & aposstarts calculul diferențelor de cadru & aposparam prag de treierat (0-9) Sub CMUCAM_startDiffCalc (trezit ca octet) Dim zece ca octet & apossetup șirul nostru de comandă manual txBuff. Location = 0 txBuff. Value = "F" txBuff. Location 1 txBuff. Value = "D" txBuff. Location = 2 txBuff. Value = "" txBuff. Location = 3 zeci = treier / 10 txBuff. Value = serial_toChar (zeci) txBuff. Location = 4 zeci = treier / 10 txBuff. Value = serial_toChar (zece-zeci) txBuff. Location = 5 txBuff. Value = 1 3 & apossend comanda serial_SendBufferEnd Sub & apossets the output mask & aposparam packetType type of packet to mask (0, 1, 2, etc) see page 46 & aposparam mask mask value to apply (0-255) Sub CMUCAM_setOutputMask (packetType As Byte, mask As Byte) Dim sute As Byte Dim zece Byte & apossetup șirul nostru de comandă manual txBuff. Location = 0 txBuff. Value = "O" txBuff. Location = 1 txBuff. Value = "M" txBuff. Location = 2 txBuff. Value = "" & apospacket tip txBuff. Locație = 3 txBuff. Value = serial_toChar (packetType) txBuff. Location = 4 txBuff. Value = "" & masca pentru a aplica txBuff. Location = 5 sute = mască / 100 txBuff. Value = serial_toChar (sute) txBuff. Location = 6 zeci = (mask-sute) / 10 txBuff. Value = serial_toChar (zeci) txBuff. Location = 7 txBuff. Value = serial_toChar (mask-sute-zeci) & aposcarriage return txBuff. Location = 8 txBuff. Value = 13 & apossend comanda serial_SendBufferEnd Sub & apos * ******************************************** & apos * Subrutine generale de serie * & apo s ********************************************* și aposinializează seria portSub serial_init () & aposinitialize un buton pentru a porni și a opri portul serial (porniți pentru a rula, opriți pentru program) toggleSerial_Button. IOLine = 5 toggleSerial_Button. Direction = cvInput toggleSerial_Wire. Input. Link (toggleSerial_Button) Link (toggleSerial_Event. Operate) toggleSerial_Wire. Operate = cvTrue & aposinitialize a event to buffer our data serialReceive_Wire. Input. Link (serialPort. Received) serialReceive_Wire. Output. Link (serialReceive_Event. Operate_Review_Event. Operate = 0 & aposinitialize our serial serial serialPort. Baud = cv9600 & aposinitialize our serial status LED serialActive_LED. IOLine = 6 serialActive_LED. Direction = cvOutput & aposwait aici până când portul nostru serial este activat În timp ce serialPort. Operate = cv finalizarea pachetului Sub serialRe ceive_Event_Code () & apos.received devine fals când bufferul de 4 biți este gol În timp ce (serialPort. Received = cvTrue) & aposcopiați octetul în bufferul nostru rxBuff. Value = serialPort. Value & aposcheck pentru sfârșitul pachetului If rxBuff. Value = 13 & aposprocess & Apăsați resetarea buffer-ului la începutul rxBuff. Location = 0 Altele rxBuff. Location = rxBuff. Location + 1 EndIf WendEnd Sub și pornește și oprește portul serial pentru programare Sub toggleSerial_Event_Code () Dacă serialPort. Operate = cvFalse serialPort. Operate = cp serialPort. Operate = cvFalse serialActive_LED = 0 End IfEnd Sub & aposconvertește un număr dintr-o singură cifră într-un personaj Funcție serial_toChar (înVal Ca Byte) Ca Byte Dim retVal Ca Byte Select Case inVal Case 0 retVal = "0" Case 1 retVal = "1" Case 2 retVal = "2" Case 3 retVal = "3" Case 4 retVal = "4" Case 5 retVal = "5" Case 6 retVal = "6" Case 7 retVal = "7" Case 8 retVal = "8" Case 9 retVal = "9" End Select serial_toChar = retValEnd Function & apos sen ds datele conținute în txBuff & apos Notă: asigurați-vă că bufferul conține un return de transport (13) la sfârșit!. Value ooPIC. Delay = 1 & aposmight nu ar trebui să aibă nevoie de acest & aposee dacă a fost o întoarcere de trăsură If txBuff. Value = 13 & aposbreak out of our loop Return End If & aposgo to the next character txBuff. Location = txBuff. Location + 1 WendEnd Sub

Pasul 4: Deconectați conectorul de programare

Deconectați conectorul de programare
Deconectați conectorul de programare
Deconectați conectorul de programare
Deconectați conectorul de programare

Odată ce conectorul de programare este deconectat, atașați noul ansamblu de cablu așa cum se arată mai jos. Adaptorul realizat la pasul 1 ar trebui să permită conectarea directă a CMUCam la OOPIC

Pasul 5: Apăsați butonul pentru a inițializa comunicarea în serie

Butonul de pe IOLine 5 va porni comunicația serială între CMUCam și OOPIC. Deoarece portul serial este utilizat atât pentru programare, cât și pentru CMUCam, probabil ar trebui să existe un mod controlat de comutare între cele două.

Programul nu va rula până când nu este apăsat acest buton. Dacă apăsați butonul din nou, portul serial va rămâne inactiv, permițându-vă să-l programați. LED-ul de pe IOLine 6 afișează starea curentă a portului serial (aprins înseamnă activ, oprit înseamnă pregătit pentru programare).

Recomandat: