LCD 16x2

Estoy realizando un proyecto y uno de los componentes es una pantalla LCD 16x2 que funciona a 5V con el chip HD44780 y necesita 11 pines.

Una vez realizadas las conexiones perfectamente, la LCD me funciona de maravilla.

Pero al cabo de 10 o 12 dias empieza a hacer cosas extrañas (simbolos raros, hasta que se queda que no muestra nada) y ya no funciona bien. Es la segunda pantalla que se me estropea, ¿alguien sabe porque?

Gracias.

Puedes poner las conexiones que realizas?

Aqui os lo muestro.

El LCD es lo que en el dibujo sale con el “?”

El PIN mas a la izquierda es el numero 1 y el de la derecha el 16

El codigo:
#include <Servo.h>
#include <LiquidCrystal.h>

#undef int
#undef abs
#undef double
#undef float
#undef round

int moviment = 90;
int switchPin1 = 9; // digital input pin for a switch
int switchPin2 = 8; // digital input pin for a switch
int potenPin = 0;
int valorPoten = 0;
int switchState = 0; // the state of the switch
int flag1 = 0;
int flag2 = 0;
int valor = 0; // valor resultat a imprimir
LiquidCrystal lcd(12, 11, 46, 48, 50, 52); // initialize the library with the numbers of the interface pins
Servo myservo;

void setup()
{
myservo.attach(10);
flag1 = 0;
flag2 = 0;
valor = 0;
pinMode(switchPin1, INPUT); // set the switch pin to be an input
pinMode(switchPin2, INPUT); // set the switch pin to be an input
lcd.begin(16, 2); // set up the LCD’s number of rows and columns:
}

void loop()
{
valorPoten = analogRead(potenPin);
moviment = (valorPoten/(5.67));
//lcd.clear();
//lcd.print("Mov: “);
//lcd.print(moviment);
//lcd.print(” Grs: ");
//lcd.print(valor);

botones();
myservo.write(valor);
}

void botones()
{
if ((digitalRead(switchPin1)==1) && (flag1==0))
{
//Es prem boto 1
lcd.clear();
if (valor+moviment<180)
valor=valor+moviment;
else
valor = 180;
lcd.setCursor(0,0);
lcd.print("Mov: ");
lcd.print(moviment);
lcd.setCursor(0,1);
lcd.print("Grs: ");
lcd.print(valor);
flag1 = 1;
}
if ((digitalRead(switchPin1)==0) && (flag1==1))
{
//Deixa de pitxar-se boto 1
flag1 = 0;
}
if ((digitalRead(switchPin2)==1) && (flag2==0))
{
//Es prem boto 2
lcd.clear();
if (valor-moviment>0)
valor=valor-moviment;
else
valor = 0;
lcd.setCursor(0,0);
lcd.print("Mov: ");
lcd.print(moviment);
lcd.setCursor(0,1);
lcd.print("Grs: ");
lcd.print(valor);
flag2 = 1;
}
if ((digitalRead(switchPin2)==0) && (flag2==1))
{
//Deixa de pitxar-se boto 2
flag2 = 0;
}
}

Esta es la conexión básica que hay en la web de Arduino

Si no se conecta el Bklt+ y Bklt- no tiene retroiluminacion. Son el Backlight positive power supply y el Backlight negative power supply.

Gracias.

Pues así a primera vista veo que el pin positivo de la retroiluminacion no lleva resistencia como me dijeron ,quizas por eso se llegue a quemar.
Al igual que el pin 2 no lleva el potenciometro de 10k o la resistencia,haber si algun experto en el tema puede confirmarlo

Perdon, pero no termine el comentario de antes, tienes razon diablet69, los terminarles de retroiluminación no tiene mucho que ver con que se estrope, pero como comenta tarmion, el pin de contraste deberia llevar un potencimetro para regularlo, no?

Es verdad, ya tenia puesto un potenciometro.

Pero segun la siguiente imagen, veo que el los pins 15 iy 16 conectan alguna resistencia. ¿Sebe alguien porque?

He visto en algun sitio que el la retroiluminacion acepta valores de 4.1 a 4.5V. Si Arduino da 5V, que resistencia puedo poner para rebajar ese 0.5V?

¿Alguien sabe alguna web que te ayude a calcularlo?

Para calcular correctamente esa caida de tension que dices, es necesario saber de antemano la resistencia que ofrece la pantalla. Te sugiero que, en su lugar, hagas un divisor de tension:

+5v-----R1-----+------R2-------Gnd

En el punto marcado por +, tienes un voltaje de 5*R1/R1+R2

Ajustarlo a lo que necesitas es bastante facil, ¿no?

Para calcular el divisor de tensión sigues necesitando saber la resistencia de la pantalla. La fórmula que has puesto el R1 del numerador debería ser R2 para que fuese cierto.

En el punto + tendrías:

Siendo Rp la resistencia de la pantalla