Saltar al contenido
Control Automático Educación

Comunicación Serial con PIC

Uno de los protocolos de comunicación que podemos emplear con nuestros dispositivos electrónicos embebidos, es la utilización de la comunicación serial o comunicación serie para poder interactuar con diferentes dispositivos. Es por eso que en el día de hoy voy a enseñarte como programar e implementar una comunicación serial con PIC utilizando el compilador CCS C Compiler.

Si no has visto nuestro completo curso de programación de microcontroladores, te dejo el enlace a continuación para que aprendas a hacer diversos proyectos usando PICs : 👉 Curso de Microcontroladores PIC

Te hago la invitación para que te suscríbas al canal y continues recibiendo más información sobre porgramación de dispositivos embebidos como los microcontroladores PIC:

Comunicación UART con PIC

La comunicación serial es una de las más simples que podremos emplear en nuestro microcontrolador PIC para poder visualizar información de interés en nuestro computador.

La comunicación UART o comunicación serial sólo utiliza tres líneas: una para recibir los datos Rx, otra para trasmitir los datos Tx y la línea común GND.

En nuestro caso especifico para el PIC16F887 las lineas TX y RX corresponden a los pines 25 y 26 (Puerto RC6 y RC7 respectivamente) como puede ser observado en la siguiente figura. Para cualquier otro PIC, solo basta con buscar donde están ubicados estos pines con ayuda del datasheet.

Comunicacion Serial con PIC
Pines para la Comunicación Serial con PIC

NOTA: El pic 16F887 solo tiene un puerto UART fisico, es por eso que solo tiene un solo RX y un solo TX para realizar la comunicación serial. Existen otros PICS que poseen más de un UART facilitando realizar varias comunicaciones con el dispositivo al tiempo. Si necesitamos adicionar mas puertos de comunicación serial con pic, podremos hacerlo con ayuda del PIC C Compiler creando UARTS VIRTUALES, esto sera detallado abajo en el post en el TERCER EJEMPLO, para verlo debes compartir el post.

Cada dato se transmite bit a bit, un bit a la vez, por lo tanto se hace mucho más lenta, pero tiene la ventaja de necesitar menos líneas y las distancias a las cuales se puede transferir la información son mayores, además con el uso de los módem se puede trasmitir a cualquier parte del mundo.

Comunicación serial RS232
Comunicación serial RS232

Existen dos formas de comunicación serial:

  • Sincrónica?
  • Asincrónica

Comunicación Serial Sincrónica

Para realizar esta configuración de la comunicación, se requiere adicionar una linea que contenga pulsos de reloj que indiquen que el dato que viaja en la otra linea de datos es válido; la duración del bit está determinada por la duración del pulso de  sincronismo.

Quizas te pueda interesar ver como configurar El Monitor Serial con Arduino.

Comunicación Serie Asincrónica

En esta comunicación los pulsos de reloj no son necesarios y se utilizan otros mecanismos para realizar la transferencia de datos.

La duración de cada bit esta determinada por la velocidad con la cual se realiza la trasferencia de datos, por ejemplo si se transmite a 1200 bits por segundo (baudios), la duración de cada bit es de 833 micro segundos. 

Las velocidades de transmisión más comunes son 300, 600,1200, 2400, 9600, 14400 y 28800 baudios.

En esta entrada solo se estudia la comunicación asincrónica.

comunicación serial: señal asincrona
comunicación serial: señal asincrona

En la figura anterior se muestra la forma como se trasmite un dato cuando se realiza alguna transferencia:

  1. La línea del transmisor permanece en alto.
  2. Para empezar a transmitir datos esta línea se pone en bajo durante un bit, lo cual se conoce como bit de Start.
  3. Se comienza a transmitir los bits correspondientes al dato, empezando por el bit menos significativo (LSB) y terminando con el más significativo (MSB).
  4. Al finalizar se agrega el bit de paridad, si está activada esta opción.
  5. Por último los bits de stop, que pueden ser 1 o 2, en los cuales la línea regresa a nivel alto. 

    En el ejemplo de la figura, después del bit de start se trasmite el dato 01001011 y al final hay un bit de stop.

Esto significa que la configuración de la transmisión serial es: 1 bit start, 8 bits datos, no paridad y 1 bit de stop.

El receptor no está sincronizado con el transistor y no sabe cuando va a recibir datos.

La transición de alto a bajo de la línea del transmisor, activa el receptor y este generan un conteo de tiempo de tal manera que realiza una lectura de la línea medio bit después del evento; si la lectura realizada es un estado alto, asume que la transición ocurrida fue ocasionada por ruido en la línea; si por el contrario la lectura es un estado bajo, considera como válida la transición y empieza a realizar lecturas secuenciales a intervalos de un bit hasta conformar el dato transmitido.

Lógicamente tanto el transmisor como el receptor deberán tener los mismos parámetros de configuración (velocidad, número bits del dato, paridad y bits de parada).

Pasos para trabajar con comunicación serial con pic:

1. En el encabezado del programa incluir la directiva:

#USE RS232(BAUD=BAUDIOS, XMIT=PIN, RCV=PIN)

Baud: Velocidad en baudios (bits por segundo).
Xmit: Bit que transmite (Tx)
RCV: Bit que recibe (Rx)
2. En el programa principal enviar o recibir un carácter.
Para recibir un carácter se usa la instrucción.

C=getc(); // Esta instrucción espera un carácter por el pin RCV del
//puerto RS232 y retorna el carácter recibido.

Hacen lo mismo las instrucciones GETCH() y GETCHAR()

Para enviar un carácter se usa la instrucción

PUTC() //Esta instrucción envía un carácter a la patica XMIT del
//dispositivoRS232.

Hace lo mismo la instrucción PUTCHAR()
NOTA: Entre los paréntesis va el caracter a enviar.

Si deseamos comunicar nuestro microcontrolador con el computador, tenemos que conectar nuestro PIC al puerto serial que traen principalmente los ordenadores de escritorio:

puerto serial
puerto serial

Y para lograr dicha comunicación con nuestro computador, es necesario utilizar un circuito integrado adicional llamado MAX232.

El MAX232 es un circuito integrado de Maxim que convierte las señales de un puerto serie RS-232 a señales compatibles con los niveles TTL de circuitos lógicos. El MAX232 sirve como interfaz de transmisión y recepción para las señales RX, TX, CTS y RTS.

DB9
DB9

El siguiente esquema es para conectar nuestro pic al computador con ayuda del integrado MAX232 con un cable DB9.

comunicación serial max232
comunicación serial max232

El problema principal que tenemos con este tipo de comunicación, es que el puerto serial de los computadores ya fue abolido hace mucho tiempo, y por eso en computadores actuales, no vamos a encontrar este tipo de puerto. Para dar solución a este problema, podemos usar un conversor SERIAL-USB el cual podemos comprar en cualquier tienda informatica:

conversor serial usb
conversor serial usb

O podemos utilizar un circuito integrado, que generalmente se encuentran en estos conversores SERIAL-USB, llamado FT232, este integrado generalmente viene en una placa electronica ya lista para ser usada, y lo unico que debemos hacer es energizarla y conectar los terminales RX y TX de nuestro microcontrolador a esta placa.

Software de Simulación para comunicación serial con pic

Para poder simular la comunicación serial con nuestro microcontrolador, y poder hacer una practica mucho más parecida con la realidad, vamos a utilizar 3 softwares diferentes:

  1. Proteus: Como hemos venido trabajando, seguiremos usando el proteus como software principal de simulación.
  1. Virtual Serial Port: Este software crea un puerto serial virtual, en nuestro computador. Es decir, le hace creer a nuestro computador que tiene un puerto DB9 (serial) fisico. Para descargar el software, pueden hacerlo a traves de la pagina oficial de Eltima dando click aqui.
  2. Hercules: Es un software que permite mostrar en el computador los datos que están siendo enviados por el puerto serial. Es una interfaz grafica de usuario que permite visualizar los datos que nuestro PIC está enviando para nosotros. Puedes descargarlo dando CLICK AQUI.

Entradas relacionadas en este sitio web:

En los siguientes ejemplos, veremos como podremos utilizar estos softwares, para ello preparé algunos videos en mi canal de Youtube para enseñarte paso a paso la utilización de cada software y ademas la explicación del puerto serial junto con cada código de programación. No olvides suscribirte a mi canal, para que recibas todas mis actualizaciones.

Comunicación serial ejemplos:

Ejemplo 1: comunicación serial con pic:

En nuestro primer ejemplo, vamos a conectar un LM35 (Sensor de temperatura) al puerto analogo digital del PIC16F887 y vamos a mostrar dicha temperatura en el computador utilizando la comunicación serial y el puerto DB9 del computador. El diagrama del circuito está a continuación:

comunicación serial con pic:
comunicación serial con pic:

Codigo de Implementación de comunicación serial con pic:

A continuación se presenta el código para que lo copies y lo pegues en tu compilador y puedas reproducirlo. Recuerda que para ver el código debes compartir o darle me gusta al contenido de este post para que más personas se beneficien de esta información.

#INCLUDE <16f887.h>
#device adc=10
#USE DELAY(CRYSTAL=4000000)
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,NOPUT,NOLVP
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8)

#BYTE PORTA= 5
#BYTE PORTD= 8

long bits;     //Variable almacena los bits
float tem;     //Almacena la temperatura

void main()
{
   set_tris_a(0b00000001);          //Pongo el RA0 como entrada
   setup_adc_ports(all_analog);     //Pongo todo el puerto a analogo
   setup_adc(adc_clock_internal);   //Selecciono reloj interno para conversion
   
   while(1)
   {
       set_adc_channel(0);          //Selecciono el canal 0 (RA0)
       delay_ms(1);                 //llamo retardo de 1 ms
       bits=read_adc();             //Guarde el dato del LM en tempe
       
       tem=bits*0.4882;              //Conversion de bits a temperatura
       printf("\rLa Temperatura es: %2.3f C\r\n",tem);
       delay_ms(1000);
   }
}

EJEMPLO 2: comunicación serial entre dos PIC:

Realizar una comunicación serial con pic sencilla entre dos microcontroladores, y mostrar en un LCD lo que cada uno esta transmitiendo y/o recibiendo.

El microcontrolador que recibe el dato, debe hacerlo por medio de una interrupcion por recepción serial. A continuación se describen los pasos para activar la configuración de la interrupción serial.

Como primer paso se definen las interrupciones en el programa principal void main(); donde se configura el programa para recibir interrupciones por recepción serial y adicionalmente se activan las interrupciones.

 enable_interrupts(INT_RDA); //Activa interrupción serial
 enable_interrupts(GLOBAL);  //Activa las interrupciones en el PIC

Como segundo paso, se procede a crear la función que se va a ejecutar cuando la interrupción por recepción serial es activada. A la función se le puede colocar cualquier nombre, y dicha función NO recibe parámetros de entrada ni de salida.

La función debe ser creada inmediatamente después de la directiva #int_RDA.

#int_RDA
Rutina_Serial()
{
 ..........
 ..........
}
Comunicacion serial con 2 PIC

El esquema del ejemplo es el siguiente:

El código del Primer microcontrolador para comunicación serial con pic:

[sociallocker id=948]

#include <16f887.h>
#fuses xt,nowdt
#use delay(crystal=4000000)
#use rs232(baud=57600,xmit=pin_c6,rcv=pin_c7)
#include <lcd.c>

void main()
{
 int valor,i;
 lcd_init();
 while(1)
 {
  for(valor=0;valor<=10;valor++)
  {
   putc(valor); 
   printf(lcd_putc,"\fEnviando= %1D",valor);
   delay_ms(1000);
  }
 }

}

Código del Segundo Microcontrolador para comunicación serial con pic:

#include <16f887.h>
#fuses xt,nowdt
#use delay(crystal=4000000)
#use rs232(baud=57600,xmit=pin_c6,rcv=pin_c7,bits=8)
#include <lcd.c>


int valor;


#int_RDA
RDA_isr()
{
  valor=getc();
}

void main()
{
 lcd_init();
 enable_interrupts(INT_RDA);
 enable_interrupts(GLOBAL);
 for(;;)
 {
 lcd_gotoxy(1,1);
  printf(lcd_putc,"Recibido= %1D",valor);
 }
}

Ejemplo 3 de comunicación serial con pic:

En este último ejemplo vamos a ver como podremos ampliar los puertos de comunicación serial programando UARTS VIRTUALES.

Para eso basta simplemente seleccionar otros dos pines CUALQUIERAS donde queremos realizar una comunicación serial, uno de estos pines lo configuraremos como el PIN RX y el otro como el PIN TX. Para efectuar esta configuración declaramos en el encabezado del programa lo siguiente:

#use rs232(baud=57600, xmit=PIN_c6,rcv=PIN_c7,stream=PIC,parity=N, bits=8)
#use rs232(baud=9600,xmit=PIN_D0,rcv=PIN_D1,stream=PC, parity=N, bits=8)

Mirando detalladamente esta directiva, nos vamos a dar cuenta que estamos configurando en este caso 2 UARTS, La primera linea está configurando el UART fisico del PIC, que ya sabemos que correspone al RC6 y RC7 para el caso del PIC16f887. La segunda linea está configurando un UART por software, en este caso yo seleccione que el PIN D0 fuera el de transmisión (TX) y el PIN D1 fuera el de Recepción (RX).

Note además que ahora cada UART está identificado con un NOMBRE, este NOMBRE puede ser cualquiera. Para el caso de la primera linea yo lo llame como PIC (“stream=PIC”) y la segunda linea lo llame como PC (“stream=PC”).

Asi, si por ejemplo yo quisiera leer un dato del UART que se llama PIC tendria que leerlo asi:

char c;
c=fgetc(PIC);

Por otro lado, si yo quisiera escribir por ejemplo en el UART que se llama PC, tendria que hacerlo asi:

char c=1;
int d=10;
fprintf(PC,"Caracter= %c, Entero= %d",c); //Muestra el Caracter 1 en el PC
                                          //y el entero 10 en el PC

El siguiente ejemplo es similar al Ejemplo 2. Acá vamos a conectar dos PIC por el puerto UART FISICO, pero en el PIC 1 vamos a crear un UART por Software.

Entonces el PIC 1 va a recibir caracteres por medio de un computador a través del UART virtual (9600 baudios) y los va a mandar al PIC 2 por el UART fisico (57600 baudios). El segundo PIC debe recibir los datos que el PIC 1 le está mandando y mostrarlos en una pantalla LCD.

uart virtual
uart virtual

Codigo del Primer PIC:

#include <16f887.h>
#fuses xt,nowdt
#use delay(crystal=4000000)

#use rs232(baud=57600, xmit=PIN_c6,rcv=PIN_c7,stream=PIC,parity=N, bits=8)
#use rs232(baud=9600,xmit=PIN_D0,rcv=PIN_D1,stream=PC, parity=N, bits=8)


void main()
{
 char c;
 fprintf(PC,"Digite lo que desea mandar al Segundo PIC: \r\n");
 while(1)
 {
  c=fgetc(PC); // lee desde el computador
  fprintf(PC,"%c",c); //Muestra el Caracter recibido en el PC
  fprintf(PIC,"%c",c); //Manda el caracter al segundo PIC
 }

}

Codigo del Segundo PIC:

#include <16f887.h>
#fuses xt,nowdt
#use delay(crystal=4000000)
#use rs232(baud=57600,xmit=pin_c6,rcv=pin_c7,bits=8)
#include <lcd.c>


char valor;
int i=0; //Posicion del dato recibido a mostrar en el LCD
int ban=0; //Bandera que indica que llego un dato

//Define la interrupción por recepción Serial
#int_RDA
RDA_isr()
{
  valor=getc(); //Captura el dato recibido del PIC 1
  ban=1; //Indica que llego un dato
  i=i+1; //Incrementa en 1 la posicion del LCD
  if(i>16)
  {
   i=0;
   LCD_PUTC("\f");   //Borrar el contenido del LCD
   lcd_gotoxy(1,1);
   lcd_putc("Recibido=");
  }
}

void main()
{
 lcd_init();   //Inicializa el LCD
 enable_interrupts(INT_RDA); //HAbilita interrupcion por puerto serial
 enable_interrupts(GLOBAL);  // Habilita las interrupcciones globales
 lcd_gotoxy(1,1);
 lcd_putc("Recibido=");
 for(;;)
 {
  if(ban==1) //Hay datos para mostrar
  {
   lcd_gotoxy(i,2);
   printf(lcd_putc,"%c",valor);
   ban=0; //Sale de la impresion del LCD
  }
 }
}

[/sociallocker]

Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Comentarios (43)

Hola Sergio, una duda, como podria hacer para que dos pics se comuniquen, uno manda un dato y lo recibe el otro y viceversa, la funcion se activa con un boton en cada uno, espero me leas y todos tus tutoriales me han servido bastante.

Responder

Hola Rodrigo,, seria igual al ejemplo 2 que tenemos aqui en el post. Estamos comunicando información entre los dos PICs: Ejemplo 2

Responder

Hola mucho gusto, me suscribí hace mucho tiempo y sus videos me han sido de utilidad.
¿Esta comunicación es igual a la del MDB (MitiDrops-BUs) usada en las máquinas expendedora (usan 9 bits en la comunicación, sólo que un bit es de estado, 8 de comunicación y 1 de estado) con la excepción del voltaje que es de unos 24 o 34 V( más o menos ) ? Si es así, podría utilizar este circuito para el comunicarme desde mi computadora a la máquina expendedora, sólo regulo el voltaje al que soporta el PIC., es cierto o l

Responder

Alguna vez ha usado el DPAC 2440 SEL, si es asi sabe como utilizar el software AcSelerator Quickset y sabria como enlazarlo a un sevidor terminal (nport 6650)?

Responder

Hola Sergio! Gracias por toda la información

Que tipo de comunicación me recomendarías para recibir información en un un PIC18 sobre un sensor de flexión, a traves de un módulo Hx711?

Responder

Debes usar la comunicación SPI para manejar ese tipo de sensor. Saludos.

Responder

Holla Sergio , so escrevendo para agradecer pelo seu magnifico trabalho , tenho muitos anos de experiencia em engenharia mas pouco conhecimento em microcontroladores suas aulas e explicacoes simples pratica e sem ocultar detalhes me ajudaram muito mesmo , parabens e obrigado

Responder

Muito obrigado Wanderley, fico feliz em saber que o centeúdo do site e do canal de YT servem e ajudam outras pessoas. Que bom que o conteudo tem te ajudado. Obrigado pela mensagem. Sucessos. Abç.

Responder

prof. buenas muchas gracias por el aporte pero le pido por favor si me puede enviar el esquema y el codigo del primer ejemplo tengo problemas para poder simularlo.

Responder

Hola Harold, no tengo disponible actualmente ese esquema con el virtual port, sin embargo lo deje disponible para simulación usando únicamente el virtual terminal del proteus. Que a la hora de la verdad, es lo único que necesitamos para simular la comunicación serial del pic. Saludos.

Responder

error en el simulador del proteos

Responder

Que tipo de error te está saliendo y cual ejemplo?

Responder

Buen dia, hasta cuantos microcontroladores pic se pueden conectar usando uarts virtuales para enviar y recibir información ?

Responder

Hola Hector, nunca hice una prueba de eso. Creo puedes hacer vários ya que el propio compilador genera los uart por software.

Responder

Buenas tardes. Como se usaria la comunicacion serian con el protocolo mdb para maquinas vending. Ya que el monedero. Cuenta con direcciones como por ejemplo una direccion para pulsos de moneda, otra para los tubos de cambio, direcciones para despachar producto, direccion para la pantalla. Son direcciones para cada periferico. Y la vdd no se como hacerlo. Trabaja con comunicacion de 9 bits. Gracias

Responder

Excelentes curso de microcontroladores PIC.
Disculpa en el EJEMPLO 2: comunicación serial entre dos PIC, dices: “El microcontrolador que recibe el dato, debe hacerlo por medio de una interrupcion por recepción serial, utilizando la siguiente sentencia:”
Pero no colocas la sentencia. Cual es la sentencia que se debe usar ??

saludos

Responder

Hola Christ, las sentencias realmente son las que estaban inmediatamente abajo, donde se configura la interrupción y luego la función de interrupción. Mejoré la redacción de esa parte, para evitar confusiones. Gracias por comentar.

Responder

Gracias !!! Muy amable

Responder

Hola, buen día
Estuve viendo su canal de you tube y la verdad que me parecido muy interesante el contenido, el cual quiero verlo y aprenderlo todo. Sin embargo no se por donde empezar
Es por eso que le escribo para que me ayude por favor proporcionándome una ruta de aprendizaje, para que vaya teniendo una mayor compresión de los conceptos y disculpe las molestias, ya demasiado nos ayuda compartiendo sus conocimientos.
Muchas gracias por sus vídeos. Saludos

Responder

Hola Ramiro, si lo que te interesa aprender es sobre microcontroladores PIC, es solo entrar a la página principal del Curso y vas abriendo cada entrada en orden. Todas las entradas se dividen en 3 columnas, es solo ir abriendolas de Izquierda a Derecha. te dejo el link de la página principal del curso de PICs: https://controlautomaticoeducacion.com/microcontroladores-pic/

Responder

Como puedo realizar el ejemplo 3 pero en vez de mandar un caracter, quiero mandar un cadena completa. Gracias

Responder

Es muy parecido, usando el comando fprintf, pero ahora debes mandar el arreglo de caracteres que debes tener previamente cargado.

char c[32];
fprintf(PC,”%s”,c);

Responder

Hola, muy buen video profe, pero salo algo mal en una práctica, ¿es posible hacer la comunicación conectando más cosas en el mismo puerto donde se uso el rs232? Yo lo intente pero no comunica nada, ¿estoy obligado a dejar el resto de pines de ese puerto en desuso? Solo me da comunicación si dejo el puerto completo exclusivo para comunicar, porfavor agradecería mucho si alguien explicará como se soluciona, como se declaran los puertos si es que existe alguna solución.

Responder

Hola Gustavo, claro que puedes usar los demás pines del puerto sin problemas. Recuerda declarar el puerto en el encabezado
#byte portc = 7 // Identificador para el puerto C.
y configurar que pines deseas como entrada y salidas con set_tris_c

Responder

Hola sergio, disculpa una pregunta. Realicé la comunicación como la tienes en tu 3er ejemplo, 2 microcontroladores comunicados por la uart y una programada para con la pc de un micro. Para cuando qiero leer una instrucción de la PC, se me queda ciclado hasta que no recibe una instrucción forazosamente, por lo que trate de cambiar la forma en que se comunican, es decir, El pic 1 (uart programada) al uart del pic 2, y de la pc a la uart del pic1 para poder con interrupcion de RDA saber cuando es cuando la pc me ha escrito. Pero al hacer eso proteus me marca falso entre la comunicacion de los dos micros. No se si los uart programados solo funcionen para dispositivos ajenos a los microcontroladores y no para entre microcontroladores. Un saludo, muchas gracias

Responder

Carlos los Uart por software funcionan también para comunicar entre ellos microcontroladores. Debe ser algo en tu código que no está trabajando adecuadamente.

Responder

Hola Sergio , excelente post ha sido de gran ayuda para mi, soy nuevo en esto de la programación de PICs pero ciertamente me ha ayudado mucho tu post, estoy trabajando con el dispositivo DFPlayer mini mp3 ya que quiero reproducir sonidos en mis proyectos con PICs. Este dispositivo puede trabajar con comunicación tipo serie(que es lo que quiero hacer) , mi pregunta es…¿Es igual la programación del puerto seria del pic para este proyecto? , ¿que aspectos necesito considerar?.
de antemano gracias por el aporte.

Responder

Hola Sergio, si es lo mismo. Debes mandar la información con el PIC a tráves del pin TX hacia el RX del DFPlayer y recivir por el pin RX del pic los datos enviados por el DFPlayer a tráves del pin TX.

Responder

Buenas tardes Sergio, tengo una pequeña pregunta… ¿Si utilizo un cable conversor SERIAL-USB es necesario que utilice también el integrado MAX232? o con solo el cable me basta. Gracias de antemano

Responder

Esos cables poseen el integrado FT232 entonces ya no necesitas nada más. Solo debes conectar los pines RX y TX al PIC

Responder

Hola Sergio, una preguna, he hecho la cominucacion rs232 con un pic 18f4550, la comunicacion se hace perfectamente, solo tengo un inconveniente, he puesto un texto para que cuando haga la comunicacion aparezca el texto como instructivo de que teclas controlan el circuito, pero cuando hago la comunicacion el texto no aparece, solo aparecen cuando reseteo el pic. quiero ver si hay alguna manera de que el texto aparezca sin necesidad de que resetee el pic.
gracias.

Responder

Muy buenos vídeos y muy bien explicados tengo una duda hasta donde yo tengo entendido solo se pueden mandar valores de 8 bits en la comunicación mi duda es hay alguna forma de poder mandar mas de 8 bits por ejemplo si yo quisiera mandar un float no se puede por que son 32 bits y solo registra 8 de esos 32 hay alguna manera de que pueda mandar esos 32bits por su atención muchas gracias

Responder

Ulises una de las formas es como mostrado en el ejemplo donde mandamos la temperatura que es de tipo flotante, para eso usamos el printf(“%2.3f”,tem); que me permite mandar ese dato. Otra forma es mandar los 4 bytes uno a uno y luego reconstruir el dato en la recepción.

Responder

Que tal sergio informacion muy util y buen aporte, quiero ver si puedes ayudarme en un proyecto integrador ocupo comunicar al micro con C# , tendras algo de informacion al respecto?

Responder

Antonio nunca utilice C# para programar un microcontrolador, por lo tanto no tengo información al respecto.

Responder

Hola Sergio, muy útil la información pero tengo una duda quiero saber como podría hacer para con un microcontrolador comunicarme con el microcontrolador de una gold smart card (como las que usan las tarjetas gsm), a fin de programar la tarjeta para un acceso, es decir dejar la tarjeta grabada con un código para que luego cuando la inserte en un lector este reconozca dicho código y habilite una entrada de una puerta por ejemplo.
Muchas gracias de antemano

Responder

Hola David, para eso tendrías que ver que tipo de protocolo de comunicación utiliza el microcontrolador de la Gold Smart, yo nunca he trabajado con eso, pero solo basta con saber el tipo de comunicación y que protocolo usa. Con eso, puedes formar las tramas de comunicación con tu pic. De cierta manera se haría parecido a lo que vimos en la clase de comunicación I2C (click aqui), donde creábamos las tramas para comunicarnos con los periféricos.

Responder

Ok muchas gracias, también quería saber que posibilidad hay de que me ayudes a entender un código que encontré en internet referente a esto, es que realmente no soy muy experto en esta área y estoy medio urgido, no es mi intención ocupar tu tiempo solo que si ando en apuros con la entrega de dicho proyecto, tienes mi correo en este comentario si me puedes escribir ahí para pasarte el código que te mencione lo agredecería mucho y disculpa la molestia

Responder

Que tal, me ha servido de mucho tus aportes y he podido simular todos tus ejemplos ahora intento realizar la comunicación del microcontrolador a mi PC utilizando un cable SERIAL-USB sin embargo tengo problemas en el mensaje o caracteres que leo en el COM ya que obtengo caracteres raros, las conexiones que tengo son de los pines del microcontrolador RX, TX y GROUND estos tres directamente a los pines DB9 del cable serial y el usb a mi PC, no se si esta falla proviene de la falta de un max232 a la entrada del DB9 o alguna otra cosa que no este convirtiendo o enviando bien los datos, espero me ayuden, gracias

Responder

Utiliza el MAX232 o utiliza el FT232, muy probablemente esa sea la causa de tu problema. Pues debe haber incompatibilidad de voltajes.

Responder

Hola estoy intentando hacer una comunicacion serial pic a pic pero entre microcontroladores 18f4550 y es un gran problema debido a que la frecuencia de operacion del USB interfiere con la comunicacion, podrias hacer un tutorial o decirme donde puedo encontrar esta informacion… Gracias saludos!!!

Responder

Hola, muy buena entrada. Me sirvió de mucho.
Consulta: como puedo configurar los bit de star y stop en mi PIC?

Saludos!

Responder

Hola Gerson, utilizando el PIC C Compiler, no es necesario configurar el bit start, pues el compilador ya hace eso internamente por nosotros. El bit de stop lo configuras en el encabezado

#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, stop=1)

Responder