Seguridad Wireless - Wifi

Equipos y materiales => Puntos de acceso, routers, switchs y bridges => Openwrt & LEDE => Mensaje iniciado por: raphik en 24-04-2016, 23:09 (Domingo)

Título: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 24-04-2016, 23:09 (Domingo)
Este proyecto tiene por objeto la instalación de una pantalla LCD en cualquier router OpenWrt que disponga de dos GPIO libres.

A) EL HARDWARE

A.1) Pantalla.

Para este proyecto utilizo una pantalla 1602 comprada en una tienda china y un router AR-5387un.
(http://i.imgur.com/BuMrgz7.jpg)

Por la parte de detrás de la pantalla hay un expansor de bus I²C, un Philips PCF8574T, que permite su conexión con el router con sólo cuatro cables (GND, VCC, SDA y SCL).
(http://i.imgur.com/mLvj5ID.jpg)


A.2) Cables y soldaduras.

Se le quita la tapa al router. Se suelda el cable SDA (naranja) en el punto R107 (GPIO9) y el cable SCL (verde) en el punto R109 (GPIO10).
(http://i.imgur.com/VtlRSZv.jpg)

El cable GND (negro) se puede soldar al GND del puerto serie (0 voltios). El cable VCC (rojo) lo he soldado en el punto R66, que da +5 Voltios. Igual se puede alimentar a +3'3 voltios, pero no lo he probado.
(http://i.imgur.com/VI1HCNa.jpg)

A.3) Ajuste del contraste.

Ya se puede conectar la pantalla al router. Lo normal es que la pantalla se ilumine y no se vea nada. Hay que ajustar el contraste con el potenciómetro azul hasta que se vean nítidamente los 16 cuadritos de la primera fila.
(http://i.imgur.com/IvkbCLp.jpg)


B) EL FIRMWARE

B.1) GPIO.

Para poner en marcha los GPIO hay que averiguar su "base". Desde una terminal de OpenWrt.
Código: [Seleccionar]
cat /sys/class/gpio/gpiochip*/base | head -n1
480
El valor devuelto (480) es la base, un valor que se suma al GPIO para obtener su valore real. El GPIO9 es en realidad el 489 y el GPIO10, el 490.

Para poder utilizar los GPIO  se exportan y se declaran "de salida".
Código: [Seleccionar]
echo "489" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio489/direction
echo "490" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio490/direction

Se puede comprobar que los GPIO funcionan correctamente con un polímetro o con un led y una resistencia de 330 Ohmios en serie.
Código: [Seleccionar]
#SDA (GPIO9) a 3.3V y a 0V.
echo "1" > /sys/class/gpio/gpio489/value
echo "0" > /sys/class/gpio/gpio489/value
#SCL (GPIO10) a 3.3V y a 0V.
echo "1" > /sys/class/gpio/gpio490/value
echo "0" > /sys/class/gpio/gpio490/value


B.2) Bus I²C.

Para que el par de GPIO funcionen como bus I²C hay que instalar un par de paquetes, "montar" el bus y reiniciar el router.
Código: [Seleccionar]
opkg update
opkg install kmod-i2c-gpio-custom
opkg install kmod-gpio-pcf857x
echo "i2c-gpio-custom bus0=0,489,490" > /etc/modules.d/59-i2c-gpio-custom
echo "i2c-gpio" > /etc/modules.d/60-i2c-gpio
reboot

Una vez reiniciado el router, se puede comprobar que OpenWrt detecta el bus.
Código: [Seleccionar]
dmesg | grep -E 'i2c|I2C'
[   14.092000] i2c /dev entries driver
[   14.112000] Custom GPIO-based I2C driver version 0.1.1
[   14.120000] i2c-gpio i2c-gpio.0: using pins 489 (SDA) and 490 (SCL)

Una comprobación adicional devuelve el punto de montaje del bus.
Código: [Seleccionar]
ls /dev/i2c*
/dev/i2c-0

En la nuevas compilaciones de OpenWrt no viene el paquete i2c-tools, que incluye las herramientas i2cdetect, i2cdump, i2cget e i2cset. Afortunadamente, sirven las BB v14.07. Para descargar e instalar.
Código: [Seleccionar]
cd /tmp
wget http://downloads.openwrt.org/barrier_breaker/14.07/brcm63xx/generic/packages/oldpackages/libi2c_2013-12-15-1_brcm63xx.ipk
wget http://downloads.openwrt.org/barrier_breaker/14.07/brcm63xx/generic/packages/oldpackages/i2c-tools_2013-12-15-1_brcm63xx.ipk
opkg install libi2c_2013-12-15-1_brcm63xx.ipk i2c-tools_2013-12-15-1_brcm63xx.ipk

Para enviar datos a un dispositivo hay que saber primero en qué dirección está. Se utiliza la herramienta i2cdetect. El parámetro "-y" es para evitar que el comando dé un mensaje de aviso y "0" es el bus (que se obtiene con el comando  ls /dev/i2c*).
Código: [Seleccionar]
i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3f
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --  
OpenWrt detecta un dispositivo en la dirección hexadecimal 0x3F.

Puenteando los contactos A0, A1 y A2, se le puede asignar a la expansora cualquier dirección de entre ocho disponibles. El bus I²C es realmente potente, porque permite conectar un gran número de dispositivos con sólo cuatro cables.
(http://i.imgur.com/hPcCtvQ.jpg)
(Foto de Jesús Echevarría. http://www.jechavarria.com/2013/03/11/how-to-interface-8-lcd-displays-with-two-wires/)


NOTA AL MARGEN.-
Lo explicado hasta ahora bien podría servir como base para otros proyectos. Las salidas P0 a P7 del chip PCF8574 se pueden hacer conmutar a voluntad, lo que permitiría controlar, por ejemplo, 8 relés con sólo 2 GPIO. Y como se pueden apilar en paralelo hasta 8 expansoras, se podrían controlar hasta 64 relés con sólo 2 GPIO. Cada módulo expansor cuesta en ebay algo menos de 1€.
(http://i.imgur.com/MvDqo3m.jpg)


NOTA ACLARATORIA.-
Volviendo a las pantallas LCD, es de observar que las placas expansoras de bus I²C no están normalizadas. Las patillas P0 a P7 del PCF8574 pueden estar conectadas de muy distintas formas a los puntos 1 a 16 de la pantalla LCD. Esto es importante, porque un mismo programa podría funcionar correctamente con una pantalla determinada y con otra no. En este proyecto la correspondencia es la de la foto. La patilla P3 enciende o apaga el led que ilumina el fondo de la pantalla.
(http://i.imgur.com/gFdFOAA.jpg)


C) EL SOFTWARE

Para enviar texto al LCD utilizo un script. Hay que activarle el atributo "ejecutable" para poder utilizarlo como si fuese un comando.
Código: [Seleccionar]
#!/bin/sh
# 2016 :p raphik
# Comando para LCD HD44780 + expansor I2C PCF8574T
# Sintaxis 1: se utiliza para inicializar el LCD una sola vez, antes de enviar cualquier texto
#                 lcd_write <init>
# Sintaxis 2: se utiliza para enviar texto. La primera fila es la 0. La primera columna es la 0.
#                 lcd_write <fila> <columna> <texto>
#
func_init()
{
# Inicializa el display para modo 4-bit, 16x2 caracteres:
func_LCD I 0x33; func_LCD I 0x32; func_LCD I 0x28; func_LCD I 0x0C; func_LCD I 0x01
}

func_LCD()
{
  local nibb; local data
  if [ $1 == "I" ]; then
    data=$2
    nibb=$(($data/0x10*0x10)); i2cset -y $BUS $ADDRESS $(($nibb+$INST_SET)) $(($nibb+$INST_SEND))
    nibb=$(($data%0x10*0x10)); i2cset -y $BUS $ADDRESS $(($nibb+$INST_SET)) $(($nibb+$INST_SEND))
  fi
  if [ $1 == "C" ]; then
    data=$(printf "0x%02x" "'$2")
    nibb=$(($data/0x10*0x10)); i2cset -y $BUS $ADDRESS $(($nibb+$CHAR_SET)) $(($nibb+$CHAR_SEND))
    nibb=$(($data%0x10*0x10)); i2cset -y $BUS $ADDRESS $(($nibb+$CHAR_SET)) $(($nibb+$CHAR_SEND))
  fi
}

func_row_col() # esta función posiciona el cursor tanto en pantallas de 2x16 como de 4x20
{
  local base ;
  if [ $1 == 0 ]; then base=0x00; fi
  if [ $1 == 1 ]; then base=0x40; fi
  if [ $1 == 2 ]; then base=0x14; fi
  if [ $1 == 3 ]; then base=0x54; fi
  func_LCD I $((0x80+$base+$2))
}

func_print_string() # escribir una cadena
{
  local i=0
  while [ $i -lt ${#1} ]; do
    func_LCD C "${1:$i:1}"
    let i++
  done
}

# SCRIPT
if [ "$#" -eq 0 ]; then
  printf "\n  lcd_write ver. 1.01 2016 :p raphik\n"
  printf "Sintaxis 1: lcd_write <init>\n"
  printf "Sintaxis 2: lcd_write <fila> <columna> <texto>\n\n"
  return
fi

  BUS=0
  ADDRESS=0x3F
  INST_SET=0x0C
  INST_SEND=0x08
  CHAR_SET=0x0D
  CHAR_SEND=0x09

if [ $1 == "init" ]; then
  func_init
  return
fi

func_row_col $1 $2
func_print_string "$3"
return
# SCRIPT

Un ejemplo de uso del script: visualizar el porcentaje de calidad del enlace wifi.
Código: [Seleccionar]
./lcd_write.sh init
./lcd_write.sh 0 2 "Quality Link"
./lcd_write.sh 1 5 "$(cat /proc/net/wireless | awk 'NR==3 {printf "%0.2f %% \n", $3/70*100}')"

(http://i.imgur.com/POGMwhR.jpg)

Saludos.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Tki2000 en 25-04-2016, 12:41 (Lunes)
¡¡¡Buen aporte raphik!!!.
Le pongo chincheto unos días, y lo incorporo al índice de hilos relevantes...

 >:( >:( >:(
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 26-04-2016, 19:30 (Martes)
jejeje

Impresionante!!!

No hay nada como el saber...   >:(  >:(  >:(
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: edudi en 27-04-2016, 01:53 (Miércoles)
Yo alucino, esto de los proyectos con los GPIO'S está siendo exponencial, ...pedazo de aportazo. Para mi al menos acabas de abrir nuevos horizontes (la pantalla LCD), ....y q pa colmo q con 2 GPIO's controlar 64 relés, elimina limitaciones x completo en ese ámbito.

Lo has descrito y documentado magníficamente, con sus fotos, códigos, vaya, todo hecho. Remesa de sombreros.

 >:(    ¡¡¡Enhorabuena!!!    >:(


Aprovecho para preguntar: ¿Es posible de alguna forma dotar a los routers con OpenWRT de entrada y salida de audio? Vaya, una tarjeta de sonido de alguna forma (la cual desconozco) para funciones básicas: grabar sonidos u oír en directo por un micrófono (me parece más fácil esto, pero no sé si es posible) y/o el hecho de q le conectemos un speaker de PC (para pitidos o sonidos de baja calidad) o si se pudiera adaptar un Jack para conectarle unos altavoces..... Es algo q se me ha pasado x la cabeza hace un mes, ... ¿se os ocurre si es posible con alguna interfaz intermedia? En vista de lo conseguido x raphik, ya no veo sino la falta de conocimientos o la limitación de la imaginación, q suele estar ahí.

Hacéis q esto esté cogiendo formas y opciones muy superiores a Raspberry, Arduino, etc ... Sobretodo a nivel reutilización y a el bajo coste. Ya los routers cuentan con muchas interfaces extras: WiFi, Repetidor WiFi, 7 USB's en el caso del HG556a, etc ...

Saludos a todos
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Tki2000 en 27-04-2016, 08:12 (Miércoles)
Yo alucino, esto de los proyectos con los GPIO'S está siendo exponencial, ...pedazo de aportazo. Para mi al menos acabas de abrir nuevos horizontes (la pantalla LCD), ....y q pa colmo q con 2 GPIO's controlar 64 relés, elimina limitaciones x completo en ese ámbito.

Lo has descrito y documentado magníficamente, con sus fotos, códigos, vaya, todo hecho. Remesa de sombreros.

 >:(    ¡¡¡Enhorabuena!!!    >:(


Aprovecho para preguntar: ¿Es posible de alguna forma dotar a los routers con OpenWRT de entrada y salida de audio? Vaya, una tarjeta de sonido de alguna forma (la cual desconozco) para funciones básicas: grabar sonidos u oír en directo por un micrófono (me parece más fácil esto, pero no sé si es posible) y/o el hecho de q le conectemos un speaker de PC (para pitidos o sonidos de baja calidad) o si se pudiera adaptar un Jack para conectarle unos altavoces..... Es algo q se me ha pasado x la cabeza hace un mes, ... ¿se os ocurre si es posible con alguna interfaz intermedia? En vista de lo conseguido x raphik, ya no veo sino la falta de conocimientos o la limitación de la imaginación, q suele estar ahí.

Hacéis q esto esté cogiendo formas y opciones muy superiores a Raspberry, Arduino, etc ... Sobretodo a nivel reutilización y a el bajo coste. Ya los routers cuentan con muchas interfaces extras: WiFi, Repetidor WiFi, 7 USB's en el caso del HG556a, etc ...

Saludos a todos

Este hilo tiene ya bastante tiempo, y está en los hilos relevantes :  [Tutorial] Receptor de radio Wi-Fi con OpenWrt  (https://foro.seguridadwireless.net/openwrt/tutorial-music-player-daemon-en-hg556a/)
Yo he conseguido con éxito poner una SoundBlaster externa. Con respecto a lo del micrófono y grabar, ya no sabría decirte si es posible. Supongo que sí.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 27-04-2016, 12:45 (Miércoles)
¡Gracias por vuestros comentarios!

El bus I²C de Philips se diseñó para facilitar la comunicación entre componentes alojados en televisores y reproductores de DVD. Está claro que también se puede utilizar para conectar dispositivos por cable. Pero... ¿implementa un protocolo fiable? Me refiero a si es o no es redundante, a si detecta y corrige o no errores de transmisión... Supongo que para ponerle una pantallita al router está bien, pero no sabría deciros si es prudente utilizarlo en proyectos más críticos.

Saludos.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Tki2000 en 27-04-2016, 14:33 (Miércoles)
¡Gracias por vuestros comentarios!

El bus I²C de Philips se diseñó para facilitar la comunicación entre componentes alojados en televisores y reproductores de DVD. Está claro que también se puede utilizar para conectar dispositivos por cable. Pero... ¿implementa un protocolo fiable? Me refiero a si es o no es redundante, a si detecta y corrige o no errores de transmisión... Supongo que para ponerle una pantallita al router está bien, pero no sabría deciros si es prudente utilizarlo en proyectos más críticos.

Saludos.

Que yo sepa no tiene corrección de errores, y el protocolo es más complejo que el SPI, por lo tanto los errores son más difíciles de identificar y recuperar. Una máquina de estados, para el protocolo I2C a bajo nivel, tiene más estados que una SPI. Yo utilizaría ese protocolo para leer sensores y transferir algún que otro byte, pero poca cosa más. Para una pantalla LCD viene fenomenal.

Por hacer un poco el friki...:

La salida VGA de las tarjetas gráficas comunican el DDC por el protocolo I2C.
Podemos transformar la salida I2C en un dispositivo GPIO, para hacerlo más interesante:
http://flipthatbit.net/2011/04/interfacing-i2c-the-easy-way/ (http://flipthatbit.net/2011/04/interfacing-i2c-the-easy-way/)
http://hackaday.com/2014/06/18/i2c-from-your-vga-port/ (http://hackaday.com/2014/06/18/i2c-from-your-vga-port/)
http://blog.atx.name/twilight-vga-i2c-breakout-board/ (http://blog.atx.name/twilight-vga-i2c-breakout-board/)

Si en lugar de la VGA utilizamos nuestro router, mejor, ¿no?...  ;D
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 27-04-2016, 18:37 (Miércoles)
El problema de SPI es que no admite direccionamiento por software: cuando hay más de un dispositivo esclavo hay que ensanchar el bus una línea por dispositivo.
(http://i.imgur.com/DYYepH6.png)

Desconozco el bus CAN, de Bosch. Se utiliza en automoción, así que presumiblemente es fiable. Por lo que parece está soportado por OpenWrt.
(http://i.imgur.com/AXKYLKr.png)

Tampoco conozco el 1-wire, de Dallas Semiconductor. También parece soportado por OpenWrt.
(http://i.imgur.com/QjwHJT7.png)

¡Qué bueno lo de las VGA! Gracias por compartirlo.

Saludos.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Tki2000 en 27-04-2016, 19:16 (Miércoles)
El problema de SPI es que no admite direccionamiento por software: cuando hay más de un dispositivo esclavo hay que ensanchar el bus una línea por dispositivo.
Por eso es más sencillo implementarlo a bajo nivel. Cuantas menos líneas utilicemos, más complejo es el protocolo.
De todas formas, con dos dispositivos SPI, podemos utilizar los que queramos. Utilizamos el primer dispositivo SPI para hacer de demultiplexador y hacer el Slave Select del dispositivo final que queramos (si transmitimos un 4 al demultiplexador, seleccionará el Slave Select 4), y el segundo dispositivo SPI, para transmitir los datos directamente al dispositivo que hayamos selccionado antes (en este caso al dispositivo 4)..., si lo utilizas bien, no necesitamos más de 5 líneas para manejar los dispositivos que queramos..., incluso si me apuras, 4.

Haciéndome más el friki, algunas tarjetas de red PCI, e incluso algunas gráficas nVidia, podemos utilizarlas como programadoras de memoria SPI.  ;D
https://www.flashrom.org/Supported_hardware#PCI_Devices (https://www.flashrom.org/Supported_hardware#PCI_Devices)
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 28-04-2016, 13:31 (Jueves)
@ eludi https://foro.seguridadwireless.net/openwrt/te-habla-tu-router/

Saludos.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: edudi en 30-04-2016, 16:44 (Sábado)
@ eludi https://foro.seguridadwireless.net/openwrt/te-habla-tu-router/

Saludos.

Yosss, que bueno, me acabas de dar la solución al proyecto que tengo entre manos con esto de que "hable el Router":

Quiero montar un sistema de videovigilancia con 2 webcams con detección de movimiento (con el Motion y unas PS2 y PS3 EyeToy ya probadas), unos altavoces a modo de mensajes de voz para asustar, jajaja, un Zumbador (altavoz de alarma) activado por 1 GPIO y si el micro también me funciona mejor que mejor, todo esto visionable y controlable desde fuera de casa con el móvil y teniendo avisos por correo, y en breve por wasap (va a salir una SIM de no sé que compañía en Sept. que es gratuita con 200MB y 200 minutos de voz "suficiente para este uso". Si quieres más hay que pagar, pero imagino que serán precios competitivos a más no poder). ¿Quien regala a día de hoy un 2º número de Tlfno con 200 MB y 200 minutos de voz?

La parte del micro me es bastante vital para poder oir también lo que hay en el ambiente (ya que estoy fuera de la finca 6 días) o para si se detectan sonidos bruscos o cambiantes dentro de la casa: se activaría mediante una programación básica a modo de "sonido sospechoso" y guarde esos momentos, los cuales se suben a un FTP. Por último trataría de que fuera en streaming el audio IN del micro, para si quiero ver las cámaras en algún momento en concreto y oir tb el sonido si lo deseo ...puede parecer una bobería, pero no lo es en mi caso al menos. No hay nada como saber cuando está pasando el camión del pescado o el de los helados, jeje. No ahora en serio, mi familia tiene una cueva en el sur que no vamos sino los fines de semana, con sus 2 placas solares, 2 bancos de baterías y sus reguladores (las baterías son AGM y GEL de ahí que sean 2 circuitos independientes) y todo está orientado a ese fin (la única pega que le veo es que se conecta a la wifi del pueblo "que es libre y gratuita" y no sé como acceder a los puertos para acceder/manejar todo esto, ...aun no he indagado sobre esto de los puertos aquí).

También como extra quiero añadir el uso de unos sensores infrarrojos (si alguien pasa/corta activa la alarma) y ultrasonidos (para cambios o movimientos en el habitáculo). Tengo los esquemas, archivos de los circuitos impresos y componentes de las PCB's dando un 1 ó un 0 probadas y funcionando, tendría que volver a imprimirlas y comprar sus componentes o buscar algo en China semejante (lo hicimos en el proyecto de fin de ciclo), los cuales irían como entradas a 2 GPIO's para aumentar el número de sistemas de seguridad.

Bueno, más que agradecido de todos estos aportes. Saludos a todos, sois muy buenos tanto en lo que hacéis como en lo que compartís. Si alguien necesita los esquemas de las PCB's para los ultrasonidos e infrarrojos que lo diga y lo subo aquí, eso si son a escala muy pequeña, pero bueno, todo es escalable.


PD: raphik, ....soy edudi no eludi, jajaj....me sentí eludido.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 01-05-2016, 21:41 (Domingo)
@ eludi https://foro.seguridadwireless.net/openwrt/te-habla-tu-router/

Saludos.

Yosss, que bueno, me acabas de dar la solución al proyecto que tengo entre manos con esto de que "hable el Router":

Quiero montar un sistema de videovigilancia con 2 webcams con detección de movimiento (con el Motion y unas PS2 y PS3 EyeToy ya probadas), unos altavoces a modo de mensajes de voz para asustar, jajaja, un Zumbador (altavoz de alarma) activado por 1 GPIO y si el micro también me funciona mejor que mejor, todo esto visionable y controlable desde fuera de casa con el móvil y teniendo avisos por correo, y en breve por wasap (va a salir una SIM de no sé que compañía en Sept. que es gratuita con 200MB y 200 minutos de voz "suficiente para este uso". Si quieres más hay que pagar, pero imagino que serán precios competitivos a más no poder). ¿Quien regala a día de hoy un 2º número de Tlfno con 200 MB y 200 minutos de voz?

La parte del micro me es bastante vital para poder oir también lo que hay en el ambiente (ya que estoy fuera de la finca 6 días) o para si se detectan sonidos bruscos o cambiantes dentro de la casa: se activaría mediante una programación básica a modo de "sonido sospechoso" y guarde esos momentos, los cuales se suben a un FTP. Por último trataría de que fuera en streaming el audio IN del micro, para si quiero ver las cámaras en algún momento en concreto y oir tb el sonido si lo deseo ...puede parecer una bobería, pero no lo es en mi caso al menos. No hay nada como saber cuando está pasando el camión del pescado o el de los helados, jeje. No ahora en serio, mi familia tiene una cueva en el sur que no vamos sino los fines de semana, con sus 2 placas solares, 2 bancos de baterías y sus reguladores (las baterías son AGM y GEL de ahí que sean 2 circuitos independientes) y todo está orientado a ese fin (la única pega que le veo es que se conecta a la wifi del pueblo "que es libre y gratuita" y no sé como acceder a los puertos para acceder/manejar todo esto, ...aun no he indagado sobre esto de los puertos aquí).

También como extra quiero añadir el uso de unos sensores infrarrojos (si alguien pasa/corta activa la alarma) y ultrasonidos (para cambios o movimientos en el habitáculo). Tengo los esquemas, archivos de los circuitos impresos y componentes de las PCB's dando un 1 ó un 0 probadas y funcionando, tendría que volver a imprimirlas y comprar sus componentes o buscar algo en China semejante (lo hicimos en el proyecto de fin de ciclo), los cuales irían como entradas a 2 GPIO's para aumentar el número de sistemas de seguridad.

Bueno, más que agradecido de todos estos aportes. Saludos a todos, sois muy buenos tanto en lo que hacéis como en lo que compartís. Si alguien necesita los esquemas de las PCB's para los ultrasonidos e infrarrojos que lo diga y lo subo aquí, eso si son a escala muy pequeña, pero bueno, todo es escalable.


PD: raphik, ....soy edudi no eludi, jajaj....me sentí eludido.

Hola edudi...

Con este programa (https://downloads.openwrt.org/barrier_breaker/14.07/brcm63xx/generic/packages/oldpackages/listener_1.7.2-1_brcm63xx.ipk) , puedes estar a la escucha desde una tarjeta de sonido con entrada de micrófono se encuentra en los repositorios de oldpackages en BB.

Si quieres pruébalo y dinos como va...
Código: [Seleccionar]
opkg update
opkg install http://downloads.openwrt.org/barrier_breaker/14.07/brcm63xx/generic/packages/oldpackages/listener_1.7.2-1_brcm63xx.ipk

 ;)
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: edudi en 02-05-2016, 00:35 (Lunes)

Hola edudi...

Con este programa (https://downloads.openwrt.org/barrier_breaker/14.07/brcm63xx/generic/packages/oldpackages/listener_1.7.2-1_brcm63xx.ipk) , puedes estar a la escucha desde una tarjeta de sonido con entrada de micrófono se encuentra en los repositorios de oldpackages en BB.

Si quieres pruébalo y dinos como va...
Código: [Seleccionar]
opkg update
opkg install http://downloads.openwrt.org/barrier_breaker/14.07/brcm63xx/generic/packages/oldpackages/listener_1.7.2-1_brcm63xx.ipk

 ;)


Buenas, ....ya quisiera yo tener la suerte de tener aquí y ahora una tarjeta de sonido USB para hacerlo, pero no es el caso.

¿Alguien que tenga una tarjeta de sonido/pincho USB podría probar esto que comenta Fitch?

Instalar    listener    1.7.2-1    This program listens for sound. If it detects any, it starts recording automatically and also automatically stops when things become silent again.

Es como el Motion (webcams - detección de movimiento) pero para micrófono, muy curioso. La opción automatizada para grabar si hay un sonido está hecha, ....el oir en streaming es un poco ambioso, no me corre prisa. De todas formas desde que pueda la instalo en un 14.07 que ahora mismo el que tengo es un snapshots/trunk y las dependencias me están matando todo el rato. Más que nada por ver el archivo de configuración, capaz que tiene la opción de streaming, no me sorprendería la verdad. Si alguien lo instala, podría publicarlo aquí? Y si no es aquí, en este otro Post donde habla y usa explícitamente una tarjeta de sonido como salida de audio:

https://foro.seguridadwireless.net/openwrt/te-habla-tu-router/ (https://foro.seguridadwireless.net/openwrt/te-habla-tu-router/)


También me surje la duda de qué pincho USB de sonido comprar (como las publicadas aquí) x si será reconocida y manejable,,,vaya que no exista el driver OpenWRT para la misma. Entiendo que para las sound blaster USB sea más normal que si, pero las publicadas aquí, ...sería o al igual me equivoco, casi como tirar barro a la pared: comprar, rezar y si hay suerte poder trabajar con ella porque está soportada.


Gracias por el aporte !!


PD: Disculpen que se me estén cruzando un poco los post unos con otros con respecto a los GPIO's, pero mi proyecto abarca un par de cosas que están en 3 post... sorry
Título: Re:
Publicado por: Ficht en 02-05-2016, 00:44 (Lunes)
El precio está sobre el euro x tarjeta...
El programa es válido par trunk también... (Probado)
Ahora tengo mucho lío y no tengo casi tiempo para hacer un tuto... Pruebalo sin miedo... Jajaja.

Enviado desde mi Y635-L01 mediante Tapatalk

Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 10-08-2017, 21:32 (Jueves)
Hola, esto mola mucho !!!

Me está picando el gusanillo para intentar montar la pantallita esta. Tengo unas dudas...

1) Lo de los puertos GPIO.... apenas lo conozco... según tengo entendido son una especie de puntos que dan voltaje o pueden emitir o recibir datos... ¿correcto?

2) Lo de la pantalla LCD.... he visto en ebay que algunas van tal cual y otras llevan una tarjetita electrónica "adaptador IIC/I2C".... eso no está explicado, por lo que pregunto: ¿hace falta el adaptador ese?
En las fotos parece que sí sale, que es donde se conectan los cambles que luego se sueldan a la placa del router. En ese caso.... ¿cómo se comunica ese adaptador con la pantallita LCD...?

¿Esto me valdría? (Aquí viene la pantallita y el adaptador):
http://www.ebay.es/itm/LCD-1602-Pantalla-AZUL-adaptador-IIC-I2C-compatible-arduino-Display-P0021-/201612141571?hash=item2ef1052403:g:8T8AAOSwbYZXcOM~


Como router voy a utilizar el mismo que usas aquí, raphik, para copiar tu procedimiento y hacerlo más fácil.

Gracias.

EDITO: Ok, acabo de ver que por lo visto se comunica por los pines que tiene arriba..., ya que he visto otra versión que venden con el adaptador ya soldado, que supongo que será el que usa raphik. Me pillo entonces el que viene ya soldado:
http://www.ebay.es/itm/Pantalla-LCD-1602-AZUL-IIC-I2C-Pines-Soldados-arduino-Display-P0010-/201517724201?hash=item2eeb647229:g:iakAAOSwe7BWuadX
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 11-08-2017, 10:17 (Viernes)
Hola, peperfus.

Respondo a tus dudas.

1) Veo que lo has pillado: los puertos GPIO (General Purpose Input/Output) son unas patillas o contactos (pines, en la jerga) que tienen los procesadores para comunicarse con el exterior. En este proyecto se controla una pantalla LCD -dotada de expansor I²C- mediante dos GPIOs libres que el router no uliliza.

2) Mira la foto de debajo. Típicamente, el manejo de una pantalla LCD se hace a través de los pines RS, RW, E, P4, P5, P6 y P7. Manejar una pantalla LCD directamente desde el router supondría la utilización de 7 GPIOs. ¡Demasiadas!
(http://i.imgur.com/gFdFOAA.jpg)

Afortunadamente, existe el protocolo I²C y los expansores de bus, que permiten manejar hasta 8 pines con tan sólo 2 GPIOs. Los módulos LCD pueden comprarse sueltos o con expansores ya soldados, lo que simplifica enormemente su conexión. El que se utiliza en este proyecto es de los que trae el expansor.
(http://i.imgur.com/LqI0com.jpg)

Copio y pego del primer post:
Citar
Por la parte de detrás de la pantalla hay un expansor de bus I²C, un Philips PCF8574T, que permite su conexión con el router con sólo cuatro cables (GND, VCC, SDA y SCL).
Dos de los cables (GND y VCC) son para dar energía eléctrica al conjunto y los otros dos (SDA y SCL) para su manejo mediante conexión a sendas GPIOs libres del router.

En relación a la compra, la mía me costó una pasta en Banggood, pero luego las he visto más baratas en otros sitios. En fin, no siempre se da con el chollo.
https://es.aliexpress.com/store/product/LCD1602-I2C-LCD-1602-module-Blue-screen-PCF8574-IIC-I2C-for-arduino-LCD1602-Adapter-plate/221555_32820779011.html

Saludos.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 15-08-2017, 11:34 (Martes)
Gracias por las respuestas.
Ya lo tengo casitodo bastante claro. Las pantallas las tengo encargadas (me he pedido 2) y tengo un 5387 aquí y otro de camino también. Lo he pedido todo por duplicado por si me cargo alguno, o si los dos me quedan bien, pues olé, jejeje.

La mayor dificultad va a ser la soldadura. Veo que los GPIOS son puntos muy pequeños y me da un pelín de pánico soldar un cable ahí. ¿Podrías explicar brevemente los pasos?
He soldado cable con cable, eso es lo más fácil del mundo, pero soldar un cable a un punto tan enano no sé cómo hacerlo. Voy a suponer que:

1) Se estaña el cable.
y 2) se aplica el soldador al punto y enseguida se toca con el cable el punto.

¿Es así? ¿Es necesario flux?
GRACIAS
Igual me animo hoy a intentarlo.

--------------------------------
Edito (añado):

Joder, que bajón... acabo de abrir el router para ver la placa y los GPIOs.... y no son pequeños... son diminutos. Esto para mí va a ser enormemente difícil  :-\
Y eso que tengo estación de soldadura con varias puntas, y 3er brazo con lupa...
En fin; ya veremos, pero lo dicho... más que soldar un cable ahí, parece que lo que haya que soldar sea un hilo finito y para soldarlo.... vaya tela.

Raphik, por favor, consejos. Aún soy virgen  ^-^ en este tipo de soldadura.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 15-08-2017, 13:44 (Martes)
Gracias por las respuestas.
Ya lo tengo casitodo bastante claro. Las pantallas las tengo encargadas (me he pedido 2) y tengo un 5387 aquí y otro de camino también. Lo he pedido todo por duplicado por si me cargo alguno, o si los dos me quedan bien, pues olé, jejeje.

La mayor dificultad va a ser la soldadura. Veo que los GPIOS son puntos muy pequeños y me da un pelín de pánico soldar un cable ahí. ¿Podrías explicar brevemente los pasos?
He soldado cable con cable, eso es lo más fácil del mundo, pero soldar un cable a un punto tan enano no sé cómo hacerlo. Voy a suponer que:

1) Se estaña el cable.
y 2) se aplica el soldador al punto y enseguida se toca con el cable el punto.

¿Es así? ¿Es necesario flux?
GRACIAS
Igual me animo hoy a intentarlo.

--------------------------------
Edito (añado):

Joder, que bajón... acabo de abrir el router para ver la placa y los GPIOs.... y no son pequeños... son diminutos. Esto para mí va a ser enormemente difícil  :-\
Y eso que tengo estación de soldadura con varias puntas, y 3er brazo con lupa...
En fin; ya veremos, pero lo dicho... más que soldar un cable ahí, parece que lo que haya que soldar sea un hilo finito y para soldarlo.... vaya tela.

Raphik, por favor, consejos. Aún soy virgen  ^-^ en este tipo de soldadura.

Ánimo, se puede soldar.

Un puequeño truco, igual que pre-estañas la punta del cable, yo también pre-estaño el punto donde está el GPIO, de manera que si es muy pequeño, lo convierto en mas grandesillo, y así con un toque del soldador al cable encima del punto, ya queda fijado, acto seguido, enruto el cable y lo pego a la placa con silicona térmica para que no estire del punto, pues pudiera arrancar la pista o el punto de cobre del circuito impreso.
El soldador, tengo uno destinado a esto, con la punta limada y preparada para estas dimensiones, de tal manera que es un 25% mas delgado que la patilla de un chip del router, a todo esto, este soldador es de baja temperatura.

Cada uno tiene sus trucos  y mañas, pero bueno, espero que algo de esto te sirva.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 17-08-2017, 06:44 (Jueves)
... Veo que los GPIOS son puntos muy pequeños y me da un pelín de pánico soldar un cable ahí. ¿Podrías explicar brevemente los pasos?...Raphik, por favor, consejos...

Sí que son pequeños. Por eso, como dice Fitch, el estañado previo del cable y del punto de soldadura por separado es fundamental. El estaño que yo utilizo es el que generalmente se adquiere en tiendas de suministros electrónicos, que ya incorpora fundente. No utilizo flux.

La técnica que utilizo para estañar el cable es la misma que para la placa de circuito impreso.
1º calentar el cobre con el soldador.
2º fundir el es estaño sobre el cobre. Nunca sobre el soldador. Se trata de que el estaño se adhiera al cobre, por eso hay que aproximar la varilla de estaño al cobre, que debe estar lo suficientemente caliente para que funda.

(http://www.profesormolina.com.ar/electronica/soldadura/imagen/image7.jpg)
Imagen tomada sin permiso de su autor de la página http://www.profesormolina.com.ar/electronica/soldadura/soldadura.htm

Hay que tener en cuenta:
- en el caso del cable, es conveniente calentar la punta del cable, para evitar que se funda la funda aislante.
- en el caso de la placa, hay que procurar no calentarla más de lo necesario para evitar que se desprenda la pista de cobre. Lo ideal sería poder controlar la temperatura del soldador. Mi soldador no tiene control de temperatura y lo hago a ojímetro. Alguna vez me he cargado la placa de cobre por sobrecalentamiento, sobre todo las antiguas de baquelita.

Una vez estañados por separado los dos elementos (cable y placa),
1º colocar el cable sobre la placa ejerciendo una suave presión. Se trata de mantener lo más fija posible la posición del cable sobre la placa, sin que se mueva.
2º acercar el soldador al punto de unión cable-placa hasta que el estaño se funda y la unión quede firme. Suele bastar con el estaño que ya tienen el cable y la placa, sin que sea necesario un aporte extra.

Antes de ponerte con el router, es recomendable que practiques con alguna placa de desecho que tengas por ahí.

Saludos y buena suerte.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 03-09-2017, 13:23 (Domingo)
Hola, de momento voy a intentarlo con pegamento conductor; a ver que tal va.

Después de haber pegado los cables a los puntos, consigo esto:
(https://s26.postimg.org/anxounqph/lcd.jpg) (https://postimg.org/image/anxounqph/)

Pero no se ven los cuadraditos en la pantalla, ni si quiera ajustando el contraste...

¿Podrías desconectar tus cables de SDA y SCL de tu pantallita y decirme si se ven los cuadraditos sin esos cables?

Gracias

Edito: Bueno, ajustando el contraste al máximo y fijándose bien en la pantalla, parece que sí se aprecian, pero con una intensidad tan débil que son casi invisibles...
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 03-09-2017, 15:53 (Domingo)
TEST de tensión de cada GPIO:

(Las imágenes se pueden ampliar pinchando sobre ellas)

Alimentación (R66 + TIERRA (GND)): (Obtengo 5V)  >:(
(https://s26.postimg.org/4iaxvvyt1/Alimientacion_5_V.jpg) (https://postimg.org/image/4iaxvvyt1/)


Cable BLANCO (R107=GPIO9=SDA) + TIERRA (GND): Obtengo 3,23 V  ??? :( (¿es demasiado bajo?) (Edito: después de retocar y mejorar el contacto, ya consigo 3,3V)
(https://s26.postimg.org/mmdygiwhh/BLANCO_NEG_3_2_V.jpg) (https://postimg.org/image/mmdygiwhh/)

Cable MARRÓN (R109=GPIO10=SCL) + TIERRA (GND): Obtengo 3,26 ... 3,27 V  ???  :( (Edito: aquí también he logrado los 3,3V)
(https://s26.postimg.org/449lwaeph/MARRON_NEG_3_2_V.jpg) (https://postimg.org/image/449lwaeph/)

¿Son estos voltajes correctos?
En caso afirmativo.... ¿Alguna idea de qué puede estar pasando en la pantalla para no nconseguir ver los 16 cuadritos...? ¿Puede ser culpa de la baja tensión de los SDA y SCL? (aunque me parece raro, porqye yo creo que debería ser por alimentación...)
Las mediciones están hechas pinchando sobre el pegamento conductor, que cubre completamente los puntos GPIOs de la placa. Si estas tensiones son correctas, o al menos aceptables, el experimento este del pegamento conductor lo daré por concluido como éxito rotundo.

(Por si alguien tiene curiosidad, los pegotes amarillos son plastilina, que la utilizo para que los cables se queden quietecitos y se porten bien  ;D)

Como siempre y por supuesto, mil gracias.

PD: Estoy siguiendo el tutorial a ver qué consigo. De momento, en la parte de firmware, averiguar la base de los GPIO, donde a ti te sale 489, a mí me da 0,  :-\ Es un valor muy raro, no?  ???

Por cierto, otra pregunta: ¿Para qué sirve el jumper que hay en el controlador?
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 03-09-2017, 17:24 (Domingo)
Al intentar esto, obtengo...

(https://s26.postimg.org/rxtbklzi1/error_gpiocustom.png)
Y lo mismo con el otro kmod...

Y al reiniciar el router,
ls /dev/i2c*
no me encuentra nada.

PD: Mi open en este router es el: BARRIER BREAKER (14.07, r42625)
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 04-09-2017, 02:13 (Lunes)
Ok, he conseguido avanzar.
Actualizando a Chaos Calmer.

Citar
root@OpenWrt:~# dmesg | grep -E 'i2c|I2C'
[   13.520000] i2c /dev entries driver
[   13.540000] Custom GPIO-based I2C driver version 0.1.1
[   13.544000] i2c-gpio i2c-gpio.0: using pins 489 (SDA) and 490 (SCL)

Citar
root@OpenWrt:~# ls /dev/i2c*
/dev/i2c-0

Todo va genial, igual que tu tutorial, mismos datos, todo igual.... base 480...
hasta que:
Citar
root@OpenWrt:~# i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
:'(

Ok, mira, después de hacer esto:
Citar
echo "489" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio489/direction
echo "490" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio490/direction

Citar
root@OpenWrt:~# ls /sys/class/gpio/
export       gpio489      gpio490      gpiochip480  unexport
Ahí están.

Pero después de reiniciar...
Citar
root@OpenWrt:~# ls /sys/class/gpio/
export       gpiochip480  unexport
Desaparecen.
Y si vuelvo a hacer los echos de export y direction, me dice:
Citar
write error: Device or resource busy

¡ Vamos, que ya falta poco !  ;D
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 04-09-2017, 15:10 (Lunes)
Si lo pruebo con LEDE:
Me atasco en:

Citar
Unknown package 'libi2c'.
Collected errors:
 * pkg_hash_fetch_best_installation_candidate: Packages for libi2c found, but in                                                                                        compatible with the architectures configured
 * opkg_install_cmd: Cannot install package libi2c.
(y las i2ctools, lo mismo)
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 05-09-2017, 00:16 (Martes)
Limpiando y retocando la unión de los cables con los gpios... he conseguido los 3,3 V en ambos, por lo que ahora la conexión eléctrica, deduzco que es prácticamente perfecta.
Sin embargo, sigue sin detectarme el i2c.
Si no encuentro solución, como tengo otro router igual (5387un) y otra pantallita también igual, lo intentaré con el otro, pero esta vez soldando (ya tengo estaño de 0,5 pedido) y a ver qué pasa.

raphik... ¿estás ahí? ¿me lees? ¿soy muy pesado  ^-^?  ;D ;D

¿No hay nada que se te haya escapado en el tutorial, o algún error, algún olvido...?
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 05-09-2017, 00:21 (Martes)
Sí, hoy estoy conectado y te estoy leyendo.

Para ajustar la pantalla no hace falta conectar los cables SDA y SCL. Lo único que hay que hacer es girar con un destornillador la parte blanca central del potenciómetro azul hasta que se vean bien los cuadritos.
(http://i.imgur.com/G23Bstn.png)

Los voltajes SDA/SCL deben rondar los 3.3V. Las tensiones que obtienes de 3.23 y 3.27 son perfectas. Por ahí, ningún problema.

El jumper "LED" retro-ilumina la pantalla. Si lo quitas, el LED de la pantalla se apaga. Supongo que en algún caso podría venir bien para conecta un pulsador que permita encender la pantalla justo cuando haya que hacer una lectura y el resto del tiempo mantenerla apagada.
(http://i.imgur.com/puu8ZOy.png)
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 05-09-2017, 00:30 (Martes)
¿Has comprobado si los GPIOs funcionan bien?

Si tecleas en la consola
echo "1" > /sys/class/gpio/gpio489/value
deberías obtener un valor próximo a los 3.3V en el contacto SDA (GPIO9)

Para poner SDA a 0V, tecleas
echo "0" > /sys/class/gpio/gpio489/value

Lo mismo para SCL
echo "1" > /sys/class/gpio/gpio490/value  => pone GPIO10 a 3.3V
echo "0" > /sys/class/gpio/gpio490/value  => pone GPIO10 a 0V
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 05-09-2017, 00:37 (Martes)
Gracias por la respuesta...

No van. En todos los casos obtengo 3,3V.  :-\

(Además, tengo que hacerlo antes de reiniciar, porque en cuanto reinicio....)

root@OpenWrt:~# echo "0" > /sys/class/gpio/gpio490/value
-ash: can't create /sys/class/gpio/gpio490/value: nonexistent directory
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 05-09-2017, 00:46 (Martes)
¿Quieres decir que los GPIOS están dañados?

La primera vez que lo intenté, lo hice con el soldador, ..... ¿lo habré quemado o algo por el estilo?

Estoy viendo en el hilo de gpios que hay más...
Voy a probar a usar otro entonces, no? ¿Puedo usar cualquiera?

Al final, lo que voy a hacer es.... ya que tengo otro router igual, lo volveré a intentar con el otro, que es "virgen", pero esta vez, lo haré directamente con el pegamento conductor. Esta noche me pondré con ello y mañana, que ya estará seco, haré las conexiones y las pruebas. Volveré con los resultados.
Si vuelve a fallar, pillaré otro router y esa vez ya sí lo haré con un buen soldador de punta fina, estaño de 0,5 (el que tengo ahora es de 1), una visera con lupa y luz y coraje.  >:D
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Tki2000 en 05-09-2017, 14:17 (Martes)
Algunas veces el bus I2C, necesita tener las señales con resistencias pullups a 3.3v.
¿Has probado a ponerlas?

Edito.
Aquí puedes ver un ejemplo. Es para 5v, pero tú necesitarías 3.3v: http://www.robot-electronics.co.uk/i2c-tutorial (http://www.robot-electronics.co.uk/i2c-tutorial)

Edito 2.
Algunas pantallas LCD necesitan un reset por software, antes de que presenten nada en pantalla. En tu caso, el bus I2C ni siquiera detecta el LCD, por lo que me inclino a pensar lo de las resistencias.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 05-09-2017, 16:20 (Martes)
Algunas veces el bus I2C, necesita tener las señales con resistencias pullups a 3.3v.
¿Has probado a ponerlas?

Edito.
Aquí puedes ver un ejemplo. Es para 5v, pero tú necesitarías 3.3v: http://www.robot-electronics.co.uk/i2c-tutorial (http://www.robot-electronics.co.uk/i2c-tutorial)
...

Gracias por arrojar luz y perdón por la ignorancia.  :-[ Esto de los GPIOS es totalmente para mí, pero me llamó mucho la atención y el interés cuando vi que se le podía poner una pantallita al router para mostrar información...

Voy a leerme el tuto que has puesto, que tiene muy buena pinta y cuando avance algo, comento.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: seny en 05-09-2017, 19:52 (Martes)
..
(Además, tengo que hacerlo antes de reiniciar, porque en cuanto reinicio....)
..
Hola, En cada reinicio hay que exportar y declarar la dirección de los gpio, no queda guardado, lo que yo hago es incluir los comandos en /etc/rc.local
Saludos
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 05-09-2017, 20:47 (Martes)
Ya, pero es que ni siquiera me deja volver a exportarlos y declararlos. Me da el error de resource busy.

raphik, seny.... ¿vosotros habéis usado resistencias pull-up?

En caso afirmativo, ¿de qué valor/es? y ¿conectadas de dónde a dónde?

Me imagino que raphik, las habrás usado de cada línea (SDA y SCL) a VCC (5V en tu caso)...

Es lo que voy a probar. Voy a pillar unas de 1800 Ohm, como recomienda el tutorial comentado por Tki2000 (http://www.robot-electronics.co.uk/i2c-tutorial). Por cierto.... ¿con las de 1/4 de watio es suficiente? (Creo que eso se refiere a la cantidad de electricidad que soportan, ¿correcto? De electrónica no controlo)
 Y las colocaré entre SDA y 5V y SCL y 5V respectivamente.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: danitool en 05-09-2017, 21:51 (Martes)
Hola peperfus es improbable que quemes un GPIO con el soldador, las pistas de cobre con lo estrechas que son, con cierta longitud, no creo que sean capaces de transportar tanto calor hacia el SoC, ya tendrías que dejarlo mucho el tiempo el soldador dándole chicha al tema para que ocurriese.

Pero sí es más probable que puedas quemar un GPIO por voltage. Por lo que comentais el tema del I2C lo estais usando en 5V?, esto puede ocasionar problemas.

Comprueba que realmente has quemado los GPIOs como te han dicho poniendolos a nivel bajo y alto midiendo si los voltages cambian. Si es así cuando montes todo de nuevo con gpios que funcionen trata de usar 3.3 V para alimentar la pantalla I2C.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 05-09-2017, 22:48 (Martes)
La duda viene entonces en ese caso... por qué a raphik le va y a mí no...

Voy a hacer tests y vuelvo con los resultados.
Gracias danitool

EDITO:
Resultados de las mediciones de tensión:
value (sda/scl)SDASCL
0/03,312,63
0/13,313,32
1/03,312,58
1/13,313,31

¿Debería cambiar VCC de 5V a 3,3V?
En caso afirmativo... si alguien me indica de dónde sacarlo se lo agradecería.

Edito:
Esto.... ¿Se los puedo coger prestados a la patilla de un LED o habría algún problema?
He encontrado un punto que los da. En la zona U29 (si la vista no me falla). Es un cuadradito dibujado con 3 puntitos, cerca del led de Internet. El punto más cercano al frontal del router, ese da 3,3V.

Pero si lo puedo coger de un LED, mejor, que es más fácil. Ahora que lo pienso, el led DSL también da los 3,3 y dado que en este router, no va el modem adsl en open.... pues digo yo que ese led no se usará para nada, ¿verdad?. Si me dais el OK, cojo VCC del led DSL.

Lo siento, no he podido resistirme. He conectado VCC a la patita positiva del led DSL (que no se enciende en ningún momento Se enciende durante un segundo al encender el router). Pero nada, lo mismo. La pantalla se enciende, con lo que le llega alimentación, pero en cuanto intento declarar de nuevo la movida del export, lo mismo:

Citar
echo "489" > /sys/class/gpio/export
sh: write error: Device or resource busy
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: danitool en 06-09-2017, 01:26 (Miércoles)
Si los GPIOs están estropeados, que según parece con la tabla que has puesto es el caso, no te funcionará.

Busca otros GPIOs que sí funcionen. La alimentación de 3.3 voltios cógela del puerto serie directamente.

Aunque de todas formas no estoy seguro si tu display puede alimentarse con 3.3V. Si no se puede, habría que usar un level shifter, para convertir el nivel de tensión de cada línea de 3.3 V a 5V. Un divisor de tensión con dos resistencias igual funciona, sería la chapuza fácil.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Tki2000 en 06-09-2017, 09:54 (Miércoles)
Ya, pero es que ni siquiera me deja volver a exportarlos y declararlos. Me da el error de resource busy.

raphik, seny.... ¿vosotros habéis usado resistencias pull-up?

En caso afirmativo, ¿de qué valor/es? y ¿conectadas de dónde a dónde?

Me imagino que raphik, las habrás usado de cada línea (SDA y SCL) a VCC (5V en tu caso)...

Es lo que voy a probar. Voy a pillar unas de 1800 Ohm, como recomienda el tutorial comentado por Tki2000 (http://www.robot-electronics.co.uk/i2c-tutorial). Por cierto.... ¿con las de 1/4 de watio es suficiente? (Creo que eso se refiere a la cantidad de electricidad que soportan, ¿correcto? De electrónica no controlo)
 Y las colocaré entre SDA y 5V y SCL y 5V respectivamente.

Da igual la resistencia y vataje que pongas. Por esas líneas van a circular señales sin apenas intensidad. No son de alimentación. Desde 1k hasta 10k debería funcionar.
El que tengas que usarlas o no, depende del modelo de router, y si las incluye ya o no. Si se supone que el router no va a usar I2C en esos pines, aunque sean los designados para hacerlo, se ahorrarán soldar esas resistencias para ahorrar costes. Por eso luego, si lo queremos usar para eso, tenemos que ponerlas nosotros.

La ignorancia puede ser nuestra mayor fuente de aprendizaje. Sólo hay que decidir qué hacemos con nuestra propia ignorancia.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 06-09-2017, 14:09 (Miércoles)
Ok, entonces lo que haré será colocar las resistencias en cuanto me lleguen y coger los 3,3V del puerto serie. Volveré con resultados.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 06-09-2017, 19:30 (Miércoles)
raphik, seny.... ¿vosotros habéis usado resistencias pull-up?
En caso afirmativo, ¿de qué valor/es? y ¿conectadas de dónde a dónde?
Me imagino que raphik, las habrás usado de cada línea (SDA y SCL) a VCC (5V en tu caso)...
Como digo en el primer post, alimento la pantalla con 5 Voltios.
(http://i.imgur.com/mLvj5ID.jpg)

El pin VCC de la plaquita expansora I²C lo conecto mediante el cable rojo al punto R66 del router.
El pin GND de la expansora I²C lo conecto mediante el cable negro al pin GND del router.
(http://i.imgur.com/VI1HCNa.jpg)

En cuanto a las líneas SDA y SCL, las conecto directamente, sin resistencias pull-up, de la placa expansora a los puntos R107 y R109 del router. Funcionan a 3'3 Voltios.
(http://i.imgur.com/VtlRSZv.jpg)

No puedo decir que todas las pantallas LCD se puedan conectar como yo lo he hecho, porque sólo tengo una: https://www.banggood.com/es/IIC-I2C-1602-Blue-Backlight-LCD-Display-Module-For-Arduino-p-950726.html

Como suele pasar, después de hacer la compra he visto otra igualita pero más barata en otro sitio: https://es.aliexpress.com/store/product/IIC-I2C-1602-Serial-Blue-Backlight-LCD-Display-For-Arduino-2560-UNO-AVR-A004-Free-Shipping/1185416_1738714643.html
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 06-09-2017, 20:26 (Miércoles)
Hecho. Pantalla(s) pedidas. Gracias por poner los enlaces y por la paciencia...

La misma que pediste. La he preferido pedir de banggood, aunque sea un poquito más cara, porque viene de Europa y llega antes.
Además, he pedido otra de 2004 (20 caracteres x 4 lineas).
También estoy esperando las resistencias para probarlas con mi pantalla actual.

De una manera u otra, con un material u otro, supongo que lo conseguiré.

Edito: la que tengo ahora mismo es esta (http://www.ebay.com/itm/Pantalla-LCD-1602-AZUL-IIC-I2C-Pines-Soldados-arduino-Display-P0010/201517724201).
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 07-09-2017, 10:48 (Jueves)
... la (pantalla) que tengo ahora mismo es ésta.
(http://i.imgur.com/d7vlyno.jpg)

Por lo que se ve, se trata de una YwRobot LCM1602 IIC V1.
(http://i.imgur.com/3htxdbH.jpg)

Le veo pocos componentes en comparación con otras, lo que no significa que sea una mala expansora. Según se lee en Internet, se alimenta con 5V y se conecta directamente al bus i2c, sin resistencias pull-up.
http://www.electronicapty.com/component/k2/item/4-lcd-1602-con-modulo-i2c-ywrobot-iic-v1/4-lcd-1602-con-modulo-i2c-ywrobot-iic-v1
http://henrysbench.capnfatz.com/henrys-bench/arduino-displays/ywrobot-lcm1602-iic-v1-lcd-arduino-tutorial/
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 07-09-2017, 15:11 (Jueves)
Bueno, en realidad no es la de la imagen.
Se ve que esa es la imagen que puso el vendedor en la página del artículo, pero el artículo en sí es ligeramente distinto:

De hecho, si se va a las características, en la descripción del artículo:
Caracterí­sticas:
    Pantalla LCD, 16 caracteres y 2 líneas
    Alimentación 5V
    Controlador compatible HD44780
    Adaptador II2C PCF8574T
    Fondo azul retroiluminado, letras en blanco
    Incluir un pin de contraste ajustable
    Dimensiones (mm): 80 x 36 x 19


Esta es la foto del adaptador que viene en cuestión:
(https://s26.postimg.org/azo3dxa3p/i2c.jpg) (https://postimg.org/image/azo3dxa3p/)

He visto otro tuto (http://www.instructables.com/id/Using-PCF8574-backpacks-with-LCD-modules-and-Ardui/) por ahí y supuestamente también va directo sin resistencias y a 5V.
(Edito: en el tuto que he visto usaban el modelo  PCF8574, sin la T)
(Aquí otro tuto (https://www.luisllamas.es/arduino-lcd-i2c/) con el mismo controlador)
Lo cual no hace más que aumentar la duda sobre qué es lo que me está fallando.
Está la diferencia de que tú lo tienes soldado con estaño y yo lo tengo con pegamento conductor, pero me parece muy raro que sea ese el problema. Parece que este pegamento da buen resultado con estos voltajes. Por cierto, por si a alguien le interesa, es este (http://www.ebay.es/itm/Pegamento-Conductor-de-Electricidad-WIRE-GLUE/142469826448).

Lo único que se me ocurre ahora es que pueda haber habido un cortocircuito al haber contactado ligeramente el pegamento con el polo politivo y/o negativo de las bases para led (sin leds) que hay alrededor y aún habiéndolo limpiado después, ya se haya/n estropeado el/los gpios.
No me queda prácticamente más remedio que probar el otro router.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 07-09-2017, 23:59 (Jueves)
Bueno, en realidad no es la de la imagen.
Se ve que esa es la imagen que puso el vendedor en la página del artículo, pero el artículo en sí es ligeramente distinto:

De hecho, si se va a las características, en la descripción del artículo:
Caracterí­sticas:
    Pantalla LCD, 16 caracteres y 2 líneas
    Alimentación 5V
    Controlador compatible HD44780
    Adaptador II2C PCF8574T
    Fondo azul retroiluminado, letras en blanco
    Incluir un pin de contraste ajustable
    Dimensiones (mm): 80 x 36 x 19


Esta es la foto del adaptador que viene en cuestión:
(https://s26.postimg.org/azo3dxa3p/i2c.jpg) (https://postimg.org/image/azo3dxa3p/)

He visto otro tuto (http://www.instructables.com/id/Using-PCF8574-backpacks-with-LCD-modules-and-Ardui/) por ahí y supuestamente también va directo sin resistencias y a 5V.
(Edito: en el tuto que he visto usaban el modelo  PCF8574, sin la T)
(Aquí otro tuto (https://www.luisllamas.es/arduino-lcd-i2c/) con el mismo controlador)
Lo cual no hace más que aumentar la duda sobre qué es lo que me está fallando.
Está la diferencia de que tú lo tienes soldado con estaño y yo lo tengo con pegamento conductor, pero me parece muy raro que sea ese el problema. Parece que este pegamento da buen resultado con estos voltajes. Por cierto, por si a alguien le interesa, es este (http://www.ebay.es/itm/Pegamento-Conductor-de-Electricidad-WIRE-GLUE/142469826448).

Lo único que se me ocurre ahora es que pueda haber habido un cortocircuito al haber contactado ligeramente el pegamento con el polo politivo y/o negativo de las bases para led (sin leds) que hay alrededor y aún habiéndolo limpiado después, ya se haya/n estropeado el/los gpios.
No me queda prácticamente más remedio que probar el otro router.

Yo creo que hasta que no hagas parpadear los gpios, no habra i2c de ninguna manera... algo te está fallando en la "exportacion"  No creo que el gpio en si se haya fastidiado si el router arranca...

¿Has comprobado que la pasta de soldar o la plastilina no te estén haciendo algún tipo de cortocircuito o alimentándose de otro gpio o punto cercano?
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 08-09-2017, 01:09 (Viernes)
No sé qué conductividad tendrá la plastilina  ;D De todas formas, ya la había quitado de la placa.
No veo nada mal... ni cortocircuitando.

Os pongo un vídeo de cómo lo tengo. Perdón por el tembleque y el mal enfoque, pero con el zoom y mi mal pulso, no he podido conseguir mejor calidad de imagen.

[ Invalid YouTube link ]
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 08-09-2017, 14:35 (Viernes)
(Edito: en el tuto que he visto usaban el modelo  PCF8574, sin la T)

La T o su ausencia se refiere al encapsulado y no tiene importancia, excepto si eres diseñador.

Los que tienen la T son de soldadura superficial.
(https://i.imgur.com/Oo1gQjo.png)

Y los que no la tienen van en placa perforada.
(https://i.imgur.com/4eECTGs.png)
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 08-09-2017, 18:40 (Viernes)
No me queda prácticamente más remedio que probar el otro router.

Antes de probar con el otro router, igual te vendría bien intentarlo con otras dos GPIO presentes en los AR-5687un.

Según el post https://foro.seguridadwireless.net/openwrt/routers-con-gpio's-operativos-para-darle-usos-como-con-la-raspberry-pi/msg341543/#msg341543, junto al botón de RESET tienes otras dos GPIO libres. Están en los puntos sin conectar R79 (GPIO12) y R158 (GPIO24).
(http://i.imgur.com/cIB8tTp.jpg)

No sabría decirte si el contacto GPIO se corresponde con la soldadura de la izquierda o de la derecha. Habría que tirar de polímetro para averiguarlo.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 08-09-2017, 22:59 (Viernes)
Gracias. En cuanto tenga algo de tiempo libre (ahora vuelvo a estar bastante liado), lo intentaré.
Es una oportunidad muy buena para hacer pruebas y ayudar a despejar dudas.
Título: Re: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 09-09-2017, 15:46 (Sábado)
Gracias. En cuanto tenga algo de tiempo libre (ahora vuelvo a estar bastante liado), lo intentaré.
Es una oportunidad muy buena para hacer pruebas y ayudar a despejar dudas.
Cuando te pongas a ello, primero controla el GPIO y luego cuando veas que funciona, ya sigues con los cables y circuitos, así cuando algo de problema podrás descartar más fácil donde puede estar el fallo.

Saludos!

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 13-09-2017, 11:44 (Miércoles)
Buenas. Sigo liado, pero he sacado un huequito para cofirmar los GPIOS. Los marcados en verde son tales:

(https://s26.postimg.org/ebwgkgtnt/otros_GPIOS.jpg)
(Foto original de raphik (gracias))

Además, he hecho un script que iba cambiando los values de ambos de 1 a 0 y viceversa con pausa de 1 segundo y evfectivamente he comprobado como iba cambiando la tensión (voltaje) de ambos, de 3,29 a 0 y viceversa, respectivamente y de forma correcta.

Este finde me pongo otra vez con el tema de la pantalla en estos GPIOS.

Gracias a todos.

Edito: Work in progress....
Cables pegados a los GPIOS R158 y R79. Mañana estará seco y probaré la pantalla.
La operación ha salido bien. Mañana veremos el resultado.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: danitool en 16-09-2017, 12:44 (Sábado)
No usé nunca pegamento de ese tipo, pero yo lo veo más para reparar pistas dañadas o hacer soldaduras largas.

En pequeños puntos debería funcionar mejor la soldadura de estaño, la capilaridad hace que se quede en el sitio y nunca cortocircuite con puntos circundantes, de hecho hay que poner mucho estaño para que ocurra.

El problema va tal vez más en los cables. Personalmente para soldar en puntos muy pequeños uso cable de bobinado que suele ir revestido con barniz aislante (hay que rascar un poco el extremo que se suelda). Un cable apropiado de este tipo es el hilo de cobre  que podemos encontrar en las bobinas de los microfiltros ADSL, de estos seguro todos tenemos una docena en casa.

A la hora de probar yo primero intentaría alimentar con 3.3V del puerto serie, que es un voltaje seguro, y ya luego con 5, y comparar resultados.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 17-09-2017, 00:34 (Domingo)
Gracias por los consejos, danitool. De momento voy a seguir probando con el pegamento conductor.... a lo mejor en otro router me animo a soldar, pero un poco más adelante.

¡ NOVEDADES ! HA HABIDO UN AVANCE IMPORTANTE, POR FIN.

Código: [Seleccionar]
root@OpenWrt:~# i2cdetect  -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

(https://s26.postimg.org/wvu9tiv55/chapuza_OK.jpg)

Sin embargo... parece que no hablamos el mismo idioma xD:
Cuando he ejecutado el script... (después de modificar la dirección 3F por la mía=27...)
(https://s26.postimg.org/j3fuxw4dl/HOLAMUNDO.jpg)
Supuestamente pone "HOLA MUNDO"


Ok, mira. He echado un vistazo al script. No entiendo ni la mitad..., pero he visto que se puede ejecutar con el parámetro init. Cuando lo he hecho, al poner HOLA MUNDO, sí que sale; lo escribe correctamente, , pero en vez de salir en blanco brillante, me sale en gris muy tenue. Pongo una imagen para que se vea como sale. Casi no se ve:

(https://s26.postimg.org/c89v3duzt/Whats_App_Image_2017-09-17_at_01.06.19.jpg)

raphik, ¿De dónde sacaste el script lcd_write o la información para programarlo...?
¿Qué hacen los parámetros de dirección de memoria de "func_LCD"? Estaría bientener la lista de direcciones de memoria y lo que le activan/desactivan a la lcd...

(Según las pruebas que he estado haciendo...)
Código: [Seleccionar]
func_init() # inicializar display
{
  func_LCD I 0x33;
  func_LCD I 0x32; #  ?
  func_LCD I 0x28; # ?
  func_LCD I 0x0C; # OCULTA EL CURSOR
  func_LCD I 0x01; # BORRA PANTALLA
}

Como cosa también Muy Interesante, he visto por ahí, que otras pantallas tienen la habilidad de poder encender y apagar el led de iluminación por software ("lcd.setBacklight(LED_OFF);//Backlight OFF "), estaría chulo que aquí también se pudiera.
EDITO: Esos parámetros hexadecimal.... ¿son los defines de liquidcrystal_i2c.h?
He visto por ahí ejemplos que les aplica la operación exor (https://xor.pw/) a varios defines para obtener la hexadecimal a enviar a la controladora. ¿Es correcto?. Sé que esto ya se empieza a escapar de openwrt, pero ¿podrías poner un ejemplo de cómo calcular esos hexadecimales para enviar uno u otro comando? Estoy mirando la tabla:


Código: [Seleccionar]
// commands
#define LCD_CLEARDISPLAY 0x01
#define LCD_RETURNHOME 0x02
#define LCD_ENTRYMODESET 0x04
#define LCD_DISPLAYCONTROL 0x08
#define LCD_CURSORSHIFT 0x10
#define LCD_FUNCTIONSET 0x20
#define LCD_SETCGRAMADDR 0x40
#define LCD_SETDDRAMADDR 0x80

// flags for display entry mode
#define LCD_ENTRYRIGHT 0x00
#define LCD_ENTRYLEFT 0x02
#define LCD_ENTRYSHIFTINCREMENT 0x01
#define LCD_ENTRYSHIFTDECREMENT 0x00

// flags for display on/off control
#define LCD_DISPLAYON 0x04
#define LCD_DISPLAYOFF 0x00
#define LCD_CURSORON 0x02
#define LCD_CURSOROFF 0x00
#define LCD_BLINKON 0x01
#define LCD_BLINKOFF 0x00

// flags for display/cursor shift
#define LCD_DISPLAYMOVE 0x08
#define LCD_CURSORMOVE 0x00
#define LCD_MOVERIGHT 0x04
#define LCD_MOVELEFT 0x00

// flags for function set
#define LCD_8BITMODE 0x10
#define LCD_4BITMODE 0x00
#define LCD_2LINE 0x08
#define LCD_1LINE 0x00
#define LCD_5x10DOTS 0x04
#define LCD_5x8DOTS 0x00

// flags for backlight control
#define LCD_BACKLIGHT 0x08
#define LCD_NOBACKLIGHT 0x00

#define En B00000100  // Enable bit
#define Rw B00000010  // Read/Write bit
#define Rs B00000001 // Register select bit

Pero no llego a entender muy bien cómo pasar de ahí a por ejemplo, cuando envías por ejemplo, "0x0C"...

(Por cierto, la sintaxis debería ser lcd_write.sh <linea> <columna> <texto> ¿verdad?)

(Sólo me falta que aparezca el texto brillante, como en la primera foto)
Me acaba de llegar una pantalla de 20x04 que tenía pedida, la he probado y me hace lo mismo: texto casi invisible. Estoy a la espera de la pantalla 16x02 (el mismo modelo que el tuyo), pero me parece que hará también lo mismo, porque supongo que llevan el mismo chip y van de la misma manera. La pregunta fundamental entonces es: ¿Por qué a ti te sale en brillo  8) (maravillosamente legible) y a mí casi invisible  :-\?
Muchas gracias.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 21-09-2017, 11:41 (Jueves)
Acabo de recibir la pantalla 1604, la misma* que pediste tú. La acabo de probar y me hace lo mismo. No sale el texto brillante.

Esto es rarísimo y se sale de mi entendimiento. La próxima cosa que probaré será con otro router ar5387un, pero esta vez, soldaré los cables con estaño en vez de usar el pegamento conductor. Ya tengo la punta fina de soldador y el estaño de 0,3 mm; así que creo que lo conseguiré.


(* la única diferencia es que yo la pedí de otra tienda, pero supuestamente es la misma).
Y de hecho, creo que es la misma que tengo yo aquí  :P

raphik, ¿Aceptarías probar mi pantalla en tu router? Te la enviaría yo por correo certificado a gastos pagados, por supuesto. Y cuando me la devolvieras, también te pagaría el envío. Sólo tendrías que desconectar la tuya y conectar la mía para hacer la prueba. No tardarías más de 3..4 minutos.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Tki2000 en 21-09-2017, 18:59 (Jueves)
Tan sólo una sugerencia. A la hora de inicializar la pantalla, ¿por qué no le metéis una pausa entre comando y comando? Estos LCD suelen ser muy susceptibles a la temporización, y puede que le estéis enviando los comandos demasiado rápido.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 21-09-2017, 22:51 (Jueves)
Gracias por la sugerencia. Yo de esto no tengo prácticamente ni idea. Me he limitado a seguir el tutorial de raphik.

El Santo Grial está en que hay distinto para que a él le salga el texto brillante después de hacer el init, pero a mí me sale súper tenue, casi invisible.

Acabo de probar a poner un sleep 10 (para estar seguro de que no me quedaba corto) entre comandos de init y tampoco; nada.

Cuando pruebe lo de soldar los cables... ya veré si consigo algo distinto. Me gustaría quemar todos los cartuchos antes de tirar la toalla.
Título: Re: Proyecto GiquieraPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Tki2000 en 25-09-2017, 10:50 (Lunes)
Gracias por la sugerencia. Yo de esto no tengo prácticamente ni idea. Me he limitado a seguir el tutorial de raphik.

El Santo Grial está en que hay distinto para que a él le salga el texto brillante después de hacer el init, pero a mí me sale súper tenue, casi invisible.

Acabo de probar a poner un sleep 10 (para estar seguro de que no me quedaba corto) entre comandos de init y tampoco; nada.

Cuando pruebe lo de soldar los cables... ya veré si consigo algo distinto. Me gustaría quemar todos los cartuchos antes de tirar la toalla.

No tiene pinta de ser problema de comunicación. Si lo fuera, no saldría nada, ni siquiera en tenue.
Mira a ver si tu LCD tiene algún cableado para el contraste.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 25-09-2017, 12:20 (Lunes)
He preguntado en un foro de arduino a ver qué me dicen.

Para mí: O son estas pantallas mías, que son defectuosas (o distintas), aunque parecen ser las mismas que usa raphik, mismo chip y tal.
O bien, falla algo en los comandos esos de inicialización, esas secuencias que se le envían de valores en hexadecimal...

Seguiré investigando hasta que me harte o se me acaben las opciones y lo deje en un expediente X, o bien hasta que dé en el clavo del problema.

Lo del contraste dudo mucho que tenga algo que ver. Se maneja igual que el de raphik, con un potenciómetro a modo de "tornillo" de estrella. Aunque sí que es raro, que el mío al máximo sale más tenue que el suyo, pero aún así, no parece tener nada que ver; ya que en el primer ejemplo que pongo, cuando muestro texto en la pantalla, SIN inicializar, salen caracteres raros, pero en un brillo PERFECTO. En cambio, cuando inicializo la pantalla, sale ya el texto correcto, pero es como si ese brillo se apagara y ya casi no se ve el texto. Este finde probaré con otro router idéntico y soldando los cables. Todo lo demás lo haré exactamente igual, para respetar las condiciones iniciales del experimento. Aunque una prueba ideal sería yo probar la pantalla de raphik o bien, él probar la mía (o ambas opciones). Eso nos daría más pistas sobre cuál puede ser el problema.
Título: Re: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 25-09-2017, 12:53 (Lunes)
He preguntado en un foro de arduino a ver qué me dicen.

Para mí: O son estas pantallas mías, que son defectuosas (o distintas), aunque parecen ser las mismas que usa raphik, mismo chip y tal.
O bien, falla algo en los comandos esos de inicialización, esas secuencias que se le envían de valores en hexadecimal...

Seguiré investigando hasta que me harte o se me acaben las opciones y lo deje en un expediente X, o bien hasta que dé en el clavo del problema.

Lo del contraste dudo mucho que tenga algo que ver. Se maneja igual que el de raphik, con un potenciómetro a modo de "tornillo" de estrella. Aunque sí que es raro, que el mío al máximo sale más tenue que el suyo, pero aún así, no parece tener nada que ver; ya que en el primer ejemplo que pongo, cuando muestro texto en la pantalla, SIN inicializar, salen caracteres raros, pero en un brillo PERFECTO. En cambio, cuando inicializo la pantalla, sale ya el texto correcto, pero es como si ese brillo se apagara y ya casi no se ve el texto. Este finde probaré con otro router idéntico y soldando los cables. Todo lo demás lo haré exactamente igual, para respetar las condiciones iniciales del experimento. Aunque una prueba ideal sería yo probar la pantalla de raphik o bien, él probar la mía (o ambas opciones). Eso nos daría más pistas sobre cuál puede ser el problema.
No será falta de corriente o mala masa?
Prueba sacar la alimentación de algún otro punto de la placa... Y no estaría de más soldar los puntos de alimentación.
Saludos.

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Tki2000 en 25-09-2017, 14:06 (Lunes)
He preguntado en un foro de arduino a ver qué me dicen.

Para mí: O son estas pantallas mías, que son defectuosas (o distintas), aunque parecen ser las mismas que usa raphik, mismo chip y tal.
O bien, falla algo en los comandos esos de inicialización, esas secuencias que se le envían de valores en hexadecimal...

Seguiré investigando hasta que me harte o se me acaben las opciones y lo deje en un expediente X, o bien hasta que dé en el clavo del problema.

Lo del contraste dudo mucho que tenga algo que ver. Se maneja igual que el de raphik, con un potenciómetro a modo de "tornillo" de estrella. Aunque sí que es raro, que el mío al máximo sale más tenue que el suyo, pero aún así, no parece tener nada que ver; ya que en el primer ejemplo que pongo, cuando muestro texto en la pantalla, SIN inicializar, salen caracteres raros, pero en un brillo PERFECTO. En cambio, cuando inicializo la pantalla, sale ya el texto correcto, pero es como si ese brillo se apagara y ya casi no se ve el texto. Este finde probaré con otro router idéntico y soldando los cables. Todo lo demás lo haré exactamente igual, para respetar las condiciones iniciales del experimento. Aunque una prueba ideal sería yo probar la pantalla de raphik o bien, él probar la mía (o ambas opciones). Eso nos daría más pistas sobre cuál puede ser el problema.

En ese caso me inclino a pensar que uno de los comandos de inicialización está cambiando el contraste, y lo está poniendo al mínimo, o que como dije, al hacer reset, el contraste se ponga al mínimo, y el comando de volver a ponerlo a un valor normal, o no está, o se le está dando tan rápido, que no ha acabado de resetearse, antes de dárselo, con lo que no se ejecuta. Los LCDs éstos, son un quebradero de cabeza, pero casi todo es por la temporización. En su tiempo me pasaba con los PICs, ya que no estamos usando la línea Bsy, para saber cuándo el LCD ha terminado de ejecutar el último comando, y darle el siguiente.

Para probar, pondría un sleep 1 al final de la función func_LCD, o entre cada línea de nibb, y a ver qué pasa. O el siguiente paso es coger el datasheet del controlador del LCD, y ver qué se le está pasando como comandos de inicialización.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 26-09-2017, 12:14 (Martes)
Cosas que he probado:

Poner un sleep 5 (para asegurarme) entre comando y comando del init (e incluso en los de la función interna que envía las señales) = sin cambios.
Lo de la señal eléctrica lo comprobé con el multímetro, midiendo los GPIOS y me daba las tensiones correctas: 3,3V y 0V respectivamente correspondidos con el 1 y el 0.
Lo del potenciómetro del contraste está al máximo.

El finde lo probaré todo desde cero con un router nuevo; pero esta vez soldando los cables.

Saludos y gracias.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 26-09-2017, 12:27 (Martes)
@peperfus

Es una buena noticia saber que el comando "i2cdetect -y 0" está respondiendo, porque significa que la pantalla está bien conectada al bus I2C. Una cosa menos de la que preocuparse.

El script lo escribí yo. Desafortunadamente no lo documenté. La información la saqué de distintos sitios. Los primeros documentos que leí fueron
http://www.epemag.wimborne.co.uk/lcd1.pdf
http://www.epemag.wimborne.co.uk/lcd2.pdf

Son un poco viejunos. Probablemente te venga bien leer este artículo de la wikipedia
https://en.wikipedia.org/wiki/Hitachi_HD44780_LCD_controller.

El script gira en torno al comando "i2set", que permite enviar información a la pantalla. Su sintaxis:
Código: [Seleccionar]
i2cset -y BUS ADDRESS INFO1 INFO2-y obliga al comando a ejecutarse sin hacer preguntas
BUS=0
ADDRESS=0x27 (0x27 es la dirección de tu pantalla)

El comando permite enviar uno o dos bytes (INFO1 es obligatorio; INFO2 es opcional). Por simple economía, lo habitual es enviar dos bytes de una tacada. Más adelante veremos cómo.

Por otra parte, conviene puntualizar que a la pantalla se le puede enviar tanto INSTRUCCIONES como CARACTERES. Los caracteres se visualizan en pantalla, mientras que las instrucciones sirven para controlar su funcionamiento (borrar la pantalla, posicionar el cursor, hacer cursor visible, etc.)

Es importante saber que nuestra pantalla funciona en modo 4-bits, debido a que sólo las líneas D7 a D4 están físicamente conectadas a la placa expansora, quedando sin uso las líneas D3 a D0.
(http://i.imgur.com/gFdFOAA.jpg)
Trabajar en modo 4-bytes obliga a enviar cada byte en dos pasos. Por ejemplo, para enviar 0x25 hay que enviar primero el nibble alto (el 2) y luego el bajo (el 5).
Por otra parte, la pantalla tiene una forma peculiar de trabajar: hay que enviarle la info dos veces. Una para que la guarde y otra para que la procese.

Todo lo anterior se traduce en que una triste instrucción (o caracter) de 1 byte requiere el envío de 4 bytes. Lo vemos con un ejemplo: envío de la instrucción 0x01 (borrar pantalla)
Código: [Seleccionar]
i2cset -y 0 0x27 0x0C 0x08    # envío del nibble alto (el 0) en dos tiempos 0x0C para que lo guarde, 0x08 para que lo procese.
i2cset -y 0 0x27 0x1C 0x18    # envío del nibble bajo (el 1) en dos tiempos 0x1C para que lo guarde, 0x18 para que lo procese.
Es un co*azo, pero es así como hay que hacerlo. La función func_LCD() pretende simplificar el envío de datos. Utiliza dos parámetros. El primero puede ser la letra I o la letra C, según se envíe una instrucción o carácter. El segundo parámetro es el propio dato que se envía.
Código: [Seleccionar]
nibb=$(($data/0x10*0x10));                                          # nibble alto
i2cset -y $BUS $ADDRESS $(($nibb+$INST_SET)) $(($nibb+$INST_SEND))  # 1. guarda el dato - 2. procesa el dato
nibb=$(($data%0x10*0x10));                                          # nibble bajo
i2cset -y $BUS $ADDRESS $(($nibb+$INST_SET)) $(($nibb+$INST_SEND))  # 1. guarda el dato - 2. procesa el dato

Efectivamente, como bien dices, la sintaxis es
Código: [Seleccionar]
lcd_write.sh <linea> <columna> <texto>Ya lo he corregido en el primer post. Gracias por reportarlo.

En cuanto a que me envíes la pantalla para probarla, ya llegaríamos a un acuerdo si fuera necesario.

Respecto a lo de poner una pausa entre comandos, no es necesario. Tened en cuenta que el script está escrito en un lenguaje interpretado, por lo que es su ejecución es bastante lenta.

Por último, el contraste se regula por hardware. No conozco ningún comando para hacerlo por software.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Tki2000 en 26-09-2017, 16:15 (Martes)
raphik, gracias por aclarar lo que hace el código. Seguro que puede despejar más de una duda.

Con respecto a lo que le pasa a peperfus, si sin inicializar el LCD, el texto sale con contraste, y después de inicializar, no tiene contraste, yo apostaría a que algo hay en la inicialización, que trastoca al LCD.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 26-09-2017, 20:35 (Martes)
raphik, gracias por aclarar lo que hace el código. Seguro que puede despejar más de una duda.
Iré introduciendo comentarios explicativos en el script del primer post. Incluso para mí es duro entenderlo después de más de un año de haberlo escrito.

Con respecto a lo que le pasa a peperfus, si sin inicializar el LCD, el texto sale con contraste, y después de inicializar, no tiene contraste, yo apostaría a que algo hay en la inicialización, que trastoca al LCD.
Es posible, pero te aseguro que no trastoca para nada mi LCD.

El script consta de dos partes bien diferenciadas. Primero se definen unas cuantas funciones y más abajo está el cuerpo del script propiamente dicho, entre las etiquetas #SCRIPT:

Código: [Seleccionar]
# SCRIPT
# Si la llamada al script no contiene parámetros, se visualiza su sintaxis
if [ "$#" -eq 0 ]; then
  printf "\n  lcd_write ver. 1.01 2016 :p raphik\n"
  printf "Sintaxis 1: lcd_write <init>\n"
  printf "Sintaxis 2: lcd_write <fila> <columna> <texto>\n\n"
  return
fi
# Variables globales. La única que hay que cambiar es ADDRESS, en la que se pone la dirección
# hexadecimal del módulo LCD. Lo demás se deja como está.
  BUS=0
  ADDRESS=0x3F
  INST_SET=0x0C
  INST_SEND=0x08
  CHAR_SET=0x0D
  CHAR_SEND=0x09
# Si la llamada al script contiene como primer parámetro la cadena "init", se ejecuta la función
# func_init, que pone al módulo en modo 4-bits, elimina el cursor y borra la pantalla.
if [ $1 == "init" ]; then
  func_init
  return
fi
# Para escribir texto en el LCD, se invoca el script pasándole tres parámetros: fila, columna y texto.
func_row_col $1 $2
func_print_string "$3"
return
# SCRIPT

Las funciones son más fastidiosas de entender, porque trabajan ajustadas a como lo hace el hardware.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 26-09-2017, 22:49 (Martes)
Mil Gracias, raphik por tus aclaraciones.

La regla de oro de cualquier programador: Documentar, documentar, documentar.

Una cosa que he observado.... tu pantalla dices que sólo tiene 4 bit soldados a la placa expansorat?.
Buscando el chip de la mía: PCF8457T, me pone por ahí 8 bits.... y yo veo que parece ser... que están todos los pines soldados. ¿No es así en la tuya?

http://pdf1.alldatasheet.com/datasheet-pdf/view/18215/PHILIPS/PCF8574T.html (http://pdf1.alldatasheet.com/datasheet-pdf/view/18215/PHILIPS/PCF8574T.html)

Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Tki2000 en 26-09-2017, 23:10 (Martes)
Mil Gracias, raphik por tus aclaraciones.

La regla de oro de cualquier programador: Documentar, documentar, documentar.

Una cosa que he observado.... tu pantalla dices que sólo tiene 4 bit soldados a la placa expansorat?.
Buscando el chip de la mía: PCF8457T, me pone por ahí 8 bits.... y yo veo que parece ser... que están todos los pines soldados. ¿No es así en la tuya?

http://pdf1.alldatasheet.com/datasheet-pdf/view/18215/PHILIPS/PCF8574T.html (http://pdf1.alldatasheet.com/datasheet-pdf/view/18215/PHILIPS/PCF8574T.html)



Se refiere al bus de datos del LCD. Los otros 4 bits del pcf, deben estar cableados a las líneas de control del lcd (las que le dicen si vamos a leer, escribir, etc, etc...)
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 27-09-2017, 09:46 (Miércoles)
Una cosa que he observado.... tu pantalla dices que sólo tiene 4 bit soldados a la placa expansora?
Buscando el chip de la mía: PCF8457T, me pone por ahí 8 bits.... y yo veo que parece ser... que están todos los pines soldados. ¿No es así en la tuya?

Como bien dice Tki2000, una cosa es que la placa expansora trabaje a 8 bits (en realidad 7) y otra que el LCD trabaje en modo 4-bits.

Fíjate bien en la imagen
(http://i.imgur.com/gFdFOAA.jpg)
Las soldaduras que se ven arriba son del LCD. Van de la 1 a la 16 y están rotuladas RS, RW, E... Los puntos RS, RW, E, D4, D5, D6, D7 y ninguno más están conectados respectivamente a los puntos P0, P1, P2, P4, P5, P6 y P7 de la expansora. Ojo, el punto P3 de la expansora TAMPOCO está conectado. ¡De los 8 bits de la expansora, sólo se aprovechan 7!

En definitiva, los puntos D0, D1, D2 y D3 del LCD no están conectados, por lo que no queda otra que hacerlo funcionar en modo 4-bits.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 28-09-2017, 21:26 (Jueves)
Tanto va el cántaro a la fuente...

Desde ayer, mi LCD ha estado mostrando caracteres extraños. Pensando que era debido a un mal contacto en los puntos de soldadura, decidí repasarlas. No es la primera vez que les doy un repaso, pero sí la última. Éste es el aspecto que tiene actualmente la zona R107-R109 de mi router.
(https://i.imgur.com/KiENkvm.jpg)
De tanto soldar y resoldar se ha desprendido la pista de cobre en el punto R109.

En otras ocasiones se me ha soltado algún cable, pero "limpiamente". Es decir, el cable ha quedado visiblemente separado del punto de soldadura, totalmente desconectado. Pero esta vez ha sido distinto. Los cables estaban aparentemente bien conectados, pero está claro que la soldadura no estaba bien, porque el comando i2cdetect respondía aleatoriamente. Unas veces daba respuesta y otras no. La conclusión parece lógica: la calidad del contacto importa. Por lo que parece, un contacto defectuoso podría meter ruido en el bus i2c.

Conclusiones:
1. No es una buena idea soldar cables directamente a la placa.
2. Las soldaduras no deben quedar expuestas a tirones que puedan debilitarlas.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 28-09-2017, 22:22 (Jueves)
Yo este finde tengo planeado soldar cables.

La estrategia que voy a seguir es la que me comentó alguien hace unas semanas....

Primero estañar los puntos gpios, luego estañar los cables y finalmente, juntarlos y darles un toque con el soldador para que queden unidos.

Me he comprado bastante material y haré algo de práctica con una placa vieja antes. Tengo hasta gafas-lupa con led que van de maravilla. A ver si puedo hacer unas fotos.

Creo que es una buena idea, después de soldar los cables, pegarlos con silicona caliente a la placa. De esa manera, cualquier tirón se lo lleva antes la silicona y protege la soldadura.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 28-09-2017, 23:37 (Jueves)
Yo este finde tengo planeado soldar cables.

La estrategia que voy a seguir es la que me comentó alguien hace unas semanas....

Primero estañar los puntos gpios, luego estañar los cables y finalmente, juntarlos y darles un toque con el soldador para que queden unidos.

Me he comprado bastante material y haré algo de práctica con una placa vieja antes. Tengo hasta gafas-lupa con led que van de maravilla. A ver si puedo hacer unas fotos.

Creo que es una buena idea, después de soldar los cables, pegarlos con silicona caliente a la placa. De esa manera, cualquier tirón se lo lleva antes la silicona y protege la soldadura.

Hola:
Esta es una buena solución, yo estoy usando aquí un viejo cable IDE de HD, porque hay muchos GPIO en este router, pero se puede usar otro conector similar mas pequeño, así se puede probar y cambiar de proyecto con facilidad, en la parte de arriba he pegado una etiqueta identificadora de cada ping, GPIO's, voltajes de alimentación, masa, puerto serie, etc.


 (http://i65.tinypic.com/2ajx5vt_th.jpg)  (http://es.tinypic.com/m/k1xni8/4)


Vaya mala suerte @raphk con su placa  :'(
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Tki2000 en 29-09-2017, 20:46 (Viernes)
Si pretendéis soldar y desoldar mucho, y con puntos muy pequeños, lo mejor es invertir en estaño en pasta y una pistola de aire caliente. No tiene nada que ver con soldar con soldador.
Y he dicho invertir, no gastar, porque a la larga conviene para no estar estropeando cosas.

O si seguís empecinados en la agujita, un buen flux también facilita mucho las cosas, ya que hace que la temperatura para derretir el estaño baje mucho, y no se dañen tanto las pistas. Lo peor de las soldaduras en placas de ahora, es que están hechas con estaño sin plomo, y hay que subir mucho más la temperatura.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 29-09-2017, 21:10 (Viernes)
Citar
Si pretendéis soldar y desoldar mucho, y con puntos muy pequeños, lo mejor es invertir en estaño en pasta y una pistola de aire caliente. No tiene nada que ver con soldar con soldador.
Y he dicho invertir, no gastar, porque a la larga conviene para no estar estropeando cosas.

O si seguís empecinados en la agujita, un buen flux también facilita mucho las cosas, ya que hace que la temperatura para derretir el estaño baje mucho, y no se dañen tanto las pistas. Lo peor de las soldaduras en placas de ahora, es que están hechas con estaño sin plomo, y hay que subir mucho más la temperatura.

Gracias por la idea. Es una buena sugerencia. Como ya tengo comprado el material de soldadura, mañana lo intentaré, a ver qué consigo. Si no me va bien, probaré el método que comentas de estaño en pasta y pistola de aire caliente. Tiene muy buena pinta.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 30-09-2017, 13:30 (Sábado)
Señores, he soldado cables esta mañana y esto huele A PREMIO GORDO.

Nada más conectar la pantalla, se han encendido los cuadrados de caracteres al mismo brillo que los de raphik. Voy a instalar sw y configurar... e informo.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 30-09-2017, 14:00 (Sábado)
(https://s25.postimg.org/ltdivk1nj/THX_RAPHIK.jpg)

Conclusión clara: Algo había mal a nivel de mal contacto eléctrico en el router anterior; o bien el pegamento conductor no es lo suficientemente bueno para esto.

Muchas gracias a todos por la ayuda, ideas y comentarios.

raphik, te mereces un monumomento.

Y ahora, lo primerísimo que hay que hacer es asegurar todas las soldaduras y los puntos débiles bien con silicona para que no sufran tirones que puedan partir las uniones.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: jar229 en 30-09-2017, 14:22 (Sábado)
Mola el mensaje de la pantalla  >:( >:( >:(
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 30-09-2017, 15:01 (Sábado)
Conclusión clara: Algo había mal a nivel de mal contacto eléctrico en el router anterior; o bien el pegamento conductor no es lo suficientemente bueno para esto.

Muchas gracias a todos por la ayuda, ideas y comentarios.

raphik, te mereces un monumomento.

Y ahora, lo primerísimo que hay que hacer es asegurar todas las soldaduras y los puntos débiles bien con silicona para que no sufran tirones que puedan partir las uniones.

 >:( >:( >:( Enhorabuena!!
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Tki2000 en 30-09-2017, 16:25 (Sábado)
¡Plis, plas, plus!  >:( >:( >:(
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 01-10-2017, 13:11 (Domingo)
¡Enhorabiena, peperfus!
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 01-10-2017, 14:53 (Domingo)
Graicas  ;D ;D ;D ;D

Ahora se me ocurren varias aplicaciones chulas para utilizar la pantalllita. La más inmediata, un simple reloj que informe de la fecha y hora.
raphik, ¿te parece bien que publique aquí en este mismo hilo los scripts que se me vayan ocurriendo para darle utilidad a la pantallita?

Si no lo ves adecuado, lo borro; pero yo creo que estaría bien tenerlo aquí mismo, por si alguien más se anima y quiere utilizar estos scripts, además de, por supuesto, mejorarlos, optimizarlos, corregirlos, modificarlos.... al antojo de quien quiera = Software libre.

"RELOJ" que muestra fecha y hora y posible información cada minuto o cada hora:
Código: [Seleccionar]
#!/bin/sh

# Script que muestra la fecha completa y la hora en pantalla LCD 1604.
# Utiliza (requiere) el script lcd_write.sh de raphik.
# Sintaxis: fechayhora.sh
# Se recomienda dejarlo en ejecucion en segundo plano.
# Opcionalmente puede mostrar informacion extra cada minuto y cada hora.
# Empieza en modo demo, mostrando una prueba cada minuto y hora.
# Programado por Peperfus


VERSION=1.6;
RUTA_lcd_write=/root;


FIL=0;
COL=0;
COLANYO=0;

DIAMES=99;
DIASEM=99;
DIASEMANA=99;
MES=99;
MESELEG=99;
ANYO=99;
ANYOELEG=9999;

HORA=99;
MINUTOS=99;
SEGUNDOS=99;

limpiaFil()
{
# 16 caracteres blanco  "1234567890123456"
  $RUTA_lcd_write/lcd_write.sh $FIL 0 "                ";
}

calculaHora()
{
  HORA=$(date | cut -d : -f 1 | tail -c 3);
}

calculaMinutos()
{
  MINUTOS=$(date -Iminute | cut -d : -f 2 | head -c 2);
}

calculaSegundos()
{
  SEGUNDOS=$(date -Isecond | cut -d : -f 3 | head -c 2);
}

calculaDiaMes()
{
  DIAMES=$(date -I | cut -d - -f 3);
}

calculaDiaSem()
{
  calculaDiaSemana;
  DIASEM=$(echo $DIASEMANA | head -c 3);
}

calculaDiaSemana()
{
  DIAWEEK=$(date | head -c 3);
  case "$DIAWEEK" in
    Sun)
      DIASEMANA="Domingo";
      ;;
    Mon)
      DIASEMANA="Lunes";
      ;;
    Tue)
      DIASEMANA="Martes";
      ;;
    Wed)
      DIASEMANA="Miercoles";
      ;;
    Thu)
      DIASEMANA="Jueves";
      ;;
    Fri)
      DIASEMANA="Viernes";
      ;;
    Sat)
      DIASEMANA="Sabado";
      ;;
  esac
}

calculaMes()
{
  MES=$(date -I | cut -d - -f 2);
}

calculaMesEleg()
{
  # Para los meses demasiado largos COLANYO se desplaza a la derecha y se usa el anyo corto
  COLANYO=12;
  calculaMes;
  case "$MES" in
    01)
      MESELEG="Enero";
      ;;
    02)
      MESELEG="Febrero";
      ;;
    03)
      MESELEG="Marzo";
      ;;
    04)
      MESELEG="Abril";
      ;;
    05)
      MESELEG="Mayo";
      ;;
    06)
      MESELEG="Junio";
      ;;
    07)
      MESELEG="Julio";
      ;;
    08)
      MESELEG="Agosto";
      ;;
    09)
      MESELEG="Septiembre";
      COLANYO=14;
      ;;
    10)
      MESELEG="Octubre";
      ;;
    11)
      MESELEG="Noviembre";
      COLANYO=14;
      ;;
    12)
      MESELEG="Diciembre";
      COLANYO=14;
      ;;
  esac
}

calculaAnyo()
{
  calculaAnyoEleg;
  ANYO=$(echo $ANYOELEG | tail -c 3);
}

calculaAnyoEleg()
{
  ANYOELEG=$(date | tail -c 5);
}


muestraHoras()
{
  calculaHora;
  $RUTA_lcd_write/lcd_write.sh $FIL $COL "$HORA";
}

muestraMinutos()
{
  calculaMinutos;
  $RUTA_lcd_write/lcd_write.sh $FIL $COL "$MINUTOS";
}

muestraSegundos()
{
  calculaSegundos;
  $RUTA_lcd_write/lcd_write.sh $FIL $COL "$SEGUNDOS";
}


muestraHoraCompelta()
{
  muestraHoraCorta;
  calculaSegundos;
  $RUTA_lcd_write/lcd_write.sh $FIL $(($COL+5)) ":";
  $RUTA_lcd_write/lcd_write.sh $FIL $(($COL+6)) "$SEGUNDOS";
}


muestraHoraCorta()
{
  calculaHora;
  $RUTA_lcd_write/lcd_write.sh $FIL $COL "$HORA";
  $RUTA_lcd_write/lcd_write.sh $FIL $(($COL+2)) ":";
  calculaMinutos;
  $RUTA_lcd_write/lcd_write.sh $FIL $(($COL+3)) "$MINUTOS";
}

muestraZonaHoraria()
{
  $RUTA_lcd_write/lcd_write.sh 0 0 "Zona horaria:";
  $RUTA_lcd_write/lcd_write.sh 1 0 "$(cat /etc/config/system | grep zonename | cut -d \' -f 2)";
}

muestraDiaSemana()
{
  calculaDiaSemana;
  $RUTA_lcd_write/lcd_write.sh $FIL $COL "$DIASEMANA";
}

muestraDiaSem()
{
  calculaDiaSem;
  $RUTA_lcd_write/lcd_write.sh $FIL $COL "$DIASEM";
}


muestraFechaCompleta()
{
  muestraFechaCorta;
  # ANYO
  calculaAnyo;
  $RUTA_lcd_write/lcd_write.sh $FIL $(($COL+5)) "/";
  $RUTA_lcd_write/lcd_write.sh $FIL $(($COL+6)) "$ANYOELEG";
}

muestraFechaCorta()
{
  $RUTA_lcd_write/lcd_write.sh $FIL $COL "               ";
  # DIA
  calculaDiaMes;
  $RUTA_lcd_write/lcd_write.sh $FIL $COL "$DIAMES";
  $RUTA_lcd_write/lcd_write.sh $FIL $(($COL+2)) "/";
  # MES
  calculaMes;
  $RUTA_lcd_write/lcd_write.sh $FIL $(($COL+3)) "$MES";
}

muestraFechaElegante()
{
  # DIA
  calculaDiaMes;
  $RUTA_lcd_write/lcd_write.sh $FIL $COL "$DIAMES";
  calculaMesEleg;
  $RUTA_lcd_write/lcd_write.sh $FIL $(($COL+3)) "$MESELEG";
  calculaAnyo;
  # Si el mes es demasiado largo, se usa anyo corto
  if [ $COLANYO -eq 14 ]; then ANYOELEG=$ANYO;  fi
  $RUTA_lcd_write/lcd_write.sh $FIL $COLANYO "$ANYOELEG";
}


refrescar()
{
  # Actualiza toda la pantalla.
  # Se suele invocar en la hora 00, cuando cambia el dia
  # O bien, tras una informacion por minuto u hora.

  $RUTA_lcd_write/lcd_write.sh init;
  FIL=0;
  COL=0;
  muestraDiaSemana;
  COL=11;
  muestraHoraCorta;

  FIL=1;
  COL=0;
  muestraFechaElegante;
}


infoXMinuto()
{
  # Informacion extra para mostrar cada minuto
  # DEBE limpiar lo que escribe
  FIL=1;
  COL=0;
  limpiaFil;
  $RUTA_lcd_write/lcd_write.sh $FIL $COL "Ha pasado 1 min"
  sleep 2;
  limpiaFil;
  muestraFechaElegante;
}

infoXHora()
{
  # Informacion extra para mostrar cada hora
  # DEBE limpiar lo que escribe
  FIL=1;
  COL=0;
  limpiaFil;
  $RUTA_lcd_write/lcd_write.sh $FIL $COL "Ha pasado 1hora"
  sleep 5;
  limpiaFil;
  muestraFechaElegante;
}

presentacion()
{
  # Mis 3 segundos de gloria xD
  $RUTA_lcd_write/lcd_write.sh init;
  $RUTA_lcd_write/lcd_write.sh 0 0 "SMART CLOCK v$VERSION";
  $RUTA_lcd_write/lcd_write.sh 1 0 "Por Peperfus";
  sleep 3;
}


muestraDatos()
{
  $RUTA_lcd_write/lcd_write.sh init;
  # IPS del router:                 1234567890123456
  $RUTA_lcd_write/lcd_write.sh 0 0 "Las IPS de mis "
  $RUTA_lcd_write/lcd_write.sh 1 0 "interfaces son:"
  sleep 1;
  $RUTA_lcd_write/lcd_write.sh init;
  FIL=0;
  for IP in $(ifconfig | grep "inet addr" | cut -d : -f 2 | cut -d ' ' -f 1)
  do
   # echo $IP;
   $RUTA_lcd_write/lcd_write.sh $FIL 0 $IP;
   if [ $FIL -eq 0 ]; then FIL=1;
     else FIL=0;
   fi
   sleep 1
  done
  sleep 2

  # ZONA HORARIA
  # Es para asegurarnos de que la ZH
  # esta bien configurada y la hora
  # visualizada es fiable;
  muestraZonaHoraria;
  sleep 2;
  $RUTA_lcd_write/lcd_write.sh init;
  $RUTA_lcd_write/lcd_write.sh 0 0 "Cliente NTP:";
  NTP="Parado";
  pidof ntpd > /dev/null;
  if [ $? -eq 0 ]; then NTP="En marcha";  fi
  $RUTA_lcd_write/lcd_write.sh 1 0 "$NTP";
  sleep 2;
  $RUTA_lcd_write/lcd_write.sh init
  $RUTA_lcd_write/lcd_write.sh 0 0 "Conex. INTERNET:";
  $RUTA_lcd_write/lcd_write.sh 1 0 "Intentando...";
  sleep 1;
  INTERNET=KO;
  wget -qs http://google.com;
  if [[ $? -eq 0 ]]; then INTERNET=OK; fi
  $RUTA_lcd_write/lcd_write.sh 1 0 "$INTERNET             ";
  sleep 3;

  if [ "$INTERNET" == "OK" ]; then
    $RUTA_lcd_write/lcd_write.sh 0 0 "Sincronizando   ";
    $RUTA_lcd_write/lcd_write.sh 1 0 "con Internet ...";
    # Sincronizar reloj de la pantalla con Internet.
    calculaMinutos;
    calculaHora;

    # Si la hora es 0 es posible
    # que no haya podido coger la hora de Internet.
    # Asi que esperamos un tiempo hasta cogerla
    # o agotar un timeour; A no ser... que se encienda
    # el router a las 00 horas, que la hora seria
    # correcta.
    TIMEOUT=20;
    while [ $HORA -eq 0 ] && [ $TIMEOUT -ge 0 ]; do
      sleep 1;
      calculaHora;
      TIMEOUT=$((($TIMEOUT)-1));
      #echo $TIMEOUT;
    done
  else                               #1234567890123456
    $RUTA_lcd_write/lcd_write.sh 0 0 "Imposible sin-  ";
    $RUTA_lcd_write/lcd_write.sh 1 0 "cronizar reloj  ";
    sleep 2
    $RUTA_lcd_write/lcd_write.sh 0 0 "con Internet    ";
    $RUTA_lcd_write/lcd_write.sh 1 0 "actualmente.    ";
    sleep 2
    $RUTA_lcd_write/lcd_write.sh 0 0 "Se seguira in-  ";
    $RUTA_lcd_write/lcd_write.sh 1 0 "intentando.     ";
    sleep 2
    $RUTA_lcd_write/lcd_write.sh 0 0 "AVISO:          ";
    $RUTA_lcd_write/lcd_write.sh 1 0 "La hora puede   ";
    sleep 2
    $RUTA_lcd_write/lcd_write.sh 0 0 "ser incorrecta. ";
    $RUTA_lcd_write/lcd_write.sh 1 0 "Se corregira en ";
    sleep 2
    $RUTA_lcd_write/lcd_write.sh 0 0 "cuanto sea      ";
    $RUTA_lcd_write/lcd_write.sh 1 0 "posible.        ";
    sleep 2
  fi
}


############
## SCRIPT ##
############


  $RUTA_lcd_write/lcd_write.sh init;

  presentacion;
  muestraDatos;

  refrescar;

  while [ true ]; do
    while [ "$MINUTOS" != "00" ]; do
      FIL=0;
      COL=14;
      sleep 60;
      muestraMinutos;
#      infoXMinuto;
    done
    FIL=0;
    COL=11;
    muestraHoras;
#    infoXHora;
    # Para que vuelva a entrar en bucle minutos
    # actualizar pantalla una vez al dia:
    if [ "$HORA" == "00" ]; then refrescar; sleep 1; fi
    MINUTOS=-1;
  done;

Queda así:

(El vídeo es de la versión anterior del script).

Lo he probado un rato; no sé si tiene algún error; pero parece que va bien.
Si alguien encuentra algún error, o sugerencia...

Próximas ideas:
Mostrar wasaps
Mostrar resultados de fútbol
...
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Tki2000 en 01-10-2017, 17:24 (Domingo)
Graicas  ;D ;D ;D ;D

Ahora se me ocurren varias aplicaciones chulas para utilizar la pantalllita. La más inmediata, un simple reloj que informe de la fecha y hora.
raphik, ¿te parece bien que publique aquí en este mismo hilo los scripts que se me vayan ocurriendo para darle utilidad a la pantallita?

Si no lo ves adecuado, lo borro; pero yo creo que estaría bien tenerlo aquí mismo, por si alguien más se anima y quiere utilizar estos scripts, además de, por supuesto, mejorarlos, optimizarlos, corregirlos, modificarlos.... al antojo de quien quiera = Software libre.

"RELOJ" que muestra fecha y hora:
Código: [Seleccionar]
#!/bin/sh

./lcd_write.sh init;
./lcd_write.sh 0 0 "SMART CLOCK v1.0";
sleep 3
./lcd_write.sh init;


SEGUNDOS=0;
MINUTOS=0;
cd /root;

  ./lcd_write.sh init;
  # ZONA HORARIA
  ./lcd_write.sh 0 0 "Zona horaria:"
  ./lcd_write.sh 1 0 "$(cat /etc/config/system | grep zonename | cut -d \' -f 2)";
  sleep 4;

  # FECHA COMPLETA CON ANYO
  #./lcd_write.sh init;
  ./lcd_write.sh 0 0 "               ";
  # DIA
  ./lcd_write.sh 0 0 "$(date -I | cut -d - -f 3)";
  ./lcd_write.sh 0 2 "/";
  # MES
  ./lcd_write.sh 0 3 "$(date -I | cut -d - -f 2)";
  ./lcd_write.sh 0 5 "/";
  # ANYO
  ./lcd_write.sh 0 6 "$(date | tail -c 3)";

  DIAWEEK=$(date | head -c 3);
  case "$DIAWEEK" in
    Sun)
      DIASEMANA="Domingo";
      ;;
    Mon)
      DIASEMANA="Lunes";
      ;;
    Tue)
      DIASEMANA="Martes";
      ;;
    Wed)
      DIASEMANA="Mierco.";
      ;;
    Thu)
      DIASEMANA="Jueves";
      ;;
    Fri)
      DIASEMANA="Viernes";
      ;;
    Sat)
      DIASEMANA="Sabado";
      ;;
  esac

  # DIA SEMANA
  ./lcd_write.sh 0 9 "$DIASEMANA" ;

  sleep 5;

# REDUCIMOS FECHA A DIA/MES PORQUE NO CABE TODO

while true
do
  #./lcd_write.sh init;
  ./lcd_write.sh 0 0 "                ";
  # DIA
  ./lcd_write.sh 0 0 "$(date -I | cut -d - -f 3)";
  ./lcd_write.sh 0 2 "/";
  # MES
  ./lcd_write.sh 0 3 "$(date -I | cut -d - -f 2)";

  # HORA
  ./lcd_write.sh 0 8 "$(date | cut -d : -f 1 | tail -c 3)"
  ./lcd_write.sh 0 10 ":";

  # DIA SEMANA 2a linea:
  ./lcd_write.sh 1 0 "                "
  if [ "$DIASEMANA" == "Mierco." ]; then DIASEMANA=Miercoles; fi
  ./lcd_write.sh 1 0 "$DIASEMANA";

  MINUTOS=-1;
  while [ "$MINUTOS" -ne "00" ]; do
    MINUTOS=$(date -Iminute | cut -d : -f 2 | head -c 2);
    ./lcd_write.sh 0 11 "$MINUTOS";
    ./lcd_write.sh 0 13 ":";
    SEGUNDOS=-1;
    while [ "$SEGUNDOS" -ne "00" ]; do
      SEGUNDOS=$(date -Isecond | cut -d : -f 3 | head -c 2);
      ./lcd_write.sh 0 14 "$SEGUNDOS";
    done;
  done;
done;

Queda así:
...

Supongo que después de tener el cableado correctamente, ya puedes usar kmod-i2c-gpio-custom, para que aparezca el dispositivo en /dev, y usar lcd4linux para poner en la pantalla lo que quieras. Hay un driver para HD44780-I2C.

https://wiki.openwrt.org/doc/hardware/port.i2c (https://wiki.openwrt.org/doc/hardware/port.i2c)
https://lcd4linux.bulix.org/ (https://lcd4linux.bulix.org/)
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 01-10-2017, 19:22 (Domingo)
... Ahora se me ocurren varias aplicaciones chulas para utilizar la pantalllita. La más inmediata, un simple reloj que informe de la fecha y hora.
raphik, ¿te parece bien que publique aquí en este mismo hilo los scripts que se me vayan ocurriendo para darle utilidad a la pantallita?...

Claro que sí, me parece muy bien y te agradezco que los publiques aquí.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 01-10-2017, 19:54 (Domingo)
Supongo que después de tener el cableado correctamente, ya puedes usar kmod-i2c-gpio-custom, para que aparezca el dispositivo en /dev, y usar lcd4linux para poner en la pantalla lo que quieras. Hay un driver para HD44780-I2C.

Si se sigue el procedimiento del primer post (punto B.2), el dispositivo i2c debería verse como /dev/i2c-0. Nunca llegué a probar LCD4Linux. En las compilaciones actuales no aparece como paquete estándar. Habría que compilarlo o probar si funciona instalando alguno de los antiguos paquetes de la versión Barrier Breaker.

Código: [Seleccionar]
https://downloads.openwrt.org/barrier_breaker/14.07/brcm63xx/generic/packages/oldpackages/lcd4linux-custom_r1187-1_brcm63xx.ipk
https://downloads.openwrt.org/barrier_breaker/14.07/brcm63xx/generic/packages/oldpackages/lcd4linux-full_r1187-1_brcm63xx.ipk
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 02-10-2017, 18:56 (Lunes)
@peperfus
Permite que te sugiera algo de código que podrías utilizar en tu script.

El comando "date" permite utilizar formatos de salida que simplifican el código. Prueba:
Código: [Seleccionar]
date +"%d/%m/%y  %T"Fuente: http://www.elmundoenbits.com/2013/04/date-format-bash-linux.html#.WdJwYuZrzcu

Por defecto OpenWrt no implementa el comando "locale", pero se puede generar el día de la semana en español con poco código. Prueba:
Código: [Seleccionar]
set -- "lunes" "martes" "miércoles" "jueves" "viernes" "sábado" "domingo"
eval "echo \$$(date +%u)"
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 02-10-2017, 23:44 (Lunes)
Gracias

Lo de las opciones del date me lo imaginaba; me sonaba de haberlas usado alguna vez, pero me ha dado más pereza mirar la sintaxis que hacer el tocho manualmente   ;D ;D

Las otras dos opciones .... no tengo NPI...

De momento lo dejaré así. Ya si eso más adelante lo cambiaré.

Lo he actualizado arreglando unos cuantos fallos y añadiendo información como el estado de conecxión a Internet y si está en marcha ntpd. De esa forma podemos saber que la hora que muestra es fiable.
Este de momento ya lo dejo así.
El próximo script voy a intentar que muestre resultados de fútbol. O esa es la idea  ;D
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 03-10-2017, 14:00 (Martes)
Por cierto, raphik...
Por casualidad no sabrás los comandos para inicializar la LCD 2004, ¿verdad?  ^-^
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 03-10-2017, 21:44 (Martes)
Que yo sepa todos los LCD basados en la controladora HITACHI HD44780 (https://www.sparkfun.com/datasheets/LCD/HD44780.pdf) se inicializan de la misma manera, independientemente de su formato. Es decir, se inicializa lo mismo una 1604 que una 2004. El procedimiento de inicialización está descrito en las páginas 11 y 12 de este documento (http://galia.fc.uaslp.mx/~cantocar/microprocesadores/EL_Z80_PDF_S/19_DISPLAY_LCD_Z80.PDF) escrito por el profesor Carlos Canto Quintal. Otra cosa es cómo habría que posicionar el cursor para escribir en un posición determinada.

El mapa de posiciones para una pantalla 1602 es
(https://i.imgur.com/ZYpIjXB.gif)

Y el de una 2004
(https://i.imgur.com/v5y2KsZ.gif)
Si te fijas bien, una pantalla 2004 es en realidad una pantalla de dos filas y cuarenta columnas en la que las filas 0 y 1 se rompen en dos mitades que pasan a ser las filas 2 y 3.

Ejemplo de código para escribir el carácter "W" en la fila 2 (tercera fila), columna 7 (octava columna)
Código: [Seleccionar]
func_LCD I $((0x80+0x1B))
func_LCD C "W"

La función func_row_col() del primer post está pensada para posicionar el cursor en una pantalla de dos líneas. No es que no funcione en una de cuatro pero sería raro, por ejemplo, posicionar el cursor en la fila 0x00, columna 0x14 para escribir un carácter en la fila 0x03, columna 0x00.

Es más intuitiva esta otra
Código: [Seleccionar]
func_row_col()
{
  local base ;
  if [ $1 == 0 ]; then base=0x00; fi
  if [ $1 == 1 ]; then base=0x40; fi
  if [ $1 == 2 ]; then base=0x14; fi
  if [ $1 == 3 ]; then base=0x54; fi
  func_LCD I $((0x80+$base+$2))
}

No la he probado. Debería funcionar indistintamente tanto en pantallas de dos como de cuatro líneas. Si la pruebas y funciona, la incorporo al script.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 04-10-2017, 17:24 (Miércoles)
Gracias por la explicación y la mejora.

Lo de sumar $2 a $base lo entiendo, porque le sumas la columna al principio de cada fila, pero no entiendo lo del 0x80 del principio. Si puedes explicarlo.... gracias.


Me da este error:

Código: [Seleccionar]
root@LCD:~# ./lcd_write.sh 3 0 "Hola"
./lcd_write.sh: local: line 79: 0x00: bad variable name
./lcd_write.sh: line 79: : bad variable name

EDITO: ya está arreglado:

Por lo visto no se puede inicializar una variable a la vez que se declara, hay que hacerlo en una nueva línea:
Código: [Seleccionar]
local base;
base=0x00;

(https://s1.postimg.org/1smzedd2a7/2004.jpg)

Como ahora "me sobra" una pantallita, lo que haré será puentear sus puntos de dirección para cambiar la dirección de dispositivo y usarla en serie con esta. Pondré  un par de fotos cuando lo tenga.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 04-10-2017, 22:54 (Miércoles)

Offtopic:


A raíz de éste hilo, he empezado a montar un circuito de relés bajo I2C. (mi pantalla aún no ha salido)
He visto muchas cosas para la Pi, pero en bash no he visto casi nada, entiendo que para controlar el estado, el procedimiento es leer y escribir cada vez.
Una de mis dudas es; si existe alguna librería que ayude a calcular el nuevo estado cuando por ejemplo el estado previo es 0x5D y necesito que escriba 0x5F , o si hay que especificar previamente los posibles estados de los dispositivos del bus ¿...? no tengo ni idea...

Un script  que estuve mirando, parecía que exportaba los puntos como GPIO, ¿es posible o rentable tratarlos así? (a ver si encuentro de nuevo la página)

En fin, es para enloquecer, aunque divertido...  :D  (cuando no sabemos)


EDITO:


Estoy usando el propio de la pantalla i modificandolo, creo que funcionará genial...
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 04-10-2017, 23:10 (Miércoles)
Conseguido!!

En efecto, lo más simple para el control de relés en el bus I2C, es convertir los pines en simples GPIO.

Esta fue mi referencia: http://www.pragti.ch/kippycam/2012/08/15/Adding-an-I2C-interface-to-the-TL-WR703N/
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 05-10-2017, 11:54 (Jueves)
@Fitch

Para manejar relés vía I²C se suele utiliza un expansor de bus tipo PCF8574.
(https://i.imgur.com/8Vyn15Q.jpg)

El módulo de la foto no incorpora relés, pero vale perfectamente para entender cómo se controla este tipo de dispositivos.

El cable I²C del router se enchufa al conector dupont macho de la izquierda. A la derecha hay otro conector dupont hembra al que se podría conectar a su vez un segundo módulo expansor, y a éste un tercero... y así sucesivamente hasta un total de ocho módulos.

Cuando se conecta más de un módulo a mismo bus, hay que asignar una dirección física distinta a cada uno de ellos. Esto se consigue modificando la posición de los tres jumpers de color naranja.

En la parte superior hay un conector amarillo. El pin de más a la izquierda es 0V. El resto son 8 salidas digitales que pueden tomar los valores 0 o +5V, en función los valores binarios 0 o 1 que les asignemos.

Las 8 salidas digitales se pueden controlar desde una consola de OpenWRT o desde un script. Para establecer el valor de las salidas se usa el comando "i2cset" y para conocer su estado previo "i2cget".

Para entender lo que sigue ahora, hay que estar un poco familiarizado con los sistemas de numeración binario, hexadecimal y su aritmética.

Supongamos que queremos poner la patilla P7 de la tarjeta expansora a +5V y el resto a 0V. Bastará con enviar a la placa el valor binario 0b10000000. El problema es que los scripts no trabajan con binarios. Sólo se puede utilizar decimal y hexadecimal. Sabiendo que el valor decimal 0b10000000 equivale al valor hexadecimal 0x80 y suponiendo que el módulo estuviera conectado en la dirección 0x27 del bus 0, el código a enviar será
Código: [Seleccionar]
i2cset -y 0 0x27 0x80
Si lo que queremos en realidad es activar una o más patillas dejando invariable el resto, no queda otra que tirar del operador binario OR. Primero habría que conocer el estado previo de todas las patillas, luego habría que calcular el valor a enviar y por último enviarlo.

Lo vemos con un ejemplo: activar P7 preservando el estado de las demás salidas. Sabiendo que 0x10000000 equivale a 0x80,
Código: [Seleccionar]
prevState=$((i2cget -y 0 0x27))  # lectura del estado actual
newState=$(($prevState | 0x80))  #cálculo del nuevo valor respetando el estado previo
i2cset -y 0 0x27 $newState  # escritura del nuevo estado

Como esto se está poniendo un poco tocho lo dejo ya. Si de verdad interesa, podemos ver cómo desactivar determinadas patillas, respetando los valores previos, en una próxima entrega.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 05-10-2017, 12:36 (Jueves)
@Fitch

Para manejar relés vía I²C se suele utiliza un expansor de bus tipo PCF8574.
(https://i.imgur.com/8Vyn15Q.jpg)

El módulo de la foto no incorpora relés, pero vale perfectamente para entender cómo se controla este tipo de dispositivos.

El cable I²C del router se enchufa al conector dupont macho de la izquierda. A la derecha hay otro conector dupont hembra al que se podría conectar a su vez un segundo módulo expansor, y a éste un tercero... y así sucesivamente hasta un total de ocho módulos.

Cuando se conecta más de un módulo a mismo bus, hay que asignar una dirección física distinta a cada uno de ellos. Esto se consigue modificando la posición de los tres jumpers de color naranja.

En la parte superior hay un conector amarillo. El pin de más a la izquierda es 0V. El resto son 8 salidas digitales que pueden tomar los valores 0 o +5V, en función los valores binarios 0 o 1 que les asignemos.

Las 8 salidas digitales se pueden controlar desde una consola de OpenWRT o desde un script. Para establecer el valor de las salidas se usa el comando "i2cset" y para conocer su estado previo "i2cget".

Para entender lo que sigue ahora, hay que estar un poco familiarizado con los sistemas de numeración binario, hexadecimal y su aritmética.

Supongamos que queremos poner la patilla P7 de la tarjeta expansora a +5V y el resto a 0V. Bastará con enviar a la placa el valor binario 0b10000000. El problema es que los scripts no trabajan con binarios. Sólo se puede utilizar decimal y hexadecimal. Sabiendo que el valor decimal 0b10000000 equivale al valor hexadecimal 0x80 y suponiendo que el módulo estuviera conectado en la dirección 0x27 del bus 0, el código a enviar será
Código: [Seleccionar]
i2cset -y 0 0x27 0x80
Si lo que queremos en realidad es activar una o más patillas dejando invariable el resto, no queda otra que tirar del operador binario OR. Primero habría que conocer el estado previo de todas las patillas, luego habría que calcular el valor a enviar y por último enviarlo.

Lo vemos con un ejemplo: activar P7 preservando el estado de las demás salidas. Sabiendo que 0x10000000 equivale a 0x80,
Código: [Seleccionar]
prevState=$((i2cget -y 0 0x27))  # lectura del estado actual
newState=$(($prevState | 0x80))  #cálculo del nuevo valor respetando el estado previo
i2cset -y 0 0x27 $newState  # escritura del nuevo estado

Como esto se está poniendo un poco tocho lo dejo ya. Si de verdad interesa, podemos ver cómo desactivar determinadas patillas, respetando los valores previos, en una próxima entrega.

El tema es interesantísimo.
Por la noche, subiré fotos de las pruebas y placas montadas y funcionando a todo tren!! Dos modulos PCF8574, uno con 8 reles y otro con botones táctiles... desde luego al bus se le pueden sumar LCD sensores y todo lo que se tuerza...

Ya digo la solución mas simple encontrada ha sido convertir los pines P7=>P0 en GPIO y tratarlos con "out" "in"  "0 y 1" ya que se pueden exportar lo pines de un solo adaptador del bus o dos y dejar los sensores como toca... en fin, irán saliendo mas cosas, porque esto tiene varias maneras de tratarse.

No se si será ya prudente abrir otro hilo para esto o seguir aquí....
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 05-10-2017, 12:37 (Jueves)
Lo de sumar $2 a $base lo entiendo, porque le sumas la columna al principio de cada fila, pero no entiendo lo del 0x80 del principio. Si puedes explicarlo.... gracias.

En la página 22 del documento del profesor Carlos Canto Quintal (http://galia.fc.uaslp.mx/~cantocar/microprocesadores/EL_Z80_PDF_S/19_DISPLAY_LCD_Z80.PDF), se puede ver que la instrucción para situar el cursor en una posición determinada tiene el formato siguiente
(https://i.imgur.com/XioIVFq.jpg)

O sea, la instrucción consiste en un 1 en el 7º bit, seguido de la dirección de memoria que indica la posición del cursor.

Lo vemos con un ejemplo: calcular la instrucción que posiciona el cursor en la columna 6, fila 2 de un LCD 2004
(https://i.imgur.com/H42q3gD.jpg)

La dirección de memoria del cursor se calcula sumando a la base (0x14) el valor de la columna:
0x14 + 0x06 = 0x1A (=0b00011010, en binario)

Finalmente, la instrucción se obtiene sumando el valor binario 0b1000000 (0x80, en hexadecimal) a la dirección de memoria del cursor:
0b10000000 + 0b00011010 = 0b10011010 (0x9A, en hexadecimal).

La instrucción que situa el cursor en la columna 6, fila 2 es 10011010.


En breve, la instrucción para posicionar el cursor se calcula sumando 0x80 a la dirección de memoria del cursor.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 05-10-2017, 22:00 (Jueves)
Hace unos días a raíz de este hilo de raphik (https://foro.seguridadwireless.net/openwrt/proyecto-gpio-manejo-de-una-pantalla-lcd-via-bus-i2c/) se me ocurrió la idea de montar un circuito de relés y botones bajo el bus I2C, poco a poco iré agregando sensores y alguna pantalla, es increíble la versatilidad y capacidad de expansión que tiene.
Soy bien consiente de mi carencia de conocimientos en todo esto, pero con pasión, empeño e imaginación lo voy sacando. (mas que nada, confío en la ayuda de la gente de éste foro  ;) )

Los módulos de expansión I2C que estoy usando son los PCF8574.

(http://s9.tinypic.com/n6dppf_th.jpg)  (http://oi63.tinypic.com/n6dppf.jpg)    (http://s9.tinypic.com/zwbb86_th.jpg) (http://oi65.tinypic.com/zwbb86.jpg)

Ahora, citando a @raphik
Citar
Para entender lo que sigue ahora, hay que estar un poco familiarizado con los sistemas de numeración binario, hexadecimal y su aritmética.

Yo uso un soft conversor de base bidireccional "GHex" (dec, Octal, hex, binario y ASCII) recomendable para familiarizarse con todo esto.

Citar
Si lo que queremos en realidad es activar una o más patillas dejando invariable el resto, no queda otra que tirar del operador binario OR. Primero habría que conocer el estado previo de todas las patillas, luego habría que calcular el valor a enviar y por último enviarlo.

Esta parte la solucioné de esta manera creando un "nuevo device" que para mover los relé veo que es simple y suficiente, aunque hay algo que me dice que puede no ser lo mas eficiente.

Código: [Seleccionar]
echo pcf8574 0x39 > /sys/bus/i2c/devices/i2c-0/new_device
echo pcf8574 0x38 > /sys/bus/i2c/devices/i2c-0/new_device

Las dos nuevas GPIOBase
Código: [Seleccionar]
find /sys/class/gpio/gpio*
/sys/class/gpio/gpio481
/sys/class/gpio/gpio483
/sys/class/gpio/gpiochip458
/sys/class/gpio/gpiochip466
/sys/class/gpio/gpiochip474
/sys/class/gpio/gpiochip506



Se ve la carga en el dmesg (extracto)
Citar
i2c 0-0039: uevent
<7>[  268.825591] pcf857x 0-0039: probe
<7>[  268.825666] i2c i2c-0: master_xfer[0] R, addr=0x39, len=1
<6>[  268.826457] pcf857x 0-0039: probed
<7>[  268.830081] i2c i2c-0: client [pcf8574] registered with bus id 0-0039
<6>[  268.830133] i2c i2c-0: new_device: Instantiated device pcf8574 at 0x39
<7>[  281.481288] i2c 0-0038: uevent
<7>[  281.481799] pcf857x 0-0038: probe
<7>[  281.481875] i2c i2c-0: master_xfer[0] R, addr=0x38, len=1
<6>[  281.482559] pcf857x 0-0038: probed
<7>[  281.486199] i2c i2c-0: client [pcf8574] registered with bus id 0-0038
<6>[  281.486263] i2c i2c-0: new_device: Instantiated device pcf8574 at 0x38

---------- Y la carga de todo el Mapeado...

i2c i2c-0: master_xfer[0] W, addr=0x39, len=1
<7>[  745.166910] i2c i2c-0: master_xfer[0] W, addr=0x39, len=1
<7>[  752.678994] i2c i2c-0: master_xfer[0] W, addr=0x39, len=1
<7>[  752.680005] i2c i2c-0: master_xfer[0] W, addr=0x39, len=1
<7>[  765.262345] i2c i2c-0: master_xfer[0] W, addr=0x39, len=1
<7>[  765.263334] i2c i2c-0: master_xfer[0] W, addr=0x39, len=1
<7>[ 1737.932554] i2c i2c-0: ioctl, cmd=0x705, arg=0x7fbbe8f8
<7>[ 1737.932745] i2c i2c-0: ioctl, cmd=0x703, arg=0x03
<7>[ 1737.932793] i2c i2c-0: ioctl, cmd=0x720, arg=0x7fbbe8fc
<7>[ 1737.932834] i2c i2c-0: master_xfer[0] W, addr=0x03, len=0
<7>[ 1737.933647] i2c i2c-0: NAK from device addr 0x03 msg #0
<7>[ 1737.933746] i2c i2c-0: ioctl, cmd=0x703, arg=0x04
<7>[ 1737.933790] i2c i2c-0: ioctl, cmd=0x720, arg=0x7fbbe8fc
<7>[ 1737.933826] i2c i2c-0: master_xfer[0] W, addr=0x04, len=0
<7>[ 1737.934612] i2c i2c-0: NAK from device addr 0x04 msg #0
<7>[ 1737.934702] i2c i2c-0: ioctl, cmd=0x703, arg=0x05
<7>[ 1737.934742] i2c i2c-0: ioctl, cmd=0x720, arg=0x7fbbe8fc
<7>[ 1737.934777] i2c i2c-0: master_xfer[0] W, addr=0x05, len=0
<7>[ 1737.935708] i2c i2c-0: NAK from device addr 0x05 msg #0
<7>[ 1737.935936] i2c i2c-0: ioctl, cmd=0x703, arg=0x06
<7>[ 1737.935981] i2c i2c-0: ioctl, cmd=0x720, arg=0x7fbbe8fc
<7>[ 1737.936028] i2c i2c-0: master_xfer[0] W, addr=0x06, len=0
<7>[ 1737.936809] i2c i2c-0: NAK from device addr 0x06 msg #0
<7>[ 1737.936886] i2c i2c-0: ioctl, cmd=0x703, arg=0x07
<7>[ 1737.936919] i2c i2c-0: ioctl, cmd=0x720, arg=0x7fbbe8fc


Para ponerlo a 0 o a 1 basta con el típico "gpio.sh 1 out 0 | gpio.sh 1 out 1"

Esta manera es lo que buscaba en un inicio, pero no encontraba un ejemplo claro de donde tirar, ya que el 99% de la gente lo hace en la pi en phyton o con otras librerias que no he visto en openwrt.
Citar
Lo vemos con un ejemplo: activar P7 preservando el estado de las demás salidas. Sabiendo que 0x10000000 equivale a 0x80,
Código:
prevState=$((i2cget -y 0 0x27))  # lectura del estado actual
newState=$(($prevState | 0x80))  #cálculo del nuevo valor respetando el estado previo
i2cset -y 0 0x27 $newState  # escritura del nuevo estado
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 07-10-2017, 19:54 (Sábado)
¿Como puedo definir un botón hecho a partir de un GPIO, para que me cree eventos y que sean recogidos en el logread? teniendo en cuenta que dichos botones no están definidos en el dts de la placa?
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 10-10-2017, 22:14 (Martes)
Hola, Ficht. Me está llamando mucho la atención lo de los relés y me gustaría subirme al carro, aunque será mejor que comentemos este tema en otro hilo, porque esto ya poco tiene que ver con la pantallita de caracteres.

Un día de estos próximos abro un hilo, que tengo bastantes dudas y espero que me eches un cable !  :-*  ;D ;D
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 10-10-2017, 22:23 (Martes)
Si, estuve pensando en abrir otro hilo dedicado antes de postear, pero me da palo, no estoy a la altura como para iniciarlo... (Yo voy siempre por el camino largo de ensayo y error) ;)

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 10-10-2017, 23:17 (Martes)
Citar
Si, estuve pensando en abrir otro hilo dedicado antes de postear, pero me da palo, no estoy a la altura como para iniciarlo... (Yo voy siempre por el camino largo de ensayo y error) Wink


No digas eso, hombre.... Si yo hiciera lo mismo, no habría posteado prácticamente nada. Te habla uno de los más ignorantes del foro y he aprendido muchísimo gracias a él; además, cuanta más experiencia y conocimiento compartamos, mejor: tanto de lo correcto como de lo incorrecto. Cuando hacemos algo mal aprendemos; y si lo compartimos, los demás también aprenden. Yo doy bastante caña; soy muy cabezota....

Bueno, lo dicho: Mañana o pasado... iniciaré un hilo con la movida esa de los relés. Me parece MUY interesante ese tema. Así que haré un "tuto" al mismo tiempo que lo aprendo. Me mola mucho la idea esa de usar la placa expansora para poder controlar varios relés; pero eso es lo que menos controlo; qué "comandos" tengo que enviar a la plaquita para abrir uno u otro relé, etc... Ya me he pedido un par de relés; aunque seguramente pediré una plaquita de esas de 4 como las tuyas; y un módulo de esos expansor, como el que usan las pantallitas LCD. Mi idea es ponerlo por ejemplo para controlar la iluminación del acuario y alguna cosilla más.

Ya que dices que no tienes nivel para iniciar un hilo, lo iniciaré yo con mucho menos nivel  >:D ^-^ :P ;D ;D. Sé sabedor de que tus ayudas y comentarios serán honorablemente bienvenidos, Ficht.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 11-10-2017, 00:15 (Miércoles)
Citar
Si, estuve pensando en abrir otro hilo dedicado antes de postear, pero me da palo, no estoy a la altura como para iniciarlo... (Yo voy siempre por el camino largo de ensayo y error) Wink


No digas eso, hombre.... Si yo hiciera lo mismo, no habría posteado prácticamente nada. Te habla uno de los más ignorantes del foro y he aprendido muchísimo gracias a él; además, cuanta más experiencia y conocimiento compartamos, mejor: tanto de lo correcto como de lo incorrecto. Cuando hacemos algo mal aprendemos; y si lo compartimos, los demás también aprenden. Yo doy bastante caña; soy muy cabezota....

Bueno, lo dicho: Mañana o pasado... iniciaré un hilo con la movida esa de los relés. Me parece MUY interesante ese tema. Así que haré un "tuto" al mismo tiempo que lo aprendo. Me mola mucho la idea esa de usar la placa expansora para poder controlar varios relés; pero eso es lo que menos controlo; qué "comandos" tengo que enviar a la plaquita para abrir uno u otro relé, etc... Ya me he pedido un par de relés; aunque seguramente pediré una plaquita de esas de 4 como las tuyas; y un módulo de esos expansor, como el que usan las pantallitas LCD. Mi idea es ponerlo por ejemplo para controlar la iluminación del acuario y alguna cosilla más.

Ya que dices que no tienes nivel para iniciar un hilo, lo iniciaré yo con mucho menos nivel  >:D ^-^ :P ;D ;D. Sé sabedor de que tus ayudas y comentarios serán honorablemente bienvenidos, Ficht.

Bueeeno, lo intentaremos, gracias por los ánimos!!  :D :D
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 28-10-2017, 20:33 (Sábado)
Cita de: raphik
..... La patilla P3 enciende o apaga el led que ilumina el fondo de la pantalla.
(http://i.imgur.com/gFdFOAA.jpg)
 .....

¿Esa patilla P3...? ¿No está en la PCF8574? Estaría guay poder encender y apagar el led de iluminación de la pantalla por software.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 28-10-2017, 21:16 (Sábado)
Cita de: raphik
..... La patilla P3 enciende o apaga el led que ilumina el fondo de la pantalla.
(http://i.imgur.com/gFdFOAA.jpg)
 .....

¿Esa patilla P3...? ¿No está en la PCF8574? Estaría guay poder encender y apagar el led de iluminación de la pantalla por software.

Pruébalo a ver si está cableada... y si no,  ¿crees que igual se puede cortar a la entrada del led y cablearlo al pin? puedes probar si el pin se activa.
Yo no tengo la pantalla... pero me da a que se puede cortar la alimentación del led y pasarlo al pin (creo que el led está por un extremo de la plaquita...)
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 28-10-2017, 23:58 (Sábado)
Rula !! :)



Lo he probado con el comando:
Código: [Seleccionar]
i2cset -y 0 0x27 0x0O sea, enviando un 0 a la patilla 0

De hecho, lo acabo de probar y vale con activar cualquier patilla de la 0 a la 3, (0x0 a 0x7).
(https://s1.postimg.org/1gcpvdx6nz/LCD.jpg)
Mola :)
Ahora sólo falta la señal hexadecimal para encender / apagar la pantallita sin alterar su contenido. Si la encuentro la pongo.

PD: No sé por qué mi móvil no enfoca bien la consola, la pantalla del ordenador. Es algo que nunca se me ha dado bien y me jode mucho, porque tengo un buen móvil con buena cámara, un Galaxy S5 y debería verse genial, pero no sé cómo coj... se hace para que enfoque bien la pantalla.
Título: Re: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 29-10-2017, 11:53 (Domingo)
Rula !! :)



Lo he probado con el comando:
Código: [Seleccionar]
i2cset -y 0 0x27 0x0O sea, enviando un 0 a la patilla 0

De hecho, lo acabo de probar y vale con activar cualquier patilla de la 0 a la 3, (0x0 a 0x7).
(https://s1.postimg.org/1gcpvdx6nz/LCD.jpg)
Mola :)
Ahora sólo falta la señal hexadecimal para encender / apagar la pantallita sin alterar su contenido. Si la encuentro la pongo.

PD: No sé por qué mi móvil no enfoca bien la consola, la pantalla del ordenador. Es algo que nunca se me ha dado bien y me jode mucho, porque tengo un buen móvil con buena cámara, un Galaxy S5 y debería verse genial, pero no sé cómo coj... se hace para que enfoque bien la pantalla.
Has probado 0x10 ??

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 29-10-2017, 16:52 (Domingo)
Cita de: Ficht
...Has probado 0x10 ??...

Qué curioso... Pues ahora que me fijo,

4 bits pueden representar hasta un total de 16 valores (desde el 0000 hasta el 1111), sin embargo, sólo me funciona desde el 0000 (0x0) hasta el 0111 (0x7).

Acabo de probar el 0x10 que comentas y también apaga la pantallita.

Ni los valores
0x8
0x9
0xA
0xB
0xC
0xD
0xE
0xF
La apagan, en cambio el 0x10 sí.  ???
Me falta el valor para volver a encender la pantallita. (No es que no me atreva, valor y coraje tengo de sobra, lo que me falta es el numerito hexadecimal  ;D )
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 29-10-2017, 17:30 (Domingo)
Cita de: Ficht
...Has probado 0x10 ??...

Qué curioso... Pues ahora que me fijo,

4 bits pueden representar hasta un total de 16 valores (desde el 0000 hasta el 1111), sin embargo, sólo me funciona desde el 0000 (0x0) hasta el 0111 (0x7).

Acabo de probar el 0x10 que comentas y también apaga la pantallita.

Ni los valores
0x8
0x9
0xA
0xB
0xC
0xD
0xE
0xF
La apagan, en cambio el 0x10 sí.  ???
Me falta el valor para volver a encender la pantallita. (No es que no me atreva, valor y coraje tengo de sobra, lo que me falta es el numerito hexadecimal  ;D )

Hola, has probado por ejemplo 0x8f  ?

luego  probaría también 0x2f ; 0x4f ; 0xcf ; 0xf
Sigue comentando a ver que sale...
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 29-10-2017, 18:00 (Domingo)
...

Hola, has probado por ejemplo 0x8f  ?

luego  probaría también 0x2f ; 0x4f ; 0xcf ; 0xf
Sigue comentando a ver que sale...


0x8f: nada
0x2f: nada
0x4f: nada
0xcf: nada
0xf: nada (este ya lo había probado)

¿Qué estás intentando, darme otro susto como el de los relés  ;D?
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 29-10-2017, 18:12 (Domingo)
...

Hola, has probado por ejemplo 0x8f  ?

luego  probaría también 0x2f ; 0x4f ; 0xcf ; 0xf
Sigue comentando a ver que sale...


0x8f: nada
0x2f: nada
0x4f: nada
0xcf: nada
0xf: nada (este ya lo había probado)

¿Qué estás intentando, darme otro susto como el de los relés  ;D?

0xff  y  luego  0xef ??

Estoy envidiando no tener la panallita  ;D
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 29-10-2017, 20:07 (Domingo)
...

Hola, has probado por ejemplo 0x8f  ?

luego  probaría también 0x2f ; 0x4f ; 0xcf ; 0xf
Sigue comentando a ver que sale...


0x8f: nada
0x2f: nada
0x4f: nada
0xcf: nada
0xf: nada (este ya lo había probado)

¿Qué estás intentando, darme otro susto como el de los relés  ;D?

0xff  y  luego  0xef ??

Estoy envidiando no tener la panallita  ;D

Agua. Nada de nada.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 29-10-2017, 20:40 (Domingo)
...

Hola, has probado por ejemplo 0x8f  ?

luego  probaría también 0x2f ; 0x4f ; 0xcf ; 0xf
Sigue comentando a ver que sale...


0x8f: nada
0x2f: nada
0x4f: nada
0xcf: nada
0xf: nada (este ya lo había probado)

¿Qué estás intentando, darme otro susto como el de los relés  ;D?

0xff  y  luego  0xef ??

Estoy envidiando no tener la panallita  ;D

Agua. Nada de nada.

Imagino que al reconectar la pantalla se inicia encendida verdad?
si en ese caso haces un i2cget => a la dirección de esta, que estado revela?
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 29-10-2017, 20:46 (Domingo)
...

Hola, has probado por ejemplo 0x8f  ?

luego  probaría también 0x2f ; 0x4f ; 0xcf ; 0xf
Sigue comentando a ver que sale...


0x8f: nada
0x2f: nada
0x4f: nada
0xcf: nada
0xf: nada (este ya lo había probado)

¿Qué estás intentando, darme otro susto como el de los relés  ;D?

0xff  y  luego  0xef ??

Estoy envidiando no tener la panallita  ;D

Agua. Nada de nada.

Imagino que al reconectar la pantalla se inicia encendida verdad?
si en ese caso haces un i2cget => a la dirección de esta, que estado revela?


Sí, se inicia encendida. Me devuelve su propia dirección: 0x27
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 29-10-2017, 20:50 (Domingo)
...

Hola, has probado por ejemplo 0x8f  ?

luego  probaría también 0x2f ; 0x4f ; 0xcf ; 0xf
Sigue comentando a ver que sale...


0x8f: nada
0x2f: nada
0x4f: nada
0xcf: nada
0xf: nada (este ya lo había probado)

¿Qué estás intentando, darme otro susto como el de los relés  ;D?

0xff  y  luego  0xef ??

Estoy envidiando no tener la panallita  ;D

Agua. Nada de nada.

Imagino que al reconectar la pantalla se inicia encendida verdad?
si en ese caso haces un i2cget => a la dirección de esta, que estado revela?


Sí, se inicia encendida. Me devuelve su propia dirección: 0x27

y lo has probado?  0x10 y luego 0x27 ?
pruébalo ver que sale-...
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 29-10-2017, 22:47 (Domingo)
root@OpenWrt:~# i2cset -y 0 0x27 0x10
La pantalla se apaga.
root@OpenWrt:~# i2cset -y 0 0x27 0x27
No pasa nada.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 30-10-2017, 18:27 (Lunes)
Las líneas de datos D0 a D3 de nuestras pantallitas LCD no están conectadas, de ahí que sólo se pueda trabajar en modo 4-bits.
(https://i.imgur.com/g4nrcQH.png)

La patilla P3 no está conectada a ningún circuito interno del LCD, sino a un transistor alojado en la placa expansora, que actúa como relé y permite manejar el LED. P3=1 lo enciende y P3=0 lo apaga.

Como no es posible cambiar el valor de P3 aisladamente, habrá que averiguar qué valores dar a las patillas P2, P1 y P0 para no provocar efectos indeseados. Lo mejor es echarle un vistazo al manual y ver para qué sirve cada línea de control:
(https://i.imgur.com/VlBLe9Y.png)

Una vez visto, parece razonable dejar P2=0 (ENabled, 0), P1=1 (RW, 1 modo lectura) y P0=0 (RS, 0 aunque daría igual si se pone 1).  Es decir:

bx1010 para encender el LED => 0x0A => i2cset -y 0 0x27 0x0A
bx0010 para apagar el LED    => 0X02 => i2cset -y 0 0x27 0x02

Sólo queda probar si funciona.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 30-10-2017, 20:54 (Lunes)
Funciona, así mola más. Muchas gracias, raphik.

Aunque si te digo la verdad.... y sintiéndolo mucho... no entiendo la explicación.  :-[

Entiendo que P2=E=Enabled
P1=RW
P0=RS

pero después de la explicación de las líneas de control (que son 3), pones 4 bits  ???

No lo termino de entender
¿Cuál es la correspondencia de cada bit con cada linea de control?
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 31-10-2017, 06:50 (Martes)
Intentaré explicarlo. Como sabemos, la instrucción i2cset -y 0 0x27 0x0A envía dos bytes, o lo que es lo mismo, ocho bits al LCD.

En el caso del ejemplo, los dos bytes que se envían son 0A. Su  equivalente binario es 00001010. Cada cifra binaria da valor a cada una de las patillas P7 a P0 de la tarjeta expansora y a su vez a cada línea de datos y de control del módulo LCD:

0   0   0   0   1   0   1   0
↓   ↓   ↓   ↓   ↓   ↓   ↓   ↓
P7  P6  P5  P4  P3  P2  P1  P0
↓   ↓   ↓   ↓   ↓   ↓   ↓   ↓
D7  D6  D5  D4  LED E   RW  RS


No lo termino de entender
¿Cuál es la correspondencia de cada bit con cada linea de control?
Líneas de datos: D7 D6 D5 D4, controlada por los cuatro primeros bits.
Líneas de control: E  RW  RS, controlada por los tres últimos bits.
El LED se controla mediante el bit número 5, a través de la patilla P3. La patilla P3 es una patilla un tanto especial, porque no está conectada a ninguna línea del módulo LCD.

Teniendo en cuenta lo anterior, se puede encender el LED de forma segura con cualquier valor que responda al esquema ? ? ? ? 1 0 1 ?. O lo que es lo mismo, un número hexadecimal de dos cifras que acabe en A ó B: 0x0A, 0x0B, 0x1A, 0x1B, ..., 0xEA, 0xEB, 0xFA, 0xFB.

El esquema para apagarlo es ? ? ? ? 0 0 1 ?. Es decir, un número hexadecimal de dos cifras que acabe en 2 ó 3: 0x02, 0x03, 0x12, 0x13, ..., 0xE2, 0xE3, 0xF2, 0xF3.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 31-10-2017, 10:03 (Martes)
Como ya dije en otro post, hace unos días freí las pistas de mi AR-5387un.
(https://i.imgur.com/kUQ7qFm.png)

Desde entonces he estado buscando la manera de conectar el LCD al puerto serie o al USB del router. Finalmente, he optado por una solución económica y facilona que pasa por utilizar un arduino nano de puente entre el router y el módulo LCD.

Es un proyecto interesante, pero que no tiene cabida en este hilo, dado que no utiliza GPIOs ni bus i2c.

PREGUNTA: Quisiera subir un vídeo en otro hilo. ¿Cómo se hace?
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Tki2000 en 31-10-2017, 13:55 (Martes)
Como ya dije en otro post, hace unos días freí las pistas de mi AR-5387un.
(https://i.imgur.com/kUQ7qFm.png)

Desde entonces he estado buscando la manera de conectar el LCD al puerto serie o al USB del router. Finalmente, he optado por una solución económica y facilona que pasa por utilizar un arduino nano de puente entre el router y el módulo LCD.

Es un proyecto interesante, pero que no tiene cabida en este hilo, dado que no utiliza GPIOs ni bus i2c.

Ya puestos, pónle el firmware firmata al arduino, y utiliza el paquete firmata en openwrt. Creo que firmata puede comunicarse con los dispositivos I2C, así que de rebote tienes I2C a través de puerto USB, y no necesitas quemar más pistas...  >:D
Título: Re: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 31-10-2017, 17:40 (Martes)
Como ya dije en otro post, hace unos días freí las pistas de mi AR-5387un.
(https://i.imgur.com/kUQ7qFm.png)

Desde entonces he estado buscando la manera de conectar el LCD al puerto serie o al USB del router. Finalmente, he optado por una solución económica y facilona que pasa por utilizar un arduino nano de puente entre el router y el módulo LCD.

Es un proyecto interesante, pero que no tiene cabida en este hilo, dado que no utiliza GPIOs ni bus i2c.

PREGUNTA: Quisiera subir un vídeo en otro hilo. ¿Cómo se hace?
Yo creo que "al menos los mortales" no podemos subir vídeos al foro... Yo lo que hago es buscar un alojamiento online o Youtube y poner el link...

Esto responde? O no he comprendido nada? ;)

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 31-10-2017, 17:57 (Martes)
Con las fotos lo que normalmente hago es subirla a un recurso de red (p.e., imgur) y publicar el enlace entre dos etiquetas [ img] y [ /img]

Con el vídeo, lo he subido a YouTube, pero no he podido publicarlo. Supongo que hago algo mal, porque peperfus sí ha podido publicar vídeos. (Ver mensaje https://foro.seguridadwireless.net/openwrt/proyecto-gpio-manejo-de-una-pantalla-lcd-via-bus-i2c/msg360114/#msg360114)

Por cierto, el vídeo de peperfus puedo verlo con M. Edge, pero no con IE.
Título: Re: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 31-10-2017, 18:03 (Martes)
Con las fotos lo que normalmente hago es subirla a un recurso de red (p.e., imgur) y publicar el enlace entre dos etiquetas [ img] y [ /img]

Con el vídeo, lo he subido a YouTube, pero no he podido publicarlo. Supongo que hago algo mal, porque peperfus sí ha podido publicar vídeos. (Ver mensaje https://foro.seguridadwireless.net/openwrt/proyecto-gpio-manejo-de-una-pantalla-lcd-via-bus-i2c/msg360114/#msg360114)

Por cierto, el vídeo de peperfus puedo verlo con M. Edge, pero no con IE.
Si, es verdad, pero hay una forma, si subes de nivel (saliendo de openwrt) en el foro, hay una entrada que se explica cómo subir vídeos de YouTube...

Ahora desde Tapatalk no veo el link, pero por ahí anda.

Enviado desde mi PRA-LX1 mediante Tapatalk

Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 31-10-2017, 19:10 (Martes)
Ok, ya lo he visto. Hay que poner sólo el "código" del vídeo youtube. Es decir, si la url del vídeo es
, hay que poner únicamente lo que va detrás del signo igual:
Código: [Seleccionar]
[youtube]EYPsCChMwfk[/youtube]
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 31-10-2017, 20:35 (Martes)
Ok, ya lo he visto. Hay que poner sólo el "código" del vídeo youtube. Es decir, si la url del vídeo es
, hay que poner únicamente lo que va detrás del signo igual:
Código: [Seleccionar]
[youtube]EYPsCChMwfk[/youtube]


Mola !, algo así tenía pensado yo intentar hacer, con un lector RSS para poner noticias, resultados de fútbol, o cosas por el estilo.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 03-12-2017, 01:16 (Domingo)
Hola.
Aquí estoy peleando con un LCD que ya no se por donde...

El comando i2cdetect da una salida un poco loca ¿a que puede deberse =así a priori=?

Citar
root@LEDE:~# i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
10: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
20: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
30: 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f
40: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f
50: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f
60: 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f
70: 70 71 72 73 74 75 76 77
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Tki2000 en 03-12-2017, 16:59 (Domingo)
Hola.
Aquí estoy peleando con un LCD que ya no se por donde...

El comando i2cdetect da una salida un poco loca ¿a que puede deberse =así a priori=?

Citar
root@LEDE:~# i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
10: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
20: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
30: 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f
40: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f
50: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f
60: 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f
70: 70 71 72 73 74 75 76 77

A mí me suena a parasitismo en el cableado.
¿Has mirado si poniendo las resistencias pull-up se mejora la señal?
Comprueba que los pines estén bien soldados.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 03-12-2017, 18:21 (Domingo)
Hola.
Aquí estoy peleando con un LCD que ya no se por donde...

El comando i2cdetect da una salida un poco loca ¿a que puede deberse =así a priori=?

Citar
root@LEDE:~# i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
10: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
20: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
30: 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f
40: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f
50: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f
60: 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f
70: 70 71 72 73 74 75 76 77

A mí me suena a parasitismo en el cableado.
¿Has mirado si poniendo las resistencias pull-up se mejora la señal?
Comprueba que los pines estén bien soldados.


El problema debe ser ese, parasitismo, es posible que tenga que ver con algún relé interno de la placa (o diodos) en esos GPIO's, la pantalla la mudé al bus=0-I2C y ahí si le gusta, funciona bien.
Del cableado... jajaja ni me hables, por suerte tenía dos LCD iguales (mismo problema) y una de ellas la despiecé buscándole la música... el bus=1-I2C si me trabaja con un sensor de temperatura BMP280 correctamente, por eso buscaba el error en la pantalla (por tonto que suene... llevándome bien  ^-^ )

Ahora me pelearé para que el script suelte " ºC " y  "mbar"  ;)
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 03-12-2017, 21:05 (Domingo)
...
...
El problema debe ser ese, parasitismo, es posible que tenga que ver con algún relé interno de la placa (o diodos) en esos GPIO's, la pantalla la mudé al bus=0-I2C y ahí si le gusta, funciona bien.
Del cableado... jajaja ni me hables, por suerte tenía dos LCD iguales (mismo problema) y una de ellas la despiecé buscándole la música... el bus=1-I2C si me trabaja con un sensor de temperatura BMP280 correctamente, por eso buscaba el error en la pantalla (por tonto que suene... llevándome bien  ^-^ )

Ahora me pelearé para que el script suelte " ºC " y  "mbar"  ;)

Eso es muy pero que muy interesante. ¡¡ Documentación y tutorial para seguir por favor !!
Esto es una droga !
 ;D

Precisamente hace unos días hice un "detector de tormentas casero", por menos de 2...3 € con una simple botellita de agua y un cuentagotas, siguiendo un videotutorial (https://www.youtube.com/watch?v=2k61W7fVkOs) que encontré en youtube. Lo del medidor de mbar me vendría de lujo para saber la presión exacta a la que funciona el "inventillo".
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 03-12-2017, 21:42 (Domingo)
...
...
El problema debe ser ese, parasitismo, es posible que tenga que ver con algún relé interno de la placa (o diodos) en esos GPIO's, la pantalla la mudé al bus=0-I2C y ahí si le gusta, funciona bien.
Del cableado... jajaja ni me hables, por suerte tenía dos LCD iguales (mismo problema) y una de ellas la despiecé buscándole la música... el bus=1-I2C si me trabaja con un sensor de temperatura BMP280 correctamente, por eso buscaba el error en la pantalla (por tonto que suene... llevándome bien  ^-^ )

Ahora me pelearé para que el script suelte " ºC " y  "mbar"  ;)

Eso es muy pero que muy interesante. ¡¡ Documentación y tutorial para seguir por favor !!
Esto es una droga !
 ;D

Precisamente hace unos días hice un "detector de tormentas casero", por menos de 2...3 € con una simple botellita de agua y un cuentagotas, siguiendo un videotutorial (https://www.youtube.com/watch?v=2k61W7fVkOs) que encontré en youtube. Lo del medidor de mbar me vendría de lujo para saber la presión exacta a la que funciona el "inventillo".

Aquí hay un par de fotos, pero aun estoy en fase de desarrollo.... jajaja
El numero de 4 dígitos es temperatura, y en de 6 es presión atmosférica en milibares.
Edito: agregando fecha y hora.

(http://s9.tinypic.com/34fm8ph_th.jpg) (http://oi65.tinypic.com/34fm8ph.jpg)              (http://s9.tinypic.com/2iji1ky_th.jpg) (http://oi63.tinypic.com/2iji1ky.jpg)              (http://s9.tinypic.com/4uz1mt_th.jpg) (http://oi66.tinypic.com/4uz1mt.jpg)              (http://s9.tinypic.com/10f9op4_th.jpg) (http://oi68.tinypic.com/10f9op4.jpg)

Tanto la pantalla verde "16x1" como el sensor, trabajaron perfectamente en el bus=1 I2C, pero la azul 16x2 no hubo manera (de locura)

EDITO_2: ========>

Bueno; jugando con las pantallas lcd y el sensor de temperatura y presión BMP280...

El sensor queda instalado en la dirección 0x76 del bus I2C (en este caso el 0)
La lectura del sensor es fácil,  la hoja de características describe las direcciones donde leer los estados tanto de temperatura como de presión, dados en ºC y kPa.  GitHub  (https://github.com/BoschSensortec/BMP280_driver)

Por otra parte, el sensor, está soportado por el kernel de linux y disponible en openwert/LEDE, solo hay que activarlo en "make kernel_menuconfig"=>"Device Driver"=> <*>Industrial I/O support=>Pressure sensors=> <*> Bosh sensortec BPM280..... de esta manera se puede leer de forma nativa con una simple línea.
(supongo que agregando los módulos manualmente podría funcionar, pero ni idea)

Desde la línea de comando, indicando la dirección del dispositivo para que se cargue el driver y se cree el dispositivo "/dev/iio:device0"

Código: [Seleccionar]
echo "bmp280 0x76" > /sys/bus/i2c/devices/i2c-0/new_device

Luego, para leer el sensor lo hago de esta manera.
Código: [Seleccionar]
root@LEDE:~# echo "scale=2; $(cat /sys/bus/iio/devices/iio:device0/in_temp_input)/1000" | bc
18.88    #valor en ºC

root@LEDE:~# echo "scale=2; $(cat /sys/bus/iio/devices/iio:device0/in_pressure_input)*10/1" | bc
1013.61    #valor llevado a mbar

El script que estoy usando para que salga en el LCD es el sig: pero claro es un poco improvisado y tendría que buscar la manera de arreglar un problema, que hasta ahora no se ha visto, pero que cuando bajen los milibares de 1000 a 900 si que lo veré y es que al bajar la cifra de 7 a 6, el último caracter que es una "r", no se borrara. Arreglado, tonto de mi, entrecomillando la línea y dejando un espacio al final... (edito tb el codigo.)
tampoco he dado con un código que pinte en la pantalla "ºC" (he puesto *C) parece que (\337) o (\223) debería de pintarlo, pero creo que usando las librerias de Py ¿? no me he preocupado mas de esto
Código: [Seleccionar]
#!/bin/sh
./lcd init
while true; do
./lcd 0 0 "$(echo "scale=2; $(cat /sys/bus/iio/devices/iio:device0/in_temp_input)/1000" | bc)*C "
sleep 0.5
./lcd 0 11 $(date +"%d-%m")
sleep 0.5
./lcd 1 0 "$(echo "scale=2; $(cat /sys/bus/iio/devices/iio:device0/in_pressure_input)*10/1" | bc)mbr "
sleep 0.5
./lcd 1 11 $(date +"%H:%M")
sleep 9
done

Es este momento estoy intentando utilizar los trigger's del sensor, intentando adaptarme a esta guía  IIO buffers and triggers  (https://github.com/mpod/kernel-playground/tree/master/bmp280) pero no se estructura de la misma manera en openwrt/LEDE con lo cual no funciona y bueno, por aquí ando pegándole cabezazos a ver qué me sale.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 23-12-2017, 13:30 (Sábado)
El mapa de caracteres de estos LCDs es:
(https://i.imgur.com/FQa8FDK.png)

El carácter que más se aproxima a º es el bx1101111 (223 en decimal y 0xDF en hexadecimal). Actualmente no tengo ninguna pantalla conectada al router y no puedo hacer pruebas, pero si te apetece podrías probar tú mismo si este código:
Código: [Seleccionar]
./lcd 0 0 "▀C"Sólo hay que copiar y pegar.

Saludos.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 23-12-2017, 15:08 (Sábado)
El mapa de caracteres de estos LCDs es:
(https://i.imgur.com/FQa8FDK.png)

El carácter que más se aproxima a º es el bx1101111 (223 en decimal y 0xDF en hexadecimal). Actualmente no tengo ninguna pantalla conectada al router y no puedo hacer pruebas, pero si te apetece podrías probar tú mismo si este código:
Código: [Seleccionar]
./lcd 0 0 "▀C"Sólo hay que copiar y pegar.

Saludos.

Sale la letra "beta dos espacios y C" así (ß  C)
Yo he estado jugando con esta tabla del libro que recomendaste (muy bueno por cierto, de lo mejor que he leído referente al tema lcd) pero aún así, no he dado con el caracter apropiado.
Aún estoy en la fase de comprensión de tu script y sus funciones ...  ;D ;D
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 23-12-2017, 22:31 (Sábado)
No sé por donde leí que se podía definir tu propia tabla de caracteres, "dibujándolos", pero no puedo ayudar más.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 04-01-2018, 20:52 (Jueves)
@Fitch
El truco para escribir el carácter º consiste en pasarle al script su valor octal (que es \337).

Código: [Seleccionar]
./lcd 0 0 "Temperatura 19\337C"
(https://i.imgur.com/EcJS4z8.png)

Solución encontrada en http://todomarino.com/forum/temas/como-poner-el-s%C3%ADmbolo-de-%C2%BA-grados-en-la-temperatura.88667/

Saludos.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 06-01-2018, 01:03 (Sábado)
@Fitch
El truco para escribir el carácter º consiste en pasarle al script su valor octal (que es \337).

Código: [Seleccionar]
./lcd 0 0 "Temperatura 19\337C"
(https://i.imgur.com/EcJS4z8.png)

Solución encontrada en http://todomarino.com/forum/temas/como-poner-el-s%C3%ADmbolo-de-%C2%BA-grados-en-la-temperatura.88667/

Saludos.

Hola raphik; al parecer en ese formato de línea, el script no interpreta los valores mas allá del caracter entrecomillado, como texto tal cual, solo que la barra \ la convierte a simbolo de yen ¥  escribiendo en pantalla
Citar
Temperatura 19¥337C
No se si el camino sería algo así  
Código: [Seleccionar]
./lcd 0 0"Temperatura 19 $printf("%c" 0xdf)C" #esto está mal expresado, pero probaré a ver que saco  

Mirando un poco sobre printf me da la idea de que esto debería funcionar ????
Código: [Seleccionar]
./lcd2 0 0 "Temperatura $(printf "%p" 0xdf )     " pero no, no funciona este formato. ademas, ahora creo que usar printf es una redundancia   con el propio script que ya lo hace

Tal vez el camino sea, sacar el código del simbolo en el teclado japones, y creo que el script lo sacaría perfectamente en pantalla... no?
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: edudi en 19-01-2018, 04:59 (Viernes)
Buenas a tod@s, hacía tiempo que no aparecía de forma más explícita.

Me encanta este HILO, dotar al router de más opciones, y ya lo de ponerle sensores: de temperatura y presión, es lo más.

En breve me pido un puente de I2C para empezar a probar todo esto que tengo varias pantallas de 16x2.

Me picó la curiosidad de entrar porque recordaba algo de manejar por I2C usando menos pines GPIO, ya que hoy estuve con una compi montando una pantalla de 2.2 táctil para arduino y ....se me encendió la duda típica:

¿ Y esto lo podrá manejar un router ?

(http://i63.tinypic.com/6sdymc.jpg)

(http://i63.tinypic.com/30wxd2b.jpg)

Features:
- Arduino library: UTFT
- Driver IC: ILI9225
- Touch screen type: resistive touchscreen.
- Touch Pen: length is 9cm;
- Resolution: 176X220, 16-bit (262,000) color
- Display size: 2.2 inch;
- Operating voltage: 3.3V;
- Logic level: 3.3V;
- Operating current: the maximum is 150mA
- LED pin can connect to external backlight control circuit to control the brightness of backlight. You can connect it to GND to turn on the backlight all day.
- Very suitable for digital photo frame, oscilloscope, function generator, detection system monitor

Compatibility: Because the logic level is 3.3V, it is compatible with 3.3V Arduino board, you need to add a level conversion circuit if you use a 5V Arduino Board (Arduino UNO R3 / Arduino Mega2560 / Arduino Leonardo).

Package Includes:
1 x Touch Screen Expansion Board
1 x Touch Pen


Realmente no me interesa de forma excesiva la tactilidad, pero si la pantalla en color y en esas dimensiones ó más. Me suena ver algo de eso en pequeño no sé si era con OpenWRT, con el icono del sombrero en gif o algo así, pero para reencontrarlo me está siendo difícil.

Estaría brutal, que por GPIO se le pudiera ya no solo poner una pantalla de 16x2 sino algo aun más avanzado, mayor y en color.

A lo posteado: Muy buenos avances y de gran utilidad.



======================== Asunto que se me quedó en el tintero páginas atrás ==============

Por cierto, por fin me ha llegado la tarjeta de sonido USB con jacks de altavoz y micro, el altavoz va bien de momento, el micro probé el paquete: Listener     y, funciona el programa, aunque hay que corregir algunas cosas en el archivo de configuración y crear unas carpetas que se ve que está exportado tal cual.

Carpeta a crear:


/usr/local/etc     y copiar el archivo: listener.conf      (que se aloja en /etc      a la carpeta creada)


Archivo de configuración:


wav_path = /tmp/
fname_template = listener-%h-%y%m%d-%H%M%S.wav
devname = /dev/dsp
detect_level = 1
min_duration = 10
rec_silence = 5
max_duration = 60
min_triggers = 2
sample_rate = 8000
channels = 1
format=wav
amplify = off
start_amplify = 1.5
max_amplify = 10.0
fixed_amplify = no
safe_after_filter = no
one_shot = no

#compression = a-law
#filter = ./my_filter2.so.0.1 0 3000.0 1.0


La forma de funcionar tal cual está es:

root@GPIO_Solar:~# listener

listener v1.7.2, (C)2003-2005 by folkert@vanheusden.com
Path:          /tmp/
Device:        /dev/dsp
Level:         1
Min duration:  10.000000
Max duration:  60.000000
Samplerate:    8000
Channels:      1
Number of seconds record before sound starts: 2
Start amplify: 1.500000
Max. amplify:  10.000000

root@GPIO_Solar:~#



Se lanza y se queda en segundo plano devolviendo el prompt. Tal como viene el archivo de configuración ya que es como el motion el mecanismo, si detecta sonido se activa y graba un audio de como mínimo 10 sg y máximo 60 sg, pero está grabando siempre, por lo que iré probando e imagino que con el campo detect_level = 1, se calibrará al gusto.

Lo típico para cerrarlo:       killall listener             (y deja de crear archivos si detecta, el tamaño es 10 kb x sg, de momento las pruebas con #compression = a-law, descomentado, hace que el archivo no se pueda reproducir. Sería bueno que grabase directamente en mp3, o en su defecto convertirla al acabar con otro programa a mp3 (esto último si es sencillo))


Y estas son sus opciones:

root@GPIO_Solar:~# listener --help
listener: invalid option -- -
listener v1.7.2, (C)2003-2005 by folkert@vanheusden.com

Usage: listener [options]
-C<compression>  Set WAV compression    -e<command>      Script to call after recording
-r<rate>         Sample rate            -m<min_duration> Mini. duration to record (samples)
-b<rec_silence>  how many seconds to keep recording after no sound is heard
-c<configfile>   Configfile to use      -x<max_duration> Max. duration to record (seconds)
-w<wave-dir>     Where to write .WAVs   -d<device>       DSP device to use (/dev/dsp)
-z<channels>     Number of channels (1 (default) or 2)
-t<format>       Output format (see manual)
-y<command>      Script to call as soon as the recording starts
-F               use a fixed amplification factor
-p               Read from pipe (together with splitaudio)
-f               don't fork into the background
-l<detect_level> Detect level           -a<pidfile>      file to write the pid in
-s               Be silent              -h               This help text

-o               exit after 1 recording
root@GPIO_Solar:~#



Las funciones que más me gustan son:

- Las de ejecutar un script al iniciar una grabación si detecta sonido o al acabar la grabación.
- La del formato, habría que buscar si admite otros formatos de audio o al igual se refiere al formato del nombre del archivo.
- El factor de amplificación, muy curioso



Iré probando y si veo una configuración adecuada lo comento. Un saludo y gracias por tanto conocimiento y bien documentado ;)
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 05-04-2018, 22:18 (Jueves)

Hola; raphik, habría algún modo de lograr un scroll de texto utilizando este script del lcd =>I2C?
o abría que añadir otra función al script?

Saludos.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 17-04-2018, 20:42 (Martes)
@ Fitch

Lo intenté hace tiempo añadiendo código. El problema de los scripts es que no permiten manejar intervalos inferiores a un segundo. Al final opté por controlar la pantalla indirectamente, a través de un arduino. Tiene la ventaja de no soldar dentro del router y de no sobrecargarlo de código.



Se maneja enviando cadenas de texto al puerto serie.
Código: [Seleccionar]
echo "w,0,Texto que sale por pantalla haciendo scrolling   " > /dev/ttyUSB0
La velocidad de cada línea se ajusta independientemente. (Si te fijas en el vídeo, la línea de arriba es más lenta que la de abajo).
Código: [Seleccionar]
echo "m,1,300" > /dev/ttyUSB0
Saludos.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 18-04-2018, 00:34 (Miércoles)
@ Fitch

Lo intenté hace tiempo añadiendo código. El problema de los scripts es que no permiten manejar intervalos inferiores a un segundo. Al final opté por controlar la pantalla indirectamente, a través de un arduino. Tiene la ventaja de no soldar dentro del router y de no sobrecargarlo de código.



Se maneja enviando cadenas de texto al puerto serie.
Código: [Seleccionar]
echo "w,0,Texto que sale por pantalla haciendo scrolling   " > /dev/ttyUSB0
La velocidad de cada línea se ajusta independientemente. (Si te fijas en el vídeo, la línea de arriba es más lenta que la de abajo).
Código: [Seleccionar]
echo "m,1,300" > /dev/ttyUSB0
Saludos.

Si, tienes razón el manejo es muy simple así, el vídeo queda genial, a ver que se me ocurre.
Saludos.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 08-09-2018, 23:19 (Sábado)
@ eludi https://foro.seguridadwireless.net/openwrt/te-habla-tu-router/

Saludos.

Por favor, algún admin puede reparar el enlace? no va.
Gracias y perdón por la molestia.
Incluso estaría guay añadirlo al hilo de hilos relevantes.
Título: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 09-09-2018, 13:05 (Domingo)
@ eludi https://foro.seguridadwireless.net/openwrt/te-habla-tu-router/

Saludos.

Por favor, algún admin puede reparar el enlace? no va.
Gracias y perdón por la molestia.
Incluso estaría guay añadirlo al hilo de hilos relevantes.

Aquí https://foro.seguridadwireless.net/openwrt/texto-a-voz-con-openwrt/
Título: Re:Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 17-10-2018, 12:54 (Miércoles)
Buenas... tengo unas dudillas

Le he ppuesto a un comtrend una pantalla LCD 2004, pero también quiero añadirle 4 relés. Lo tengo prácticamente hecho y funciona "bien". El problema es que creo que los 5V que saqué del router, no dan abasto para alimentar a los dos aparatitos a la vez y la pantalla pierde brillo, quedando prácticamente ilegible, o bien los relés empiezan a "temblar". Como no tengo demasiada idea de electricidad, pregunto: ¿es debido a que esos 5V no dan los suficientes miliAmperios para ambos a la vez? (Eso es lo que creo).
¿Podría sacar otros 5V de otro punto de la placa del router o todos comparten los mismos mA y estaría en las mismas?
¿Puedo alimentar por ejemplo, los relés con el router y la LCD con un USB de un cargador de móvil, que también da 5V?
En caso afirmativo.... ¿puedo darle los 5V del rojo del usb y devolver la parte negativa al negro (GND) del router o debo devolverlo también por el negro del mismo USB del cargador?

Y otra cosa más: quiero ponerle también tarjeta de sonido USB, así que me imagino que eso también le restará "fuerza" a los 5V del router.... ¿afectará también a la pérdida de tensión / intensidad para los relés...?

Gracias x 1000.

PD: si eso cuando lo termine pondré una foto, que lo voy a poner anclado a un tablón de madera. Me molaría mucho también ponerle lo que he visto por ahí que hay sensor de temperatura y de presión atmosférica, pero no sé si es tan "fácil" como lo de la LCD o hay que liarse mucho más. También tengo una plaquita con numeritos y unos pines, no sé si será también relativamente fácil como conectarla a la expansora de bus I2C y leer qué numerito se ha tocado. Raphik, creo que tenías algo de esto también. Sabes más o menos el nivel que tengo. ¿Lo ves muy chungo para mí o me animas a intentarlo?
Título: Re:Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 17-10-2018, 17:59 (Miércoles)
@peperfus

La pantalla LCD consume muy poco, por lo que no debería de ser un problema alimentarla con los 5V del router.

Los relés consumen más. Lo ideal es que los alimentes con una fuente adicional. Recuerda conectar entre sí los negativos del relé y del router o no funcionará.
Fíjate a ver si los relés que tienes son de 5 o de 12V, que los hay de los dos.

(https://i.imgur.com/yKoc3jc.png) (https://i.imgur.com/SmLnL10.png)

Saludos.
Título: Re:Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 23-10-2018, 07:58 (Martes)
Hola  @raphik

Que conexión has hecho en tu pantalla con el arduino nano?  en la foto de antes da la impresión de que usas los cables del ¿i2c?
Saludos.
Título: Re:Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 23-10-2018, 09:15 (Martes)
@Fitch
Efectivamente, conectando SDA y SCL a los puntos A4 y A5 del nano. Naturalmente, también hay que conectar +5V y GND. Hay un magnífico tutoria aquí: https://www.luisllamas.es/arduino-lcd-i2c/

Saludos.
Título: Re:Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 02-11-2018, 12:33 (Viernes)
Buenas... tengo unas dudillas

Le he ppuesto a un comtrend una pantalla LCD 2004, pero también quiero añadirle 4 relés. Lo tengo prácticamente hecho y funciona "bien". El problema es que creo que los 5V que saqué del router, no dan abasto para alimentar a los dos aparatitos a la vez y la pantalla pierde brillo, quedando prácticamente ilegible, o bien los relés empiezan a "temblar". Como no tengo demasiada idea de electricidad, pregunto: ¿es debido a que esos 5V no dan los suficientes miliAmperios para ambos a la vez? (Eso es lo que creo).
¿Podría sacar otros 5V de otro punto de la placa del router o todos comparten los mismos mA y estaría en las mismas?
¿Puedo alimentar por ejemplo, los relés con el router y la LCD con un USB de un cargador de móvil, que también da 5V?
En caso afirmativo.... ¿puedo darle los 5V del rojo del usb y devolver la parte negativa al negro (GND) del router o debo devolverlo también por el negro del mismo USB del cargador?

Y otra cosa más: quiero ponerle también tarjeta de sonido USB, así que me imagino que eso también le restará "fuerza" a los 5V del router.... ¿afectará también a la pérdida de tensión / intensidad para los relés...?

Gracias x 1000.

PD: si eso cuando lo termine pondré una foto, que lo voy a poner anclado a un tablón de madera. Me molaría mucho también ponerle lo que he visto por ahí que hay sensor de temperatura y de presión atmosférica, pero no sé si es tan "fácil" como lo de la LCD o hay que liarse mucho más. También tengo una plaquita con numeritos y unos pines, no sé si será también relativamente fácil como conectarla a la expansora de bus I2C y leer qué numerito se ha tocado. Raphik, creo que tenías algo de esto también. Sabes más o menos el nivel que tengo. ¿Lo ves muy chungo para mí o me animas a intentarlo?

Me contesto a mí mismo (y como referencia para cualquiera):

He conectado un ladrón de USB al puerto del router. Dicho ladrón está alimentado por enchufe. Pues bien. Al hacerlo, sorprendentemente, la pantalla LCD sigue iluminada tras apagar el router, además de poder tener conectados los relés y la pantallita, todo perfectamente, sin perder potencia.
Lo cual, me hace pensar que la tensión de los 5V está compartida entre el puerto USB y el punto al que tengo soldada la alimentación de la LCD y relés...

Me viene genial porque mato 2 pájaros de un tiro:
Amplío puertos USB y además proporciono alimentación para que todo funcione perfecto.
 >:(
Título: Re:Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: Ficht en 02-11-2018, 21:31 (Viernes)
Si, la placa del ruter se retroalimenta parcialmente a través del puerto usb, eso en algún router "me parece que impide" limpiar la memoria correctamente al reiniciar (también el bus I2C), para este tipo de casos, yo le pongo un relé a la alimentación, para que reinicie todo el sistema, de echo la alimentación del bus I2C, la controlo con un relé interno del la propia placa (hg556a-B) y esos 5V los inyecto a través de un cargador de mechero desde los 12V del alimentador de router, así no quita corriente a la placa, que luego se reciente el WiFi...

Luego pondré fotos de esto, porque el bus I2C de este router lo tengo expandido hasta unos 10 mtr de distancia, con sensores, lcd's y relés.... luego irá otro tramo a unos 20 mtr y otro más a unos 30 mtr, creando una especie de "red-activa"
Título: Re:Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 04-11-2018, 01:11 (Domingo)
))))), me acaba de pasar una ****da.

Por usar "mal" una plaquita de protoboard como ladrón con cables dupont para alimentar plaquita de relés, pantalla lcd y otra plaquita numérica más.... por lo visto he cortocircuitado el VCC y el GND y ahora ya no va igual  :'( :'(
El router ya no me coge alimentación del USB.  :'( :'(, algún componente interno de la placa base se ha debido de estropear.

MUCHO OJO con las plaquitas protoboard. En algunas las conexiones internas van en sentido paralelo a las columnas y en otras en perpendicular. Yo he conectado los cables pensando que iba en paralelo (como sí que me va en otra placa protoboard), pero en este caso era en perpendicular y por culpa de eso he hecho corto entre 5V y GND y creo que me he cargado "algo" que hacía que el router recibiera corriente a través del USB y me venía de lujo. Ahora esa característica ya no me funciona  :'( :'( :'(
Título: Re:Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 06-11-2018, 02:12 (Martes)
Ahps, pues resulta que no.
Estba equivocado.
He hecho todo el mismo procedimiento con otro router idéntico que tenía también con los cables soldados, todo exactamente igual, pero esta vez con precaución de no provocar el cortocircuito y pasa lo mismo.
Eso me alivia, porque me indica que el otro router está bien, no le pasó nada  por el corto (al menos nada grave, funciona con normalidad y no he notado nada raro).

Lo que pasa es que tengo una placa de 4 relés también conectada y cuando los voy encendiendo, los caracteres en la pantalla LCD se atenúan.

Dices que debo alimentar la plaquita de relés con un transformador aparte? ya tengo uno preparado.
Lo que se me había ocurrido es conectarle el neativo a tierra y el positivo al VCC (5V). ¿Es correcto?
¿Por qué dices que tengo que conectar la tierra de la plaquita de relés a la tierra del router?  ???
Te refieres a.... sólo conectar los 5V (el positivo) del trafo a la plaquita, dejando el negativo sin conectar
Y conectar el negativo de la plaquita de relés al GND del router ??
Título: Re:Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 06-11-2018, 18:33 (Martes)
Cita de: peperfus
Lo que pasa es que tengo una placa de 4 relés también conectada y cuando los voy encendiendo, los caracteres en la pantalla LCD se atenúan.
Dices que debo alimentar la plaquita de relés con un transformador aparte? ya tengo uno preparado.
Lo que se me había ocurrido es conectarle el negativo a tierra y el positivo al VCC (5V). ¿Es correcto?
Dices que cuando vas encendiendo relés, los caracteres del visor LCD se atenúan. Da la impresión de que la fuente de alimentación no proporciona toda la energía que los relés necesitan. Y, efectivamente, el positivo a VCC y el negativo a GND.

Cita de: peperfus
¿Por qué dices que tengo que conectar la tierra de la plaquita de relés a la tierra del router?  ???
Te refieres a.... sólo conectar los 5V (el positivo) del trafo a la plaquita, dejando el negativo sin conectar
Y conectar el negativo de la plaquita de relés al GND del router ??
Las placas de relés son distintas unas de otras, dependiendo del fabricante. En realidad no podría decirte cómo va conectada la tuya. No hagas mucho caso de lo que dije.

Saludos.
Título: Re:Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 06-11-2018, 23:42 (Martes)
De todas formas, al final optaré por la solución alternativa:
Alimentar únicamente los relés desde el router
y lo demás, con un transformador aparte.
Ya casi lo tengo terminado, el inventillo. Pronto lo publicaré en el foro para que se pueda ver. Es un simple tablón al que he anclado el router, con pantalla lcd 20x4, plaquita de 4 relés, sonido con 2 altavoces...
Es increíble que con un simple router se pueda hacer todo esto. A veces me sigo preuntando ¿dónde está el límite?
Todo gracias a vosotros.
Título: Re:Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 08-11-2018, 12:59 (Jueves)
Hola

(http://i65.tinypic.com/f05cac.jpg)

Esto es lo que estoy haciendo. No tiene nada nuevo que no conozcáis. Lo he puesto en un tablón de madera, con pantalla, plaquita de relés....

(El transformador que se ve abajo a la derecha es el cargador de móvil que saca un cable USB. Al otro extremo he pelado los cablecitos rojo y negro y se los he juntado al rojo y negro de la pantalllita)

El problema que comentaba.... la electricidad para los relés se la doy del router, y para la pantallita le he conectado electricidad desde un cargador de móvil, que saca 5 V.
La pantalla se enciende perfectamente, pero no funciona, no muestra nada de nada.
Cuando le pongo lcd_write me da: "Error: Write failed"

Creo que es algo así como que no detecta la pantalla. Supongo que será porque no detecta que está consumiendo electricidad ???
Pero entonces cómo puedo hacer para que la detecte y darle más electricidad al mismo tiempo para solucionar el problema de la falta de potencia?

Gracias
Título: Re:Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 08-11-2018, 14:30 (Jueves)
El problema que comentaba.... la electricidad para los relés se la doy del router, y para la pantallita le he conectado electricidad desde un cargador de móvil, que saca 5 V.
La pantalla se enciende perfectamente, pero no funciona, no muestra nada de nada.
Cuando le pongo lcd_write me da: "Error: Write failed"

Creo que el problema es que las señales SDA y SCL que salen del router y llegan al LCD son valores "flotantes". Es decir, carcen de una referencia a GND. Por eso es necesario unir GND del router al GND de la alimentación del LCD.

Saludos.
Título: Re:Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 08-11-2018, 16:35 (Jueves)
raphik, cuando hago eso que me dices, la pantalla ni siquiera se enciende:



                                                  -----5V-------- LCD -------GND---- (PCF8574)
Electricidad - Transformador {
                                                  -----GND------ (sin conectar)
Título: Re:Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: raphik en 08-11-2018, 18:45 (Jueves)
@peperfus
(https://i.imgur.com/wZggpRg.png)
Conectar los pines SDA, SCL y GND al router.
Conectar los pines VCC y GND al transformador.
El pin GND de la pantalla LCD es el único que va conectado a dos sitios: al GND del transformador y al GND del router.
Saludos.
Título: Re:Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 19-11-2018, 00:41 (Lunes)
Gracias raphik, crack!

Perdona la tardanza en contestar. Lo he conectado como dices y no termina de funcionar bien. El caso es que tengo conectado el trafo a un enchufe que lo enciendo por relé desde el propio router.
Y pasa algo curioso. Cuando activo el relé, se enciende durante una décima de segundo y luego, inmediatamente se vuelve a apagar. Es como si hubiera alguna señal de rebote o algo así que hiciera que al encender el transformador, hace apagar el relé y por lo tanto el transformador.

Lo he probado enchufando el trafo a un enchufe extra independiente y funciona OK.
No me importa si no se puede de la primera forma (trafo desde relé), aunque tengo curiosidad por saber el motivo de por qué hace esa cosa tan rara.

(PD: Te invito a una cerveza cuando quieras)
Título: Re:Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
Publicado por: peperfus en 24-09-2019, 17:18 (Martes)
Siento el reflote.

Es sólo para comentar, que tenía otra pantallita LCD funcionando perfectamente, con alta intensidad.... (se veía perfectamente)
Un día conecté un móvil al puerto USB para cargarlo.
Y justo a partir de ahí, la pantallita me ha perdido potencia. Ahora ya no se ve tan bien. Se ve menos intensa.

Por si a alguien le pasa lo mismo, o por si no le ha pasado aún, para que no conectéis nada al puerto USB mientras está la pantallita en marcha.

Edito (añado) (13/11/2019):
He cambiado la pantallita por otra nueva y la nueva va perfecta. La otra ya no se veía nada de nada. Creo que debía de haberse fundido algo ??
Si alguien entiende de esto.... ¿No se puede usar el USB al mismo tiempo que la LCD? Es una lástima.