Check code for Mega/E32

pull/5/head
ozarchie 2021-12-20 11:55:06 +10:00
rodzic d06e0cb472
commit ba45ccac45
31 zmienionych plików z 426 dodań i 230 usunięć

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 4.3 MiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 25 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 37 KiB

Plik binarny nie jest wyświetlany.

Przed

Szerokość:  |  Wysokość:  |  Rozmiar: 356 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 74 KiB

Wyświetl plik

Przed

Szerokość:  |  Wysokość:  |  Rozmiar: 254 KiB

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 254 KiB

Wyświetl plik

Przed

Szerokość:  |  Wysokość:  |  Rozmiar: 148 KiB

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 148 KiB

Plik binarny nie jest wyświetlany.

Przed

Szerokość:  |  Wysokość:  |  Rozmiar: 280 KiB

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 356 KiB

Plik binarny nie jest wyświetlany.

Plik binarny nie jest wyświetlany.

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -232,10 +232,35 @@ vm.runtime.compiler.allow_library_debugging=false
serial.port.file=COM11 serial.port.file=COM11
serial.port=COM11 serial.port=COM11
serial.port.num=11 serial.port.num=11
extra.time.local=1551271724 extra.time.local=1552836570
extra.time.utc=1551235724 extra.time.utc=1552800570
extra.time.dst=36000 extra.time.dst=36000
extra.time.zone=-36000 extra.time.zone=-36000
serial.port.caption=COM11 - Silicon Labs CP210x USB to UART Bridge
serial.Caption=Silicon Labs CP210x USB to UART Bridge (COM11)
serial.ClassGuid={4d36e978-e325-11ce-bfc1-08002be10318}
serial.CompatibleID.value0=USB\Class_FF
serial.ConfigManagerErrorCode=0
serial.ConfigManagerUserConfig=False
serial.CreationClassName=Win32_PnPEntity
serial.Description=Silicon Labs CP210x USB to UART Bridge
serial.DeviceID=USB\VID_10C4&PID_EA60\0001
serial.HardwareID.value0=USB\VID_10C4&PID_EA60
serial.Manufacturer=Silicon Labs
serial.Name=Silicon Labs CP210x USB to UART Bridge (COM11)
serial.PNPClass=Ports
serial.PNPDeviceID=USB\VID_10C4&PID_EA60\0001
serial.Present=True
serial.Service=silabser
serial.Status=OK
serial.SystemCreationClassName=Win32_ComputerSystem
serial.SystemName=JOHNWIN10PRO
serial.vid=0x10C4
serial.pid=0xEA60
serial.vidpid=10C4EA60
serial.vid_pid=0x10C4_0xEA60
serial.iserial=0001
serial.port.iserial=0001
build.project_name=EQG2HBXE32.ino build.project_name=EQG2HBXE32.ino
build.project_path=C:\Users\John\Documents\GitHub\EQMOD-ETX\Software\EQG2HBX-ESP32 build.project_path=C:\Users\John\Documents\GitHub\EQMOD-ETX\Software\EQG2HBX-ESP32
sketch_path=C:\Users\John\Documents\GitHub\EQMOD-ETX\Software\EQG2HBX-ESP32 sketch_path=C:\Users\John\Documents\GitHub\EQMOD-ETX\Software\EQG2HBX-ESP32
@ -251,97 +276,97 @@ vm.build.verbose_build_properties=false
vm.build.export_binary=false vm.build.export_binary=false
build.source.path=C:\Users\John\Documents\GitHub\EQMOD-ETX\Software\EQG2HBX-ESP32\EQG2HBXE32.ino build.source.path=C:\Users\John\Documents\GitHub\EQMOD-ETX\Software\EQG2HBX-ESP32\EQG2HBXE32.ino
PreProcessor.HeaderCount=1 PreProcessor.HeaderCount=1
PreProcessor.PrototypeCount=76 PreProcessor.PrototypeCount=79
vm.last.preproc.file.0.file=EQG2HBXE32.ino vm.last.preproc.file.0.file=EQG2HBXE32.ino
vm.last.preproc.file.0.offset=1 vm.last.preproc.file.0.offset=1
vm.last.preproc.file.0.length=8952 vm.last.preproc.file.0.length=8964
vm.last.preproc.file.0.linecount=278 vm.last.preproc.file.0.linecount=280
vm.last.preproc.file.0.linestart=0 vm.last.preproc.file.0.linestart=0
vm.last.preproc.file.0.lineend=278 vm.last.preproc.file.0.lineend=280
vm.last.preproc.file.0.prefix_lines=0 vm.last.preproc.file.0.prefix_lines=0
vm.last.preproc.file.1.file=EQG2HBX.h vm.last.preproc.file.1.file=EQG2HBX.h
vm.last.preproc.file.1.offset=0 vm.last.preproc.file.1.offset=0
vm.last.preproc.file.1.length=8888 vm.last.preproc.file.1.length=9129
vm.last.preproc.file.1.linecount=192 vm.last.preproc.file.1.linecount=203
vm.last.preproc.file.1.linestart=278 vm.last.preproc.file.1.linestart=280
vm.last.preproc.file.1.lineend=470 vm.last.preproc.file.1.lineend=483
vm.last.preproc.file.1.prefix_lines=0 vm.last.preproc.file.1.prefix_lines=0
vm.last.preproc.file.2.file=EQGProtocol.h vm.last.preproc.file.2.file=EQGProtocol.h
vm.last.preproc.file.2.offset=0 vm.last.preproc.file.2.offset=0
vm.last.preproc.file.2.length=9819 vm.last.preproc.file.2.length=9817
vm.last.preproc.file.2.linecount=288 vm.last.preproc.file.2.linecount=288
vm.last.preproc.file.2.linestart=470 vm.last.preproc.file.2.linestart=483
vm.last.preproc.file.2.lineend=758 vm.last.preproc.file.2.lineend=771
vm.last.preproc.file.2.prefix_lines=0 vm.last.preproc.file.2.prefix_lines=0
vm.last.preproc.file.3.file=EQGProtocol.ino vm.last.preproc.file.3.file=EQGProtocol.ino
vm.last.preproc.file.3.offset=279 vm.last.preproc.file.3.offset=281
vm.last.preproc.file.3.length=39743 vm.last.preproc.file.3.length=40883
vm.last.preproc.file.3.linecount=969 vm.last.preproc.file.3.linecount=990
vm.last.preproc.file.3.linestart=758 vm.last.preproc.file.3.linestart=771
vm.last.preproc.file.3.lineend=1727 vm.last.preproc.file.3.lineend=1761
vm.last.preproc.file.3.prefix_lines=0 vm.last.preproc.file.3.prefix_lines=0
vm.last.preproc.file.4.file=ETXProtocol.h vm.last.preproc.file.4.file=ETXProtocol.h
vm.last.preproc.file.4.offset=0 vm.last.preproc.file.4.offset=0
vm.last.preproc.file.4.length=3259 vm.last.preproc.file.4.length=3473
vm.last.preproc.file.4.linecount=83 vm.last.preproc.file.4.linecount=91
vm.last.preproc.file.4.linestart=1727 vm.last.preproc.file.4.linestart=1761
vm.last.preproc.file.4.lineend=1810 vm.last.preproc.file.4.lineend=1852
vm.last.preproc.file.4.prefix_lines=0 vm.last.preproc.file.4.prefix_lines=0
vm.last.preproc.file.5.file=ETXProtocol.ino vm.last.preproc.file.5.file=ETXProtocol.ino
vm.last.preproc.file.5.offset=1248 vm.last.preproc.file.5.offset=1271
vm.last.preproc.file.5.length=32301 vm.last.preproc.file.5.length=37121
vm.last.preproc.file.5.linecount=723 vm.last.preproc.file.5.linecount=840
vm.last.preproc.file.5.linestart=1810 vm.last.preproc.file.5.linestart=1852
vm.last.preproc.file.5.lineend=2533 vm.last.preproc.file.5.lineend=2692
vm.last.preproc.file.5.prefix_lines=0 vm.last.preproc.file.5.prefix_lines=0
vm.last.preproc.file.6.file=HBXComms.h vm.last.preproc.file.6.file=HBXComms.h
vm.last.preproc.file.6.offset=0 vm.last.preproc.file.6.offset=0
vm.last.preproc.file.6.length=1597 vm.last.preproc.file.6.length=1597
vm.last.preproc.file.6.linecount=52 vm.last.preproc.file.6.linecount=52
vm.last.preproc.file.6.linestart=2533 vm.last.preproc.file.6.linestart=2692
vm.last.preproc.file.6.lineend=2585 vm.last.preproc.file.6.lineend=2744
vm.last.preproc.file.6.prefix_lines=0 vm.last.preproc.file.6.prefix_lines=0
vm.last.preproc.file.7.file=HBXComms.ino vm.last.preproc.file.7.file=HBXComms.ino
vm.last.preproc.file.7.offset=1971 vm.last.preproc.file.7.offset=2111
vm.last.preproc.file.7.length=9104 vm.last.preproc.file.7.length=9104
vm.last.preproc.file.7.linecount=335 vm.last.preproc.file.7.linecount=335
vm.last.preproc.file.7.linestart=2585 vm.last.preproc.file.7.linestart=2744
vm.last.preproc.file.7.lineend=2920 vm.last.preproc.file.7.lineend=3079
vm.last.preproc.file.7.prefix_lines=0 vm.last.preproc.file.7.prefix_lines=0
vm.last.preproc.file.8.file=HBXFileSystem.h vm.last.preproc.file.8.file=HBXFileSystem.h
vm.last.preproc.file.8.offset=0 vm.last.preproc.file.8.offset=0
vm.last.preproc.file.8.length=262 vm.last.preproc.file.8.length=262
vm.last.preproc.file.8.linecount=13 vm.last.preproc.file.8.linecount=13
vm.last.preproc.file.8.linestart=2920 vm.last.preproc.file.8.linestart=3079
vm.last.preproc.file.8.lineend=2933 vm.last.preproc.file.8.lineend=3092
vm.last.preproc.file.8.prefix_lines=0 vm.last.preproc.file.8.prefix_lines=0
vm.last.preproc.file.9.file=HBXFileSystem.ino vm.last.preproc.file.9.file=HBXFileSystem.ino
vm.last.preproc.file.9.offset=2306 vm.last.preproc.file.9.offset=2446
vm.last.preproc.file.9.length=2332 vm.last.preproc.file.9.length=2332
vm.last.preproc.file.9.linecount=101 vm.last.preproc.file.9.linecount=101
vm.last.preproc.file.9.linestart=2933 vm.last.preproc.file.9.linestart=3092
vm.last.preproc.file.9.lineend=3034 vm.last.preproc.file.9.lineend=3193
vm.last.preproc.file.9.prefix_lines=0 vm.last.preproc.file.9.prefix_lines=0
vm.last.preproc.file.10.file=HBXWiFiServer.h vm.last.preproc.file.10.file=HBXWiFiServer.h
vm.last.preproc.file.10.offset=0 vm.last.preproc.file.10.offset=0
vm.last.preproc.file.10.length=3074 vm.last.preproc.file.10.length=3074
vm.last.preproc.file.10.linecount=117 vm.last.preproc.file.10.linecount=117
vm.last.preproc.file.10.linestart=3034 vm.last.preproc.file.10.linestart=3193
vm.last.preproc.file.10.lineend=3151 vm.last.preproc.file.10.lineend=3310
vm.last.preproc.file.10.prefix_lines=0 vm.last.preproc.file.10.prefix_lines=0
vm.last.preproc.file.11.file=HBXWiFiServer.ino vm.last.preproc.file.11.file=HBXWiFiServer.ino
vm.last.preproc.file.11.offset=2407 vm.last.preproc.file.11.offset=2547
vm.last.preproc.file.11.length=16146 vm.last.preproc.file.11.length=16150
vm.last.preproc.file.11.linecount=488 vm.last.preproc.file.11.linecount=488
vm.last.preproc.file.11.linestart=3151 vm.last.preproc.file.11.linestart=3310
vm.last.preproc.file.11.lineend=3639 vm.last.preproc.file.11.lineend=3798
vm.last.preproc.file.11.prefix_lines=0 vm.last.preproc.file.11.prefix_lines=0
vm.last.preproc.file.12.file=Hardware.h vm.last.preproc.file.12.file=Hardware.h
vm.last.preproc.file.12.offset=0 vm.last.preproc.file.12.offset=0
vm.last.preproc.file.12.length=1406 vm.last.preproc.file.12.length=1406
vm.last.preproc.file.12.linecount=49 vm.last.preproc.file.12.linecount=49
vm.last.preproc.file.12.linestart=3639 vm.last.preproc.file.12.linestart=3798
vm.last.preproc.file.12.lineend=3688 vm.last.preproc.file.12.lineend=3847
vm.last.preproc.file.12.prefix_lines=0 vm.last.preproc.file.12.prefix_lines=0
vm.sketch_source_path=C:\Users\Anne\AppData\Local\Temp\VMBuilds\EQG2HBXE32\espressif_esp32doit-devkit-v1\Release vm.sketch_source_path=C:\Users\Anne\AppData\Local\Temp\VMBuilds\EQG2HBXE32\espressif_esp32doit-devkit-v1\Release
vm.build_use_temp=1 vm.build_use_temp=1

Wyświetl plik

@ -96,6 +96,7 @@ typedef struct {
unsigned char HBXBitCount; // #bits left to process unsigned char HBXBitCount; // #bits left to process
unsigned char Command; // Current command unsigned char Command; // Current command
unsigned char Flip; // Axis flipped - Alt for negative, Az probably never
unsigned char HBXData; // Data byte from HBX Bus unsigned char HBXData; // Data byte from HBX Bus
unsigned char HBXP1; // HBX status/data - MSB unsigned char HBXP1; // HBX status/data - MSB
unsigned char HBXP2; // HBX status/data - LSB unsigned char HBXP2; // HBX status/data - LSB
@ -108,11 +109,12 @@ typedef struct {
char HBXSnapPort; // Snap port char HBXSnapPort; // Snap port
char LEDValue; // Polar LED brightness char LEDValue; // Polar LED brightness
char ETXSpeedCommand; // Current ETX Speed command char ETXSpeedCommand; // Current ETX Speed command
long Speed; // Move speed long EQGSpeed; // Move speed
long ETXSpeed; // Move speed
long TargetSpeed; // Target Move speed long TargetSpeed; // Target Move speed
char SpeedState; // Slowdown/speedup state char SpeedState; // Slowdown/speedup state
long Position; // Current position long Position; // Current position
long Target; // Current target delta long Target; // Current target
long Increment; // Change in position for motor speed calcs long Increment; // Change in position for motor speed calcs
long SlowDown; // Point to change to lower speed long SlowDown; // Point to change to lower speed
long Offset; // Current adjustment long Offset; // Current adjustment
@ -134,10 +136,12 @@ typedef struct {
// SOLARRATE = (SOLARSECS/SIDEREALSECS) * SIDEREALRATE // SOLARRATE = (SOLARSECS/SIDEREALSECS) * SIDEREALRATE
// LUNARRATE = (SOLARSECS/SIDEREALSECS) * SIDEREALRATE // LUNARRATE = (SOLARSECS/SIDEREALSECS) * SIDEREALRATE
// DEGREERATE1 = 240 * SIDEREALRATE // DEGREERATE1 = 240 * SIDEREALRATE
// BASERATE = (b * arcsec360) / a
unsigned long SIDEREALRATE; // Constants unsigned long SIDEREALRATE; // Constants
unsigned long SOLARRATE; unsigned long SOLARRATE;
unsigned long LUNARRATE; unsigned long LUNARRATE;
unsigned long BASERATE;
unsigned long DEGREERATE1; unsigned long DEGREERATE1;
// PEC = a-VALUE / WormTeeth; // PEC = a-VALUE / WormTeeth;
@ -163,6 +167,13 @@ unsigned char protocol = 0; // Default protocol (UDP)
unsigned char station = 0; // Default station (AP) unsigned char station = 0; // Default station (AP)
char scope[16] = "ETX60"; char scope[16] = "ETX60";
char * axis_name[3] =
{
"Bad",
"Az ",
"Alt"
};
axis_values ratio[16][2] = // 16 scopes, Az, Alt axis_values ratio[16][2] = // 16 scopes, Az, Alt
{ {
{{36, 91.1458333, 1, 94, "ETX60"}, {36, 157.5, 1, 58, "ETX60"}}, // ETX60/70/80 {{36, 91.1458333, 1, 94, "ETX60"}, {36, 157.5, 1, 58, "ETX60"}}, // ETX60/70/80

Wyświetl plik

@ -131,13 +131,12 @@ void setup()
protocol = (preferences.getUChar("STATION", 0)); protocol = (preferences.getUChar("STATION", 0));
} }
dbgSerial.print("Station: "); dbgSerial.print("Station: ");
dbgSerial.print(station); dbgSerial.println(station);
dbgSerial.print(", ");
preferences.end(); preferences.end();
AzInitialise(telescope); AzInitialise(telescope);
AltInitialise(telescope); AltInitialise(telescope);
PrintRatioValues(telescope); //PrintRatioValues(telescope);
PrintHbxValues(AzMotor); PrintHbxValues(AzMotor);
PrintHbxValues(AltMotor); PrintHbxValues(AltMotor);
@ -239,6 +238,9 @@ void loop()
if (StateSelect) CheckETXState(AzMotor); if (StateSelect) CheckETXState(AzMotor);
else CheckETXState(AltMotor); else CheckETXState(AltMotor);
} }
//jma CheckAltFlipReqd();
if ((micros() - StatusTimer) > (STATUSDELAY * 1000)) { // ~50mS if ((micros() - StatusTimer) > (STATUSDELAY * 1000)) { // ~50mS
if (StatusSelect) StatusSelect = false; if (StatusSelect) StatusSelect = false;
else StatusSelect = true; else StatusSelect = true;

File diff suppressed because one or more lines are too long

Wyświetl plik

@ -211,7 +211,7 @@ enum SkywatcherSetFeatureCmd
#define AAZEQ6 0x00B008 // WiFi, !:J3, PolarLED ; AZ/EQ #define AAZEQ6 0x00B008 // WiFi, !:J3, PolarLED ; AZ/EQ
// Motor firmware versions // Motor firmware versions
#define VEQ6 0x000204 // Pretend EQ6 V 2.04 yyyy.mm.dd #define VEQ6 0x000402 // Pretend EQ6 V 2.04 yyyy.mm.dd
#define VHEQ5 0x010204 // Pretend HEQ5 V 2.04 yyyy.mm.dd #define VHEQ5 0x010204 // Pretend HEQ5 V 2.04 yyyy.mm.dd
#define VEQ5 0x020207 // Pretend EQ5 V 2.07 yyyy.mm.dd #define VEQ5 0x020207 // Pretend EQ5 V 2.07 yyyy.mm.dd
#define VEQ3 0x030207 // Pretend EQ3 V 2.07 yyyy.mm.dd #define VEQ3 0x030207 // Pretend EQ3 V 2.07 yyyy.mm.dd
@ -223,19 +223,19 @@ enum SkywatcherSetFeatureCmd
#define EQGASSETS AEQ6 #define EQGASSETS AEQ6
// :I := ( :b * 1296000 / :a ) / Speed ( where Speed is in arcsec/sec ) // :I := ( :b * (360*60*60) / :a ) / Speed ( where Speed is in arcsec/sec )
// If :I is greater than about 10, then the slew will need to use :G = LoSpeed mode // If :I is greater than about 10, then the slew will need to use :G = LoSpeed mode
// If :I is less than 10, then the slew will need :G = HiRate, and :I := I * :g // If :I is less than 10, then the slew will need :G = HiRate, and :I := I * :g
// a-AxxValue (Ticks/rev) := AxxVanes * 4 * AxxGbxRatio * ( Axx Transfer ) * AxxWormTeeth // a-AxxValue (Ticks/rev) := AxxVanes * 4 * AxxGbxRatio * ( Axx Transfer ) * AxxWormTeeth
// b-AxxValue := 6460.09 * AxxRatio * a-AxxValue * 15.041069 / 1,296,000 // b-AxxValue := 6460.09 * AxxRatio * a-AxxValue * 15.041069 / (360*60*60)
// Speed = g*(b*129600/a)/I // Speed = g*(b*(360*60*60)/a)/I
// ============================== // ==============================
// IVALUE = (axis[EQGMOTOR].bVALUE * 1296000) / axis[EQGMOTOR].STEPSPER360) // IVALUE = (axis[EQGMOTOR].bVALUE * (360*60*60)) / axis[EQGMOTOR].STEPSPER360)
#define EQG_gVALUE 0x000010 #define EQG_gVALUE 0x000010
#define EQGMAXIMUMSPEED 12 // 0x0C #define EQGMAXIMUMSPEED 12
// EQG 'G' Command - SET move parameters // EQG 'G' Command - SET move parameters
#define DIRECTION 0x00000001 // Increasing(0) Decreasing(1) #define DIRECTION 0x00000001 // Increasing(0) Decreasing(1)

Wyświetl plik

@ -228,9 +228,9 @@ In HiSpeed mode, you must issue a stop, resend :G, reset :I then restart.
// =============================== // ===============================
void EQGState(void) { void EQGState(void) {
while ((EQGRxiPtr != EQGRxoPtr) && (EQGDone == 0)) { while ((EQGRxiPtr != EQGRxoPtr) && (EQGDone == 0)) {
if (dbgFlag == 1) { /* if (dbgFlag == 1) {
// if (EQGRxBuffer[EQGRxoPtr] == 'j') if (EQGRxBuffer[EQGRxoPtr] == 'j')
// dbgFlag = 0; dbgFlag = 0;
} }
if (EQGRxBuffer[EQGRxoPtr] == ':') { if (EQGRxBuffer[EQGRxoPtr] == ':') {
dbgSerial.println(""); dbgSerial.println("");
@ -240,7 +240,7 @@ void EQGState(void) {
if (dbgFlag) { if (dbgFlag) {
dbgSerial.write(EQGRxBuffer[EQGRxoPtr]); dbgSerial.write(EQGRxBuffer[EQGRxoPtr]);
} }
*/
EQGRxChar = EQGRxBuffer[EQGRxoPtr++]; // Get a character EQGRxChar = EQGRxBuffer[EQGRxoPtr++]; // Get a character
if ((EQGRxState < EQG_WAITFORCR) && (EQGRxChar < ' ')) { if ((EQGRxState < EQG_WAITFORCR) && (EQGRxChar < ' ')) {
EQGRxState = EQG_INTERPRET; // Terminate on non-alpha EQGRxState = EQG_INTERPRET; // Terminate on non-alpha
@ -575,7 +575,9 @@ void EQGAction(void) {
break; break;
case 'E': // Set current motor position case 'E': // Set current motor position
axis[EQGMOTOR].Position = EQGP1; if ((EQGP1 == 0x800000) || (EQGP1 == 0x85049c))
break;
else axis[EQGMOTOR].Position = EQGP1;
break; break;
case 'F': // Initialize and activate motors case 'F': // Initialize and activate motors
@ -585,15 +587,17 @@ void EQGAction(void) {
case 'G': // EQG 'G' Command :GxAB[0D] case 'G': // EQG 'G' Command :GxAB[0D]
// See below for A // See below for A
// ===============
// B nibble // B nibble
// --------
// B = '0' +CW and Nthn Hemi // B = '0' +CW and Nthn Hemi
// '1' -CCW and Nthn Hemi // '1' -CCW and Nthn Hemi
// '2' +CW and Sthn Hemi // '2' +CW and Sthn Hemi
// '3' -CCW and Sthn Hemi // '3' -CCW and Sthn Hemi
// xxx0 0 means +ve, 1 = -ve "motor" direction, ie code takes care of whats N/S/E/W etc // xxx0 0 means +ve, 1 = -ve "motor" direction, ie code takes care of whats N/S/E/W etc
// +ve speed in RA is Axis moves CW when viewed from pole // +ve speed in RA is Axis moves CW when viewed from pole
// +ve speed in DEC is Axis moves CCW when viewed from above // +ve speed in DEC is Axis moves CCW when viewed from above (OTA horizontal, facing E->W ?)
// xx0x 0 means Nthn Hemi else Sthn Hemi ( ST4 guiding related ) ????? // xx0x 0 means Nthn Hemi else Sthn Hemi ( ST4 guiding related ) ?????
// Note! when using :S type gotos, the direction bit here "appears" to be ignored // Note! when using :S type gotos, the direction bit here "appears" to be ignored
// Also note that EQMOD does not appear to send the Hemisphere bit // Also note that EQMOD does not appear to send the Hemisphere bit
@ -606,19 +610,21 @@ void EQGAction(void) {
case 0x00: case 0x00:
case 0x02: case 0x02:
axis[EQGMOTOR].EQGMotorStatus &= ~MOVEDECR; axis[EQGMOTOR].EQGMotorStatus &= ~MOVEDECR;
// dbgSerial.print(" +CW "); dbgSerial.print(" +CW ");
break; break;
case 0x01: case 0x01:
case 0x03: case 0x03:
axis[EQGMOTOR].EQGMotorStatus |= MOVEDECR; axis[EQGMOTOR].EQGMotorStatus |= MOVEDECR;
// dbgSerial.print(" -CCW "); dbgSerial.print(" -CCW ");
break; break;
default: default:
break; break;
} }
// When setting "Slew" data, it also requires a set procedure
// G sets direction and speed "range", and must be sent when stopped.
// A nibble // A nibble
// A = '0' high speed GOTO slewing, doesnt make "bitmapped" sense, but it is as coded by SkyWatcher????? ????? // A = '0' high speed GOTO slewing, doesnt make "bitmapped" sense, but it is as coded by SkyWatcher
// '1' low speed slewing mode, all other bytes use bitmapping ( incl :f ), this doesnt // '1' low speed slewing mode, all other bytes use bitmapping ( incl :f ), this doesnt
// '2' low speed GOTO mode, // '2' low speed GOTO mode,
// '3' high speed slewing mode // '3' high speed slewing mode
@ -631,27 +637,27 @@ void EQGAction(void) {
case 00: // 0 HIGH SPEED GOTO case 00: // 0 HIGH SPEED GOTO
axis[EQGMOTOR].EQGMotorStatus &= ~MOVESLEW; // GoTo target axis[EQGMOTOR].EQGMotorStatus &= ~MOVESLEW; // GoTo target
axis[EQGMOTOR].EQGMotorStatus |= MOVEHIGH; // Enable high speed multiplier axis[EQGMOTOR].EQGMotorStatus |= MOVEHIGH; // Enable high speed multiplier
// dbgSerial.print("HIGH SPEED GOTO"); dbgSerial.print("HIGH SPEED GOTO ");
break; break;
case 01: // 1 LOW SPEED SLEW case 01: // 1 LOW SPEED SLEW
axis[EQGMOTOR].EQGMotorStatus |= MOVESLEW; // Just move the axis axis[EQGMOTOR].EQGMotorStatus |= MOVESLEW; // Just move the axis
axis[EQGMOTOR].EQGMotorStatus &= ~MOVEHIGH; // Disable high speed multiplier axis[EQGMOTOR].EQGMotorStatus &= ~MOVEHIGH; // Disable high speed multiplier
// dbgSerial.print("LOW SPEED SLEW"); dbgSerial.print("LOW SPEED SLEW ");
break; break;
case 02: // 2 LOW SPEED GOTO case 02: // 2 LOW SPEED GOTO
axis[EQGMOTOR].EQGMotorStatus &= ~MOVESLEW; // GoTo target axis[EQGMOTOR].EQGMotorStatus &= ~MOVESLEW; // GoTo target
axis[EQGMOTOR].EQGMotorStatus &= ~MOVEHIGH; // Disable high speed multiplier axis[EQGMOTOR].EQGMotorStatus &= ~MOVEHIGH; // Disable high speed multiplier
// dbgSerial.print("LOW SPEED GOTO"); dbgSerial.print("LOW SPEED GOTO ");
break; break;
case 03: // 3 HIGH SPEED SLEW case 03: // 3 HIGH SPEED SLEW
axis[EQGMOTOR].EQGMotorStatus |= MOVESLEW; // Just move the axis axis[EQGMOTOR].EQGMotorStatus |= MOVESLEW; // Just move the axis
axis[EQGMOTOR].EQGMotorStatus |= MOVEHIGH; // Enable high speed multiplier axis[EQGMOTOR].EQGMotorStatus |= MOVEHIGH; // Enable high speed multiplier
// dbgSerial.print("HIGH SPEED SLEW"); dbgSerial.print("HIGH SPEED SLEW ");
break; break;
} }
dbgSerial.print(axis[EQGMOTOR].TargetSpeed);
axis[EQGMOTOR].ETXMotorStatus = axis[EQGMOTOR].EQGMotorStatus; // Copy the status for ETXProtocol axis[EQGMOTOR].ETXMotorStatus = axis[EQGMOTOR].EQGMotorStatus; // Copy the status for ETXProtocol
break; break;
case 'H': // Set the goto target increment case 'H': // Set the goto target increment
@ -661,10 +667,22 @@ void EQGAction(void) {
else else
axis[EQGMOTOR].Target = axis[EQGMOTOR].Position + axis[EQGMOTOR].Increment; // add the relative target axis[EQGMOTOR].Target = axis[EQGMOTOR].Position + axis[EQGMOTOR].Increment; // add the relative target
axis[EQGMOTOR].MotorControl |= GoToHBX; axis[EQGMOTOR].MotorControl |= GoToHBX;
break; break;
case 'I': // Set motor speed case 'I': // Set motor speed
/*
:I is used to set the speed.
The value used is basically the number of timer interrupts per microstep
------------------------------------------------------------------------
:I = (:b * ArcSecs360 / :a) / Speed (where Speed is in arcsec/sec, ArcSecs360=360*60*60=129600)
Speed = :g * (:b * ArcSecs360 / :a) / I
=======================================
If :I is greater than about 10, then the slew will need to use :G = LoSpeed mode
If :I is less than 10, then the slew will need :G = HiRate, and :I = :I * :g
In LoSpeed mode, once moving, simply resending a new :I will cause the speed to change.
In HiSpeed mode, you must issue a stop, resend :G, reset :I then restart.
:b = :I * Speed / g * :a / ArcSecs360
*/
// From EQMOD // From EQMOD
// Multiplier = EQGSidereal / :I // Multiplier = EQGSidereal / :I
@ -675,10 +693,12 @@ void EQGAction(void) {
// SpeedHi = ETXSidereal * MultiplierHi // SpeedHi = ETXSidereal * MultiplierHi
// Calculation // Calculation
// Speed = SiderealRate * (:ISidereal / ) // Speed = SiderealRate * (Sidereal / :I)
// SpeedHi = SiderealRate * ((Sidereal*g) / :I) // SpeedHi = SiderealRate * ((Sidereal*g) / :I)
axis[EQGMOTOR].TargetSpeed = EQGP1; // Set the target speed
axis[EQGMOTOR].EQGSpeed = EQGP1; // Set EQG speed value
axis[EQGMOTOR].TargetSpeed = EQGP1; // Set ETX target speed
break; break;
case 'J': // Tell motor to Go case 'J': // Tell motor to Go
@ -696,6 +716,7 @@ void EQGAction(void) {
case 'L': // Tell motor to stop immediately case 'L': // Tell motor to stop immediately
axis[EQGMOTOR].EQGMotorStatus |= MOVESLEW; // Clear speed change axis[EQGMOTOR].EQGMotorStatus |= MOVESLEW; // Clear speed change
axis[EQGMOTOR].ETXMotorStatus |= MOVESLEW; // Set slew as default
axis[EQGMOTOR].TargetSpeed = 0; axis[EQGMOTOR].TargetSpeed = 0;
axis[EQGMOTOR].ETXMotorState = ETXStopMotor; // Immediate stop axis[EQGMOTOR].ETXMotorState = ETXStopMotor; // Immediate stop
break; break;
@ -833,7 +854,7 @@ void debugEQG() {
dbgSerial.print(" Tgt: "); dbgSerial.print(" Tgt: ");
dbgSerial.print(axis[AzMotor].Target, HEX); dbgSerial.print(axis[AzMotor].Target, HEX);
dbgSerial.print(" Speed: "); dbgSerial.print(" Speed: ");
dbgSerial.print(axis[AzMotor].Speed, HEX); dbgSerial.print(axis[AzMotor].ETXSpeed, HEX);
dbgSerial.print(", Alt:<"); dbgSerial.print(", Alt:<");
dbgSerial.print(axis[AltMotor].EQGMotorStatus, HEX); dbgSerial.print(axis[AltMotor].EQGMotorStatus, HEX);
@ -844,7 +865,7 @@ void debugEQG() {
dbgSerial.print(" Tgt: "); dbgSerial.print(" Tgt: ");
dbgSerial.print(axis[AltMotor].Target, HEX); dbgSerial.print(axis[AltMotor].Target, HEX);
dbgSerial.print(" Speed: "); dbgSerial.print(" Speed: ");
dbgSerial.print(axis[AltMotor].Speed, HEX); dbgSerial.print(axis[AltMotor].ETXSpeed, HEX);
/* /*
while (dbgRxoPtr != dbgRxiPtr) { while (dbgRxoPtr != dbgRxiPtr) {
dbgCommand[dbgIndex] = dbgRxBuffer[dbgRxoPtr]; // Copy character dbgCommand[dbgIndex] = dbgRxBuffer[dbgRxoPtr]; // Copy character

Wyświetl plik

@ -49,13 +49,20 @@
#define ETXCheckStop 7 #define ETXCheckStop 7
#define ETXStopMotor 8 #define ETXStopMotor 8
#define ETXMotorEnd 9 #define ETXMotorEnd 9
// ETX axis State Machine
#define NORMAL 0
#define FLIP 1
#define FLIPPED 2
#define UNFLIP 3
#define FLIPPING 4
#define UNFLIPPING 5
const float ETX60PERIOD = 152.587891; // (1/6.5536mS) const float ETX60PERIOD = 152.587891; // (1/6.5536mS)
const unsigned long ETX_CENTRE = 0x00800000; // RA, DEC; const unsigned long ETX_CENTRE = 0x00800000; // RA, DEC;
const float MeadeSidereal = 6460.0900; // Refer Andrew Johansen - Roboscope const float MeadeSidereal = 6460.0900; // Refer Andrew Johansen - Roboscope
const float SiderealArcSecs = 15.041069; // Sidereal arcsecs/sec const float SiderealArcSecs = 15.041069; // Sidereal arcsecs/sec (ArcSec360/Sidereal secs)
const float ArcSecs360 = 1296000; // Arcsecs / 360 const float ArcSecs360 = 1296000; // Arcsecs / 360
@ -71,12 +78,13 @@ const float ArcSecs360 = 1296000; // Arcsecs / 360
#define ETXSLOWPOSN 0x00000800 // Point at which to start slowdown #define ETXSLOWPOSN 0x00000800 // Point at which to start slowdown
bool HBXGetStatus(unsigned char); // bool HBXGetStatus(unsigned char);
/*
bool HBXSetMotorState(unsigned char); bool HBXSetMotorState(unsigned char);
bool HBXCheckTargetStatus(unsigned char); bool HBXCheckTargetStatus(unsigned char);
bool HBXUpdatePosn(void); bool HBXUpdatePosn(void);
bool HBXStartMotor(unsigned char); bool HBXStartMotor(unsigned char);
bool HBXStopMotor(unsigned char); bool HBXStopMotor(unsigned char);
void PositionPoll(unsigned char); void PositionPoll(unsigned char);
*/

Wyświetl plik

@ -18,36 +18,32 @@ bool ETXState(unsigned char Motor) {
case ETXCheckStartup: case ETXCheckStartup:
if (axis[Motor].ETXMotorStatus & MOVEAXIS) { // Start moving if (axis[Motor].ETXMotorStatus & MOVEAXIS) { // Start moving
//jma CheckAltFlip(Motor);
//dbgSerial.println(""); dbgSerial.print("ETXCheckStartup - Motor: "); dbgSerial.print(Motor); dbgSerial.print(" MOVE"); dbgSerial.println(""); dbgSerial.print("ETXCheckStartup - Motor: "); dbgSerial.print(axis_name[Motor]); dbgSerial.print(" MOVING");
distance = axis[Motor].Target - axis[Motor].Position; // Distance to target
if (axis[Motor].ETXMotorStatus & MOVEDECR) // If it is decreasing
distance = TwosComplement(distance);
//dbgSerial.print(" Distance: "); dbgSerial.print(distance);
if (axis[Motor].ETXMotorStatus & MOVEHIGH) { // High Speed Slew ?
if (axis[Motor].ETXMotorStatus & MOVESLEW) { if (axis[Motor].ETXMotorStatus & MOVESLEW) {
axis[Motor].ETXMotorState = ETXSlewMotor; // Move axis using high speed multiplier axis[Motor].ETXMotorState = ETXSlewMotor; // Move axis using high speed multiplier
if (axis[Motor].ETXMotorStatus & MOVEHIGH) {
//dbgSerial.print(" HIGH SLEW"); dbgSerial.print(" HIGH SLEW");
}
else {
axis[Motor].ETXMotorState = ETXCheckSpeed;
dbgSerial.print(" LOW SLEW");
} }
} }
else { // GoTo or Low Speed Slew else { // GoTo or Low Speed Slew
axis[Motor].ETXMotorState = ETXCheckSpeed; axis[Motor].ETXMotorState = ETXCheckSpeed;
dbgSerial.print(" GOTO");
//dbgSerial.print(" GOTO");
} }
if (axis[Motor].MotorControl & GoToHBX) { // Check GoTo? if (axis[Motor].MotorControl & GoToHBX) { // Check GoTo?
distance = axis[Motor].Target - axis[Motor].Position; // Distance to target
if (axis[Motor].ETXMotorStatus & MOVEDECR) // If it is decreasing
distance = TwosComplement(distance);
dbgSerial.print(" Distance: "); dbgSerial.print(distance);
if (axis[Motor].MotorControl & SlewHBX) { // May need to slew for large changes if (axis[Motor].MotorControl & SlewHBX) { // May need to slew for large changes
axis[Motor].ETXMotorState = ETXSlewMotor; // Slew to M-point axis[Motor].ETXMotorState = ETXSlewMotor; // Slew to M-point
//dbgSerial.print(" SLEW");
} }
else { else {
axis[Motor].ETXMotorState = ETXCheckSpeed; axis[Motor].ETXMotorState = ETXCheckSpeed;
@ -56,26 +52,27 @@ bool ETXState(unsigned char Motor) {
axis[Motor].TargetSpeed = (axis[Motor].TargetSpeed >> 1); axis[Motor].TargetSpeed = (axis[Motor].TargetSpeed >> 1);
if (distance < (axis[Motor].OneDegree >> 2)) if (distance < (axis[Motor].OneDegree >> 2))
axis[Motor].TargetSpeed = (axis[Motor].TargetSpeed >> 1); axis[Motor].TargetSpeed = (axis[Motor].TargetSpeed >> 1);
axis[Motor].Speed = 0; // Starting from 0 axis[Motor].ETXSpeed = 0; // Starting from 0
//dbgSerial.print(" STEP"); dbgSerial.print(" GoToSTEP");
} }
if (distance < OffsetMax) { // Check for really small moves (< 16 steps) if (distance < OffsetMax) { // Check for really small moves (< 16 steps)
axis[Motor].ETXMotorState = ETXMotorEnd; // Use Adjust offset axis[Motor].ETXMotorState = ETXMotorEnd; // Use Adjust offset
//dbgSerial.print(" OFFSET"); dbgSerial.print(" GoToOFFSET");
} }
if (distance > (axis[Motor].OneDegree << 3)) { // Always slew for > 8 degrees if (distance > (axis[Motor].OneDegree << 3)) { // Always slew for > 8 degrees
axis[Motor].ETXMotorState = ETXSlewMotor; axis[Motor].ETXMotorState = ETXSlewMotor;
//dbgSerial.print(" GoToSLEW"); dbgSerial.print(" GoToSLEW");
} }
} }
} }
break; break;
case ETXSlewMotor: case ETXSlewMotor:
//dbgSerial.println(""); dbgSerial.print("ETXSlewMotor Motor: "); dbgSerial.print(Motor); dbgSerial.print(" SLEW Cmd: "); //dbgSerial.println(""); dbgSerial.print("ETXSlewMotor Motor: "); dbgSerial.print(axis_name[Motor]); dbgSerial.print(" SLEW Cmd: ");
digitalWrite(SCOPELED, HIGH); // Turn on the LED digitalWrite(SCOPELED, HIGH); // Turn on the LED
HBXSendCommand(Stop, Motor); // Stop the motor HBXSendCommand(Stop, Motor); // Stop the motor
@ -90,7 +87,7 @@ bool ETXState(unsigned char Motor) {
HBXSendCommand(axis[Motor].Command, Motor); // SLEW HBXSendCommand(axis[Motor].Command, Motor); // SLEW
axis[Motor].EQGMotorStatus |= MOVEAXIS; // Tell EQx axis[Motor].EQGMotorStatus |= MOVEAXIS; // Tell EQx
axis[Motor].Speed = axis[Motor].DEGREERATE1; // Set "current speed" for later speed checks axis[Motor].ETXSpeed = axis[Motor].DEGREERATE1; // Set "current speed" for later speed checks
if (axis[Motor].MotorControl & GoToHBX) { // Check if slew was caused by a high speed long distance GoTo if (axis[Motor].MotorControl & GoToHBX) { // Check if slew was caused by a high speed long distance GoTo
distance = axis[Motor].Target - axis[Motor].Position; // Check Distance to target distance = axis[Motor].Target - axis[Motor].Position; // Check Distance to target
@ -101,32 +98,42 @@ bool ETXState(unsigned char Motor) {
axis[Motor].ETXMotorState = ETXStepMotor; axis[Motor].ETXMotorState = ETXStepMotor;
axis[Motor].MotorControl |= SpeedHBX; // Use 0x01 command for next speed axis[Motor].MotorControl |= SpeedHBX; // Use 0x01 command for next speed
axis[Motor].TargetSpeed = axis[Motor].DEGREERATE1; // Set initial speed axis[Motor].TargetSpeed = axis[Motor].DEGREERATE1; // Set initial speed
axis[Motor].Speed = axis[Motor].DEGREERATE1; axis[Motor].ETXSpeed = axis[Motor].DEGREERATE1;
axis[Motor].SpeedState = 0; axis[Motor].SpeedState = 0;
//dbgSerial.print(" GoToSLEW END"); //dbgSerial.print(" GoToSLEW END");
} }
} }
if (axis[Motor].MotorControl & SlewHBX) { // Slewing to M-point if (axis[Motor].MotorControl & SlewHBX) { // Slewing to M-point
axis[Motor].Speed = axis[Motor].DEGREERATE1; // Indicate current speed (approx) axis[Motor].ETXSpeed = axis[Motor].DEGREERATE1; // Indicate current speed (approx)
axis[Motor].ETXMotorState = ETXCheckSlowDown; // Slew until SlowDown axis[Motor].ETXMotorState = ETXCheckSlowDown; // Slew until SlowDown
} }
/* //*
dbgSerial.println(""); dbgSerial.print("ETXSlewMotor Motor: "); dbgSerial.print(Motor); dbgSerial.println(""); dbgSerial.print("ETXSlewMotor Motor: "); dbgSerial.print(axis_name[Motor]);
dbgSerial.print(" <sts: "); dbgSerial.print(axis[Motor].ETXMotorStatus, HEX); dbgSerial.print("> "); dbgSerial.print(" <sts: "); dbgSerial.print(axis[Motor].ETXMotorStatus, HEX); dbgSerial.print("> ");
dbgSerial.print(", Cmd: "); dbgSerial.print(axis[Motor].Command, HEX); dbgSerial.print(", Cmd: "); dbgSerial.print(axis[Motor].Command, HEX);
dbgSerial.print(", Pos: "); dbgSerial.print(axis[Motor].Position, HEX); dbgSerial.print(", Pos: "); dbgSerial.print(axis[Motor].Position, HEX);
dbgSerial.print(", Inc: "); dbgSerial.print(axis[Motor].Increment, HEX); dbgSerial.print(", Inc: "); dbgSerial.print(axis[Motor].Increment, HEX);
dbgSerial.print("->Tgt: "); dbgSerial.print(axis[Motor].Target, HEX); dbgSerial.print("->Tgt: "); dbgSerial.print(axis[Motor].Target, HEX);
dbgSerial.print(" Speed: "); dbgSerial.print(axis[Motor].Speed, HEX); dbgSerial.print(" Speed: "); dbgSerial.print(axis[Motor].ETXSpeed, HEX);
dbgSerial.print(" TargetSpeed: "); dbgSerial.print(axis[Motor].TargetSpeed, HEX); dbgSerial.print(" TargetSpeed: "); dbgSerial.print(axis[Motor].TargetSpeed, HEX);
dbgSerial.print(" SpeedState: "); dbgSerial.println(axis[Motor].SpeedState, HEX); dbgSerial.print(" SpeedState: "); dbgSerial.println(axis[Motor].SpeedState, HEX);
*/ //*/
break; break;
case ETXStepMotor: case ETXStepMotor:
//dbgSerial.println(""); dbgSerial.print("ETXStepMotor Motor: "); dbgSerial.print(Motor); dbgSerial.print(" STEP Cmd: "); //*
dbgSerial.println(""); dbgSerial.print("ETXStepMotor Motor: "); dbgSerial.print(axis_name[Motor]);
dbgSerial.print(" <sts: "); dbgSerial.print(axis[Motor].ETXMotorStatus, HEX); dbgSerial.print("> ");
dbgSerial.print(", Cmd: "); dbgSerial.print(axis[Motor].Command, HEX);
dbgSerial.print(", Pos: "); dbgSerial.print(axis[Motor].Position, HEX);
dbgSerial.print(", Inc: "); dbgSerial.print(axis[Motor].Increment, HEX);
dbgSerial.print("->Tgt: "); dbgSerial.print(axis[Motor].Target, HEX);
dbgSerial.print(" Speed: "); dbgSerial.print(axis[Motor].ETXSpeed, HEX);
dbgSerial.print(" TargetSpeed: "); dbgSerial.print(axis[Motor].TargetSpeed, HEX);
dbgSerial.print(" SpeedState: "); dbgSerial.println(axis[Motor].SpeedState, HEX);
//*/
digitalWrite(SCOPELED, HIGH); // Turn on the LED digitalWrite(SCOPELED, HIGH); // Turn on the LED
if (axis[Motor].MotorControl & SpeedHBX) // Stepping, High or Low speed if (axis[Motor].MotorControl & SpeedHBX) // Stepping, High or Low speed
@ -137,7 +144,7 @@ dbgSerial.print(" SpeedState: "); dbgSerial.println(axis[Motor].SpeedState, HEX)
axis[Motor].MotorControl &= ~SpeedHBX; // Clear flag axis[Motor].MotorControl &= ~SpeedHBX; // Clear flag
// Set the speed, and direction // Set the speed, and direction
// ---------------------------- // ----------------------------
P1 = axis[Motor].Speed; P1 = axis[Motor].ETXSpeed;
if (axis[Motor].ETXMotorStatus & MOVEDECR) // If negative, change P if (axis[Motor].ETXMotorStatus & MOVEDECR) // If negative, change P
P1 = TwosComplement(P1); // to 2's complement P1 = TwosComplement(P1); // to 2's complement
@ -149,19 +156,21 @@ dbgSerial.print(" SpeedState: "); dbgSerial.println(axis[Motor].SpeedState, HEX)
// Send the command // Send the command
// ---------------- // ----------------
if (HBXSendCommand(axis[Motor].Command, Motor)) // Command OK? if (HBXSendCommand(axis[Motor].Command, Motor)) { // Send Command, check OK?
HBXSend3Bytes(Motor); // Send the speed HBXSend3Bytes(Motor); // Send the speed
axis[Motor].EQGMotorStatus |= MOVEAXIS; // Tell EQx axis[Motor].EQGMotorStatus |= MOVEAXIS; // Tell EQx
}
else break;
axis[Motor].ETXMotorState = ETXCheckSpeed; // Make sure we are up to target speed axis[Motor].ETXMotorState = ETXCheckSpeed; // Preset Checkspeed, & if needed, make sure we are up to target speed
if (axis[Motor].MotorControl & GoToHBX) { // If it is a GoTo and up to speed, check position if (axis[Motor].MotorControl & GoToHBX) { // If it is a GoTo and up to speed, check position
if (axis[Motor].Speed == axis[Motor].TargetSpeed) if (axis[Motor].ETXSpeed == axis[Motor].TargetSpeed)
axis[Motor].ETXMotorState = ETXCheckPosition; axis[Motor].ETXMotorState = ETXCheckPosition;
} }
else if (axis[Motor].Speed == 0) { // Stop issued else if (axis[Motor].ETXSpeed == 0) { // Stop issued
axis[Motor].ETXMotorState = ETXStopMotor; axis[Motor].ETXMotorState = ETXStopMotor;
} }
else if (axis[Motor].Speed == axis[Motor].TargetSpeed) { // Else slewing at speed else if (axis[Motor].ETXSpeed == axis[Motor].TargetSpeed) { // Else slewing at speed
axis[Motor].ETXMotorState = ETXIdle; axis[Motor].ETXMotorState = ETXIdle;
} }
break; break;
@ -171,16 +180,16 @@ dbgSerial.print(" SpeedState: "); dbgSerial.println(axis[Motor].SpeedState, HEX)
// Calculate absolute distance to slowdown // Calculate absolute distance to slowdown
// --------------------------------------- // ---------------------------------------
/* ///*
dbgSerial.println(""); dbgSerial.print("ETXCheckSlowDown Motor: "); dbgSerial.print(Motor); dbgSerial.println(""); dbgSerial.print("ETXCheckSlowDown Motor: "); dbgSerial.print(axis_name[Motor]);
dbgSerial.print(" <sts: "); dbgSerial.print(axis[Motor].ETXMotorStatus, HEX); dbgSerial.print("> "); dbgSerial.print(" <sts: "); dbgSerial.print(axis[Motor].ETXMotorStatus, HEX); dbgSerial.print("> ");
dbgSerial.print(", Cmd: "); dbgSerial.print(axis[Motor].Command, HEX); dbgSerial.print(", Cmd: "); dbgSerial.print(axis[Motor].Command, HEX);
dbgSerial.print(", Pos: "); dbgSerial.print(axis[Motor].Position, HEX); dbgSerial.print(", Pos: "); dbgSerial.print(axis[Motor].Position, HEX);
dbgSerial.print(", SD: "); dbgSerial.print(axis[Motor].SlowDown, HEX); dbgSerial.print(", SD: "); dbgSerial.print(axis[Motor].SlowDown, HEX);
dbgSerial.print("->Tgt: "); dbgSerial.print(axis[Motor].Target, HEX); dbgSerial.print("->Tgt: "); dbgSerial.print(axis[Motor].Target, HEX);
dbgSerial.print(" Speed: "); dbgSerial.print(axis[Motor].Speed, HEX); dbgSerial.print(" Speed: "); dbgSerial.print(axis[Motor].ETXSpeed, HEX);
dbgSerial.print(" TargetSpeed: "); dbgSerial.print(axis[Motor].TargetSpeed, HEX); dbgSerial.print(" TargetSpeed: "); dbgSerial.print(axis[Motor].TargetSpeed, HEX);
*/ //*/
// distance = axis[Motor].SlowDown - axis[Motor].Position; // distance = axis[Motor].SlowDown - axis[Motor].Position;
distance = (axis[Motor].Target - 0x1000) - axis[Motor].Position; // Distance to target distance = (axis[Motor].Target - 0x1000) - axis[Motor].Position; // Distance to target
if (axis[Motor].Target < axis[Motor].Position) // If it is decreasing if (axis[Motor].Target < axis[Motor].Position) // If it is decreasing
@ -214,46 +223,45 @@ ETXSlew8 600 // 150 arc-min/sec or 2.5°/sec
ETXSlew9 1080 // 270 arc-min/sec or 4.5°/sec ETXSlew9 1080 // 270 arc-min/sec or 4.5°/sec
*/ */
/* ///*
dbgSerial.println(""); dbgSerial.print("ETXCheckSpeed Motor: "); dbgSerial.print(Motor); dbgSerial.println(""); dbgSerial.print("ETXCheckSpeed Motor: "); dbgSerial.print(axis_name[Motor]);
dbgSerial.print(" <sts: "); dbgSerial.print(axis[Motor].ETXMotorStatus, HEX); dbgSerial.print("> "); dbgSerial.print(" <sts: "); dbgSerial.print(axis[Motor].ETXMotorStatus, HEX); dbgSerial.print("> ");
dbgSerial.print(", Pos: "); dbgSerial.print(axis[Motor].Position, HEX); dbgSerial.print(", Pos: "); dbgSerial.print(axis[Motor].Position, HEX);
dbgSerial.print(", Inc: "); dbgSerial.print(axis[Motor].Increment, HEX); dbgSerial.print(", Inc: "); dbgSerial.print(axis[Motor].Increment, HEX);
dbgSerial.print("->Tgt: "); dbgSerial.print(axis[Motor].Target, HEX); dbgSerial.print("->Tgt: "); dbgSerial.print(axis[Motor].Target, HEX);
dbgSerial.print(" iSpeed: "); dbgSerial.print(axis[Motor].Speed, HEX); dbgSerial.print(" iSpeed: "); dbgSerial.print(axis[Motor].ETXSpeed, HEX);
dbgSerial.print(" iTargetSpeed: "); dbgSerial.print(axis[Motor].TargetSpeed, HEX); dbgSerial.print(" iTargetSpeed: "); dbgSerial.print(axis[Motor].TargetSpeed, HEX);
*/ //*/
axis[Motor].ETXMotorState = ETXStepMotor; // Preset set speed as next action axis[Motor].ETXMotorState = ETXStepMotor; // Preset set speed as next action
// Ramp up to speed // Ramp up to speed
if ((axis[Motor].TargetSpeed != 0) && (axis[Motor].TargetSpeed > axis[Motor].Speed)) { if ((axis[Motor].TargetSpeed != 0) && (axis[Motor].TargetSpeed > axis[Motor].ETXSpeed)) {
if ((axis[Motor].TargetSpeed - axis[Motor].Speed) > (axis[Motor].SIDEREALRATE << 6)) { // 64x sidereal if ((axis[Motor].TargetSpeed - axis[Motor].ETXSpeed) > (axis[Motor].SIDEREALRATE << 6)) { // 64x sidereal
axis[Motor].Speed += ((axis[Motor].TargetSpeed - axis[Motor].Speed) >> 1); // Ramp up approx .5 difference axis[Motor].ETXSpeed += ((axis[Motor].TargetSpeed - axis[Motor].ETXSpeed) >> 1); // Ramp up approx .5 difference
// while(!(HBXSendCommand(Stop, Motor))); // Stop the motor command
axis[Motor].MotorControl &= ~SpeedHBX; // Use 0x00 command axis[Motor].MotorControl &= ~SpeedHBX; // Use 0x00 command
} }
else { else {
axis[Motor].Speed = axis[Motor].TargetSpeed; axis[Motor].ETXSpeed = axis[Motor].TargetSpeed;
while(!(HBXSendCommand(Stop, Motor))); // Stop the motor command while(!(HBXSendCommand(Stop, Motor))); // Stop the motor command
axis[Motor].MotorControl |= SpeedHBX; // Use 0x01 command axis[Motor].MotorControl |= SpeedHBX; // Use 0x01 command
} }
} }
// Ramp down to speed // Ramp down to speed
else if ((axis[Motor].TargetSpeed != 0) && (axis[Motor].Speed > axis[Motor].TargetSpeed)) { else if ((axis[Motor].TargetSpeed != 0) && (axis[Motor].ETXSpeed > axis[Motor].TargetSpeed)) {
axis[Motor].Speed -= ((axis[Motor].Speed - axis[Motor].TargetSpeed) >> 2); // Approx .75 axis[Motor].ETXSpeed -= ((axis[Motor].ETXSpeed - axis[Motor].TargetSpeed) >> 2); // Approx .75
if ((axis[Motor].Speed - axis[Motor].TargetSpeed) <= (axis[Motor].SIDEREALRATE << 7)) { if ((axis[Motor].ETXSpeed - axis[Motor].TargetSpeed) <= (axis[Motor].SIDEREALRATE << 7)) {
axis[Motor].Speed = axis[Motor].TargetSpeed; // Close enough at 128x sidereal, so set the speed axis[Motor].ETXSpeed = axis[Motor].TargetSpeed; // Close enough at 128x sidereal, so set the speed
// while(!(HBXSendCommand(Stop, Motor))); // Stop the motor command // while(!(HBXSendCommand(Stop, Motor))); // Stop the motor command
axis[Motor].MotorControl &= ~SpeedHBX; // Use 0x00 command axis[Motor].MotorControl &= ~SpeedHBX; // Use 0x00 command
} }
} }
// Ramp down to stop // Ramp down to stop
else if ((axis[Motor].TargetSpeed == 0) && (axis[Motor].Speed != 0)) { else if ((axis[Motor].TargetSpeed == 0) && (axis[Motor].ETXSpeed != 0)) {
if (axis[Motor].ETXMotorStatus & MOVESLEW) { if (axis[Motor].ETXMotorStatus & MOVESLEW) {
axis[Motor].ETXMotorState = ETXStopMotor; axis[Motor].ETXMotorState = ETXStopMotor;
} }
else if (axis[Motor].Speed >= (axis[Motor].SIDEREALRATE << 7)) { // Ramp down to 128x sidereal else if (axis[Motor].ETXSpeed >= (axis[Motor].SIDEREALRATE << 7)) { // Ramp down to 128x sidereal
axis[Motor].Speed -= (axis[Motor].Speed >> 2); // Approximately .75 axis[Motor].ETXSpeed -= (axis[Motor].ETXSpeed >> 2); // Approximately .75
while(!(HBXSendCommand(Stop, Motor))); // Stop the motor command while(!(HBXSendCommand(Stop, Motor))); // Stop the motor command
axis[Motor].MotorControl |= SpeedHBX; // Use 0x01 command axis[Motor].MotorControl |= SpeedHBX; // Use 0x01 command
} }
@ -263,7 +271,7 @@ dbgSerial.print(" iTargetSpeed: "); dbgSerial.print(axis[Motor].TargetSpeed, HEX
// Switch to position check, when we are at speed - check done in ETXStepMotor // Switch to position check, when we are at speed - check done in ETXStepMotor
//dbgSerial.print(" oSpeed: "); dbgSerial.print(axis[Motor].Speed, HEX); //dbgSerial.print(" oSpeed: "); dbgSerial.print(axis[Motor].ETXSpeed, HEX);
//dbgSerial.print(" oTargetSpeed: "); dbgSerial.print(axis[Motor].TargetSpeed, HEX); //dbgSerial.print(" oTargetSpeed: "); dbgSerial.print(axis[Motor].TargetSpeed, HEX);
break; break;
@ -275,16 +283,16 @@ dbgSerial.print(" iTargetSpeed: "); dbgSerial.print(axis[Motor].TargetSpeed, HEX
// Calculate absolute distance to target // Calculate absolute distance to target
// ------------------------------------- // -------------------------------------
/* ///*
dbgSerial.println(""); dbgSerial.print("ETXCheckPosition Motor: "); dbgSerial.print(Motor); dbgSerial.println(""); dbgSerial.print("ETXCheckPosition Motor: "); dbgSerial.print(axis_name[Motor]);
dbgSerial.print(" <sts: "); dbgSerial.print(axis[Motor].ETXMotorStatus, HEX); dbgSerial.print("> "); dbgSerial.print(" <sts: "); dbgSerial.print(axis[Motor].ETXMotorStatus, HEX); dbgSerial.print("> ");
dbgSerial.print(", Pos: "); dbgSerial.print(axis[Motor].Position, HEX); dbgSerial.print(", Pos: "); dbgSerial.print(axis[Motor].Position, HEX);
dbgSerial.print(", Inc: "); dbgSerial.print(axis[Motor].Increment, HEX); dbgSerial.print(", Inc: "); dbgSerial.print(axis[Motor].Increment, HEX);
dbgSerial.print("->Tgt: "); dbgSerial.print(axis[Motor].Target, HEX); dbgSerial.print("->Tgt: "); dbgSerial.print(axis[Motor].Target, HEX);
dbgSerial.print(" Speed: "); dbgSerial.print(axis[Motor].Speed, HEX); dbgSerial.print(" Speed: "); dbgSerial.print(axis[Motor].ETXSpeed, HEX);
dbgSerial.print(" TargetSpeed: "); dbgSerial.print(axis[Motor].TargetSpeed, HEX); dbgSerial.print(" TargetSpeed: "); dbgSerial.print(axis[Motor].TargetSpeed, HEX);
dbgSerial.print(" SpeedState: "); dbgSerial.print(axis[Motor].SpeedState, HEX); dbgSerial.print(" SpeedState: "); dbgSerial.print(axis[Motor].SpeedState, HEX);
*/ //*/
if (!(axis[Motor].MotorControl & GoToHBX)) { // Slewing so update position if (!(axis[Motor].MotorControl & GoToHBX)) { // Slewing so update position
break; break;
} }
@ -309,19 +317,19 @@ dbgSerial.print(" SpeedState: "); dbgSerial.print(axis[Motor].SpeedState, HEX);
axis[Motor].SpeedState += 1; axis[Motor].SpeedState += 1;
} }
else if ((distance <= 0x100) && (axis[Motor].SpeedState == 2)) { else if ((distance <= 0x100) && (axis[Motor].SpeedState == 2)) {
axis[Motor].TargetSpeed = axis[Motor].Speed >> 2; // 1/16 axis[Motor].TargetSpeed = axis[Motor].ETXSpeed >> 2; // 1/16
axis[Motor].MotorControl &= ~SpeedHBX; // Use 0x00 command axis[Motor].MotorControl &= ~SpeedHBX; // Use 0x00 command
axis[Motor].ETXMotorState = ETXStepMotor; // Change speed axis[Motor].ETXMotorState = ETXStepMotor; // Change speed
axis[Motor].SpeedState += 1; axis[Motor].SpeedState += 1;
} }
else if ((distance <= 0x200) && (axis[Motor].SpeedState == 1)) { else if ((distance <= 0x200) && (axis[Motor].SpeedState == 1)) {
axis[Motor].TargetSpeed = axis[Motor].Speed >> 1; // 1/4 axis[Motor].TargetSpeed = axis[Motor].ETXSpeed >> 1; // 1/4
axis[Motor].MotorControl &= ~SpeedHBX; // Use 0x00 command axis[Motor].MotorControl &= ~SpeedHBX; // Use 0x00 command
axis[Motor].ETXMotorState = ETXStepMotor; // Change speed axis[Motor].ETXMotorState = ETXStepMotor; // Change speed
axis[Motor].SpeedState += 1; axis[Motor].SpeedState += 1;
} }
else if ((distance <= 0x400) && (axis[Motor].SpeedState == 0)) { else if ((distance <= 0x400) && (axis[Motor].SpeedState == 0)) {
axis[Motor].TargetSpeed = axis[Motor].Speed >> 1; // 1/2 axis[Motor].TargetSpeed = axis[Motor].ETXSpeed >> 1; // 1/2
while(!(HBXSendCommand(Stop, Motor))); // Stop the motor command while(!(HBXSendCommand(Stop, Motor))); // Stop the motor command
axis[Motor].MotorControl |= SpeedHBX; // Use 0x01 command axis[Motor].MotorControl |= SpeedHBX; // Use 0x01 command
axis[Motor].ETXMotorState = ETXStepMotor; // Change speed axis[Motor].ETXMotorState = ETXStepMotor; // Change speed
@ -350,7 +358,7 @@ dbgSerial.print(" SpeedState: "); dbgSerial.print(axis[Motor].SpeedState, HEX);
case ETXStopMotor: case ETXStopMotor:
//dbgSerial.println(""); dbgSerial.print("ETXStopMotor Motor: "); dbgSerial.print(Motor); dbgSerial.println(""); dbgSerial.print("ETXStopMotor Motor: "); dbgSerial.print(axis_name[Motor]);
while(!(HBXSendCommand(Stop, Motor))); // Stop the motor while(!(HBXSendCommand(Stop, Motor))); // Stop the motor
axis[Motor].ETXMotorStatus |= MOVESLEW; // ETX Set slewing mode axis[Motor].ETXMotorStatus |= MOVESLEW; // ETX Set slewing mode
@ -362,18 +370,22 @@ dbgSerial.print(" SpeedState: "); dbgSerial.print(axis[Motor].SpeedState, HEX);
axis[Motor].EQGMotorStatus &= ~MOVEHIGH; // and speed axis[Motor].EQGMotorStatus &= ~MOVEHIGH; // and speed
axis[Motor].EQGMotorStatus &= ~MOVEAXIS; // Clear the motor moving flag axis[Motor].EQGMotorStatus &= ~MOVEAXIS; // Clear the motor moving flag
axis[Motor].ETXMotorState = ETXCheckStartup; axis[Motor].ETXMotorState = ETXCheckStartup;
axis[Motor].TargetSpeed = axis[Motor].Speed; // For any subsequent move // axis[Motor].TargetSpeed = axis[Motor].ETXSpeed; // For any subsequent move
axis[Motor].Speed = 0; axis[Motor].TargetSpeed = 0;
axis[Motor].ETXSpeed = 0;
//jma CheckAltFlipState();
break; break;
case ETXMotorEnd: case ETXMotorEnd:
/* ///*
dbgSerial.println(""); dbgSerial.print("ETXMotorEnd Motor: "); dbgSerial.print(Motor); dbgSerial.println(""); dbgSerial.print("ETXMotorEnd Motor: "); dbgSerial.print(axis_name[Motor]);
dbgSerial.print(" <sts: "); dbgSerial.print(axis[Motor].ETXMotorStatus, HEX); dbgSerial.print("> "); dbgSerial.print(" <sts: "); dbgSerial.print(axis[Motor].ETXMotorStatus, HEX); dbgSerial.print("> ");
dbgSerial.print(", Pos: "); dbgSerial.print(axis[Motor].Position, HEX); dbgSerial.print(", Pos: "); dbgSerial.print(axis[Motor].Position, HEX);
dbgSerial.print(", Inc: "); dbgSerial.print(axis[Motor].Increment, HEX); dbgSerial.print(", Inc: "); dbgSerial.print(axis[Motor].Increment, HEX);
dbgSerial.print("->Tgt: "); dbgSerial.print(axis[Motor].Target, HEX); dbgSerial.print("->Tgt: "); dbgSerial.print(axis[Motor].Target, HEX);
*/ //*/
digitalWrite(SCOPELED, LOW); // Turn off the LED digitalWrite(SCOPELED, LOW); // Turn off the LED
distance = axis[Motor].Target - axis[Motor].Position; // Distance to target distance = axis[Motor].Target - axis[Motor].Position; // Distance to target
if (axis[Motor].Target < axis[Motor].Position) // If it is decreasing if (axis[Motor].Target < axis[Motor].Position) // If it is decreasing
@ -389,13 +401,13 @@ dbgSerial.print("->Tgt: "); dbgSerial.print(axis[Motor].Target, HEX);
if (HBXSendCommand(axis[Motor].Command, Motor)) // Command OK? if (HBXSendCommand(axis[Motor].Command, Motor)) // Command OK?
HBXSend2Bytes(Motor); // Send the offset HBXSend2Bytes(Motor); // Send the offset
/* ///*
dbgSerial.print(" OFFSET"); dbgSerial.print(" OFFSET");
dbgSerial.print(" "); dbgSerial.print(axis[Motor].Command, HEX); dbgSerial.print(" "); dbgSerial.print(axis[Motor].Command, HEX);
dbgSerial.print(" "); dbgSerial.print(axis[Motor].HBXP1, HEX); dbgSerial.print(" "); dbgSerial.print(axis[Motor].HBXP1, HEX);
dbgSerial.print(" "); dbgSerial.print(axis[Motor].HBXP2, HEX); dbgSerial.print(" "); dbgSerial.print(axis[Motor].HBXP2, HEX);
dbgSerial.print(" "); dbgSerial.print(axis[Motor].HBXP3, HEX); dbgSerial.print(" "); dbgSerial.print(axis[Motor].HBXP3, HEX);
*/ //*/
} }
axis[Motor].Position = axis[Motor].Target; axis[Motor].Position = axis[Motor].Target;
axis[Motor].MotorControl &= ~GoToHBX; // Clear the flag axis[Motor].MotorControl &= ~GoToHBX; // Clear the flag
@ -412,7 +424,7 @@ dbgSerial.print(" "); dbgSerial.print(axis[Motor].HBXP3, HEX);
bool HBXGetStatus(unsigned char Motor) { bool HBXGetStatus(unsigned char Motor) {
if (!HBXSendCommand(GetStatus, Motor)) { if (!HBXSendCommand(GetStatus, Motor)) {
dbgSerial.println(""); dbgSerial.print("HBXGetStatus Motor: "); dbgSerial.print(Motor); dbgSerial.println(" Cmd Fail"); dbgSerial.println(""); dbgSerial.print("HBXGetStatus Motor: "); dbgSerial.print(axis_name[Motor]); dbgSerial.println(" Cmd Fail");
return(false); return(false);
} }
HBXGet3Bytes(Motor); HBXGet3Bytes(Motor);
@ -431,7 +443,7 @@ bool HBXGetStatus(unsigned char Motor) {
if (StatusCount++ > 51) { if (StatusCount++ > 51) {
StatusCount = 0; StatusCount = 0;
dbgSerial.println(""); dbgSerial.print("Motor: "); dbgSerial.print(Motor); dbgSerial.print(", Posn: "); dbgSerial.print(axis[Motor].Position, HEX); dbgSerial.println(""); dbgSerial.print("Motor: "); dbgSerial.print(axis_name[Motor]); dbgSerial.print(", Posn: "); dbgSerial.print(axis[Motor].Position, HEX);
} }
return(true); return(true);
} }
@ -537,10 +549,11 @@ void AzInitialise(unsigned char scope) {
axis[AzMotor].GbxRatio = ratio[scope][AzMotor-1].GbxRatio; axis[AzMotor].GbxRatio = ratio[scope][AzMotor-1].GbxRatio;
axis[AzMotor].XferRatio = ratio[scope][AzMotor-1].XferRatio; axis[AzMotor].XferRatio = ratio[scope][AzMotor-1].XferRatio;
axis[AzMotor].WormTeeth = ratio[scope][AzMotor-1].WormTeeth; axis[AzMotor].WormTeeth = ratio[scope][AzMotor-1].WormTeeth;
// EQMOD values // EQMOD
axis[AzMotor].aVALUE = axis[AzMotor].Vanes * (float)4 * axis[AzMotor].GbxRatio * axis[AzMotor].XferRatio * axis[AzMotor].WormTeeth; axis[AzMotor].aVALUE = axis[AzMotor].Vanes * (float)4 * axis[AzMotor].GbxRatio * axis[AzMotor].XferRatio * axis[AzMotor].WormTeeth;
axis[AzMotor].MeadeRatio = axis[AzMotor].aVALUE / ArcSecs360; // Distance for one arcsec axis[AzMotor].MeadeRatio = axis[AzMotor].aVALUE / ArcSecs360; // Distance for one arcsec
axis[AzMotor].bVALUE = (MeadeSidereal * axis[AzMotor].MeadeRatio * axis[AzMotor].aVALUE * SiderealArcSecs) / ArcSecs360; axis[AzMotor].bVALUE = (MeadeSidereal * axis[AzMotor].MeadeRatio * axis[AzMotor].aVALUE * SiderealArcSecs) / ArcSecs360;
axis[AzMotor].BASERATE = axis[AzMotor].bVALUE / axis[AzMotor].MeadeRatio;
axis[AzMotor].SIDEREALRATE = MeadeSidereal * axis[AzMotor].MeadeRatio; axis[AzMotor].SIDEREALRATE = MeadeSidereal * axis[AzMotor].MeadeRatio;
axis[AzMotor].SOLARRATE = axis[AzMotor].SIDEREALRATE * SOLARSECS / SIDEREALSECS; axis[AzMotor].SOLARRATE = axis[AzMotor].SIDEREALRATE * SOLARSECS / SIDEREALSECS;
axis[AzMotor].LUNARRATE = axis[AzMotor].SIDEREALRATE * LUNARSECS / SIDEREALSECS; axis[AzMotor].LUNARRATE = axis[AzMotor].SIDEREALRATE * LUNARSECS / SIDEREALSECS;
@ -551,6 +564,9 @@ void AzInitialise(unsigned char scope) {
axis[AzMotor].HBXP2 = 0x00; axis[AzMotor].HBXP2 = 0x00;
axis[AzMotor].HBXP3 = 0x00; axis[AzMotor].HBXP3 = 0x00;
axis[AzMotor].HBXP4 = 0x00; axis[AzMotor].HBXP4 = 0x00;
axis[AzMotor].ETXSpeed = 0x00;
axis[AzMotor].SpeedState = 0x00;
axis[AzMotor].TargetSpeed = 0x00;
axis[AzMotor].Position = ETX_CENTRE; // ETX RA initially at 0 hours axis[AzMotor].Position = ETX_CENTRE; // ETX RA initially at 0 hours
axis[AzMotor].OneDegree = axis[AzMotor].aVALUE / (float)360; // Distance for one degree axis[AzMotor].OneDegree = axis[AzMotor].aVALUE / (float)360; // Distance for one degree
axis[AzMotor].Target = axis[AzMotor].Position; axis[AzMotor].Target = axis[AzMotor].Position;
@ -567,29 +583,129 @@ void AltInitialise(unsigned char scope) {
axis[AltMotor].GbxRatio = ratio[scope][AltMotor-1].GbxRatio; axis[AltMotor].GbxRatio = ratio[scope][AltMotor-1].GbxRatio;
axis[AltMotor].XferRatio = ratio[scope][AltMotor-1].XferRatio; axis[AltMotor].XferRatio = ratio[scope][AltMotor-1].XferRatio;
axis[AltMotor].WormTeeth = ratio[scope][AltMotor-1].WormTeeth; axis[AltMotor].WormTeeth = ratio[scope][AltMotor-1].WormTeeth;
// EQMOD values // EQMOD
axis[AltMotor].aVALUE = axis[AltMotor].Vanes * (float)4 * axis[AltMotor].GbxRatio * axis[AltMotor].XferRatio * axis[AltMotor].WormTeeth; axis[AltMotor].aVALUE = axis[AltMotor].Vanes * (float)4 * axis[AltMotor].GbxRatio * axis[AltMotor].XferRatio * axis[AltMotor].WormTeeth;
axis[AltMotor].MeadeRatio = axis[AltMotor].aVALUE / ArcSecs360; // Distance for one arcsec axis[AltMotor].MeadeRatio = axis[AltMotor].aVALUE / ArcSecs360; // Counts for one arcsec
axis[AltMotor].bVALUE = MeadeSidereal * axis[AltMotor].MeadeRatio * axis[AltMotor].aVALUE * SiderealArcSecs / ArcSecs360; axis[AltMotor].bVALUE = MeadeSidereal * axis[AltMotor].MeadeRatio * axis[AltMotor].aVALUE * SiderealArcSecs / ArcSecs360;
axis[AltMotor].BASERATE = axis[AltMotor].bVALUE / axis[AltMotor].MeadeRatio;
axis[AltMotor].SIDEREALRATE = MeadeSidereal * axis[AltMotor].MeadeRatio; axis[AltMotor].SIDEREALRATE = MeadeSidereal * axis[AltMotor].MeadeRatio;
axis[AltMotor].SOLARRATE = axis[AltMotor].SIDEREALRATE * SOLARSECS / SIDEREALSECS; axis[AltMotor].SOLARRATE = axis[AltMotor].SIDEREALRATE * SOLARSECS / SIDEREALSECS;
axis[AltMotor].LUNARRATE = axis[AltMotor].SIDEREALRATE * LUNARSECS / SIDEREALSECS; axis[AltMotor].LUNARRATE = axis[AltMotor].SIDEREALRATE * LUNARSECS / SIDEREALSECS;
axis[AltMotor].DEGREERATE1 = axis[AltMotor].SIDEREALRATE * ETXSlew7; axis[AltMotor].DEGREERATE1 = axis[AltMotor].SIDEREALRATE * ETXSlew7;
axis[AltMotor].PEC = axis[AltMotor].aVALUE / axis[AltMotor].WormTeeth; axis[AltMotor].PEC = axis[AltMotor].aVALUE / axis[AltMotor].WormTeeth;
axis[AltMotor].EQGMotorStatus = MOVESLEW;
// ETX // ETX
axis[AltMotor].HBXP1 = 0x00; axis[AltMotor].HBXP1 = 0x00;
axis[AltMotor].HBXP2 = 0x00; axis[AltMotor].HBXP2 = 0x00;
axis[AltMotor].HBXP3 = 0x00; axis[AltMotor].HBXP3 = 0x00;
axis[AltMotor].HBXP4 = 0x00; axis[AltMotor].HBXP4 = 0x00;
axis[AltMotor].Position = ETX_CENTRE - (axis[AltMotor].aVALUE >> 2); // Initially at -90 degrees axis[AltMotor].ETXSpeed = 0x00;
axis[AltMotor].SpeedState = 0x00;
axis[AltMotor].TargetSpeed = 0x00;
axis[AltMotor].Position = ETX_CENTRE + (axis[AltMotor].aVALUE >> 2); // Initially at +90 degrees
axis[AltMotor].OneDegree = axis[AltMotor].aVALUE / (float)360; // Distance for one degree axis[AltMotor].OneDegree = axis[AltMotor].aVALUE / (float)360; // Distance for one degree
axis[AltMotor].Target = axis[AltMotor].Position; axis[AltMotor].Target = axis[AltMotor].Position;
axis[AltMotor].DirnSpeed = 0x000; axis[AltMotor].DirnSpeed = 0x000;
axis[AltMotor].ETXMotorStatus = MOVESLEW; axis[AltMotor].ETXMotorStatus = MOVESLEW;
axis[AltMotor].EQGMotorStatus = MOVESLEW;
axis[AltMotor].ETXMotorState = ETXCheckStartup; axis[AltMotor].ETXMotorState = ETXCheckStartup;
} }
/*
// Check if ETX mount will hit fork physical limits
// When used as GEM, ETX mounts cannot go past vertical
// This means E in Sthn, W in Nthn, for East side pointing West
// So rotate 180 degrees in Az and flip the Alt destination
*/
void CheckAltFlip(unsigned char Motor) {
long distance;
distance = axis[Motor].Target - axis[Motor].Position; // Distance to target
if ((telescope < 3) && (Motor == AltMotor)) { // ETXn0 series
long p;
if (distance > 0) {
// GoTo
if (axis[AltMotor].Target >= (ETX_CENTRE + (axis[AltMotor].aVALUE >> 2))) { // E[Sthn] (or W[Nthn])
dbgSerial.println(""); dbgSerial.print("Flip: target "); dbgSerial.print(axis[AltMotor].Target); // Set Target
p = axis[AltMotor].Target - (ETX_CENTRE + (axis[AltMotor].aVALUE >> 2)); // Offset from EQG midpoint
axis[AltMotor].Target -= (p << 1); // Swap to other side
distance = axis[Motor].Target - axis[Motor].Position; // Distance to target
dbgSerial.print(", new "); dbgSerial.print(axis[AltMotor].Target);
// Flip direction
if (axis[AltMotor].ETXMotorStatus & MOVEDECR) axis[AltMotor].ETXMotorStatus &= ~MOVEDECR;
else axis[AltMotor].ETXMotorStatus |= MOVEDECR;
// Set SlowDown
p = axis[AltMotor].SlowDown - (ETX_CENTRE + (axis[AltMotor].aVALUE >> 2));
axis[AltMotor].SlowDown -= (p << 1);
dbgSerial.print(", Slowdown "); dbgSerial.print(p);
if (axis[AltMotor].Flip == NORMAL) {
axis[AltMotor].Flip = FLIP;
dbgSerial.print(", Type "); dbgSerial.print("ALREADY FLIPPED");
}
else {
dbgSerial.print(", Type "); dbgSerial.print("NORMAL");
}
}
else {
if (axis[AltMotor].Flip == FLIPPED) {
axis[AltMotor].Flip = UNFLIP;
dbgSerial.print(", Action "); dbgSerial.print("UNFLIP");
}
else {
dbgSerial.print(", Action "); dbgSerial.print("NOTHING");
}
}
}
else {
// SLEW
if (axis[AltMotor].ETXMotorStatus & MOVEDECR) {
axis[AltMotor].ETXMotorStatus &= ~MOVEDECR;
if (axis[AltMotor].Flip == NORMAL) {
axis[AltMotor].Flip = FLIP;
dbgSerial.print(", Action "); dbgSerial.print("FLIP");
}
else {
dbgSerial.print(", Action "); dbgSerial.print("NOTHING");
}
}
if (axis[AltMotor].Flip == FLIPPED) {
axis[AltMotor].Flip = UNFLIP;
dbgSerial.print(", Action "); dbgSerial.print("FLIP");
}
else {
dbgSerial.print(", Action "); dbgSerial.print("NOTHING");
}
}
}
}
void CheckAltFlipState(void) {
if ((axis[AltMotor].Flip == FLIPPING) || (axis[AltMotor].Flip == UNFLIPPING)) {
dbgSerial.println(""); dbgSerial.print("Stop Motor: ");
if (axis[AltMotor].Flip == FLIPPING) {
axis[AltMotor].Flip = FLIPPED; dbgSerial.print("FLIPPING");
}
else {
axis[AltMotor].Flip = NORMAL; dbgSerial.print("NORMAl");
}
}
}
void CheckAltFlipReqd(void) {
if (axis[AltMotor].ETXMotorState == ETXIdle) {
if ((axis[AltMotor].Flip == FLIP) || (axis[AltMotor].Flip == UNFLIP)) {
if (axis[AltMotor].Flip == FLIP) axis[AltMotor].Flip = FLIPPING;
else axis[AltMotor].Flip = UNFLIPPING;
// Rotate 180 degrees in RA
if (axis[AzMotor].Target > ETX_CENTRE) axis[AzMotor].Target -= (axis[AzMotor].aVALUE >> 1);
else axis[AzMotor].Target += (axis[AzMotor].aVALUE >> 1);
axis[AzMotor].ETXMotorStatus |= (MOVEAXIS || MOVEHIGH);
axis[AzMotor].ETXMotorStatus &= ~MOVESLEW;
axis[AzMotor].MotorControl |= GoToHBX;
CheckETXState(AzMotor);
}
}
}
void PrintHbxValues(unsigned char Motor) { void PrintHbxValues(unsigned char Motor) {
if (Motor == AzMotor) if (Motor == AzMotor)
dbgSerial.println("AzMotor"); dbgSerial.println("AzMotor");
@ -607,7 +723,8 @@ void PrintHbxValues(unsigned char Motor) {
dbgSerial.print(", bVALUE 0x"); dbgSerial.print(axis[Motor].bVALUE, HEX); dbgSerial.print(", bVALUE 0x"); dbgSerial.print(axis[Motor].bVALUE, HEX);
dbgSerial.print(", PEC 0x"); dbgSerial.println(axis[Motor].PEC, HEX); dbgSerial.print(", PEC 0x"); dbgSerial.println(axis[Motor].PEC, HEX);
dbgSerial.print("SIDEREALRATE 0x"); dbgSerial.print(axis[Motor].SIDEREALRATE, HEX); dbgSerial.print("BASERATE 0x"); dbgSerial.print(axis[Motor].BASERATE, HEX);
dbgSerial.print(", SIDEREALRATE 0x"); dbgSerial.print(axis[Motor].SIDEREALRATE, HEX);
dbgSerial.print(", SOLARRATE 0x"); dbgSerial.print(axis[Motor].SOLARRATE, HEX); dbgSerial.print(", SOLARRATE 0x"); dbgSerial.print(axis[Motor].SOLARRATE, HEX);
dbgSerial.print(", LUNARRATE 0x"); dbgSerial.print(axis[Motor].LUNARRATE, HEX); dbgSerial.print(", LUNARRATE 0x"); dbgSerial.print(axis[Motor].LUNARRATE, HEX);
dbgSerial.print(", DEGREERATE1 0x"); dbgSerial.println(axis[Motor].DEGREERATE1, HEX); dbgSerial.print(", DEGREERATE1 0x"); dbgSerial.println(axis[Motor].DEGREERATE1, HEX);
@ -638,7 +755,7 @@ void HBXPrintStatus(unsigned char Motor) {
/* dbgSerial.println(""); /* dbgSerial.println("");
dbgSerial.print("Motor: "); dbgSerial.print("Motor: ");
dbgSerial.print(Motor); dbgSerial.print(axis_name[Motor]);
dbgSerial.print(", Cmnd: "); dbgSerial.print(", Cmnd: ");
dbgSerial.print(axis[Motor].Command, HEX); dbgSerial.print(axis[Motor].Command, HEX);
dbgSerial.print(" - "); dbgSerial.print(" - ");

Wyświetl plik

@ -87,7 +87,7 @@ void putRxDataIntoMountInputBuffer(void) {
// Data in sendWiFi.text, length sendWiFi.len // Data in sendWiFi.text, length sendWiFi.len
void getTxDataFromMountOutputBuffer(void) { void getTxDataFromMountOutputBuffer(void) {
while (EQGTxoPtr != EQGTxiPtr) { while (EQGTxoPtr != EQGTxiPtr) {
dbgSerial.write(EQGTxBuffer[EQGTxoPtr]); //jma dbgSerial.write(EQGTxBuffer[EQGTxoPtr]);
sendWiFi.text[TxDIndex++] = EQGTxBuffer[EQGTxoPtr++]; sendWiFi.text[TxDIndex++] = EQGTxBuffer[EQGTxoPtr++];
EQGTxoPtr &= EQGMASK; EQGTxoPtr &= EQGMASK;
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

5
Software/EQG2HBXE32/.gitignore vendored 100644
Wyświetl plik

@ -0,0 +1,5 @@
.pio
.vscode/.browse.c_cpp.db*
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch

Wyświetl plik

@ -0,0 +1,7 @@
{
// See http://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
"platformio.platformio-ide"
]
}