Jump to content

Stargazers Lounge Uses Cookies

Like most websites, SGL uses cookies in order to deliver a secure, personalised service, to provide social media functions and to analyse our traffic. Continued use of SGL indicates your acceptance of our cookie policy.

stargazine_ep3_banner.thumb.jpg.5533fb830ae914798f4dbbdd2c8a5853.jpg

Gina

Thoughts on which imaging rigs to concentrate on

Recommended Posts

Thanks Wim :)  I'm quite familiar with Photoshop so might perhaps use it for finishing off - I still have it on my no.2 desktop and available via TeamViewer.  I can't dump Windows altogether as there are still a few bits of Windows software that I use.  Haven't found a substitute for SketchUp for the Linux platform though there is a Mac OSX version.  (I no longer have OSX as my MacBook Pro has ceased to work.)

Share this post


Link to post
Share on other sites

Clear sky to the east so tried auto-focus using KStars/INDI.  Here's the focuser window in Ekos - KStars.  This is using the Luminance filter.  Don't know if I'm using the best parameters but the results look pretty good to me :)  This is after Auto-Focus then Framing to look at a number of stars.  I haven't pointed the telescope in any particular direction so this is pot luck as to what stars are in the FOV.  It may be better with tracking on.

Screenshot from 2017-02-15 19-21-25.png

Edited by Gina

Share this post


Link to post
Share on other sites

An average HFR of 1.2 pixels seems pretty good to me.  I'd be pushed to get that with manual focussing.  Shows the focuser is working well for the scope rig.  Now if only I can get it to work with my widefield rig...  Have to say, I really liking the KStars/Ekos/INDI/RPi setup.  Once set up properly it's so much easier to use than the old Windows multiple software system.

Share this post


Link to post
Share on other sites

This might just be my unfamiliarity with the software but why does the v-curve graph not show a v curve? In SGPro I'd see the HFR fall then rise over about 100 steps. I'm guessing your steps are so fine that you're only seeing the bottom of the curve?

  • Like 1

Share this post


Link to post
Share on other sites

Ah...  I wonder.  I see what you mean - though this was after Framing following Auto Focus.  Yes, my focussing range is more like 1000 or more, rather than 100.  And that graph is only showing 25!  So I do need to change my gear ratio unless I can change the code in the rpi_focus.cpp file.  Have to see which is easier.

Edited by Gina

Share this post


Link to post
Share on other sites

In SGPro I would be looking at the travel (no of steps between max in and out focus) and step size. BUt I'd also define no of steps. So for me, my focuser travels about 8000 steps covering 6cm of travel. I use a 9 step routine with a step size of 10. I worked that out by manually finding focus then refocused until the HFR was about 4 times larger.  Used twice the distance between the 4xHFR and focused HFR divided by no of steps to get a good step size. 

  • Like 2

Share this post


Link to post
Share on other sites

Thanks Ken :)  Have to check if anything can be set up in the Astroberry Focuser otherwise I could add to the code (or alter it)

pi@raspberrypi:~/astroberry-svn $ cat rpi_focus.cpp
/*******************************************************************************
  Copyright(c) 2014 Radek Kaczorek  <rkaczorek AT gmail DOT com>

 This library is free software; you can redistribute it and/or
 modify it under the terms of the GNU Library General Public
 License version 2 as published by the Free Software Foundation.
 .
 This library is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 Library General Public License for more details.
 .
 You should have received a copy of the GNU Library General Public License
 along with this library; see the file COPYING.LIB.  If not, write to
 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 Boston, MA 02110-1301, USA.
*******************************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <memory>
#include <bcm2835.h>

#include "rpi_focus.h"

// We declare an auto pointer to focusRpi.
std::auto_ptr<FocusRpi> focusRpi(0);

// Stepper motor takes 4 miliseconds to move one step = 250 steps per second (real rate = 240,905660377)
// 1) focusing from min to max takes 7 evolutions
// 2) PG2528-0502U step motor makes 7 * (360deg/15degperstep)*72:1 = 1728 steps per evolution
// 3) MAX_STEPS for 7 evolutions should be 12096

#define MAX_STEPS 10000 // maximum steps focuser can travel from min=0 to max

#define STEP_DELAY 4 // miliseconds

// indicate GPIOs used - use P1_* pin numbers not gpio numbers (!!!)

//RPi B+
/*
#define DIR RPI_V2_GPIO_P1_07	// GPIO4
#define STEP RPI_V2_GPIO_P1_11	// GPIO17
#define M0 RPI_V2_GPIO_P1_15	// GPIO22
#define M1 RPI_V2_GPIO_P1_13	// GPIO27
#define SLEEP RPI_V2_GPIO_P1_16	// GPIO23
*/

//RPi 2
#define DIR RPI_BPLUS_GPIO_J8_07	// GPIO4
#define STEP RPI_BPLUS_GPIO_J8_11	// GPIO17
#define M0 RPI_BPLUS_GPIO_J8_15		// GPIO22
#define M1 RPI_BPLUS_GPIO_J8_13		// GPIO27
#define SLEEP RPI_BPLUS_GPIO_J8_16	// GPIO23


void ISPoll(void *p);


void ISInit()
{
   static int isInit = 0;

   if (isInit == 1)
       return;
   if(focusRpi.get() == 0)
   {
       isInit = 1;
       focusRpi.reset(new FocusRpi());
   }
}

void ISGetProperties(const char *dev)
{
        ISInit();
        focusRpi->ISGetProperties(dev);
}

void ISNewSwitch(const char *dev, const char *name, ISState *states, char *names[], int num)
{
        ISInit();
        focusRpi->ISNewSwitch(dev, name, states, names, num);
}

void ISNewText(	const char *dev, const char *name, char *texts[], char *names[], int num)
{
        ISInit();
        focusRpi->ISNewText(dev, name, texts, names, num);
}

void ISNewNumber(const char *dev, const char *name, double values[], char *names[], int num)
{
        ISInit();
        focusRpi->ISNewNumber(dev, name, values, names, num);
}

void ISNewBLOB (const char *dev, const char *name, int sizes[], int blobsizes[], char *blobs[], char *formats[], char *names[], int n)
{
  INDI_UNUSED(dev);
  INDI_UNUSED(name);
  INDI_UNUSED(sizes);
  INDI_UNUSED(blobsizes);
  INDI_UNUSED(blobs);
  INDI_UNUSED(formats);
  INDI_UNUSED(names);
  INDI_UNUSED(n);
}

void ISSnoopDevice (XMLEle *root)
{
    ISInit();
    focusRpi->ISSnoopDevice(root);
}

FocusRpi::FocusRpi()
{
	setVersion(2,1);
}

FocusRpi::~FocusRpi()
{

}

const char * FocusRpi::getDefaultName()
{
        return (char *)"Astroberry Focuser";
}

bool FocusRpi::Connect()
{
    if (!bcm2835_init())
    {
		IDMessage(getDeviceName(), "Problem initiating Astroberry Focuser.");
		return false;
	}

    // init GPIOs
    std::ofstream exportgpio;
    exportgpio.open("/sys/class/gpio/export");
    exportgpio << DIR << std::endl;
    exportgpio << STEP << std::endl;
    exportgpio << M0 << std::endl;
    exportgpio << M1 << std::endl;
    exportgpio << SLEEP << std::endl;
    exportgpio.close();

    // Set gpios to output mode
    bcm2835_gpio_fsel(DIR, BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_fsel(STEP, BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_fsel(SLEEP, BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_fsel(M0, BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_fsel(M1, BCM2835_GPIO_FSEL_OUTP);
	
    IDMessage(getDeviceName(), "Astroberry Focuser connected successfully.");
    return true;
}

bool FocusRpi::Disconnect()
{
	// park focuser
	if ( FocusParkingS[0].s == ISS_ON )
	{
		IDMessage(getDeviceName(), "Astroberry Focuser is parking...");
		MoveAbsFocuser(FocusAbsPosN[0].min);
	}
	
    // close GPIOs
    std::ofstream unexportgpio;
    unexportgpio.open("/sys/class/gpio/unexport");
    unexportgpio << DIR << std::endl;
    unexportgpio << STEP << std::endl;
    unexportgpio << M0 << std::endl;
    unexportgpio << M1 << std::endl;
    unexportgpio << SLEEP << std::endl;
    unexportgpio.close();
    bcm2835_close();
		
	IDMessage(getDeviceName(), "Astroberry Focuser disconnected successfully.");
    
    return true;
}

bool FocusRpi::initProperties()
{
    INDI::Focuser::initProperties();

    IUFillText(&PortT[0], "PORT", "Port","RPi GPIO");
    IUFillTextVector(&PortTP,PortT,1,getDeviceName(),"DEVICE_PORT","Ports",OPTIONS_TAB,IP_RO,0,IPS_OK);

    IUFillNumber(&FocusAbsPosN[0],"FOCUS_ABSOLUTE_POSITION","Ticks","%0.0f",0,MAX_STEPS,(int)MAX_STEPS/100,0);
    IUFillNumberVector(&FocusAbsPosNP,FocusAbsPosN,1,getDeviceName(),"ABS_FOCUS_POSITION","Position",MAIN_CONTROL_TAB,IP_RW,0,IPS_OK);

	IUFillNumber(&PresetN[0], "Preset 1", "", "%0.0f", 0, MAX_STEPS, (int)(MAX_STEPS/100), 0);
	IUFillNumber(&PresetN[1], "Preset 2", "", "%0.0f", 0, MAX_STEPS, (int)(MAX_STEPS/100), 0);
	IUFillNumber(&PresetN[2], "Preset 3", "", "%0.0f", 0, MAX_STEPS, (int)(MAX_STEPS/100), 0);
	IUFillNumberVector(&PresetNP, PresetN, 3, getDeviceName(), "Presets", "Presets", "Presets", IP_RW, 0, IPS_IDLE);

	IUFillSwitch(&PresetGotoS[0], "Preset 1", "Preset 1", ISS_OFF);
	IUFillSwitch(&PresetGotoS[1], "Preset 2", "Preset 2", ISS_OFF);
	IUFillSwitch(&PresetGotoS[2], "Preset 3", "Preset 3", ISS_OFF);
	IUFillSwitchVector(&PresetGotoSP, PresetGotoS, 3, getDeviceName(), "Presets Goto", "Goto", MAIN_CONTROL_TAB,IP_RW,ISR_1OFMANY,60,IPS_OK);

	IUFillNumber(&FocusBacklashN[0], "FOCUS_BACKLASH_VALUE", "Steps", "%0.0f", 0, (int)(MAX_STEPS/100), (int)(MAX_STEPS/1000), 0);
	IUFillNumberVector(&FocusBacklashNP, FocusBacklashN, 1, getDeviceName(), "FOCUS_BACKLASH", "Backlash", OPTIONS_TAB, IP_RW, 0, IPS_IDLE);

	IUFillSwitch(&FocusResetS[0],"FOCUS_RESET","Reset",ISS_OFF);
	IUFillSwitchVector(&FocusResetSP,FocusResetS,1,getDeviceName(),"FOCUS_RESET","Position Reset",OPTIONS_TAB,IP_RW,ISR_1OFMANY,60,IPS_OK);

	IUFillSwitch(&FocusParkingS[0],"FOCUS_PARKON","Enable",ISS_OFF);
	IUFillSwitch(&FocusParkingS[1],"FOCUS_PARKOFF","Disable",ISS_OFF);
	IUFillSwitchVector(&FocusParkingSP,FocusParkingS,2,getDeviceName(),"FOCUS_PARK","Parking Mode",OPTIONS_TAB,IP_RW,ISR_1OFMANY,60,IPS_OK);

	// set capabilities
        SetFocuserCapability(FOCUSER_CAN_ABS_MOVE | FOCUSER_CAN_REL_MOVE);

        controller->mapController("Focus In", "Focus In", INDI::Controller::CONTROLLER_BUTTON, "BUTTON_1");
        controller->mapController("Focus Out", "Focus Out", INDI::Controller::CONTROLLER_BUTTON, "BUTTON_2");
        controller->mapController("Abort Focus", "Abort Focus", INDI::Controller::CONTROLLER_BUTTON, "BUTTON_3");
        controller->initProperties();

    return true;
}

void FocusRpi::ISGetProperties (const char *dev)
{
    INDI::Focuser::ISGetProperties(dev);

    /* Add debug controls so we may debug driver if necessary */
    addDebugControl();

    return;
}

bool FocusRpi::updateProperties()
{

    INDI::Focuser::updateProperties();

    if (isConnected())
    {
		deleteProperty(FocusSpeedNP.name);
        defineNumber(&FocusAbsPosNP);
        defineSwitch(&FocusMotionSP);
		defineNumber(&FocusBacklashNP);
		defineSwitch(&FocusParkingSP);
		defineSwitch(&FocusResetSP);
    }
    else
    {
        deleteProperty(FocusAbsPosNP.name);
        deleteProperty(FocusMotionSP.name);
		deleteProperty(FocusBacklashNP.name);
		deleteProperty(FocusParkingSP.name);
		deleteProperty(FocusResetSP.name);
    }

    return true;
}

bool FocusRpi::ISNewNumber (const char *dev, const char *name, double values[], char *names[], int n)
{
	// first we check if it's for our device
	if(strcmp(dev,getDeviceName())==0)
	{

        // handle focus absolute position
        if (!strcmp(name, FocusAbsPosNP.name))
        {
			int newPos = (int) values[0];
            if ( MoveAbsFocuser(newPos) == IPS_OK )
            {
               IUUpdateNumber(&FocusAbsPosNP,values,names,n);
               FocusAbsPosNP.s=IPS_OK;
               IDSetNumber(&FocusAbsPosNP, NULL);
            }
            return true;
        }        

        // handle focus relative position
        if (!strcmp(name, FocusRelPosNP.name))
        {
			IUUpdateNumber(&FocusRelPosNP,values,names,n);
			
			//FOCUS_INWARD
            if ( FocusMotionS[0].s == ISS_ON )
				MoveRelFocuser(FOCUS_INWARD, FocusRelPosN[0].value);

			//FOCUS_OUTWARD
            if ( FocusMotionS[1].s == ISS_ON )
				MoveRelFocuser(FOCUS_OUTWARD, FocusRelPosN[0].value);

			FocusRelPosNP.s=IPS_OK;
			IDSetNumber(&FocusRelPosNP, NULL);
			return true;
        }

        // handle focus timer
        if (!strcmp(name, FocusTimerNP.name))
        {
			IUUpdateNumber(&FocusTimerNP,values,names,n);

			//FOCUS_INWARD
            if ( FocusMotionS[0].s == ISS_ON )
				MoveFocuser(FOCUS_INWARD, 0, FocusTimerN[0].value);

			//FOCUS_OUTWARD
            if ( FocusMotionS[1].s == ISS_ON )
				MoveFocuser(FOCUS_OUTWARD, 0, FocusTimerN[0].value);

			FocusTimerNP.s=IPS_OK;
			IDSetNumber(&FocusTimerNP, NULL);
			return true;
        }

        // handle focus backlash
        if (!strcmp(name, FocusBacklashNP.name))
        {
            IUUpdateNumber(&FocusBacklashNP,values,names,n);
            FocusBacklashNP.s=IPS_OK;
            IDSetNumber(&FocusBacklashNP, "Astroberry Focuser backlash set to %d", (int) FocusBacklashN[0].value);
            return true;
        }
	}
    return INDI::Focuser::ISNewNumber(dev,name,values,names,n);
}

bool FocusRpi::ISNewSwitch (const char *dev, const char *name, ISState *states, char *names[], int n)
{
	// first we check if it's for our device
    if (!strcmp(dev, getDeviceName()))
    {
/*		
        // handle focus motion in and out
        if (!strcmp(name, FocusMotionSP.name))
        {
            IUUpdateSwitch(&FocusMotionSP, states, names, n);

			//FOCUS_INWARD
            if ( FocusMotionS[0].s == ISS_ON )
				MoveRelFocuser(FOCUS_INWARD, FocusRelPosN[0].value);

			//FOCUS_OUTWARD
            if ( FocusMotionS[1].s == ISS_ON )
				MoveRelFocuser(FOCUS_OUTWARD, FocusRelPosN[0].value);

            //FocusMotionS[0].s = ISS_OFF;
            //FocusMotionS[1].s = ISS_OFF;

			FocusMotionSP.s = IPS_OK;
            IDSetSwitch(&FocusMotionSP, NULL);
            return true;
        }
*/
        // handle focus presets
        if (!strcmp(name, PresetGotoSP.name))
        {
            IUUpdateSwitch(&PresetGotoSP, states, names, n);

			//Preset 1
            if ( PresetGotoS[0].s == ISS_ON )
				MoveAbsFocuser(PresetN[0].value);

			//Preset 2
            if ( PresetGotoS[1].s == ISS_ON )
				MoveAbsFocuser(PresetN[1].value);

			//Preset 2
            if ( PresetGotoS[2].s == ISS_ON )
				MoveAbsFocuser(PresetN[2].value);

			PresetGotoS[0].s = ISS_OFF;
			PresetGotoS[1].s = ISS_OFF;
			PresetGotoS[2].s = ISS_OFF;
			PresetGotoSP.s = IPS_OK;
            IDSetSwitch(&PresetGotoSP, NULL);
            return true;
        }
                
        // handle focus reset
        if(!strcmp(name, FocusResetSP.name))
        {
			IUUpdateSwitch(&FocusResetSP, states, names, n);

            if ( FocusResetS[0].s == ISS_ON && FocusAbsPosN[0].value == FocusAbsPosN[0].min  )
            {
				FocusAbsPosN[0].value = (int)MAX_STEPS/100;
				IDSetNumber(&FocusAbsPosNP, NULL);
				MoveAbsFocuser(0);
			}
            FocusResetS[0].s = ISS_OFF;
            IDSetSwitch(&FocusResetSP, NULL);
			
			return true;
		}

        // handle parking mode
        if(!strcmp(name, FocusParkingSP.name))
        {
			IUUpdateSwitch(&FocusParkingSP, states, names, n);
			IDSetSwitch(&FocusParkingSP, NULL);
			return true;
		}

        // handle focus abort - TODO
        if (!strcmp(name, AbortSP.name))
        {
            IUUpdateSwitch(&AbortSP, states, names, n);
            AbortS[0].s = ISS_OFF;
			AbortSP.s = IPS_OK;
            IDSetSwitch(&AbortSP, NULL);
            return true;
        }
        
    }
    return INDI::Focuser::ISNewSwitch(dev,name,states,names,n);
}

bool FocusRpi::ISSnoopDevice (XMLEle *root)
{
    controller->ISSnoopDevice(root);

    return INDI::Focuser::ISSnoopDevice(root);
}

bool FocusRpi::saveConfigItems(FILE *fp)
{
    IUSaveConfigText(fp, &PortTP);
    IUSaveConfigNumber(fp, &FocusRelPosNP);
    IUSaveConfigNumber(fp, &PresetNP);
    IUSaveConfigNumber(fp, &FocusBacklashNP);
	IUSaveConfigSwitch(fp, &FocusParkingSP);
    
    if ( FocusParkingS[0].s == ISS_ON )
		IUSaveConfigNumber(fp, &FocusAbsPosNP);

    controller->saveConfigItems(fp);

    return true;
}

IPState FocusRpi::MoveFocuser(FocusDirection dir, int speed, int duration)
{
	int ticks = (int) ( duration / STEP_DELAY);
    return 	MoveRelFocuser( dir, ticks);
}


IPState FocusRpi::MoveRelFocuser(FocusDirection dir, int ticks)
{
    int targetTicks = FocusAbsPosN[0].value + (ticks * (dir == FOCUS_INWARD ? -1 : 1));
    return MoveAbsFocuser(targetTicks);
}

IPState FocusRpi::MoveAbsFocuser(int targetTicks)
{
    if (targetTicks < FocusAbsPosN[0].min || targetTicks > FocusAbsPosN[0].max)
    {
        IDMessage(getDeviceName(), "Requested position is out of range.");
        return IPS_ALERT;
    }
    	
    if (targetTicks == FocusAbsPosN[0].value)
    {
        // IDMessage(getDeviceName(), "Astroberry Focuser already in the requested position.");
        return IPS_OK;
    }

	// set focuser busy
	FocusAbsPosNP.s = IPS_BUSY;
	IDSetNumber(&FocusAbsPosNP, NULL);

    // motor wake up
    bcm2835_gpio_write(SLEEP, HIGH);

	// set full step size
	SetSpeed(1);
	
	// check last motion direction for backlash triggering
	char lastdir = bcm2835_gpio_lev(DIR);

    // set direction
    const char* direction;    
    if (targetTicks > FocusAbsPosN[0].value)
    {
		// OUTWARD
		bcm2835_gpio_write(DIR, LOW);
		direction = " outward ";
	}
    else
	{
		// INWARD
		bcm2835_gpio_write(DIR, HIGH);
		direction = " inward ";
	}

    IDMessage(getDeviceName() , "Astroberry Focuser is moving %s", direction);

	// if direction changed do backlash adjustment
	if ( bcm2835_gpio_lev(DIR) != lastdir && FocusAbsPosN[0].value != 0 && FocusBacklashN[0].value != 0 )
	{
		IDMessage(getDeviceName() , "Astroberry Focuser backlash compensation by %0.0f steps...", FocusBacklashN[0].value);	
		for ( int i = 0; i < FocusBacklashN[0].value; i++ )
		{
			// step on
			bcm2835_gpio_write(STEP, HIGH);
			// wait
			bcm2835_delay(STEP_DELAY/2);
			// step off
			bcm2835_gpio_write(STEP, LOW);
			// wait 
			bcm2835_delay(STEP_DELAY/2);
		}
	}

	// process targetTicks
    int ticks = abs(targetTicks - FocusAbsPosN[0].value);

    for ( int i = 0; i < ticks; i++ )
    {
        // step on
        bcm2835_gpio_write(STEP, HIGH);
        // wait
        bcm2835_delay(STEP_DELAY/2);
        // step off
        bcm2835_gpio_write(STEP, LOW);
        // wait 
        bcm2835_delay(STEP_DELAY/2);

		// INWARD - count down
		if ( bcm2835_gpio_lev(DIR) == HIGH )
			FocusAbsPosN[0].value -= 1;

		// OUTWARD - count up
		if ( bcm2835_gpio_lev(DIR) == LOW )
			FocusAbsPosN[0].value += 1;

		IDSetNumber(&FocusAbsPosNP, NULL);
    }

    // motor sleep
    bcm2835_gpio_write(SLEEP, LOW);

    // update abspos value and status
    IDSetNumber(&FocusAbsPosNP, "Astroberry Focuser moved to position %0.0f", FocusAbsPosN[0].value);
	FocusAbsPosNP.s = IPS_OK;
	IDSetNumber(&FocusAbsPosNP, NULL);
	
    return IPS_OK;
}

bool FocusRpi::SetSpeed(int speed)
{
	/* Stepper motor resolution settings (for PG2528-0502U)
	* 1) 1/1   - M0=0 M1=0
	* 2) 1/2   - M0=1 M1=0
	* 3) 1/4   - M0=floating M1=0
	* 4) 1/8   - M0=0 M1=1
	* 5) 1/16  - M0=1 M1=1
	* 6) 1/32  - M0=floating M1=1
	*/

    switch(speed)
    {
    case 1:	// 1:1
        bcm2835_gpio_fsel(M0, BCM2835_GPIO_FSEL_OUTP);
		bcm2835_gpio_fsel(M1, BCM2835_GPIO_FSEL_OUTP);
        bcm2835_gpio_write(M0, LOW);
		bcm2835_gpio_write(M1, LOW);
        break;
    case 2:	// 1:2
        bcm2835_gpio_fsel(M0, BCM2835_GPIO_FSEL_OUTP);
		bcm2835_gpio_fsel(M1, BCM2835_GPIO_FSEL_OUTP);
		bcm2835_gpio_write(M0, HIGH);
        bcm2835_gpio_write(M1, LOW);
        break;
    case 3:	// 1:4
        bcm2835_gpio_fsel(M0, BCM2835_GPIO_FSEL_INPT);
		bcm2835_gpio_fsel(M1, BCM2835_GPIO_FSEL_OUTP);
        bcm2835_gpio_write(M0, BCM2835_GPIO_PUD_OFF);
        bcm2835_gpio_write(M1, LOW);
        break;
    case 4:	// 1:8
        bcm2835_gpio_fsel(M0, BCM2835_GPIO_FSEL_OUTP);
		bcm2835_gpio_fsel(M1, BCM2835_GPIO_FSEL_OUTP);
        bcm2835_gpio_write(M0, LOW);
        bcm2835_gpio_write(M1, HIGH);
        break;
    case 5:	// 1:16
        bcm2835_gpio_fsel(M0, BCM2835_GPIO_FSEL_OUTP);
		bcm2835_gpio_fsel(M1, BCM2835_GPIO_FSEL_OUTP);
        bcm2835_gpio_write(M0, HIGH);
        bcm2835_gpio_write(M1, HIGH);
        break;
    case 6:	// 1:32
        bcm2835_gpio_fsel(M0, BCM2835_GPIO_FSEL_INPT);
		bcm2835_gpio_fsel(M1, BCM2835_GPIO_FSEL_OUTP);
		bcm2835_gpio_write(M0, BCM2835_GPIO_PUD_OFF);
        bcm2835_gpio_write(M1, HIGH);
        break;
    default:	// 1:1
        bcm2835_gpio_fsel(M0, BCM2835_GPIO_FSEL_OUTP);
		bcm2835_gpio_fsel(M1, BCM2835_GPIO_FSEL_OUTP);
        bcm2835_gpio_write(M0, LOW);
        bcm2835_gpio_write(M1, LOW);
        break;
    }
	return true;
}

 

  • Like 1

Share this post


Link to post
Share on other sites

Reading the Ekos document, it looks like it takes a slightly different approach to SGPro:

Quote

Ekos then begins the focusing process by commanding the focuser to focus in or out, and re-measures the HFR. This establishes a V curve in which the sweet spot of optimal focus is at the center of the V curve, and the slope of which depends on the properties of the telescope and camera in use. Because the HFR varies linearly with focus distance, it is possible to calculate the optimal focus point. In practice, Ekos performs several large iterations to until it get closer to the optimal focus where the gears change and smaller, finer moves are now made to reach the optimal focus. Ekos let the user set a configurable tolerance parameter, or how good is good enough. The default value is set to 1% and is sufficient for most situations. The Step options specify the number of initial ticks the focuser has to move (assuming an absolute focuser, this is NOT applicable to relative focusers). If the image is severaly out of focus, we set the step size high (i.e. > 250). On the other hand, if the focus is close to optimal focus, we set the step size to a more reasonable range (< 50). It takes trial and error to find the best starting tick, but Ekos only uses that for the first focus motion, as all subsequent motions depend on the V-Curve calculations.

SGPro requires that the stars to be close to focus before you run the autofocus routine. I looks like Ekos will travel over the full focuser distance to find focus (i.e. truely autofocus). If so, I suspect it's doing the right thing and it's just the scale of the graph not being small enough to show the V. So long as it's finding focus I'd live without improving the graph unless it was very easy to change!

  • Like 1

Share this post


Link to post
Share on other sites

Well, I can't see any user variable in the code for the ticks to steps ratio but it wouldn't be difficult to add a multiplier.

Share this post


Link to post
Share on other sites
7 minutes ago, Filroden said:

Reading the Ekos document, it looks like it takes a slightly different approach to SGPro:

SGPro requires that the stars to be close to focus before you run the autofocus routine. I looks like Ekos will travel over the full focuser distance to find focus (i.e. truely autofocus). If so, I suspect it's doing the right thing and it's just the scale of the graph not being small enough to show the V. So long as it's finding focus I'd live without improving the graph unless it was very easy to change!

Yes.  I ran the Auto Focus several times and the focus got better and better.  Once initially set, it should only need a small movement to get accurate focus.

There are two options for changing the focus range - software or hardware.  I don't need the Auto Focus to travel the full focussing range of the scope as I can easily preset the focus fairly close by focussing on a distant tree in daytime.  That only needs doing once.  After that there's no reason why the focus should change from external causes.  So I think I'll leave things as they are.

The current hardware works well and a change of gear ratio would require changing stepper motors to say a NEMA17 to get enough torque.  Changing the software is relatively simple but sometimes changes can have unexpected consequences though the tick to steps ratio should be the same as changing the gear ratio.  Still, I'll apply the principle "if it ain't broke, don't fix it".

  • Like 1

Share this post


Link to post
Share on other sites

Lovely sunny afternoon but the visibility isn't very good and I expect we'll get fog again tonight but it's very tempting to stick something out on the mount.  However, the widefield focus control and other electronics is not yet ready and the scope rig really wants the astrometry files downloaded and plate solving used to find the object.  With the narrow FOV there's little chance of finding a DSO without either better star alignment of the mount or plate solving.  And I need to familiarise myself with KStars more.

No, I think I'll be better just continuing to get the widefield rig power and control box built.  The mount is sufficiently aligned to allow me to find DSO without plate solving with the wide FOV.

Last night looked reasonable from my ASC but by 8pm the fog had arrived - I think it was misty and no good for imaging before that.  This weather is definitely "tweaking my tail"!!!

Edited by Gina

Share this post


Link to post
Share on other sites

Thick cloud as well as mist tonight so not missing anything and making good progress on the widefield electronics :)

  • Like 1

Share this post


Link to post
Share on other sites

I doesn't seem to get any better :(  Cloud, rain and fog forecast for the next 5 or more nights but since the forecast changes hour by hour, who knows!  I expect to have the widefield rotation rig ready by tonight.  Then as soon as the night sky clears to the east I can test the auto-focus.

  • Like 1

Share this post


Link to post
Share on other sites

I've just pressed buy on my first EQ mount so I think that pretty much guarantees poor weather (it's forecasting a change of snow on the hills here). Thankfully I'm visiting Somerset for a week so by the time the mount arrives the weather may be on the turn. It won't be long before I have enough mounts/scopes/cameras that I'll be wrestling with the same conundrum as you...which imaging rig to work on next :)

  • Like 1

Share this post


Link to post
Share on other sites

Raining here.  Now there's a surprise!!! :clouds2:

Share this post


Link to post
Share on other sites

Snowing here, after yesterdays short cold spell. (Why does this site lack an emoticon for snow?) Enough opportunity to tinker, but never enough to test what you tinkered with.

BTW, as you may have read from a recent post of mine, I managed to get a Raspberry Pi working with Ubuntu mate, INDI and PHD2. For some reason I had less luck with Raspbian + INDI + PHD2. Maybe because I installed INDI after PHD2???

Share this post


Link to post
Share on other sites

Yes, I saw that Wim :)  Well done :)  I wouldn't have thought installing PHD2 could cause trouble but who knows?

Share this post


Link to post
Share on other sites

I don't think it was phd, but rather me. As it turned out, phd was already in an ubuntu repository, so installing was much easierthan in Raspbian. No need to check dependencies, just link to the ppa. Now I need to learn ekos/kstars. Sounds familiar? :icon_biggrin:

  • Like 1

Share this post


Link to post
Share on other sites

Typical!!  Because I haven't quite got a rig ready for imaging the clouds have departed and there's a sky full of stars!!

Screenshot from 2017-02-23 19-37-51.png

Share this post


Link to post
Share on other sites

Some clouds coming in now.

Screenshot from 2017-02-23 20-41-31.png

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By jamesj01
      Hi everyone,
      I am new to astrophotography and of course started by taking a photo of the moon (as attached) using my Canon EOS500D camera - 1/250 exposure time, 800ISO. I used my celestron 127EQ telescope with a adapter for the camera of course. I used no eyepiece. 
      However, i find that it is slightly blurred, and upon taking pictures of nearby stars, i also found them to be blurred, even with a high exposure time. am i doing anything wrong at all or is this simply because of my setup? 
      Many thanks
      IMG_3243.CR2
    • By javaruba
      Hi folks,
      I've been seeing tear drop shape stars with the EdgeHd 8 and ZWO ASI294MC Pro camera, so I verified the collimation. I'm using a celestron x0.7 reducer.
      Does collimation needs to be checked  with an eyepiece or with the camera and with or without reducer? I'm asking since I verified my collimation yesterday and couldn't see the concentric rings with the complete imaging train (ASI294MC, OAG, and x0.7 reducer). It was only showing the inner shadow and outer circle. I than  replaced the AS294MC with my guide cam (ASI120) which has a much smaller sensor and could see many rings. While, to my view, it seems to be collimated, it's strange that I can't see the rings with the main imaging cam. Any thoughts? Here's how I left the collimation after some adjustments with the guide cam.

      Kind regards,
      Jairo
    • By ChrisBAgile
      I'm brand new to the forum and new to Astro. I've been loving it since January and learnt a huge amount by myself with the help of forums like these.
      I recently purchased an iOptron 10" RC truss. 3" focuser with a 2" compression. I have been using a WO FLT 132 before this which is little more forgiving. I have attached a couple of pictures from my first attempts. I am not using a field flattener at this point. (just getting used to collimating and setting up). Camera ZWO ASI 6200 MC cooled camera. The images below are composed of 50 x 5 minute subs stacked in pixinsight with basic image processing. I'm using PHD II and a WO guidestar 61 and ASI 120 for guiding on a CEM60EC mount. Drift alignment in PHD 2. Any ideas as to the main causes of egg shaped stars? Could this be sensor tilt? crappy guiding? Focus also looks off? Any help appreciated please
       


    • By Adaaam75
      Hi guys,
      So on Tuesday night I spent the evening imaging the moon with my Celestron 9.25 SCT and DSLR as shown below and am happy with the images I collated (I only took images as I did intend to take capture video but I got carried away and time was getting on).
      I have approx 350 jpeg (and the equivalent in raw) images and have used the Microsoft image composite editor to stitch the frames together without editing them first etc but I wonder if I'm going the images an injustice?
      I'm not ready to pay for editing software as I know there is a lot of very good free downloads out there and I'm asking for recommendations. Should I be processing the frames before/after stitching and what software would you recommend? Please offer any advice you have.
      I will post the resulting image once I'm happy with the outcome 😁
      Thanks in advance!
       
    • By Adaaam75
      Hi guys,
      So on Tuesday night I spent the evening imaging the moon with my Celestron 9.25 SCT and DSLR as shown below and am happy with the images I collated (I only took images as I did intend to take capture video but I got carried away and time was getting on).
      I have approx 350 jpeg (and the equivalent in raw) images and have used the Microsoft image composite editor to stitch the frames together without editing them first etc but I wonder if I'm going the images an injustice?
      I'm not ready to pay for editing software as I know there is a lot of very good free downloads out there and I'm asking for recommendations. Should I be processing the frames before/after stitching and what software would you recommend? Please offer any advice you have.
      I will post the resulting image once I'm happy with the outcome 😁
      Thanks in advance,
       

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.