Shop OBEX P1 Docs P2 Docs Learn Events
Writing Data to memory Stick Datalogger — Parallax Forums

Writing Data to memory Stick Datalogger

blackbeltblackbelt Posts: 9
edited 2010-01-14 07:43 in BASIC Stamp
I am having trouble·writing to the memory stick datalogger using the following bs2p40 code.

Var1··········· VAR···· Byte
Var2··········· VAR···· Nib
Var3··········· VAR···· Byte
Var4··········· VAR···· Nib
Var5··········· VAR···· Byte
Var6··········· VAR···· Byte
Var7··········· VAR···· Byte
Var8··········· VAR···· Byte
Var9··········· VAR···· Byte

··· GET 50, Var1······ ' Temperature1
··· GET 51, Var2······ ' Decimal1
··· GET 52, Var3······ ' Temperature2
··· GET 53, Var4······ ' Decimal2
··· GET 54, Var5······ ' sec
··· GET 55, Var6······ ' minute
··· GET 56, Var7······ ' hr
··· GET 57, Var8······ ' day
··· GET 58, Var9······ ' month

··· SEROUT TX\CTS, Baud, [noparse][[/noparse]$08, $20, $00, $00, $00, $0D, CR,
········· DEC Var1, ".", DEC1 Var2, ", ", DEC Var3, ".", DEC1 Var4,
········· HEX2 Var7, ":", HEX2 Var6, ":", HEX2 Var5, ",", HEX2 Var9, "/", HEX2 Var8, CR, LF, CR]

I tried DEC2 instead of HEX2 with no success.

However, it works if I reduce the number of variables to 4 as shown below.
· SEROUT TX\CTS, Baud, [noparse][[/noparse]$08, $20, $00, $00, $00, $0D, CR,
········· DEC Var1, ".", DEC1 Var2, ", ", DEC Var3, ".", DEC1 Var4, CR, LF, CR]

What is the function of three $00 commands?

Comments

  • Tracy AllenTracy Allen Posts: 6,662
    edited 2010-01-13 06:23
    The function of the 4 bytes aftere the $08,$20 is to specify how many byres of data follow the CR. It can be up to $FFFF=65535 bytes, but usually a PBASIC program will send less than 256, so there will be three $00s and one byte from $01 to $FF.
    [noparse][[/noparse]$08, $20, $00, $00, $00, $0D, CR, ...
    specifies that $0D = 13 bytes of data.
    The number of bytes that follow the CR has to be counted exactly, and therefore do use modifiers like DEC2 that specify an exact number.

    Suppose you follow with the following data (using DEC2 instead of DEC):
    DEC2 Var1, ".", DEC1 Var2, ", ", DEC2 Var3, ".", DEC1 Var4, " ", HEX2 Var7, ":", HEX2 Var6, ":", HEX2 Var5, ",", HEX2 Var9, "/", HEX2 Var8, CR, LF]
    By my count that is 26 bytes, not 13.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Tracy Allen
    www.emesystems.com
  • blackbeltblackbelt Posts: 9
    edited 2010-01-14 05:05
    Allen,

    Thank you... I understand the SEROUT command structure for the datalogger now.

    One more question: How did you count 26 bytes in the following?

    DEC2 Var1, ".", DEC1 Var2, ", ", DEC2 Var3, ".", DEC1 Var4, " ", HEX2 Var7, ":", HEX2 Var6, ":", HEX2 Var5, ",", HEX2 Var9, "/", HEX2 Var8, CR, LF]
    Var 1 thru Var 9 is 8 Bytes since 2 of the variables are NIB's.·What is the byte count of ASCII characters like "." ",", etc?·
  • Tracy AllenTracy Allen Posts: 6,662
    edited 2010-01-14 07:43
    The SEROUT command does everything as bytes. If Var2 is a NIB with a value from 0 to 9, it will be transmitted by the DEC1 as an 8-bit ascii code, a byte from $30 to #39 (decimal 48 to 57).

    DEC2 VarX will always send 2 bytes, that is, two ascii characters in the range of $30 to $39, no matter what the size of variable VarX. If VarX is a bit variable with value 1, then DEC2 VarX will transmit $30 #31, the ascii characters for "01". On the other hand is VarX is a word variable with value 12345, then DEC2 VarX will transmit $34 $35, the ascii codes for "45". Each character like "." or "/" is also a one byte ascii code.

    DEC2=2 instances times 2 bytes total 4 bytes
    HEX2=5 instances times 2 bytes total 10 bytes
    DEC1 =2 instances times 1 byte total 2 bytes
    punctuation total 8 bytes
    CRLF total 2 bytes
    Grand Total = 26 bytes

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Tracy Allen
    www.emesystems.com
Sign In or Register to comment.