Thanks Grounded this works great for me, I added a timer and commented out the line that calls it I have my camera set up outside and will be taking movies every hour for 10 seconds. The Code below should be good for testing, the code as is should cycle through, Camera Off, Camera On, Record on, Record off, Camera Off then back through.
turn the camera on first when you power the pic it will turn off the camera.
I am not using the pull down resistor at this time and I am using 1k resistors from pins 1,2 to lanC line, and yes once you get it running use one pin for both.
Code:'Testing Sony LanC control of video camera [email protected] SCS Saturday August 29, 2009 'Sending commands is LSB first example hex 22, %00100010 you send the far right zero first then the one then three zeros 'and a one then two more zeros. The Lanc port is held in the high state by the camera, Pulling the pin low is a 1 'I used input command to keep the line in its high state at 5vdc, and low to pull the line low for a 1. So again 'using the hex 22 example %00100010, input,low,input,input,input,low,input,input. @ DEVICE PIC16F84,HS_OSC,WDT_OFF,PWRT_ON,PROTECT_OFF DEFINE OSC 10 command_bit var bit syncbit var byte syncbyte var word counter var byte value var byte Bits var byte Time var byte Goto start Sync_byte: 'Sync_byte looks for the inter_frame gap 5.4mS to 7mS at the end of every syncbyte = 0 'frame tranmissions and just before the start of the next frame while syncbyte < 700 pulsin portb.1, 1, syncbyte wend Return Sync_bit: 'Sync_Bit looks for the start_bit of each frame this is used syncbit = 0 'in sending the second byte of a command while syncbit < 9 pulsin portb.1, 0, syncbit wend Return Command_byte: 'tell camera that a command is to follow normal commands gosub sync_byte pauseus 80 'pause for camera's start bit to finish input portb.2 'first byte to send (LSB 1ST)Hex 18 %0001,1000 pauseus 312 low portb.2 pauseus 208 input portb.2 pauseus 312 input portb.2 'Stop bits set high Return Start: pause 1000 counter = 0 gosub Power_off pause 10000 'gosub DelayTime counter = 0 gosub Wakeup gosub Power_on pause 3000 counter = 0 gosub Record_on pause 10000 counter = 0 gosub Record_on pause 500 goto Start Power_off: gosub Command_byte gosub sync_bit input portb.2 'Power off command #5E (LSB 1ST) %0101,1110 pauseus 104 low portb.2 pauseus 416 input portb.2 pauseus 104 low portb.2 pauseus 104 input portb.2 pauseus 104 input portb.2 'Stop bits set high counter = counter + 1 if counter = 3 then Return goto Power_off Power_on: gosub Command_byte gosub Sync_bit input portb.2 'Turn camera on from sleep mode pauseus 208 'Power on Command 5C (LSB 1ST) %0101,1100 low portb.2 pauseus 312 input portb.2 pauseus 104 low portb.2 pauseus 104 input portb.2 pauseus 208 input portb.2 'Stop bits set high counter = counter + 1 if counter = 5 then Return goto Power_on Record_on: gosub Command_byte gosub Sync_bit low portb.2 'Start Recording pauseus 208 'Record On 33 (LSB 1ST) %0011,0011 input portb.2 pauseus 208 low portb.2 pauseus 208 input portb.2 pauseus 208 input portb.2 'Stop bits set high counter = counter + 1 if counter = 5 then Return goto Record_on DelayTime: For Time = 0 to 60 pause 60000 Next Time Return Wakeup: low portb.2 'This wakes camera up for short period to accept commands pause 500 input portb.2 pause 100 Return




Bookmarks