Shop OBEX P1 Docs P2 Docs Learn Events
Why is this code not working? (Weather Vane) — Parallax Forums

Why is this code not working? (Weather Vane)

FranklinFranklin Posts: 4,747
edited 2007-06-30 16:23 in BASIC Stamp
' {$STAMP BS2e}
' {$PBASIC 2.5}
_INIT           CON   $FFAA 'INITIALIZE COPROCESSOR
_ERRORS         CON   $FE 'Get Error Flags
_LOW            CON   $B0 'SET PIN OUTPUT LOW
_HIGH           CON   $B1 'SET PIN OUTPUT HIGH
_INPUT          CON   $B2 'SET PIN TO INPUT
_INPUTP         CON   $B6 'SET PIN TO INPUT WITH PULLUP
_PUSH           CON   $D0 'PUSH ONE BYTE ON STACK at the current sram pointer and increment pointer
_POP            CON   $D1 'decrement sram pointer and POP ONE BYTE OFF STACK
_ZSTACK         CON   $D2 'ZERO THE STACK POINTER
_CLRBL          CON   $B7 'CLEAR THE BLATCH REGISTER
_CLRCL          CON   $B8 'CLEAR THE CLATCH REGISTER
_RPINSA         CON   $C0 'READ PINS  0...5
_RPINSB         CON   $C1 'READ PINS  6..11
_RPINSC         CON   $C2 'READ PINS 12..18
_PINSBL         CON   $C3 'READ LATCHED LOW PINS   6..11
_PINSCL         CON   $C4 'READ LATCHED HIGH PINS 12..18
_SECONDS        CON   $C5 'Read seconds
_MINUTES        CON   $C6 'Read Minutes
_HOURS          CON   $C7 'Read Hours
_TIME           CON   $C8 'Read seconds,minutes,hours
_ADC0           CON   $A0 'READ ADC0
_ADC1           CON   $A1 'READ ADC1
_ADC2           CON   $A2 'READ ADC2
_ADC3           CON   $A3 'READ ADC3
_ADC4           CON   $A4 'READ ADC4
_ADC5           CON   $A5
_WRITEFLASH     CON   $D3 'write 5120 bytes from SRAM to FLASH memory
_READFLASH      CON   $D4 'Read 5120 bytes from FLASH to SRAM memory
_Readsram       CON   $D5 'Read a byte at the current sram pointer and increment pointer
_setstack       CON   $D6 'Set the Sram pointer
_EWRITE         CON   $D7 'wRITE A BYTE TO EEPROM
_EREAD          CON   $D8 'Read  a byte from EEPROM
  vane1 VAR Word
  vane2 VAR Word
 
page      VAR   Byte
TEMP      VAR   Word
BUFFER    VAR   Byte
Seconds   VAR   Byte
Minutes   VAR   Byte
Hours     VAR   Byte
adcval0   VAR   Word
adcval1   VAR   Word
delta     VAR   Word
bearing   VAR   Word
ad1 VAR Byte
ad0 VAR Byte
x VAR Byte
DEBUG "CO-PRO-M48 WeatherVane Test Program",CR
PAUSE 1000
delta = 700 'delta is the overlap between wipers
readvane:
GOSUB adc
DEBUG DEC adcval0,",",DEC adcval1,",",DEC bearing,CR
'
[color=red]'CODE FROM FANTASTICELECTRONICS.com weather vane kit
'
' Decide IF we should update the delta value.
IF adcval0 > 5120 - 2 * delta AND adcval0 < 4920 AND adcval1 < 2 * delta AND adcval1 > 200 THEN
delta = (9 * delta + (adcval1 + 5120 - adcval0) / 2) / 10
ELSEIF adcval1 > 5120 - 2 * delta AND adcval1 < 4920 AND adcval0 < 2 * delta AND adcval0 > 200 THEN
delta = (9 * delta + (adcval0 + 5120 - adcval1) / 2) / 10
ENDIF[/color]
[color=red]' Decide IF we have a valid bearing off of one of the wipers.
IF (adcval0 > delta AND adcval0 < 5120 - delta) AND (adcval1 > 5120 - delta OR adcval1 < delta) THEN
bearing = 180 * (adcval0 - delta) / (5120 - 2 * delta)
ELSEIF (adcval1 > delta AND adcval1 < 5120 - delta) AND (adcval0 > 5120 - delta OR adcval0 < delta) THEN
bearing = 180 + 180 * (adcval1 - delta) / (5120 - 2 * delta)
ENDIF
'
'CODE FROM FANTASTICELECTRONICS.com weather vane kit
'
[/color]PAUSE 5000
GOTO readvane
adc:
adcval0 = 0
adcval1 = 0
SHIFTOUT 0,1,1,[noparse][[/noparse]_ADC0]
SHIFTIN  0,1,0,[noparse][[/noparse]adcval0]
adcval0 = adcval0 * 20
PAUSE 100
SHIFTOUT 0,1,1,[noparse][[/noparse]_ADC1]
SHIFTIN  0,1,0,[noparse][[/noparse]adcval1]
adcval1 = adcval1 * 20
RETURN

Can someone look at the highlighted code and tell me why it is not resolving bearing and why it never changes delta. the values for adcval range from about 20 to 5100.
If you need more info just ask, Thanks

▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- Stephen

Comments

  • PJAllenPJAllen Banned Posts: 5,065
    edited 2007-06-30 14:13
    Maybe it's that this part --

    IF adcval0 > 5120 - 2 * delta AND adcval0 < 4920 AND adcval1 < 2 * delta AND adcval1 > 200

    needs some Parentheses worked in (as similar lines have.)
  • Tracy AllenTracy Allen Posts: 6,664
    edited 2007-06-30 16:15
    If I understand the Fascinating vane, the value of delta is mechanically fixed and should not change after initial calibration. Why are you expecting it to change? Also, the decision on which wiper to use seems too complicated. The idea is to have recourse to a second wiper when the first one happens to be in the dead band. That shouldn't be too hard to determine, because the dead band will be a certain small range of readings. If it falls within that range, then fall back on the second wiper.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Tracy Allen
    www.emesystems.com
  • FranklinFranklin Posts: 4,747
    edited 2007-06-30 16:23
    Thanks guys, The code is directly from the instructions for the vane and I will be the first to admit I don't fully understand it. The explanation they give for the vanes and delta is that the readings at the last 10% of the wiper may be erratic so the delta keeps you from reading that range. I'm still working on it, the values seem to be OK if I read them with a meter but when I use ADC the values don't look the same. (using stamp plot, great tool) I'll let you know what I find.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    - Stephen
Sign In or Register to comment.