clouds and storms without PWM expansion?

New members questions
Post Reply
grafxalien
Posts: 51
Joined: Wed Mar 28, 2012 1:44 pm

clouds and storms without PWM expansion?

Post by grafxalien »

Just a quick question. Is it possible to code for storms and clouds with just the standard 2 PWMs that are on the unit. I have a small 10 gal tank so I only have two channels. My "clouds" would be more just random dimming and lightning be random very bright ramping up. Just wondering because most of the code I have seen for this uses the PWM expansion
Sebyte

Re: clouds and storms without PWM expansion?

Post by Sebyte »

I have just added it to my setup, the cloud effect is ok, but I have removed the lightning effect as it does not work well with my MeanWell drivers. Also it was traumatic for the fish :?
grafxalien
Posts: 51
Joined: Wed Mar 28, 2012 1:44 pm

Re: clouds and storms without PWM expansion?

Post by grafxalien »

thanks. will have to give it a try a little later. I am using steve's led drivers. will let you know how they react.
rimai
Posts: 12857
Joined: Fri Mar 18, 2011 6:47 pm

Re: clouds and storms without PWM expansion?

Post by rimai »

Awesome.
I'm very interested on knowing how those drivers work out.
I'm actually specially interested on knowing if they really can dim down to 1% and how hot the chip gets.
When you find out what is the lowest cutout point, will you let me know?
I've made my own LED drivers in the past that could dim to 1% and had super fast response.
The only probem I had was that they used to generate lots of heat.
Roberto.
grafxalien
Posts: 51
Joined: Wed Mar 28, 2012 1:44 pm

Re: clouds and storms without PWM expansion?

Post by grafxalien »

I just got my controller a few days ago and actually haven't had time to wire it up to tank. will keep you posted. this is my first time coding, another quick question for you. I am trying to make a manual bypass mode for the lights. my idea is to make a menu item where each time it is clicked, it will add 10 to the PWM value, and then after 100% would go back into auto mode where lights are controlled by the pwm ramp. default would be control by pwm ramp. so: auto, 0 ,10, 20 etc, 100, auto.

Right now I am just trying to get it to bypass the pwm ramp and set actinic to 10%. And i am even failing at something that simple. here is what i have:

Code: Select all

byte ActinicPWMValue=0;
byte DaylightPWMValue=0;
boolean ForceCloud=false;
boolean LEDauto=true;

#include <avr/pgmspace.h>
prog_char menu1_label[] PROGMEM = "Force Storm";
prog_char menu2_label[] PROGMEM = "Actinic";
prog_char menu3_label[] PROGMEM = "Daylight";
PROGMEM const char *menu_items[] = {
menu1_label, menu2_label, menu3_label  };

void MenuEntry1()
{
ForceCloud=true;
ReefAngel.DisplayedMenu=RETURN_MAIN_MODE;
}

void MenuEntry2()
{
LEDauto=false;
ReefAngel.PWM.SetActinic(10);
ReefAngel.DisplayedMenu=RETURN_MAIN_MODE;
}


void setup()
{
    ReefAngel.Init();  //Initialize controller
    ReefAngel.InitMenu(pgm_read_word(&(menu_items[0])),SIZE(menu_items));

    // Ports that are always on
    ReefAngel.Relay.On(Port8);
}

void loop()
{
    // Specific functions
    ReefAngel.StandardATO(Port1);
    ReefAngel.StandardLights(Port2);
    ReefAngel.MHLights(Port3);
    ReefAngel.StandardFan(Port4);
    ReefAngel.StandardHeater(Port7);

    ReefAngel.ShowInterface();
if (LEDauto)
  {
// Calculate your regular sunrise/sunset PWM value
    ActinicPWMValue=PWMSlope(10,00,22,15,0,50,40,ActinicPWMValue);
    DaylightPWMValue=PWMSlope(10,00,22,15,0,30,40,DaylightPWMValue);
    CheckCloud();
  
    ReefAngel.PWM.SetActinic(ActinicPWMValue);
    ReefAngel.PWM.SetDaylight(DaylightPWMValue);    
  } 
}
rimai
Posts: 12857
Joined: Fri Mar 18, 2011 6:47 pm

Re: clouds and storms without PWM expansion?

Post by rimai »

There is nothing wrong with your code, at least not from I can see it, but something tells me that you only have 1 menu option enabled. That's why the MenuEntry2() function is being ignored.
In fact, the code is pretty awesome!! :)
You get to force % on demand. Cool!
Open ReefAngel_Features.h file and look for:

Code: Select all

#define CUSTOM_MENU_ENTRIES 1
The file is located at "Documents\Arduino\libraries\ReefAngel_Features" folder.
If the number is 1, you need to increase to 3, which is the number of menu entries you have.
Roberto.
grafxalien
Posts: 51
Joined: Wed Mar 28, 2012 1:44 pm

Re: clouds and storms without PWM expansion?

Post by grafxalien »

that was exactly it. I got it to just set PWM to a number easily. Now i cant get it to cycle through 0,10,20,...,100,auto like i want it to do. any ideas?

Code: Select all

byte ActinicPWMValue=0;
byte DaylightPWMValue=0;
byte Actinic=0;
boolean ForceCloud=false;
boolean LEDauto=true;

#include <avr/pgmspace.h>
prog_char menu1_label[] PROGMEM = "Force Storm";
prog_char menu2_label[] PROGMEM = "Actinic";
prog_char menu3_label[] PROGMEM = "Daylight";
PROGMEM const char *menu_items[] = {
menu1_label, menu2_label, menu3_label  };

void MenuEntry1()
{
ForceCloud=true;
ReefAngel.DisplayedMenu=RETURN_MAIN_MODE;
}

void MenuEntry2()
{
  LEDauto=false;
  if (Actinic==0);
  {
   ReefAngel.PWM.SetActinic(0); 
   Actinic=1;
  }
  if (Actinic==10);
  {
   Actinic=0;
   LEDauto=true;
  }
  if ((Actinic>0) && (Actinic<10));
  {
  ReefAngel.PWM.SetActinic(ReefAngel.PWM.GetActinicValue()+10);
  Actinic=Actinic+1;
  }
ReefAngel.DisplayedMenu=RETURN_MAIN_MODE;
}
rimai
Posts: 12857
Joined: Fri Mar 18, 2011 6:47 pm

Re: clouds and storms without PWM expansion?

Post by rimai »

I haven't tested, but try this:

Code: Select all

void MenuEntry2()
{
  ActinicPWMValue+=10;
  if (ActinicPWMValue>100)
  {
    LEDauto=true;
    ActinicPWMValue=0;
  }
  else
  {
    LEDauto=false;
  }
  ReefAngel.DisplayedMenu=RETURN_MAIN_MODE;
}
Roberto.
binder
Posts: 2865
Joined: Fri Mar 18, 2011 6:20 pm
Location: Illinois
Contact:

Re: clouds and storms without PWM expansion?

Post by binder »

rimai wrote:I haven't tested, but try this:

Code: Select all

void MenuEntry2()
{
  ActinicPWMValue+=10;
  if (ActinicPWMValue>100)
  {
    LEDauto=true;
    ActinicPWMValue=0;
  }
  else
  {
    LEDauto=false;
  }
  ReefAngel.DisplayedMenu=RETURN_MAIN_MODE;
}
That code looks good. That's exactly what I would suggest doing.
grafxalien
Posts: 51
Joined: Wed Mar 28, 2012 1:44 pm

Re: clouds and storms without PWM expansion?

Post by grafxalien »

that code almost did it. it scrolled between the auto value and 100. would not go below the auto value. it did teach me what i needed to know to fix it though. working code is below. thanks for the help! cant wait to get enough time off work to hook it up to the tank!

Code: Select all

void MenuEntry2()
{
      if (LEDauto)
      {
      ActinicPWMValue=0;
      LEDauto=false;
      }
      else
      {
      ActinicPWMValue+=10;
      if (ActinicPWMValue>100)
         {
          LEDauto=true;
         }
      }
ReefAngel.DisplayedMenu=RETURN_MAIN_MODE;
}
grafxalien
Posts: 51
Joined: Wed Mar 28, 2012 1:44 pm

Re: clouds and storms without PWM expansion?

Post by grafxalien »

full working code with 2 channels. requires both channels to be toggled to "auto" position in order for auto mode to work.

Code: Select all

byte ActinicPWMValue=0;
byte DaylightPWMValue=0;
boolean ForceCloud=false;
boolean Actinicauto=true;
boolean Daylightauto=true;

#include <avr/pgmspace.h>
prog_char menu1_label[] PROGMEM = "Force Storm";
prog_char menu2_label[] PROGMEM = "Actinic";
prog_char menu3_label[] PROGMEM = "Daylight";
PROGMEM const char *menu_items[] = {
menu1_label, menu2_label, menu3_label  };

void MenuEntry1()
{
ForceCloud=true;
ReefAngel.DisplayedMenu=RETURN_MAIN_MODE;
}
void MenuEntry2()
{
      if (Actinicauto)
      {
      ActinicPWMValue=0;
      Actinicauto=false;
      }
      else
      {
      ActinicPWMValue+=10;
      if (ActinicPWMValue>100)
         {
          Actinicauto=true;
          ActinicPWMValue=0;
         }
      }
ReefAngel.DisplayedMenu=RETURN_MAIN_MODE;
}

void MenuEntry3()
{
      if (Daylightauto)
      {
      DaylightPWMValue=0;
      Daylightauto=false;
      }
      else
      {
      DaylightPWMValue+=10;
      if (DaylightPWMValue>100)
         {
          Daylightauto=true;
          DaylightPWMValue=0;
         }
      }
ReefAngel.DisplayedMenu=RETURN_MAIN_MODE;
}

void setup()
{
    ReefAngel.Init();  //Initialize controller
    ReefAngel.InitMenu(pgm_read_word(&(menu_items[0])),SIZE(menu_items));

    // Ports that are always on
    ReefAngel.Relay.On(Port8);
}

void loop()
{
    // Specific functions
    ReefAngel.StandardATO(Port1);
    ReefAngel.StandardLights(Port2);
    ReefAngel.MHLights(Port3);
    ReefAngel.StandardFan(Port4);
    ReefAngel.StandardHeater(Port7);

    ReefAngel.ShowInterface();
if ((Actinicauto) && (Daylightauto))
  {
// Calculate your regular sunrise/sunset PWM value
    ActinicPWMValue=PWMSlope(10,00,22,15,0,50,40,ActinicPWMValue);
    DaylightPWMValue=PWMSlope(10,00,22,15,0,30,40,DaylightPWMValue);
    CheckCloud();    
  } 
    ReefAngel.PWM.SetActinic(ActinicPWMValue);
    ReefAngel.PWM.SetDaylight(DaylightPWMValue);
}
rimai
Posts: 12857
Joined: Fri Mar 18, 2011 6:47 pm

Re: clouds and storms without PWM expansion?

Post by rimai »

Good stuff :)
Roberto.
grafxalien
Posts: 51
Joined: Wed Mar 28, 2012 1:44 pm

Re: clouds and storms without PWM expansion?

Post by grafxalien »

trying to make sure i have all the bugs worked out before i hook it up to tank. today i noticed that client suite always reads 0% for both PWM channels. The screen on the reef angels says says otherwise. Any idea how to fix this?

complete code:

Code: Select all

// Autogenerated file by RAGen (v1.2.1.158), (03/28/2012 22:23)
// RA_032812_2223.ino
//
// This version designed for v0.9.0 or later

/* The following features are enabled for this File: 
#define DisplayLEDPWM
#define wifi
#define CUSTOM_MENU
#define CUSTOM_MENU_ENTRIES 8
*/


#include <ReefAngel_Features.h>
#include <Globals.h>
#include <RA_Wifi.h>
#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <InternalEEPROM.h>
#include <RA_NokiaLCD.h>
#include <RA_ATO.h>
#include <RA_Joystick.h>
#include <LED.h>
#include <RA_TempSensor.h>
#include <Relay.h>
#include <RA_PWM.h>
#include <Timer.h>
#include <Memory.h>
#include <ReefAngel.h>

byte ActinicPWMValue=0;
byte DaylightPWMValue=0;
boolean ForceCloud=false;
boolean Actinicauto=true;
boolean Daylightauto=true;

#include <avr/pgmspace.h>
prog_char menu1_label[] PROGMEM = "Force Storm";
prog_char menu2_label[] PROGMEM = "Actinic";
prog_char menu3_label[] PROGMEM = "Daylight";
prog_char menu4_label[] PROGMEM = "Feeding";
prog_char menu5_label[] PROGMEM = "Water Change";
prog_char menu6_label[] PROGMEM = "ATO Clear";
prog_char menu7_label[] PROGMEM = "Overheat Clear";
prog_char menu8_label[] PROGMEM = "pH Calibration";
PROGMEM const char *menu_items[] = {
menu1_label, menu2_label, menu3_label, menu4_label, menu5_label, menu6_label, menu7_label, menu8_label  };

void MenuEntry1()
{
ForceCloud=true;
ReefAngel.DisplayedMenu=RETURN_MAIN_MODE;
}
void MenuEntry2()
{
      if (Actinicauto)
      {
      ActinicPWMValue=0;
      Actinicauto=false;
      }
      else
      {
      ActinicPWMValue+=10;
      if (ActinicPWMValue>100)
         {
          Actinicauto=true;
          ActinicPWMValue=0;
         }
      }
ReefAngel.DisplayedMenu=RETURN_MAIN_MODE;
}

void MenuEntry3()
{
      if (Daylightauto)
      {
      DaylightPWMValue=0;
      Daylightauto=false;
      }
      else
      {
      DaylightPWMValue+=10;
      if (DaylightPWMValue>100)
         {
          Daylightauto=true;
          DaylightPWMValue=0;
         }
      }
ReefAngel.DisplayedMenu=RETURN_MAIN_MODE;
}
void MenuEntry4()
{
ReefAngel.FeedingModeStart();
}
void MenuEntry5()
{
ReefAngel.WaterChangeModeStart();
}
void MenuEntry6()
{
ReefAngel.ATOClear();
ReefAngel.DisplayMenuEntry("Clear ATO Timeout");
}
void MenuEntry7()
{
ReefAngel.OverheatClear();
ReefAngel.DisplayMenuEntry("Clear Overheat");
}
void MenuEntry8()
{
ReefAngel.SetupCalibratePH();
ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;
}
void setup()
{
    ReefAngel.Init();  //Initialize controller
    ReefAngel.InitMenu(pgm_read_word(&(menu_items[0])),SIZE(menu_items));
    ReefAngel.OverheatShutoffPorts = Port7Bit;
    // Ports that are always on
    ReefAngel.Relay.On(Port5);
    ReefAngel.Relay.On(Port6);
    ReefAngel.Relay.On(Port8);    
}

void loop()
{
    // Specific functions
  //  ReefAngel.SingleATOLow(Port1);
    ReefAngel.ShowInterface();
    ReefAngel.StandardLights(Port2);
    ReefAngel.MHLights(Port3);
    ReefAngel.StandardLights(Port4);
    ReefAngel.StandardHeater(Port7);

if ((Actinicauto) && (Daylightauto))
  {
// Calculate your regular sunrise/sunset PWM value
    ActinicPWMValue=PWMSlope(10,00,22,15,0,50,40,ActinicPWMValue);
    DaylightPWMValue=PWMSlope(10,00,22,15,0,30,40,DaylightPWMValue);
    CheckCloud();    
  } 
    ReefAngel.PWM.SetActinic(ActinicPWMValue);
    ReefAngel.PWM.SetDaylight(DaylightPWMValue);

    if (ReefAngel.HighATO.IsActive())
      {
       ReefAngel.SingleATO(true, Port1, 60, 1);
      } 
      
  ReefAngel.ShowInterface();  
}







//*********************************************************************************************************************************
// Random Cloud/Thunderstorm effects function
void CheckCloud()
{

  // ------------------------------------------------------------
  // Change the values below to customize your cloud/storm effect

  // Frequency in days based on the day of the month - number 2 means every 2 days, for example (day 2,4,6 etc)
  // For testing purposes, you can use 1 and cause the cloud to occur everyday
#define Clouds_Every_X_Days 1 

  // Percentage chance of a cloud happening today
  // For testing purposes, you can use 100 and cause the cloud to have 100% chance of happening
#define Cloud_Chance_per_Day 100

  // Minimum number of minutes for cloud duration.  Don't use max duration of less than 6
#define Min_Cloud_Duration 7

  // Maximum number of minutes for the cloud duration. Don't use max duration of more than 255
#define Max_Cloud_Duration 15

  // Minimum number of clouds that can happen per day
#define Min_Clouds_per_Day 3

  // Maximum number of clouds that can happen per day
#define Max_Clouds_per_Day 5

  // Only start the cloud effect after this setting
  // In this example, start could after 11:30am
#define Start_Cloud_After NumMins(11,30)

  // Always end the cloud effect before this setting
  // In this example, end could before 8:00pm
#define End_Cloud_Before NumMins(18,30)

  // Percentage chance of a lightning happen for every cloud
  // For testing purposes, you can use 100 and cause the lightning to have 100% chance of happening
#define Lightning_Change_per_Cloud 100

  // Note: Make sure to choose correct values that will work within your PWMSLope settings.
  // For example, in our case, we could have a max of 5 clouds per day and they could last for 50 minutes.
  // Which could mean 250 minutes of clouds. We need to make sure the PWMSlope can accomodate 250 minutes of effects or unforseen resul could happen.
    // Also, make sure that you can fit double those minutes between Start_Cloud_After and End_Cloud_Before.
  // In our example, we have 510 minutes between Start_Cloud_After and End_Cloud_Before, so double the 250 minutes (or 500 minutes) can fit in that 510 minutes window.
    // It's a tight fit, but it did.

    //#define printdebug // Uncomment this for debug print on Serial Monitor window
  #define forcecloudcalculation // Uncomment this to force the cloud calculation to happen in the boot process. 


  // Change the values above to customize your cloud/storm effect
  // ------------------------------------------------------------
  // Do not change anything below here

  static byte cloudchance=255;
  static byte cloudduration=0;
  static int cloudstart=0;
  static byte numclouds=0;
  static byte lightningchance=0;
  static byte cloudindex=0;
  static byte lightningstatus=0;
  static int LastNumMins=0;
  // Every day at midnight, we check for chance of cloud happening today
  if (hour()==0 && minute()==0 && second()==0) cloudchance=255;

#ifdef forcecloudcalculation
    if (cloudchance==255)
#else
    if (hour()==0 && minute()==0 && second()==1 && cloudchance==255) 
#endif
    {
      //Pick a random number between 0 and 99
      cloudchance=random(100); 
      // if picked number is greater than Cloud_Chance_per_Day, we will not have clouds today
      if (cloudchance>Cloud_Chance_per_Day) cloudchance=0;
      // Check if today is day for clouds. 
      if ((day()%Clouds_Every_X_Days)!=0) cloudchance=0; 
      // If we have cloud today
      if (cloudchance)
      {
        // pick a random number for number of clouds between Min_Clouds_per_Day and Max_Clouds_per_Day
        numclouds=random(Min_Clouds_per_Day,Max_Clouds_per_Day);
        // pick the time that the first cloud will start
        // the range is calculated between Start_Cloud_After and the even distribuition of clouds on this day. 
        cloudstart=random(Start_Cloud_After,Start_Cloud_After+((End_Cloud_Before-Start_Cloud_After)/(numclouds*2)));
        // pick a random number for the cloud duration of first cloud.
        cloudduration=random(Min_Cloud_Duration,Max_Cloud_Duration);
        //Pick a random number between 0 and 99
        lightningchance=random(100);
        // if picked number is greater than Lightning_Change_per_Cloud, we will not have lightning today
        if (lightningchance>Lightning_Change_per_Cloud) lightningchance=0;
      }
    }
  // Now that we have all the parameters for the cloud, let's create the effect

    if (ForceCloud)
    {
    ForceCloud=false;
    cloudchance=1;
    cloudduration=10;
    lightningchance=1;
    cloudstart=NumMins(hour(),minute())+1;
    }


  if (cloudchance)
  {
    //is it time for cloud yet?
    if (NumMins(hour(),minute())>=cloudstart && NumMins(hour(),minute())<(cloudstart+cloudduration))
    {
      DaylightPWMValue=ReversePWMSlope(cloudstart,cloudstart+cloudduration,DaylightPWMValue,0,180);
      if (lightningchance && (NumMins(hour(),minute())==(cloudstart+(cloudduration/2))) && second()<5) 
      {
        if (random(100)<20) lightningstatus=1; 
        else lightningstatus=0;
        if (lightningstatus)
        {
          DaylightPWMValue=100; 
          ActinicPWMValue=100;
        }
        else 
        {
          DaylightPWMValue=0;
          ActinicPWMValue=0;
        }
        delay(1);
      }
    }
    if (NumMins(hour(),minute())>(cloudstart+cloudduration))
    {
      cloudindex++;
      if (cloudindex < numclouds)
      {
        cloudstart=random(Start_Cloud_After+(((End_Cloud_Before-Start_Cloud_After)/(numclouds*2))*cloudindex*2),(Start_Cloud_After+(((End_Cloud_Before-Start_Cloud_After)/(numclouds*2))*cloudindex*2))+((End_Cloud_Before-Start_Cloud_After)/(numclouds*2)));
        // pick a random number for the cloud duration of first cloud.
        cloudduration=random(Min_Cloud_Duration,Max_Cloud_Duration);
        //Pick a random number between 0 and 99
        lightningchance=random(100);
        // if picked number is greater than Lightning_Change_per_Cloud, we will not have lightning today
        if (lightningchance>Lightning_Change_per_Cloud) lightningchance=0;
      }
    }
  }
  
  if (LastNumMins!=NumMins(hour(),minute()))
  {
    LastNumMins=NumMins(hour(),minute());
    ReefAngel.LCD.Clear(255,0,120,132,132);
    ReefAngel.LCD.DrawText(0,255,5,120,"C");
    ReefAngel.LCD.DrawText(0,255,11,120,"00:00");
    ReefAngel.LCD.DrawText(0,255,45,120,"L");
    ReefAngel.LCD.DrawText(0,255,51,120,"00:00");
    if (cloudchance && (NumMins(hour(),minute())<cloudstart))
    {
      int x=0;
      if ((cloudstart/60)>=10) x=11; else x=17;
      ReefAngel.LCD.DrawText(0,255,x,120,(cloudstart/60));
      if ((cloudstart%60)>=10) x=29; else x=35;
      ReefAngel.LCD.DrawText(0,255,x,120,(cloudstart%60));
    }
    ReefAngel.LCD.DrawText(0,255,90,120,cloudduration);
    if (lightningchance) 
    {
      int x=0;
      if (((cloudstart+(cloudduration/2))/60)>=10) x=51; else x=57;
      ReefAngel.LCD.DrawText(0,255,x,120,((cloudstart+(cloudduration/2))/60));
      if (((cloudstart+(cloudduration/2))%60)>=10) x=69; else x=75;
      ReefAngel.LCD.DrawText(0,255,x,120,((cloudstart+(cloudduration/2))%60));
    }
  }   
}

byte ReversePWMSlope(long cstart,long cend,byte PWMStart,byte PWMEnd, byte clength)
{
  long n=elapsedSecsToday(now());
  cstart*=60;
  cend*=60;
  if (n<cstart) return PWMStart;
  if (n>=cstart && n<=(cstart+clength)) return map(n,cstart,cstart+clength,PWMStart,PWMEnd);
  if (n>(cstart+clength) && n<(cend-clength)) return PWMEnd;
  if (n>=(cend-clength) && n<=cend) return map(n,cend-clength,cend,PWMEnd,PWMStart);
  if (n>cend) return PWMStart;
}
rimai
Posts: 12857
Joined: Fri Mar 18, 2011 6:47 pm

Re: clouds and storms without PWM expansion?

Post by rimai »

Try removing the ShowInterface() right above Port2.
You should only have on ShowInterface(), which should be at the end of the loop().
Roberto.
grafxalien
Posts: 51
Joined: Wed Mar 28, 2012 1:44 pm

Re: clouds and storms without PWM expansion?

Post by grafxalien »

fixed that. now it displays whatever the calculated value is from the auto mode, even when I have it in manual mode.
rimai
Posts: 12857
Joined: Fri Mar 18, 2011 6:47 pm

Re: clouds and storms without PWM expansion?

Post by rimai »

Cool :)
Roberto.
grafxalien
Posts: 51
Joined: Wed Mar 28, 2012 1:44 pm

Re: clouds and storms without PWM expansion?

Post by grafxalien »

any ideas on why the client suite always displays the value calculated from sunrise/sunset code even when I am running the lights in manual mode?
grafxalien
Posts: 51
Joined: Wed Mar 28, 2012 1:44 pm

Re: clouds and storms without PWM expansion?

Post by grafxalien »

looking in to it more it appears that reef client is not updating very often at all. from error log:

*****4/3/2012 3:48:34 PM*****
Message:
Unexpected end of file has occurred. The following elements are not closed: RA. Line 1, position 5.
StackTrace:
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
at System.Xml.XmlTextReaderImpl.Throw(Int32 pos, String res, String arg)
at System.Xml.XmlTextReaderImpl.ThrowUnclosedElements()
at System.Xml.XmlTextReaderImpl.ParseElementContent()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r)
at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r, LoadOptions o)
at System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options)
at System.Xml.Linq.XDocument.Load(TextReader textReader, LoadOptions options)
at ReefAngelWCFListener.ReefAngelListener.BuildRelayStatuses(String xml)
grafxalien
Posts: 51
Joined: Wed Mar 28, 2012 1:44 pm

Re: clouds and storms without PWM expansion?

Post by grafxalien »

rimai wrote:Awesome.
I'm very interested on knowing how those drivers work out.
I'm actually specially interested on knowing if they really can dim down to 1% and how hot the chip gets.
When you find out what is the lowest cutout point, will you let me know?
I've made my own LED drivers in the past that could dim to 1% and had super fast response.
The only probem I had was that they used to generate lots of heat.


the steve LED drivers work amazing. Super fast response time. dim smooth down to 1%. I would highly recommend his products!
rimai
Posts: 12857
Joined: Fri Mar 18, 2011 6:47 pm

Re: clouds and storms without PWM expansion?

Post by rimai »

Does it get any hot?
Roberto.
grafxalien
Posts: 51
Joined: Wed Mar 28, 2012 1:44 pm

Re: clouds and storms without PWM expansion?

Post by grafxalien »

the driver? i will give it a test tomorrow. I have them mounted to a pretty large heatsink though.

here is my tank build thread so you can see what i mean

http://www.nano-reef.com/forums/index.p ... 273895&hl=
rimai
Posts: 12857
Joined: Fri Mar 18, 2011 6:47 pm

Re: clouds and storms without PWM expansion?

Post by rimai »

Nice build :)
Yeah, I was talking about the driver chips itself, but I see you have it mounted on the heatsink for dissipation, whick is a good idea.
I'll get one of those drivers sometime to check it out.
Roberto.
Post Reply