Hi Richard,
I don't know, I'm just guessing.
Here the code for PIC 16F688 working just fine:
Code:
'* Notes : PIC16F688 *
'****************************************************************
#CONFIG
cfg = _INTRC_OSC_NOCLKOUT
cfg&= _WDT_ON
cfg&= _PWRTE_OFF
cfg&= _MCLRE_OFF
cfg&= _CP_OFF
cfg&= _CPD_OFF
cfg&= _BOD_ON
cfg&= _IESO_ON
cfg&= _FCMEN_ON
__CONFIG cfg
#ENDCONFIG
DEFINE OSC 4
OSCCON = %01100100
ANSEL = 0 ; set all digital
TRISA = %00000000 ; PORT A all output
TRISC = %00100001 ; PORT C.5 input RX, C.0 safety, rest output
CMCON0 = 7
; def_ports:
PWPSpin var portc.1 ; servo signal OUTPUT (must be defined before PWPS_Servo.INC)
safety var portc.0 ; safety leash magnetic switch
; def_vars:
n var byte
cmd var byte
; def HW USART:
DEFINE HSER_BAUD 9600 ; Set Baud rate to 9600bps
DEFINE HSER_CLROERR 1 ; Clear overflow error automatically
DEFINE HSER_TXSTA 24h ; Set receive register to TX en
define HSER_SPBRG 25
DEFINE HSER_SPBRGH 1
DEFINE HSER_RCSTA 90h
; def ext libr:
include "PWPS_Servo.INC" ; Software Servo PWM module
init: ; vars start values
position = 1
cmd = 245
n = 0
gosub StartPWPS ; start PWPS module
Main:
hSerin 20,lost, [wait("Q"),dec cmd] ; wait for Q and then for CMD
if cmd = 155 then ; increment servoimpulse
Position=Position+1
if Position > 1199 then Position = 1200 ; max servoimpulse lenght 2us
gosub SetPWPS
endif
if cmd = 145 then ; decrement servoimpulse
Position=Position-1
if Position < 1 then Position = 1 ; min servoimpulse lenght 1us
gosub SetPWPS
n=n+1 ; long press decrement
if n=255 then ; switch to minimum servoimpulse after cca. 3. sec.
position=1
endif
endif
if cmd = 245 then ; if transmitter is switched OFF servoimpulse to nimimum
Position=1
gosub SetPWPS
endif
if safety = 1 then ; if safety switch is OFF servoimpulse to nimimum
Position=1
gosub SetPWPS
endif
goto main
lost:
n=0 ; clear long press counter value to 0
if safety = 1 then ; if safety switch is OFF servoimpulse to nimimum
Position=1
gosub SetPWPS
endif
goto main
Here the code for PIC 16F1824 it causes collisions, the code is the same except config:
Code:
'* Notes : PIC16F1824 *
'****************************************************************
#CONFIG
__config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
__config _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_19 & _LVP_OFF
#ENDCONFIG
DEFINE OSC 4 ; Use a 4 MHZ internal clock
OSCCON = %01101000
ANSELA = 0
ANSELC = 0
TRISA = %000000
TRISC = %00100001 ; PORT C.5 input RX, C.0 safety, rest output
CM1CON0 = 0 ; Disable comparator 1
CM2CON0 = 0 ; Disable comparator 2
OPTION_REG.7=1 ; Disable weak pull ups
APFCON0.7=0
APFCON0.2=0
; def_ports:
PWPSpin var portc.1 ; servo signal OUTPUT (must be defined before PWPS_Servo.INC)
safety var portc.0 ; safety leash magnetic switch
; def_vars:
n var byte
cmd var byte
; def HW USART:
DEFINE HSER_BAUD 9600 ; Set Baud rate to 9600bps
DEFINE HSER_CLROERR 1 ; Clear overflow error automatically
DEFINE HSER_TXSTA 24h ; Set receive register to TX en
define HSER_SPBRG 25
DEFINE HSER_SPBRGH 1
DEFINE HSER_RCSTA 90h
; def ext libr:
include "PWPS_Servo.INC" ; Software Servo PWM module
init: ; vars start values
position = 1
cmd = 245
n = 0
gosub StartPWPS ; start PWPS module
Main:
hSerin 20,lost, [wait("Q"),dec cmd] ; wait for Q and then for CMD
if cmd = 155 then ; increment servoimpulse
Position=Position+1
if Position > 1199 then Position = 1200 ; max servoimpulse lenght 2us
gosub SetPWPS
endif
if cmd = 145 then ; decrement servoimpulse
Position=Position-1
if Position < 1 then Position = 1 ; min servoimpulse lenght 1us
gosub SetPWPS
n=n+1 ; long press decrement
if n=255 then ; switch to minimum servoimpulse after cca. 3. sec.
position=1
endif
endif
if cmd = 245 then ; if transmitter is switched OFF servoimpulse to nimimum
Position=1
gosub SetPWPS
endif
if safety = 1 then ; if safety switch is OFF servoimpulse to nimimum
Position=1
gosub SetPWPS
endif
goto main
lost:
n=0 ; clear long press counter value to 0
if safety = 1 then ; if safety switch is OFF servoimpulse to nimimum
Position=1
gosub SetPWPS
endif
goto main
Here is the PWPS include file:
PWPS_Servo.INC.txt
Bookmarks