clouds and storms without PWM expansion?
-
- Posts: 51
- Joined: Wed Mar 28, 2012 1:44 pm
clouds and storms without PWM expansion?
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
Re: clouds and storms without PWM expansion?
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
-
- Posts: 51
- Joined: Wed Mar 28, 2012 1:44 pm
Re: clouds and storms without PWM expansion?
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.
Re: clouds and storms without PWM expansion?
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.
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.
-
- Posts: 51
- Joined: Wed Mar 28, 2012 1:44 pm
Re: clouds and storms without PWM expansion?
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:
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);
}
}
Re: clouds and storms without PWM expansion?
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:
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.
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
If the number is 1, you need to increase to 3, which is the number of menu entries you have.
Roberto.
-
- Posts: 51
- Joined: Wed Mar 28, 2012 1:44 pm
Re: clouds and storms without PWM expansion?
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;
}
Re: clouds and storms without PWM expansion?
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.
Re: clouds and storms without PWM expansion?
That code looks good. That's exactly what I would suggest doing.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; }
-
- Posts: 51
- Joined: Wed Mar 28, 2012 1:44 pm
Re: clouds and storms without PWM expansion?
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;
}
-
- Posts: 51
- Joined: Wed Mar 28, 2012 1:44 pm
Re: clouds and storms without PWM expansion?
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);
}
-
- Posts: 51
- Joined: Wed Mar 28, 2012 1:44 pm
Re: clouds and storms without PWM expansion?
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:
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;
}
Re: clouds and storms without PWM expansion?
Try removing the ShowInterface() right above Port2.
You should only have on ShowInterface(), which should be at the end of the loop().
You should only have on ShowInterface(), which should be at the end of the loop().
Roberto.
-
- Posts: 51
- Joined: Wed Mar 28, 2012 1:44 pm
Re: clouds and storms without PWM expansion?
fixed that. now it displays whatever the calculated value is from the auto mode, even when I have it in manual mode.
-
- Posts: 51
- Joined: Wed Mar 28, 2012 1:44 pm
Re: clouds and storms without PWM expansion?
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?
-
- Posts: 51
- Joined: Wed Mar 28, 2012 1:44 pm
Re: clouds and storms without PWM expansion?
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)
*****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)
-
- Posts: 51
- Joined: Wed Mar 28, 2012 1:44 pm
Re: clouds and storms without PWM expansion?
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!
-
- Posts: 51
- Joined: Wed Mar 28, 2012 1:44 pm
Re: clouds and storms without PWM expansion?
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=
here is my tank build thread so you can see what i mean
http://www.nano-reef.com/forums/index.p ... 273895&hl=
Re: clouds and storms without PWM expansion?
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.
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.