ayuda con lcd 20*4

Registrado
1 Jul 2011
Mensajes
201
Ubicación
españa
Provincia
huelva
hola, despues de mucho darle vueltas a la cabeza y con la ayuda de un compañero del foro me he decidido a hacer un controlador para el acuario con arduino, ...bien , siguiendo los pasos del indice del primer post del taller de arduino he conectado la placa del reloj a la placa arduino at mega 1280, he cargado la libreria del reloj y cargado los codigos para ponerlo en hora, el proceso creo que lo he hecho bien ya que no me ha dado ningun error y en la placa de arduino se me han encendido los leds de tx y rx . el problema viene cuando quiero conectar el lcd que es un hitachi hd 44780 20*4,he seguido los pasos del siguiente enlace

https://www.ladyada.net/learn/lcd/charlcd.html

he conectado la lcd a los pines tal y como lo pone, he modificado el codigo en la parte de conexion tal y como lo pone

"Ahora tendremos que actualizar los pins. Busque esta línea:
Copiar código

LiquidCrystal lcd (12, 11, 5, 4, 3, 2);

Y cambiará a:
Copiar código

LiquidCrystal lcd (7, 8, 9, 10, 11, 12);

Para que coincida con la mesa de pasadores que acaba de hacer

. y al darle a compilacion me da un error, si no modifico el codigo y cambio los pines en la placa de arduino tal y como viene en el codigo original no me da errores en la compilacion lo cargo en arduino y no me da errores,creo que ha cargado bien ya que los leds de tx y rx vuelven a parpadear pero no se visualiza nada en la lcd, tambien he modificado las columnas y las filas ya que el codigo original es para una lcd de 16*2 pero nada de nada,se que con este tipo de cosas hay que trastear mucho y sobre todo paciencia pero la primera me la he llevado en la frente.
que puede ser?
saludos

a la espera de respuestas sigo leyendo y trasteando
 
Última edición:
Hola! Has probado a variar el contraste de la pantalla? Has alimentado el led del backline? Un saludo!
 
hola
me enciende la retroiluminacion de la lcd "azul" y de las 4 columnas que tiene la lcd solo me encienden 2, he variado el contraste de la lcd con el potenciometro de 10k que le instale y solo consigo eso "variar el contraste de las 2 columnas"
saludos
 
hola, el pin 5 del lcd que va a gnd no lo tengo conectado como me indica el post anteriormente mencionado, puede ser eso?
saludos
 
solucionado
el pin 5 de la lcd tiene que ir conectado a gnd, aunque en el post mencionado dice que no
gracias
saludos
 
...a ver... nueva duda, ya he conseguido ver el ejemplo de "hello word", ahora intento de visualizar la hora en la lcd con este codigo
#include <Wire.h>
#define DS1307_I2C_ADDRESS 0x68
#include <SLCD.h> //LCD
#define numRows 4 //LCD filas
#define numCols 20 //LCD columnas
SLCD lcd = SLCD(numRows, numCols); //LCD

byte decToBcd(byte val)//RELOJ
{
return ( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;//RELOJ

void setup()
{
Wire.begin(); //RELOJ
lcd.init(); //LCD
Serial.begin(9600); //LCD
}


//FUNCIONES SECUNDARIAS

//Iniciar LCD
void Lcdini ()
{
lcd.displayOn();
lcd.clear();
}

void lcdoff()
{
lcd.displayOff();
lcd.brightness(0);
}

// borra pantalla con fade
void FadeLcd()
{

for (char i=99; i>=4; i -= 5) {
lcd.brightness(i);
delay(50);
}

lcd.clear();

for (char i=0; i<100; i += 5) {
lcd.brightness(i);
delay(50);
}
}


// Pausa 3 segundos
void p ()
{
delay (3000);
}




//BUCLE PRINCIPAL
void loop ()
{
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // LEEMOS LA HORA
InfoLcd(); //Informacion cada hora en pantalla lcd

}




// FUNCIONES PRINCIPALES

// Establece la fecha y el tiempo del ds1307
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
// Resetea el registro puntero
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

// Alguno de estos necesitan enmascarar porque ciertos bits son bits de control

*second = bcdToDec(Wire.receive() & 0x7f);
*minute = bcdToDec(Wire.receive());
*hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm
*dayOfWeek = bcdToDec(Wire.receive());
*dayOfMonth = bcdToDec(Wire.receive());
*month = bcdToDec(Wire.receive());
*year = bcdToDec(Wire.receive());
}


// INFORMACION EN PANTALLA LCD
void InfoLcd ()
{
//Nombre proyecto
Lcdini();
lcd.print("L&S NANO-REEF", 0, 2);
lcd.print("VER 2.0", 1, 4);

p();
FadeLcd(); // borra pantalla con fade

// ahora para mostrar fecha y hora
p();//pausa 3segundos

lcd.print("Hora:",0,1);
if (hour < 10) Serial.print("0");
Serial.print(hour, DEC);
Serial.print(":");
if (minute < 10) Serial.print("0");
Serial.print(minute, DEC);
Serial.print(":");
if (second < 10) Serial.print("0");
Serial.print(second, DEC);

switch (dayOfWeek)
{
case 1:
lcd.print("Lun , ",1,0);
break;
case 2:
lcd.print("Mar , ",1,0);
break;
case 3:
lcd.print("Mie , ",1,0);
break;
case 4:
lcd.print("Jue , ",1,0);
break;
case 5:
lcd.print("Vie , ",1,0);
break;
case 6:
lcd.print("Sab , ",1,0);
break;
case 7:
lcd.print("Dom , ",1,0);
break;
}
Serial.print(dayOfMonth, DEC);
Serial.print("/");
if (month < 10) Serial.print("0");
Serial.print(month, DEC);
Serial.print("/");
Serial.print("20");
if (year < 10) Serial.print("0");
Serial.print(year, DEC);

p();
FadeLcd(); // borra pantalla con fade
lcdoff();
}
y me da el siguiente error
"SLCD does not name a tipe"
donde puede estar el problema?
 
Por el error que reporta este se encuentra en la linea que hay justo después de los define. Pero ahora mismo no se decirte cual es. Supongo que no estará bien escrita... aunque también puede ser un problema de la librería.

EDITO: Otra cosa que podría afectar aunque no lo he probado nunca por que es algo metódico: pon los include antes de los define.


Enviado desde mi ASUS Transformer Pad TF300T usando Tapatalk 2
 
Última edición:
hola
el error esta en que he usado una libreria para una lcd serial.ya esta solucionado , pero sigo sin ver la hora en la lcd
alguna ayudita
gracias
 
Un dato importante sería saber si puedes ver la hora en el monitor serial y luego ya pasaría a intentar verla en la lcd. Te sale algo en el monitor?

Enviado desde mi ASUS Transformer Pad TF300T usando Tapatalk 2
 
cambia todos los serial.print por lcd,print
te falta la libreria one wire
 
Última edición:
que listo por dios ............. espero ismael que el codigo que te envie funcione sldetes
 
que listo por dios ............. espero ismael que el codigo que te envie funcione sldetes

Solo intentaba ayudar... sobra el sarcasmo. No se ni quien es el compañero que le esta ayudando (ahora ya supongo que tu) ni lo que sabe el que pregunta o deja de saber. Me he propuesto ayudar a todo el que pueda con el tema de arduino por que es lo que más controlo, pero si molesto no digo nada más en este hilo y todo arreglado, y si te ha molestado mi apunte, que solo pretendía que fuera eso, pido disculpas.

Un saludo.

Enviado desde mi ASUS Transformer Pad TF300T usando Tapatalk 2
 
Última edición:
hola
alsimu y medina gracias por vuestras respuestas, en este hilo seran todas bien recibidas
saludos
 
hola
medina, me sigue dando error, le suprimo
#include <OneWire.h>
y me carga bien pero solo se ve el texto no la hora, seguire investigando como puedo alternar texto y hora
saludos
 
PHP:
#include <Wire.h>
#include <OneWire.h>
#include <LiquidCrystal.h>
#define DS1307_I2C_ADDRESS 0x68 
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(26, 27, 45, 47, 49, 51);
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

// Convierte BCD (binario decimal codificado) a números normales decimales 
byte decToBcd(byte val)
{
return ( (val/16*10) + (val%10) );
}

// Convierte BCD (binario decimal codificado) a números normales decimales 
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}

// Parar el DS1307, pero esto tiene el efecto secundario de segundos que se ponen a 0 
// probablemente solo quiera usar esto para pruebas.
/*
void stopDs1307()
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.send(0x80);
Wire.endTransmission();
}
*/
// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock
// Assumes you're passing in valid numbers
void setDateDs1307(byte second, // 0-59
byte minute, // 0-59
byte hour, // 1-23
byte dayOfWeek, // 1-7
byte dayOfMonth, // 1-28/29/30/31
byte month, // 1-12
byte year) // 0-99
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.send(decToBcd(second)); // 0 a bit 7 inicia el reloj
Wire.send(decToBcd(minute));
Wire.send(decToBcd(hour)); // Si usted quiere 12 hora am/pm usted tiene que poner el 
// bit 6 (tambien tiene que cambiar readDateDs1307)
Wire.send(decToBcd(dayOfWeek));
Wire.send(decToBcd(dayOfMonth));
Wire.send(decToBcd(month));
Wire.send(decToBcd(year));
Wire.endTransmission();
}
// Establece la fecha y el tiempo del ds1307
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
// Resetea el registro puntero
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
// Alguno de estos necesitan enmascarar porque ciertos bits son bits de control 
*second = bcdToDec(Wire.receive() & 0x7f);
*minute = bcdToDec(Wire.receive());
*hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm
*dayOfWeek = bcdToDec(Wire.receive());
*dayOfMonth = bcdToDec(Wire.receive());
*month = bcdToDec(Wire.receive());
*year = bcdToDec(Wire.receive());
} 

void setup() {
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
Wire.begin();
lcd.noBlink();
lcd.begin(20,4);
lcd.setCursor(0,0);
lcd.print("  PROYECTO ");
// Cambie estos valores a los que usted quiere poner su reloj.
// Usted probablemente solo quiere poner su reloj una vez y luego quitar 
// la llamada de setDateDs1307.
// si desea poner en hora, active esta parte y luego vuelva a quitarla
/*
second = 00;
minute = 33;
hour = 14;
dayOfWeek = 3;
dayOfMonth = 26;
month =12;
year = 12;
setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); 
*/

delay(6000);
}



void loop() {
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); 
//Obtenemos la hora// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" MY LITTLE ");
lcd.setCursor(0,3);
if (dayOfMonth < 10) lcd.print("0");
lcd.print(dayOfMonth, DEC);
lcd.print("/");
if (month < 10) lcd.print("0");
lcd.print(month, DEC);
lcd.print("/");
if (year < 10) lcd.print("0");
lcd.setCursor(6,3);
lcd.print("20");
lcd.print(year, DEC); 
lcd.setCursor(12,2);
lcd.print("Hora");
lcd.setCursor(12,3);
if (hour < 10) lcd.print("0");
lcd.print(hour, DEC);
lcd.print(":"); 
if (minute < 10) lcd.print("0");
lcd.print(minute, DEC);
lcd.print(":");
if (second < 10) lcd.print("0");
lcd.print(second, DEC);
lcd.setCursor(0,1); 
switch (dayOfWeek)
{
case 1:
lcd.print("Lunes"); 
break;
case 2:
lcd.print("Martes");

break;
case 3:
lcd.print("Miercoles");

break;
case 4:
lcd.print("Jueves");

break;
case 5:
lcd.print("Viernes");


break;
case 6:
lcd.print("Sabado");

break;
case 7:
lcd.print("Domingo");

break;
}

delay(3000);
lcd.clear();
lcd.setCursor(2, 2);
lcd.print("BIG BLUE ");
delay(3000);
lcd.clear();
lcd.setCursor(2, 3);
lcd.print(" REEF ");
delay(3000);

}

pruevalo funciona si quieres algun dibujito emn pantalla dimelo jejejejejej
 
Última edición:
hola
medina, me sigue dando error, le suprimo y me carga bien pero solo se ve el texto no la hora, seguire investigando como puedo alternar texto y hora
saludos

para que lo vas a suprumir .te hara falta en un futuro ademas no altera el progama
 
Solo intentaba ayudar... sobra el sarcasmo. No se ni quien es el compañero que le esta ayudando (ahora ya supongo que tu) ni lo que sabe el que pregunta o deja de saber. Me he propuesto ayudar a todo el que pueda con el tema de arduino por que es lo que más controlo, pero si molesto no digo nada más en este hilo y todo arreglado, y si te ha molestado mi apunte, que solo pretendía que fuera eso, pido disculpas.

Un saludo.

Enviado desde mi ASUS Transformer Pad TF300T usando Tapatalk 2
no molesta para nada perdona si te molesto mi tono ,te pido disculpas ,espero que fomentes tu sabiduria aqui
 
Atrás
Arriba