Mike Hogan
Published © GPL3+

IoT for Telescope Controllers

Re-design TSCII with Raspberry Pi at its core.

AdvancedShowcase (no instructions)Over 33 days2,472
IoT for Telescope Controllers

Things used in this project

Hardware components

MassiveIO TSCII
×1

Story

Read more

Schematics

TSCII Case

3D print file for TSCII

Connection Diagram

Remote control focusers, heaters, camers, rotators, mounts and temp sensors trough a single USB 2 connection.

Connection Diagram

TSCII Telescope Controller

Connection Diagram

Code

Legacy BS2 Stamp Op code for TSCII

Plain text
Controls internal operations and provides interface to PC application via serial ascii codes
' {$STAMP BS2}

' {$PBASIC 2.5}


CS              PIN     14                       ' chip select
AData           PIN     13                       ' data pin
CS2             PIN     10
Clk             PIN     12                       ' clock pin
MotorRst        PIN     1
MotorCtrl       PIN     2
FMNBut          PIN     7
FMFBut          PIN     4
H1Pwr           PIN     8
H2Pwr           PIN     9
H3Pwr           PIN     11
FMSpeedPot      PIN     3
FMSelect        PIN     6

Temp1          VAR  Byte
Temp2          VAR  Byte
F1NTrig        VAR  Byte
F1FTrig        VAR  Byte
F2NTrig        VAR  Byte
F2FTrig        VAR  Byte
FSpeed1        VAR  Byte
FSpeed2        VAR  Byte
iFSpeed1       VAR  Byte
iFSpeed2       VAR  Byte
iFSC1          VAR  Byte
iFSC2          VAR  Byte


iFSchange1     VAR  Byte
iFSchange2     VAR  Byte
BlockLS1     VAR  Bit
BlockLS2     VAR  Bit

HSetPoint      VAR  Byte
HRstPoint      VAR  Byte

HostConnected  VAR   Byte
WaitForHost    VAR   Byte

  #SELECT $STAMP
  #CASE BS2, BS2E, BS2PE
    T1200       CON     813
    T2400       CON     396
    T9600       CON     84
    T19K2       CON     32
    T38K4       CON     6
  #ENDSELECT

  Inverted        CON     $4000
  Open            CON     $8000
  Parity          CON     $2000
  Baud            CON     T19K2 + Inverted
  sValue          VAR     Byte(2)
  FMC             CON     70
  HC              CON     72
  FS1             CON     83
  FS2             CON     84
  AH              CON     67
  SH              CON     77
  RH              CON     78

  AutoHeat        VAR     Byte(3)

 HIGH MotorCtrl
 LOW MotorRst
 HIGH MotorRst

 PAUSE 100
 HIGH CS
 HIGH CS2
 LOW FMSpeedPot


HostConnected = 0
WaitForHost = 5000

iFSpeed1 = 127
iFSpeed2 = 127
FSpeed1 = 127
FSpeed2 = 127
HSetPoint = 2
HRstPoint = 1


Main:

DO

   SERIN 16,Baud,WaitForHost,NoHost, [STR sValue\2]
    HostConnected = 1
    WaitForHost=5000

    SELECT sValue(0)
      CASE FMC  ' Focus motors
        IF sValue(1) = 49 THEN GOSUB FM1Near
        IF sValue(1) = 50 THEN GOSUB FM1Far
        IF sValue(1) = 51 THEN GOSUB FM2Near
        IF sValue(1) = 52 THEN GOSUB FM2Far
        IF sValue(1) = 53 THEN GOSUB FM1Stop
        IF sValue(1) = 54 THEN GOSUB FM2Stop


      CASE HC 'Heaters
          IF sValue(1) = 49 THEN GOSUB Heater1On
          IF sValue(1) = 50 THEN GOSUB Heater1Off
          IF sValue(1) = 51 THEN GOSUB Heater2On
          IF sValue(1) = 52 THEN GOSUB Heater2Off
          IF sValue(1) = 53 THEN GOSUB Heater3On
          IF sValue(1) = 54 THEN GOSUB Heater3Off

      CASE FS1
        BlockLS1=1
        FSpeed1=sValue(1)

      CASE FS2
        BlockLS2=1
        FSpeed2=sValue(1)

      CASE AH
        IF sValue(1) = 49 THEN AutoHeat(0)=0
        IF sValue(1) = 50 THEN AutoHeat(0)=1
        IF sValue(1) = 51 THEN AutoHeat(1)=0
        IF sValue(1) = 52 THEN AutoHeat(1)=1
        IF sValue(1) = 53 THEN AutoHeat(2)=0
        IF sValue(1) = 54 THEN AutoHeat(2)=1

      CASE SH
        HSetPoint = sValue(1)

      CASE RH
        HRstPoint = sValue(1)

    ENDSELECT

       GOSUB ProcessLocalCmds

       SEROUT 16, Baud,[Temp1,Temp2,H1Pwr,H2Pwr,H3Pwr,HSetPoint,HRstPoint,FMNBut,FMFBut,FSpeed1,FSpeed2,FMSelect]


LOOP

END


ProcessLocalCmds:  ' Process local commands

  GOSUB ReadTmp1
  GOSUB ReadTmp2
  GOSUB AutoHeatCtl
  GOSUB ReadFSpeed

  IF FMNBut=0 AND FMSelect = 0 THEN GOSUB FM1Near
  IF FMFBut=0 AND FMSelect = 0 THEN GOSUB FM1Far
  IF FMNBut=0 AND FMSelect = 1 THEN GOSUB FM2Near
  IF FMFBut=0 AND FMSelect = 1 THEN GOSUB FM2Far

  IF FMNBut=1 AND F1NTrig = 1 AND FMSelect = 0 THEN GOSUB FM1Stop
  IF FMFBut=1 AND F1FTrig = 1 AND FMSelect = 0 THEN GOSUB FM1Stop
  IF FMNBut=1 AND F2NTrig = 1 AND FMSelect = 1 THEN GOSUB FM2Stop
  IF FMFBut=1 AND F2FTrig = 1 AND FMSelect = 1 THEN GOSUB FM2Stop

  'GOSUB DisplayData
  IF HostConnected = 0 THEN GOTO ProcessLocalCmds


 RETURN

ReadTmp1:
    LOW CS
    SHIFTIN AData, Clk, MSBPOST, [Temp1\9]
    HIGH CS
RETURN

ReadTmp2:
    LOW CS2
    SHIFTIN AData, Clk, MSBPOST, [Temp2\9]
    HIGH CS2
RETURN

ReadFSpeed:
  IF FMSelect = 0 THEN
     RCTIME FMSpeedPot,0,iFSpeed1
     LOW FMSpeedPot
     IF iFSpeed1 > 126 THEN iFSpeed1=127
       IF iFSpeed1 < 1 THEN iFSpeed1=1
        IF iFSchange1 <> iFSpeed1 THEN
          iFSchange1=iFSpeed1
          BlockLS1=0
        ENDIF
         IF BlockLS1=0 THEN FSpeed1=iFSpeed1
   ENDIF

   IF FMSelect = 1 THEN
     RCTIME FMSpeedPot,0,iFSpeed2
     LOW FMSpeedPot
     IF iFSpeed2 > 126 THEN iFSpeed2=127
       IF iFSpeed2 < 1 THEN iFSpeed2=1
         IF iFSchange2 <> iFSpeed2 THEN
           iFSchange2=iFSpeed2
           BlockLS2=0
         ENDIF
         IF BlockLS2=0 THEN FSpeed2=iFSpeed2
   ENDIF
RETURN

Heater1On:
 IF H1Pwr=0 THEN HIGH H1Pwr
RETURN

Heater1Off:
 IF H1Pwr=1 THEN LOW H1Pwr
RETURN

Heater2On:
 IF H2Pwr=0 THEN HIGH H2Pwr
RETURN
Heater2Off:
 IF H2Pwr=1 THEN LOW H2Pwr
RETURN

Heater3On:
 IF H3Pwr=0 THEN HIGH H3Pwr
RETURN
Heater3Off:
 IF H3Pwr=1 THEN LOW H3Pwr
RETURN

' motor 1
FM1Near:
 IF FMNBut=0 THEN F1NTrig=1
 SEROUT MotorCtrl,T2400,[$80,0,1,FSpeed1]
RETURN

FM1Far:
 IF FMFBut=0 THEN F1FTrig=1
 SEROUT MotorCtrl,T2400,[$80,0,0,FSpeed1]
RETURN

FM1Stop:
 F1NTrig=0
 F1FTrig=0
 SEROUT MotorCtrl,T2400,[$80,0,0,0]
RETURN

' motor 2
FM2Near:
 IF FMNBut=0 THEN F2NTrig=1
 SEROUT MotorCtrl,T2400,[$80,0,2,FSpeed2]
RETURN

FM2Far:
 IF FMFBut=0 THEN F2FTrig=1
 SEROUT MotorCtrl,T2400,[$80,0,3,FSpeed2]
RETURN

FM2Stop:
 F2NTrig=0
 F2FTrig=0
 SEROUT MotorCtrl,T2400,[$80,0,2,0]
RETURN


NoHost:
 HostConnected=1
 WaitForHost=5000
 GOTO ProcessLocalCmds
RETURN


AutoHeatCtl:
  IF AutoHeat(0)= 1 THEN
   IF Temp1+HSetPoint < Temp2 THEN GOSUB Heater1On
   IF Temp1 >= Temp2-1 THEN GOSUB Heater1Off
  ENDIF
  IF AutoHeat(1)= 1 THEN
   IF Temp1+HSetPoint < Temp2 THEN GOSUB Heater2On
   IF Temp1 >= Temp2-1 THEN GOSUB Heater2Off
  ENDIF
  IF AutoHeat(2)= 1 THEN
   IF Temp1+HSetPoint < Temp2 THEN GOSUB Heater3On
   IF Temp1 >= Temp2-1 THEN GOSUB Heater3Off
  ENDIF

RETURN

 END

DisplayData:
   DEBUG CLS,"Temp 1 = ", DEC Temp1,CR,"Temp 2 = ", DEC Temp2 ,CR, "FMb1 = ",DEC FMNBut,CR, "FMb2 = ",DEC FMFBut,CR,"FM Speed1 = ",DEC iFSpeed1, CR, "FM Speed2 = ",DEC iFSpeed2, CR, "FMSlect = ",DEC FMSelect, CR , "change = ",DEC iFSchange1, CR, "FMpot = ",DEC iFSpeed1, CR
    ' DEBUG CLS,"1=",DEC IN1,CR,"2=",DEC IN2,CR,"3=",DEC IN3,CR,"4=",DEC IN4,CR,"5=",DEC IN5,CR,"6=",DEC IN6,CR,"7=",DEC IN7,CR,"8=",DEC IN8,CR,"9=",DEC IN9,CR,"10=",DEC IN10,CR,"11=",DEC IN11,CR,"12=",DEC IN12,CR,"13=",DEC IN13,CR,"14=",DEC IN14,CR ,DEC ifSpeed1, CR,DEC iFSpeed2,CR

   RETURN

Credits

Mike Hogan

Mike Hogan

9 projects • 49 followers
Interested in hardened massive io frameworks

Comments