I dropped the PBP LanC read/write in to some of my generic PBP camera code
because I was able to read/ write with 1 pin like I do with the assembly code
I could just drop the PBP version in the 16f676 and the camera is up and running
thanks
Code:
'****************************************************************
'* Name : pbp_sony_n.BAS *
'* Author : R Slaton AKA Grounded /Ratsnest *
'* Notice : Copyright (c) 2009 peek-a-boo wild life systems *
'* : All Rights Reserved *
'* Date : 9/23/2009 *
'* Version : 1.0 *
'* Notes : SONY LanC NIGHTTIME ONLY WITH IR LED ARRAY *
'* :DIP 1 ON 60SEC. MOVIE /30 SEC DEFAULT *
'* :DIP 2 ON 60 AFTER MOVIE DELAY /30 DEFAULT
'* :PIR TRIPS HIGH/15SEC.TEST MOVIE @ CONTROLLER BOOTUP
'* :THANKS TO l_gaminde ON THE BIT BANGING READ WRITE PART
'****************************************************************
pic16F676
@ __config _XT_OSC & _WDT_ON & _MCLRE_OFF & _CP_OFF
'DEFINE OSC 4 'EXTERNAL CLOCK SPEED 4MH.
DEFINE ADC_BITS 10 'ADC 10 BIT #
DEFINE ADC_CLOCK 3 'ADC SAMPLE CLOCK
DEFINE ADC_SAMPLEUS 50 'SAMPLE EVERY 50 US.
Pause 5000 'DELAY TO LET STABILIZE AFTER POWER UP & MODE
CMCON = 7 'COMPARATOR OFF
VRCON = 0 'VOLTAGE REF. DISABLE
TRISA = %00001101 'MAKE A.2 & A.3 INPUTS
TRISC = %00000110 'MAKE .C.0,C.1 PORTC INPUTS
ANSEL = %00000001 'PORTA.0 A/D IN,RST DIGITAL
ADCON0.7 = 1 'RIGHT JUSTIFY FOR 10 BIT
OPTION_REG=%01000000 'RAISING EDGE/WEAK PULL UP
WPUA = %00000000 'NO WEAK PULLUPS
SYMBOL ADC =PORTA.0 'ADCIN
SYMBOL LDR =PORTA.1 'PHOTO CELL POWER
SYMBOL PIR =PORTA.2 'PIR TRIPS HIGH
SYMBOL MODE =PORTA.3 'MODE BUTTON
'SYMBOL XT =PORTA.4 'XT_OSC
'SYMBOL XT =PORTA.5 'XT_OSC
SYMBOL LED =PORTC.0 'LED & DIP SWITCH
SYMBOL DIPB =PORTC.1 'DIP SWITCH 2
SYMBOL DIPA =PORTC.2 'DIP SWITCH 1
SYMBOL RL =PORTC.3 'REMOTE LIGHT
SYMBOL LANC =PORTC.4 'READ /WRITE LANC
SYMBOL NA =PORTC.5 'FOR SERVO OPTION
ADC=0:LDR=0:PIR=0:MODE=0:LED=0:DIPA=0:DIPB=0:LED=0:RL=0:LANC=0:NA=0
LED=1 :PAUSE 5000 :LED=0
GOTO TESTMOVIE
'****************************SET UP VARIBLES***************************
DT VAR BYTE :DT =30 'AFTER MOVIE DELAY VAR. /30 SEC. DEFAULT
DAY VAR BYTE :DAY=0 'DIP SWITCH 1 VAR FOR DAY ONLY OR DAY/NIGHT
ML VAR BYTE :ML=0 'DIP SWITCH 2 VAR FOR VARIBLE MOVIE LENGTH
RCL VAR BYTE :RCL=0 'RECORD LED VAR
NIGHT VAR WORD:NIGHT=0 'LDR/ADCIN VAR FOR LIGHT SENSOR
command_bit var bit
syncbit var byte
syncbyte var word
counter var byte
value var byte
Bits var byte
Time var byte
'***********************DAY/ NIGHT PHOTO CELL CAL MODE*******************
IF MODE=0 Then GoTo CAL 'IF MODE BUTTON PUSHED THEN GOTO LRD CAL MODE
GoTo testmovie 'SKIP CAL MODE GO CHECK DIP SWITCHES
CAL:
LDR=1:Pause 250 'TURN LDR/ADCIN POWER ON
LED=1:Pause 250:LED=0:Pause 250
LED=1:Pause 250:LED=0:Pause 1000 ' FLASH YOUR IN CAL MODE
TEST:
NIGHT=0
LED=0
ADCIN 0,NIGHT 'CHECK AN# READ AN0 & STORE IN NIGHT VAR
IF NIGHT=>550 Then LED=1 'IF LED IS ON THEN NIGHT MOVIE
Pause 250 ' IF OFF DAYTIME
IF MODE =0 Then GoTo testmovie 'LEAVE CAL MODE
GoTo TEST 'LOOP AND CHECK FOR LIGHT AGAIN
'*********************************SET UP SUBS****************
Sync_byte: 'Sync_byte looks for the inter_frame gap
syncbyte = 0
while syncbyte < 700
pulsin portc.4, 1, syncbyte
wend
Return
Sync_bit: 'Sync_Bit looks for the start_bit of each frame
syncbit = 0
while syncbit < 9
pulsin portc.4, 0, syncbit
wend
Return
Command_byte: 'tell camera that a command is to follow normal commands
gosub sync_byte
pauseus 55 'pause for camera's start bit to finish 55= MID OF BIT
input portc.4 'first byte to send (LSB 1ST)Hex 18 %0001,1000
pauseus 312 '000
low portc.4
pauseus 208 '11
input portc.4
pauseus 312 '000
input portc.4 'Stop bits set high
Return
Record_SS:
gosub Command_byte
gosub Sync_bit
low portc.4 'USED TO STOP AND Start Recording
pauseus 208 '11 ' 33 (LSB 1ST) %0011,0011
input portc.4
pauseus 208 '00
low portc.4
pauseus 208 '11
input portc.4
pauseus 208 '00
input portc.4 'Stop bits set high
counter = counter + 1
if counter = 5 then Return
goto Record_SS
Power_off:
gosub Command_byte
gosub sync_bit
input portc.4 'Power off command #5E (LSB 1ST) %0101,1110
pauseus 104 '0
low portc.4
pauseus 416 '1111
input portc.4
pauseus 104 '0
low portc.4
pauseus 104 '1
input portc.4
pauseus 104 '0
input portc.4 'Stop bits set high
counter = counter + 1
if counter = 5 then Return
goto Power_off
'*********************************TESTMOVIE*******
TESTMOVIE:
COUNTER=0
GOSUB RECORD_SS
PAUSE 15000 '15 SEC. TEST MOVIE
COUNTER=0
GOSUB RECORD_SS
PAUSE 3000
COUNTER=0
GOSUB Power_off
'*********************************DIP CHECK****************
CKD:
night=0 'CLEAR NIGHT VAR
led=0 'MAKE SURE LED IS OFF
Pause 20
LED=1 :Pause 250 'TURN DIP SWITCH POWER ON
IF DIPA=0 Then ML=30
IF DIPA=1 Then ML=60
'***********************SET DELAY**************************
IF DIPB=0 Then dt=30
IF DIPB=1 Then dt=60
Pause 300
LED=0 'TURN DIP SWITCH POWER OFF
'****************************** PIR WARM UP & WALKTEST *************
Sleep 50 '50 SEC. PIR WARM UP
LED=1:Pause 350:LED=0:Pause 500 'FLASH LED FOR START OF WALKTEST
LED=1:Pause 350:LED=0:Pause 500
LED=1:Pause 350:LED=0:pause 500
A VAR WORD
For A= 0 TO 30000 '20 SEC. WALKTEST TIME RESETS WITH pir TRIP
Pause 1
IF PIR=1 Then 'IF PIR TRIPS THEN TURN ON LED
LED=1
Pause 1000
LED=0
Pause 500
A=0
EndIF
Next A
LED=1 :Pause 500 :LED=0 :Pause 300 'FLASH LED END OF WALKTEST
LED=1 :Pause 500 :LED=0 :Pause 300
SLEEP 20 :led=1 :Pause 500 : led=0 '20 SEC TO GET OUT OF THE WAY
'************************ GOTO SLEEP & WAIT FIR INTERUPT **********
MAIN:
NIGHT =0 'CLEAR NIGHT VAR TO 0
ON INTERRUPT GoTo MOVIE 'ON PIR TRIP WAKE UP
INTCON=$90 'ENABLE .2 INTERUPT
Sleep 900 '15 MIN SLEEP
GoTo MAIN 'GO BACK TO SLEEP AND WAIT ON INTERUPT
Disable
'*************************************MAKE MOVIE ***************************
MOVIE:
INTCON=0 'DISABLE ALL INTERUPTS
pause 200
IF PIR =0 then sleep 60 :goto delay 'DID THE PIR CAUSE THE INTERUPPT
LDR=1 'POWER UP LIGHT SENSOR
Pause 20
ADCIN 0,NIGHT 'READ AN1 & STORE IN NIGHT VAR
PAUSE 250
IF NIGHT=<550 Then SLEEP 120 :GOTO DELAY ' IT'S DAY
Pause 25
LDR=0
Wakeup: ' WAKE CAM UP FROM POWER SAVING SLEEP MODE
low portc.4 '
pause 500
input portc.4
pause 3000 'CAM BOOT UP TIME
RL=1 'TURN IR LED ARRAY ON
counter=0
gosub record_ss
SLEEP ML 'MOVIE LENGHT SET WITH DIP1 30/60
counter=0
gosub record_ss
pause 5000 'GOTO STANDBY
counter=0
gosub power_off 'PUT CAM TO SLEEP
'******************************BETWEEN MOVIE DELAY *******************
DELAY:
INTCON=0 'DISABLE ALL INTERUPTS
LDR=0 'MAKE SURE LDR/ADCIN POWER OFF
RL=0 'MAKE SURE REMOTE LIGHT IS OFF
Sleep DT 'DELAY SET WITH DIP2 30/60
INTCON.1=0 'RESET A.2 INTERUPT FLAG
Disable
GoTo MAIN 'GO BACK TO SLEEP AND WAIT FOR NEXT INTERUPT
Enable
Bookmarks