Funny problem: The program below runs on a PIC12F1501. If I remove all of the SEROUT2 stuff, It runs fine, with RLY action as expected. It also works as is, but the RLY (PORTA.0) output only pulses for about 5 uS each time through the loop. Any ideas?


'************************************************* *****
'* Battery saver for T-D industrial trucks
'* Richard Baggett for Sodexo at P&G Lima
'************************************************* *****

DEFINE OSC 16 'Don't care about power in this app.
DEFINE ADC_BITS 10
DEFINE ADC_SAMPLEUS 50
OSCCON = 111010
AD VAR PORTA.4
STX VAR PORTA.5
RLY VAR PORTA.0
AV VAR WORD 'Average of 10 samples
AN VAR WORD 'Analog value for voltage
EGG VAR WORD 'counter for 2 minute timer
PT VAR BYTE 'Rolling average pointer
IX VAR BYTE 'General use index
IDX VAR BYTE 'General use index
RL VAR WORD[10] 'Rolling average storage
TRIP VAR WORD 'Trip value

'AD config as follows
'ANSEL register for PIC12F1501
ANSELA.4 = 1 'Pin 4 analog
Input AD 'Make the analog pin an input
ADCON0 = 001101 'Set for chan 3, on, and not converting
ADCON1 = 100000 'Right justify, Fosc/32, Vref is Vdd
ADCON2 = 0 'No auto trigger of conversion

FOR IX = 0 TO 9 'Initialize to full charge
RL[IX] = 1024 'to allow moving the truck
NEXT 'for service on power up
TRIP = 2560
'Timer setup for sampler
PR2 = 250 'count value
T2CON = 111111 '1:64 prescale, 1:16 postscale, timer ON
EGG = 1874 'First measurement immediately
PIE1.1 = 1 'Enable the interrupt
ON INTERRUPT GOTO SAMPLE:
INTCON = 000000

OUTPIN VAR RLY 'Set up output for relay
OUTPUT OUTPIN
AN = 0
PT = 0

MLOOP:

'Lets output some stuff for initial calibration
'and eventual troubleshooting

SEROUT2 STX,16780,["Raw value: "]
SEROUT2 STX,16780,[DEC AN]
FOR IDX = 0 TO 5
SEROUT2 STX,16780, [32]
NEXT
SEROUT2 STX,16780,[13]
SEROUT2 STX,16780,["Avg X 10: "]
SEROUT2 STX,16780,[DEC AV]
FOR IDX = 0 TO 5
SEROUT2 STX,16780, [32]
NEXT
SEROUT2 STX,16780,[13]
SEROUT2 STX,16780,["Trip Point: "]
SEROUT2 STX,16780,[DEC TRIP]
FOR IDX = 0 TO 5
SEROUT2 STX,16780, [32]
NEXT
SEROUT2 STX,16780,[13]

'Decide if battery is charged enough
IF AV > TRIP THEN
RLY = 1
SEROUT2 STX,16780,["Truck is enabled "]
ELSE
RLY = 0
SEROUT2 STX,16780,["Truck is disabled"]
ENDIF

SEROUT2 STX,16780,[1]

GOTO MLOOP:

SAMPLE: 'Called 16.625 times per second
'sample must run every
'1875 calls for 1 iteration
'every 2 minutes
'10 samples in rolling average
'make a 20 minute rolling average
DISABLE
ADCIN 3, AN 'Get the analog value
EGG = EGG + 1
IF EGG = 1875 THEN
EGG = 0
RL[PT] = AN 'Stuff it in the average pool
PT = PT + 1 'Set up next spot in the pool

IF PT = 10 THEN 'Recurse
PT = 0
ENDIF

AV = 0 'Compute average (*10)
FOR IX = 0 TO 9
AV = AV + RL[IX]
NEXT

ENDIF
PIR1.1 = 0
RESUME

END