74HC595 con pantalla LCD

Hola amigos,

estoy intentando utilizar un chip 74HC595 para augmentar las salidas analogicas de mi arduino uno, pero no se como programar para que me aparezca el texto en la pantalla. He buscado en internet pero no se adapta ningún tutorial a mi situación. Mi LCD es la que venia en el Arduino Starter Kid, es de 16x2.

Les agradeceria si alguien me pudiese decir exactamanete que codigo debo escribir.

Las conexiones son estas.

Muchas gracias por su ayuda. :slight_smile:

  • perdon, son las salidas digitales, no las analogicas.

Usa esta librería NewLiquidCrystal
Pero presta atencion a como instalarla.
No puedes mantener la libreria LiquidCrystal que viene por defecto en tu IDE.
Debes borrarla e instalar esta con ese nombre LiquidCrystal.
Tiene soporte para 4 y 8 bits, para i2C, para 74hc595
Lee esta parte de la explicación Shift Registers & LCD

De acuerdo, muchas gracias!

ardualberto88, lo pudiste hacer funcionar?

eso funciona, te lo garantizo.

De eso estoy seguro, lo que quisiera saber es porque opción eligió avanzar, porque hay varias. En mi caso particular, por un tema de velocidad, voy por la opciones de 3 cables. Hoy ya lo tengo armado con 3 cables pero mediante SPI (según Arduino Playground - LiquidCrystal Library), el caso que plantean en este posrt, entiendo que este no usa SPI (es correcto?):
Para la imagen que adjuntaste en tu post del 2 de Nov, tendrian algun sketch de ejemplo de "Hello World" para entender bien como funciona?

Todo esta basado en la librería que yo le sugerí que es NewLiquidCrystal
En este link se explica mejor como interactuar con el 595 y un LCD, siempre con esta librería.

Tu opción es la que da el IDE por defecto y claro que esta bien. Puedes usarla y luce muy simple. Siempre usa lo que te resulte mas cómodo.

EDITO: olvidé responder el tema del ejemplo. Cuando usas NewLiquidCrystal, debes cambiar la inicialización del objeto para cada tipo de LCD. Cualquier ejemplo sirve con esa simple modificación.
Si tienes un ejemplo de Hello World para lcd 4bits, cambias el objeto al definirlo y listo.
en este caso sería
imagina tu ejemplo con

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

o

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x38); // Set the LCD I2C address

Pues este sería el caso. Dejo Link 74HC595 con LCD

#include <LCD.h>
#include <LiquidCrystal_SR.h>

// constructor prototype parameter:
//  LiquidCrystal_SR lcd(DataPin, ClockPin);
LiquidCrystal_SR lcd(2, 3);

void setup ( )
{
   lcd.begin ( 16, 2 );

   lcd.print("Hola Mundo");
}

void loop ()
{
   // your code here ...
}

Surbyte, nuevamente muchas gracias. Puede ser que haya habido un error de interpretación?

En los ejemplos que vienen con la librería, vi que funcionan con i2c, pero yo lo quiero usar con 3 cables (no me importa ya si es o no mediante SPI). Lo que me confunde es cuando inicializas el LCD, haces referencia solo a 2 pines "LiquidCrystal_SR lcd(2, 3);". Me estoy perdiendo de uno? y por otro lado, cuando haces referencia a "Link 74HC595" el ejemplo lo muestra utilizando un 74LS164N, y no el 74HC595.

Mira donde dice Latch Shift Register y veras un 595 pero tienes razón respecto del 164.
En realidad es para Shift Registers y ambos lo son.

Ya estoy probando. Entiendo que es mediante I2C al ser con 2 cables, no? para hacerlo con 3? simplemente lo inicializo??

No es con 3. Es latch y clock
Shift register. Tu vienes con 3 del SPI, yo no hablé nunca de SPI.

A ver, lo hice funcionar con 2 pines. El problema es que al cabo de un tiempo, empieza a mostrar caracteres extraños....cuanto mas rápido quiero refrescar el contenido del LCD, peor anda.
ver Falla.

Ahora...con 3 cables. El cable que lo identifica como ENABLE, donde lo conecto en el arduino? Insisto, en el codigo solo declara pines 2 y 3.

Se les ocurre porque puede ser esa falla con 2 cables?

en el post #7 te puse un link. En dicho link dice

** **Arduino library for 2-wire or 3-wire connection to HD44780-compatible LCD's via shiftregisters** **

USO

#include <ShiftRegLCD.h>
ShiftRegLCD objectName(Datapin, Clockpin, Enablepin or TWO_WIRE [, Lines [, Font]])
donde Lines y Font son opcionales.

  • Enablepin: puede ser reemplazado por la constante TWO_WIRE, si se usan 2 cables.
  • Lines: 1 o 2 líneas (un LCD de 4 lineas debe setearse como 2).
  • Font : 0 o 1, pequeña o fuente grande (fuente de 8 o 10 de alto,si esta dispnible).