Jump to content

Gina

Beyond the Event Horizon
  • Posts

    45,326
  • Joined

  • Last visited

  • Days Won

    120

Everything posted by Gina

  1. If anyone is thinking "why don't you just not try remotely opening the roof when it's locked down", then the answer is that I can do all sorts of silly things that I shouldn't!! I definitely need anti-stupidity devices! Also, I know that closing roof and window remotely doesn't make them storm-proof but I wouldn't disable the storm-proofing if there was any chance of a storm developing. However, as a corollary to the above, I could forget to lock down before the next storm arrived. I could tie in the observatory control system with my automatic weather station to sound an alarm if the wind speed exceeded a certain value and the storm-proofing was disabled. I plan to add a raindrop detector to tell INDI system to close the roof and window.
  2. With going over to Raspberry Pi running Linux (Ubuntu Mate or Raspbian) with the KStars/Ekos/INDI control and capture system for astro imaging, I'm looking into also controlling the roll off roof and fold down flap/window remotely using the same system. I won't actually be doing anything to the hardware until the weather improves but nothing wrong with planning and designing the system in readiness. There is already an INDI driver for roll off roof control in the Dome group which seems to cover most of what I want and I'm already modifying drivers for my astro imaging rigs so I plan to edit the source code to cater for my own requirements. My observatory presents some extra problems that a standard ROR (if there is such a thing) don't have. Due to the exposed location of my observatory it has proved necessary to provide substantial lock-down latches for the ROR and it wouldn't be practical to automate these. Other ideas for stopping the roof lifting off in a storm would require considerable modifications to the structure. I will need to detect if these are in the lock-down position and prevent the remote control trying to open the roof. Another problem is the fold-down window which I was unable to mechanically connect to the roof roll-off (like others have done) so this will probably need a separate motor/actuator. Again, the opening mechanism is backed up with bolts to fix it shut against storm force winds - it's amazing how wind can suck things open as well as blow things around. Clearly the opening mechanism can't work if the window is bolted shut. I don't see any particular reason why I can't arrange sensors on all the latches and bolts that can feed into the roof control system but I will need to look into controlling the window opening as it currently needs a push to open it due to the brush type draught excluder used to keep the weather out. So the window will need pushing open as well as pulling closed. ATM I'm using cord to pull the window closed and hold it just below horizontal in the open position.
  3. With occasional sunshine during the daytime but almost perpetual cloud or rain at night I'm wondering about a spot of white solar imaging - I have DIY solar filters for my scopes. I haven't yet tried solar imaging with the ASI1600mm-Cool. Resolution is nearly twice as good as the Atik 460EX mono that I've used before. Problem might be the bandwidth of my connection between observatory and indoors or even between imaging computer and local storage in the case of the Raspberry Pi.
  4. A C-CS adapter ring - available from several places - 5mm. Plus a few tenths of a mm to get exact focus - I cut some cardboard to make a spacer which I inserted between the adapter and the camera.
  5. Typical!! Because I haven't quite got a rig ready for imaging the clouds have departed and there's a sky full of stars!!
  6. Yes, I saw that Wim Well done I wouldn't have thought installing PHD2 could cause trouble but who knows?
  7. I can only hazard a guess as I have no experience of direct drives. If this is the spec for the mount as would seem logical for a direct drive mount then this is nowhere near accurate enough if this is the tracking precision. 90" means 90 seconds of arc or 1.5 minutes of arc. Seeing in the UK is around 2 seconds of arc and this would be roughly the maximum resolution for imaging. ie. 2" would be the effective pixel size. Star alignment can cope with say 10 pixel error but I wouldn't like it to be much worse or you'll loose too much of the image round the edge. You need tracking/guiding to be accurate to a few seconds of arc or you will get star trailing in the images. It seems to me that the accuracy specified is nowhere near good enough for imaging and is far worse than conventional mounts with worm or belt drive.
  8. 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.
  9. Thick cloud as well as mist tonight so not missing anything and making good progress on the widefield electronics
  10. 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"!!!
  11. 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".
  12. 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.
  13. 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; }
  14. 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.
  15. 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.
  16. 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.
  17. Lots of rain earlier and raindrops on the dome plus lots of dew on the inside. The heaters have been on for nearly an hour but there's still droplets on the outside and dew on the inside so I think I need to increase the power to the raindrop drier heater.
  18. 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.)
  19. Modified Bicolor Technique for combining Ha and OIII images
  20. Used with other bits it did have a small effect. I think I could go on playing with the formulae for ever and a day For each colour the offset is changed by adding or subtracting a constant and the contrast is the multiplier. Here's a screenshot of image and PixelMath. Image was further changed with curves.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. By using this site, you agree to our Terms of Use.