Consulta sobre la comunicación del PIC16F1938 con Arduino UNO

Me gustaría que alguien con experiencia me indicara si es viable la idea del proyecto que voy a exponer. También pedir disculpas por mi ignorancia sobre este tema, ya que esta será mi primera incursión en el mundo arduino.

Situación Actual:
Dispongo de un equipo que gestiona una antena de comunicaciones. Este equipo esta controlado por un microprocesador PIC16F1938, y dispone de tres pulsadores y una pantalla LCD1602 que muestra cuatro parámetros numéricos de la antena.

Objetivos:

  1. Sustituir la pantalla LCD1602 por una Nextion que presente mejor los datos y además integre los tres pulsadores físicos en virtuales.
  2. Instalar un servidor web para poder acceder al equipo de forma remota desde internet.

Materiales propuestos:
Arduino UNO ó Nano + Adaptador ethernet.

Consulta:
Creo que el principio del principio es saber si arduino puede leer por el puerto I2C del PIC16F1938, al que está conectado el LCD1602, los datos que presenta esta pantalla. Si la respuesta es afirmativa, el resto puede ser más fácil ya que los pulsadores y el servidor web sería solo programación.

Quedaría muy agradecido si me indicarán enlaces o sitios donde puedo encontrar el código que más se asemeje a lo que pretendo realizar.

Saludos y muchas gracias por su ayuda.

En principio si, cargale al arduino un codigo para que trabaje como slave I2C y a funcionar. AQUI puedes encontrar mas datos.

En toda tu presentación no dices a que tensión trabaja el PIC16F1938, es muy importante que el PIC16F1938 y el arduino esten a la misma tensión o de lo contrario habrá que poner adaptadores de nivele.

Muchas gracias por vuestra pronta contestación.

Responde perfectamente a la pregunta realizada y me aclara la viabilidad de mi idea.

Sobre el tema de la tensión, el PIC trabaja a 5 voltios mediante un estabilizador, aunque el equipo funciona a 12.

Comento las conexiones que voy a realizar (arduino UNO):

Para I2C:
CLK/SCL ... pin.. D19
SDA/DAT .. pin D18
GND ......... GND

Para la pantalla Nextion:
RX ...... pin D1
TX ...... pin D0
GND .... GND
5V ...... 5V

Sobre el código para trabajar arduino como esclavo, creo entender que la primera línea fija la dirección que debe leer.

#include "Wire.h"

const byte I2C_SLAVE_ADDR = 0x20;

void setup()

Como la dirección que tiene la pantalla LCD1602 es 4E, supongo que esa línea debería ser:

#include "Wire.h"

const byte I2C_SLAVE_ADDR = 0x4E;

void setup()

La última pregunta. ¿Que librerías que debo cargar en el proyecto?. Wire.h, Ethernet.h, y en el caso de Nextion veo que salen varias librerías. ¿cual me recomendáis instalar?.

Voy a empezar intentando programar la conexión I2C y la pantalla nextion, a ver si consigo ver algún dato.

Gracias de nuevo y saludos a todos.

El micro trabaja a 5V como bien dices, el equipo es otra cosa a través de sus interfaces.
La interfaz I2C con un Arduino será a 5V y si del otro lado usas un UNO no tienes problemas
Conectas SDA del PIC al pin 4 del UNO y SCL del PIC al pin 5 del UNO tendras la comunicación x hardware bien, pero eso ya lo sabrás.
https://www.circuitbasics.com/how-to-set-up-i2c-communication-for-arduino/

Si que puede. Pero comienza por ahi, resolviendo comunicaciones simples entre pic y UNO.

Lo que este en el PIC queda en el PIC. Los datos que tengan el PIC debes enviarlos por I2C al UNO y para eso supongo que tienes o cuentas con el código del PIC porque si no lo tienes no sabes donde estas parado.

No me queda claro que tienes y que no.
Todo lo que esta hecho con el PIC cuenta con código fuente no?
Casi te diría que a no ser que haya algo mas, es más facil hacer algo donde te olvides del PIC y lo hagas con UNO u otra placa estilo Arduino que agregue la parte Web y Nextion que tu quieres.

Vas a tener que hacer (en el código del UNO) un intérprete o decodificador de los datos porque lo que se envía a la LCD son comandos y caracteres.

El tema de los pulsadores no veo manera de que puedas manejarlos sin intervenir la placa.

Descarto que tengas acceso al código del PIC porque de otro modo no intentarías capturar los datos de la LCD.

Voy a ampliar lo que en mi primer post intenté explicar muy por encima. El equipo en cuestión se trata de un acoplador de antena, que es un periférico de una emisora de radio cuya misión es adaptar la antena a la frecuencia de emisión. Este acoplador está pensado para trabajar de manera presencial, es decir cuando voy a emitir en una frecuencia, toco el botón correspondiente y se sintoniza la antena. La comprobación de que todo esta correcto se muestra en los valores de la pantalla LCD.

Lo que pretendo con arduino es tener la misma funcionalidad de manera remota. La emisora la puedo tener en una casa y estar saliendo desde otra (aclarar que la emisora ya tiene implementado el modo remoto. La puedo manejar por internet como si estuviera delante). En resumen, de manera remota necesito ver los valores de antena para saber si se sintonizó bien y poder pulsar el botón correspondiente si tengo que resintonizar. También aprovecho toda esta movida para cambiar la pantalla LCD que me parece horrorosa.

Ahora respondo brevemente a vuestras cuestiones.

No me puedo olvidar del PIC porque rehacer el acoplador entero con arduino sería un movidón, la mejor opción es integrar dentro de la misma caja las placas adicionales que pueda necesitar.

Los pulsadores funcionan con un pequeño corto a masa de 1 segundo, creo que esto es lo más fácil de programar bien con un relé o directamente a las salidas analógicas.

La pantalla LCD1602 dispone el chip PCF8574 como decodificador de I2C, por eso suponía unas variables numéricas. Si lo que envía son comandos o caracteres es una putada, ya os he dicho que es indispensable tener acceso a esas lecturas para saber que el equipo está bien ajustado.

Si dispongo del código fuente del PIC, aunque me suena a chino y no sabría por donde meterle mano.

Gracias de nuevo por vuestra ayuda y consejos. Saludos.

Pues lo es. :wink:

Después de tragarme varios tutoriales al respecto, me queda claro que lo primero que hacer es reprogramar el pic para ponerlo a trabajar en I2C modo master. El resto es perfectamentamente viable cor arduino.

Gracias por las ideas aportadas y doy por cerrado este hilo. Saludos.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.