Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to find $STAMP directive #320

Open
PropGit opened this issue Dec 30, 2015 · 0 comments
Open

Unable to find $STAMP directive #320

PropGit opened this issue Dec 30, 2015 · 0 comments
Labels

Comments

@PropGit
Copy link
Contributor

PropGit commented Dec 30, 2015

The following code causes a tokenization error, "Unknown target module. $STAMP directive not found," yet the $STAMP directive is clearly there and the same code tokenizes just fine in the BSE.

I do not know yet, why this code does not work in Parallax IDE, but we should try it in the PBASIC Tokenizer tester first, and if that works, I suspect some kind of character handling issue between the app and its tokenizer.

' ============================================================================
' HMC5883L_Demo.bs2 - This is a Demo program for the HMC5883L Compass
' Module (PN: 29133). It displays the compass heading north, east, south and west
' clockwise from north.
'
' Author.... (C) John A. Williams
'
' {$STAMP BS2p}
' {$PBASIC 2.5}
' ============================================================================

' -----[ Pins/Constants/Variables ]-------------------------------------------
SDA            PIN      0                    'P0 transceives to/from SDA
SCL            PIN      1                    'P1 sends clock pulses

WRITE_DATA     CON     $3C  'Used to perform a Write operation
READ_DATA      CON     $3D  'Used to perform a Read operation

MODE           CON     $02  'Read/Write Register, Selects the operating mode. Default = Single measurement
                             'Send $3C $02 $00 on power up to change to continuous measurement mode.
X_MSB          CON     $03  'Read Register, Output of X MSB 8-bit value.
X_LSB          CON     $04  'Read Register, Output of X LSB 8-bit value.
Z_MSB          CON     $05  'Read Register, Output of Z MSB 8-bit value.
Z_LSB          CON     $06  'Read Register, Output of Z LSB 8-bit value.
Y_MSB          CON     $07  'Read Register, Output of Y MSB 8-bit value.
Y_LSB          CON     $08  'Read Register, Output of Y LSB 8-bit value.
Cont_Mode      CON     $0
SCALEFACTOR    CON     4081 'SCALEFACTOR = 65536 * (255/4095) = 4081
SCALEOFFSET    CON     2048 'The output range of the HMC5883L is -2048 to 2047; therefore to get a 0 (LOWRANGE)to 4095 range
                            'to 4095 (HIGHRANGE) range 2048 must be added to the sensor value.
ATNFACTOR      CON     127  'the ATN function input range is -127 TO 127. In order to get the positive scaled range of
                            '0 to 255 into the range of -127 to 127, 127 must be subtracted.
LOWRANGE       CON     0    'see SCALEOFFSET
HIGHRANGE      CON     4095 'see SCALEOFFSET

X              VAR      Word 'x sensor measured value
Y              VAR      Word 'y sensor measured value
Z              VAR      Word 'z sensor measured value
brads          VAR      Word 'angle in brads
degr           VAR      Word 'angle in degrees
azimuth        VAR      Word 'value calculated using X ATN -Y


' -----[ Main Routine ]-------------------------------------------------------

PAUSE 10                                     ' Give sensor needed power up time

  I2COUT SDA, WRITE_DATA, MODE, [Cont_Mode]  ' Send continuous output command

DO

  GOSUB GetRawReading                       ' Get RAW Compass reading

  'RAW X,Y,Z data...
  DEBUG HOME, "RAW X,Y,Z", CR
  DEBUG       "X = ",11, SDEC x, CR
  DEBUG       "Y = ",11, SDEC y, CR
  DEBUG       "Z = ",11, SDEC z, CR         ' Print angle
  DEBUG CR

  'Calculate Azimuth

  GOSUB GetAzimuth

  'Calculated Heading in Degrees

  brads = azimuth     'get angle
  degr = brads */ 361 'convert to degrees
  DEBUG CR
  DEBUG "Heading in NORTH, EAST, SOUTH, and WEST clockwise from NORTH:", CLREOL, CR, CR
  DEBUG "Degree " ,11, SDEC degr, CR 'display degrees
  GOSUB GetHeading

LOOP


' -----[ Subroutines ]--------------------------------------------------------

GetRawReading:                                 'Compass module subroutine


    PAUSE 400                                  'Wait for new data to become available


    I2CIN SDA, READ_DATA, X_MSB, [X.HIGHBYTE]  'Read the data starting at x_msb 3


    I2CIN SDA, READ_DATA ,X_LSB, [X.LOWBYTE]

'Do the same for Z and Y:

    I2CIN SDA, READ_DATA, Z_MSB, [Z.HIGHBYTE]


    I2CIN SDA, READ_DATA ,Z_LSB, [Z.LOWBYTE]



    I2CIN SDA, READ_DATA, Y_MSB, [Y.HIGHBYTE]


    I2CIN SDA, READ_DATA ,Y_LSB, [Y.LOWBYTE]

RETURN

GetAzimuth:
'The output range of the HMC5883L is -2048 to 2047 and the input range of the ATN function
'is -127 to 127.  I used the method to scale the output to the input discribed in Parallax's Smart
'Sensors Student Guide v1 starting on page 76.
'SCALEFACTOR = 65536 * (255/4095) = 4081
'SCALEOFFSET = 2048
'ATNFACTOR = 127
'LOWRANGE = 0
'HIGRANGE = 4095 (2048 + 2047 = 4095)

    x = x + SCALEOFFSET
    x = (x MIN LOWRANGE MAX HIGHRANGE) ** SCALEFACTOR - ATNFACTOR

    y = y + SCALEOFFSET
    y = (y MIN LOWRANGE MAX HIGHRANGE) ** SCALEFACTOR - ATNFACTOR


  DEBUG       "SCALED X,Y", CR
  DEBUG       "X = ",11, SDEC x, CR
  DEBUG       "Y = ",11, SDEC y, CR

    azimuth = x ATN -y

  DEBUG "Azimuth ",11, SDEC azimuth, CR ' display scaled azimuth
  DEBUG "COS Azimuth ",11, SDEC COS azimuth, CR ' display scaled cos azimuth
RETURN

GetHeading:
'Gives a heading in North, South, East and West.

    IF degr = 90 THEN
        DEBUG "NORTH"
        DEBUG CLREOL
    ENDIF


    IF degr = 0 THEN
         DEBUG "EAST"
         DEBUG CLREOL
    ENDIF


    IF degr = 270 THEN
         DEBUG "SOUTH"
         DEBUG CLREOL
    ENDIF


    IF degr = 180 THEN
         DEBUG "WEST"
         DEBUG CLREOL
    ENDIF

RETURN
@PropGit PropGit added the Bug label Dec 30, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant