still got the problem with mine, delay does not seem to help, I've even tried up too 10 seconds
Where can I buy one just like it? model number etc.
jrraines:
Where can I buy one just like it? model number etc.
I know that's not aimed for me, and I'm sorry to hijack but Id be happy to send you one of the screens that I'm having the same problem with if you cover say half the postage with me?
well two of my screens are now on their way to mr Raines for testing.
I have also purchased 2 other screens and they act exactly the same
they are..
http://www.ebay.co.uk/itm/160633652459?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649#ht_3834wt_957
http://www.ebay.co.uk/itm/190345879489?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649#ht_3812wt_906
Looking at the LiquidCrystal library source in Arduino-0022, I see that the LiquidCrystal constructor makes a call to begin(), which delays for 50ms and then sends commands to the LCD. So it is quite possible that the LCD is receiving commands before it is ready, if the supply voltage rises slowly at power up.
I suggest removing the begin() call from the LCD constructor. A call to begin() should be made in setup() anyway. If the LCD still doesn't work until the reset button is pressed, then Lefty's suggestion of inserting at delay in setup() before the begin() call should fix it.
strange. I start to suspect your code or other hardware but I know you checked thoroughly. I buy from chinaecomponents on ebay. Never a problem.
I still thihk the problem is that the device is not ready when the begin() command send commands to the device. I suggest trying the following, one at a time:
-
Make sure you have a call to lcd.begin(...) in setup - assuming your LiquidCrystal variable is called "lcd".
-
Add a delay in setup() before the begin(...) call as per retrolefty's suggestion.
-
If that doesn't fix it, the problem may be that the lcd.begin() call in the LiquidCrystal constructor is happening too soon. Preferably, recompile the LiquidCrystal library with the begin() call at LiquidCrystal.cpp line 82 commented out. Alternatively, the following may work (it compiles but is otherwise untested):
- Replace the declaration "LiquidCrystal lcd(...);" by the following:
void* operator new(unsigned int sz)
{
return malloc(sz);
}
LiquidCrystal *pLcd;
- Put the following in setup, before the lcd.begin(...) call:
delay(1000); // delay as per retrolefty's suggestion
pLcd = new LiquidCrystal(...); // insert correct pin numbers here
- Replace every instance of "lcd." by "pLcd->"
hey there. I do have a call to begin in the set-up.
I have tried al sorts of delay times before the begin but does not seem to help
I not sure how I recompile the library?
I just tried the last suggestion, replacing some of the bits but could not get that too complie
dtokez:
I just tried the last suggestion, replacing some of the bits but could not get that too complie
What compile errors are you getting, and on what lines? If you post your sketch, I can try making the changes and see what problems there are compiling it.
Hi there, here is what I have currently
#include <LiquidCrystal.h>
void* operator new(unsigned int sz)
{
return malloc(sz);
}
LiquidCrystal *pLcd;
//LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int analoginput = 0;
int analoginput1 = 1;
int analoginput2 = 2;
float vin = 0.0;
float vin1 = 0.0;
float vin2 = 0.0;
void setup(){
delay(1000); // delay as per retrolefty's suggestion
pLcd = new LiquidCrystal(7, 8, 9, 10, 11, 12); // insert correct pin numbers here
delay(100);
pLcd.begin(16, 2);
delay(100);
pLcd.setCursor(0, 0);
pLcd.print("REAPsystems V1.1");
lcd.setCursor(0, 1);
pLcd.print("iSensor tester");
delay(4000);
pLcd.clear();
}
void loop(){
delay(1400);
// read the value on analog input
pLcd.setCursor(0,0);
pLcd.print ("Vin:");
vin = analogRead(analoginput)*5.00/1024*2;
pLcd.print(vin, 3);
pLcd.print ("v");
pLcd.setCursor(0,1);
pLcd.print ("R:");
vin1 = analogRead(analoginput1)*5.00/1024;
pLcd.print(vin1, 2);
pLcd.print ("v");
pLcd.setCursor(9,1);
pLcd.print ("O:");
vin2 = analogRead(analoginput2)*5.00/1024;
pLcd.print(vin2, 2);
pLcd.print ("v");
delay(1400);
}
You need to replace "pLcd." by "pLcd->" everywhere, as in my original instructions.
thanks I overlooked the symbols
I'm getting another compile error now on this line pLcd->.begin(16, 2);
do i still need that in there?
yes but remove the . in the middle.
Thanks, I should have checked my code properly!
Just complied, and downloaded to my arduino but I'm sad to say the problem is still the same
OK, here is one more suggestion. Change the start of setup() to this:
pinMode(8, OUTPUT);
digitalWrite(8, LOW);
delay(5000);
pLcd = new LiquidCrystal(7, 8, 9, 10, 11, 12); // insert correct pin numbers here
delay(100);
pLcd->begin(16, 2);
....
i.e. set the enable pin to be an output and drive it low early on.
PS - an alternative that might work even better would be to add a pulldown resistor between the EN input to the LCD and ground. What I'm trying to do is to make sure the LCD doesn't think it's receiving any commands while it powers up.
does not work mate.
I'm just going to try the hardware solution now (pull down)
Thanks for the help
-
Can you confirm that the LCD doesn't work after power up, but always works if you then press the reset button?
-
Confirm you have the LCD RW pin connected to Vcc?
-
If the answer to both the above is yes and the pulldown on EN doesn't work, it might be worth trying:
- a pulldown on the RS pin as well
- sending 2 begin() calls in setup() instead of just one, with a large delay between them
1- Indeed, that is the behaviour that I'm currently dealing with.
2- Pin 5 (r/w) is tied to gnd, as per this tutorial that I followed?.. Arduino Tutorial - connecting a parallel LCD
I tried a 100k to gnd on the E pin but still the same, also just tried two begin calls with a 1 sec delay in between, also no good
dtokez:
1- Indeed, that is the behaviour that I'm currently dealing with.
Very strange. The Arduino reset line does not go to the LCD, therefore what's resetting the LCD after you press reset must be the begin() call in the LCD constructor and/or the begin() call in setup(). So the question is, what else are you doing in your sketch that is making those calls work?
I'm running out of ideas, but maybe it is some other command you sent the LCD before you pressed reset, like printing characters or setting the cursor location. So all I can suggest now is that in between making those 2 begin calls in setup, you try try doing those things.
dtokez:
2- Pin 5 (r/w) is tied to gnd, as per this tutorial that I followed?.. Arduino Tutorial - connecting a parallel LCD
Yes, RW to Gnd is correct, not Vcc.