Saludos.
Les comparto una librería para comunicación RS-485
Es una librería bastante sencilla, pero cumple con muy buen desempeño.
La escribí usando PIC C Compiler de CCS, y aunque este entorno cuenta con una librería para este propósito, (rs485.c) no logré hacer que funcionara usando el módulo USART (RS-232 por hardware)
Dicha librería funciona correctamente pero usando la interrupción externa por RB0.
Tal vez no implementé bien su uso, pero hice bastantes comprobaciones y no pude hacer que funcionara por USART.
La que he escrito cuenta con los dos modos también, pero esta sí funciona con ambos.
El ejemplo adjunto es para un maestro y dos esclavos, pero obviamente se pueden agregar más.
El maestro captura los datos por petición y los envía a la PC.
Esto puede ser opcional, ya que yo usé este modo únicamente por motivos de depuración.
Para comunicarme desde la PC hacia los dispositivos, usé este Conversor/Adaptador de USB a RS-485
Para recibir los datos recolectados por el maestro, se necesita otra conexión serial.
Yo usé un convertidor de USB a RS-232 con el chip FTD-232RL
También usé otro similar pero usa el chip PL2303.
Cualquier otra forma de conexión RS-232 funcionará correctamente.
Mi PC cuenta con puerto serie, pero usar este tipo de adaptadores me resulta más conveniente.
(Por el uso de otro convertidor a TTL como el MAX-232)
También escribí un programa para poder comunicarme con los dispositivos.
En este programa se puede ver la cadena que envía hacia los dispositivos y también se puede ver la cadena de bytes enviada por el esclavo solicitado.
En este caso se le hizo una petición de datos al esclavo número 11, que retornó el valor 1023.
Si la conexión fuera con el maestro, retornaría el valor 512 que se ve marcado como ADC.
El primer byte es el ID del maestro, que es al que el esclavo va a mandar los datos.
El segundo byte es el ID del esclavo, es para que el maestro sepa de quien vienen los datos.
El tercer byte es el comando solicitado. (1 = Leer el conversor AD y 2 = Encender/Apagar un LED)
El cuarto y quinto byte, equivalen al MSB y LSB de la lectura del conversor AD.
MSB = 3 y LSB = 255, que corresponden al valor máximo de lectura a 5 V. y 10 bits. (1023)
El sexto byte corresponde al checksum de los datos enviados.
En el ejemplo no se hace nada con el checksum, únicamente se calcula y se muestra.
Sin embargo, este dato nos sirve para comprobar si los datos llegaron correctamente.
Las pruebas en físico las realicé a más de 30 metros cada dispositivo, y raramente se perdían datos.
(Muy poca distancia para un sistema que puede alcanzar 1.2 Km de cableado.)
El séptimo byte es el retorno de carro usado para comprobar el final de la cadena a enviar. (Chr 13 o "r" en C)
Como pueden ver, aquí los datos ya son mostrados en lenguaje humano.
Porque lo que realmente podríamos ver en un terminal común, serían los caracteres imprimibles del ASCII.
Así como se puede observar en la línea (Datos en el búfer)
Como se usaron dos aplicaciones, también se necesitaron dos conexiones serie con la PC.
Esto es totalmente opcional, ya que no es necesario si los microcontroladores van a trabajar sin conexión al exterior.
En este ejemplo usé un PIC16F88 como Maestro y dos PIC12F683 como esclavos.
La librería se puede usar en cualquier PIC que tenga módulo USART o que cuente con interrupción externa. (En este caso se usará RS-232 por software para la comunicación.
Como siempre, espero que esta información sea de utilidad.
Cualquier duda que tengan, con gusto la atenderé.
Les comparto una librería para comunicación RS-485
Es una librería bastante sencilla, pero cumple con muy buen desempeño.
La escribí usando PIC C Compiler de CCS, y aunque este entorno cuenta con una librería para este propósito, (rs485.c) no logré hacer que funcionara usando el módulo USART (RS-232 por hardware)
Dicha librería funciona correctamente pero usando la interrupción externa por RB0.
Tal vez no implementé bien su uso, pero hice bastantes comprobaciones y no pude hacer que funcionara por USART.
La que he escrito cuenta con los dos modos también, pero esta sí funciona con ambos.
El ejemplo adjunto es para un maestro y dos esclavos, pero obviamente se pueden agregar más.
El maestro captura los datos por petición y los envía a la PC.
Esto puede ser opcional, ya que yo usé este modo únicamente por motivos de depuración.
Para comunicarme desde la PC hacia los dispositivos, usé este Conversor/Adaptador de USB a RS-485
Para recibir los datos recolectados por el maestro, se necesita otra conexión serial.
Yo usé un convertidor de USB a RS-232 con el chip FTD-232RL
También usé otro similar pero usa el chip PL2303.
Cualquier otra forma de conexión RS-232 funcionará correctamente.
Mi PC cuenta con puerto serie, pero usar este tipo de adaptadores me resulta más conveniente.
(Por el uso de otro convertidor a TTL como el MAX-232)
También escribí un programa para poder comunicarme con los dispositivos.
En este programa se puede ver la cadena que envía hacia los dispositivos y también se puede ver la cadena de bytes enviada por el esclavo solicitado.
En este caso se le hizo una petición de datos al esclavo número 11, que retornó el valor 1023.
Si la conexión fuera con el maestro, retornaría el valor 512 que se ve marcado como ADC.
El primer byte es el ID del maestro, que es al que el esclavo va a mandar los datos.
El segundo byte es el ID del esclavo, es para que el maestro sepa de quien vienen los datos.
El tercer byte es el comando solicitado. (1 = Leer el conversor AD y 2 = Encender/Apagar un LED)
El cuarto y quinto byte, equivalen al MSB y LSB de la lectura del conversor AD.
MSB = 3 y LSB = 255, que corresponden al valor máximo de lectura a 5 V. y 10 bits. (1023)
El sexto byte corresponde al checksum de los datos enviados.
En el ejemplo no se hace nada con el checksum, únicamente se calcula y se muestra.
Sin embargo, este dato nos sirve para comprobar si los datos llegaron correctamente.
Las pruebas en físico las realicé a más de 30 metros cada dispositivo, y raramente se perdían datos.
(Muy poca distancia para un sistema que puede alcanzar 1.2 Km de cableado.)
El séptimo byte es el retorno de carro usado para comprobar el final de la cadena a enviar. (Chr 13 o "r" en C)
Como pueden ver, aquí los datos ya son mostrados en lenguaje humano.
Porque lo que realmente podríamos ver en un terminal común, serían los caracteres imprimibles del ASCII.
Así como se puede observar en la línea (Datos en el búfer)
Como se usaron dos aplicaciones, también se necesitaron dos conexiones serie con la PC.
Esto es totalmente opcional, ya que no es necesario si los microcontroladores van a trabajar sin conexión al exterior.
En este ejemplo usé un PIC16F88 como Maestro y dos PIC12F683 como esclavos.
La librería se puede usar en cualquier PIC que tenga módulo USART o que cuente con interrupción externa. (En este caso se usará RS-232 por software para la comunicación.
Como siempre, espero que esta información sea de utilidad.
Cualquier duda que tengan, con gusto la atenderé.