Shop OBEX P1 Docs P2 Docs Learn Events
constructive criticism please — Parallax Forums

constructive criticism please

J^3J^3 Posts: 121
edited 2008-03-11 04:00 in BASIC Stamp
Good evening all,
I m looking for advice on how to improve my code, and learn new tricks.· If any of you would like to share how you would do the same thing I am doing in a different way I would appreciate it.· Also a big thank you to Tracy Allen and others who have helped me get this far.
P.S.· This is just the beginning of a bigger project and I will try to post pics of the final result.
' File:AD592.bsp
' Author:JJ
' Date:2-29-08
' {$STAMP BS2p}
' {$PBASIC 2.5}
'----Program Description-------------------------------------------------------
'Display temperature in degrees celsius utilizing an AD592 sensor and LTC1298
'ADC
'----PIN Declaration-----------------------------------------------------------
CS       PIN 0
CLK      PIN 1
DIO_n    PIN 2
Temp     PIN 3
'----Constants-----------------------------------------------------------------
Slope    CON $0138
Offset   CON 273
Config   CON %1011
'----Variables-----------------------------------------------------------------
rawvalue VAR Word
celsius  VAR Word
celsius1 VAR Word
celsius2 VAR Word
celsius3 VAR Word
average  VAR Nib
'----EEPROM DATA---------------------------------------------------------------
'----Initialization------------------------------------------------------------
DEBUG CLS
HIGH CS
HIGH DIO_n
'----Program Code---------------------------------------------------------------
Main:
  IF Temp = 1 THEN
    GOSUB Get_Temp
  ELSE
    DEBUG "Temperature not selected"
    DEBUG HOME
  ENDIF
GOTO Main
'----Subroutines---------------------------------------------------------------
Get_Temp:
  DEBUG CLS
  DO
    FOR average = 1 TO 3
      LOW CS
      SHIFTOUT DIO_n,CLK,LSBFIRST,[noparse][[/noparse]config\4]
      SHIFTIN DIO_n,CLK,MSBPOST,[noparse][[/noparse]rawvalue\12]
      HIGH CS
      IF average = 1 THEN
        celsius1 = ((rawvalue */ Slope) - 273)
      ELSEIF average = 2 THEN
        celsius2 = ((rawvalue */ Slope) - 273)
      ELSEIF average = 3 THEN
        celsius3 = ((rawvalue */ Slope) - 273)
      ENDIF
    NEXT
    celsius = (celsius1 + celsius2 + celsius3)
    DEBUG "Celsius = ",REP "-"\celsius.BIT15,DEC ABS celsius/3,".",DEC1 ABS celsius," Degrees",CR
    PAUSE 500
    DEBUG HOME
  LOOP UNTIL Temp = 0
  RETURN

Comments

  • Bruce BatesBruce Bates Posts: 3,045
    edited 2008-03-07 06:58
    jj -

    One thing I would certainly do is to add some comments in the program! A program with no documentation is difficult to understand once you've been away from it for a while, and it's easier to debug and troubleshoot a program with documentation included in the program code, than one with out.

    Regards,

    Bruce Bates

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    Programming can't be all that difficult, it's nothing but 1's and 0's
  • J^3J^3 Posts: 121
    edited 2008-03-08 05:42
    Thanks Bruce,
    I will definitely add thos comments.
  • Harry CallahanHarry Callahan Posts: 6
    edited 2008-03-08 22:27
    If this will be a BIG bigger project, code and variable space may become issues.

    To save some code space, you can refer to celsius1, celsius2 and celsius3 as celsius(1), celsius(2) and celsius(3) respectively, so long as you declare your variables in the order you have. That allows:

    Get_Temp:
    DEBUG CLS
    DO
    FOR average = 1 TO 3
    LOW CS
    SHIFTOUT DIO_n,CLK,LSBFIRST,[noparse][[/noparse]config\4]
    SHIFTIN DIO_n,CLK,MSBPOST,[noparse][[/noparse]rawvalue\12]
    HIGH CS
    celsius(1) = ((rawvalue */ Slope) - 273)
    celsius(2) = ((rawvalue */ Slope) - 273)
    celsius(3) = ((rawvalue */ Slope) - 273)
    NEXT
    celsius = (celsius(1) + celsius(2) + celsius(3))
    DEBUG "Celsius = ",REP "-"\celsius.BIT15,DEC ABS celsius/3,".",DEC1 ABS celsius," Degrees",CR
    PAUSE 500
    DEBUG HOME
    LOOP UNTIL Temp = 0
    RETURN

    If you don't need to retain the individual samples that are used to calculate the average, you can also save some variable space by accumulating them into one variable as follows:

    Get_Temp:
    DEBUG CLS
    DO
    celsius = 0
    FOR average = 1 TO 3
    LOW CS
    SHIFTOUT DIO_n,CLK,LSBFIRST,[noparse][[/noparse]config\4]
    SHIFTIN DIO_n,CLK,MSBPOST,[noparse][[/noparse]rawvalue\12]
    HIGH CS
    celsius = celsius + ((rawvalue */ Slope) - 273)
    NEXT
    DEBUG "Celsius = ",REP "-"\celsius.BIT15,DEC ABS celsius/3,".",DEC1 ABS celsius," Degrees",CR
    PAUSE 500
    DEBUG HOME
    LOOP UNTIL Temp = 0
    RETURN

    Above code not tested but should be close and may point in helpful direction.

    DH
  • J^3J^3 Posts: 121
    edited 2008-03-11 04:00
    Thank You Harry, I will try that.
Sign In or Register to comment.