Está en la página 1de 6

Control de un PIC desde el PC por el puerto serie

Este proyecto pretende mostrar lo bsico para el control de un pic 16F876A a travs del puerto serie del PC. Como software, para este ejemplo sencillo, es suficiente con el HyperTerminal que viene por defecto instalado en Windows. En el momento de conectar el PIC con el PC, mandar un mensaje de confirmacin de la conexin que ser mostrado en el escritorio del HyperTerminal. Desde aqu, con una serie de comandos podr ser controlado. Este es el esquema del circuito tal y como se ha montado. Para la simulacin en Proteus no es necesario plasmar el MAX232, pines de alimentacin, cristal de cuarzo, etc. El archivo para la simulacin se puede descargar en el enlace al final del artculo.

El MAX232 se debe intercalar entre las salidas RS232 del PIC y las seales procedentes del PC para adaptar los niveles lgicos del PIC (0V 5V) a los niveles de tensin del puerto serie del PC. Y este es el cdigo para la programacin del PIC bajo el compilador de CCS. [+/-] Ver / Ocultar programa en C //////////////////////////////////////////////////////// // // // PROYECTO CONTROL DE UN PIC VIA PUERTO SERIE PC // // // // Control de 4 diodos led por las salidas B0 a B3 // // Lectura del estado de las entradas B4 a B7 // // // //////////////////////////////////////////////////////// #include <16f876a.h> #fuses XT #use delay(clock=4000000)

#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) #use standard_io(C) #use standard_io(B) #define LED_AZUL PIN_B0 #define LED_VERDE PIN_B1 #define LED_ROJO PIN_B2 #define LED_AMARILLO PIN_B3 #define ENTRADA1 PIN_B4 #define ENTRADA2 PIN_B5 #define ENTRADA3 PIN_B6 #define ENTRADA4 PIN_B7 int opcion; void mostrar_menu(){ puts("\fComando Control\r"); puts(" 0 Estado ENTRADAS"); puts(" 1 Control LED-AZUL"); puts(" 2 Control LED-VERDE"); puts(" 3 Control LED-ROJO"); puts(" 4 Control LED-AMARILLO"); puts(" Espacio Menu"); } void funcion_led_azul(){ output_toggle(LED_AZUL); if (input_state(LED_AZUL)) puts("\fLed azul encendido"); else puts("\fLed azul apagado"); } void funcion_led_verde(){ output_toggle(LED_VERDE); if (input_state(LED_VERDE)) puts("\fLed verde encendido"); else puts("\fLed verde apagado"); } void funcion_led_rojo(){ output_toggle(LED_ROJO); if (input_state(LED_ROJO)) puts("\fLed rojo encendido"); else puts("\fLed rojo apagado"); } void funcion_led_amarillo(){ output_toggle(LED_AMARILLO); if (input_state(LED_AMARILLO)) puts("\fLed amarillo encendido"); else puts("\fLed amarillo apagado"); }

void funcion_lectura_entradas(){ printf("\fEstado de la entrada 1 printf("\rEstado de la entrada 2 printf("\rEstado de la entrada 3 printf("\rEstado de la entrada 4 } void main() {

= = = =

%u", input(ENTRADA1)); %u", input(ENTRADA2)); %u", input(ENTRADA3)); %u\r", input(ENTRADA4));

output_low(LED_AZUL),(LED_VERDE),(LED_ROJO),(LED_AMARILLO); puts("\fConexion establecida\r\rPulsa barra espaciadora para abrir menu"); for(;;){ opcion = getc(); switch(opcion){ case ' ': mostrar_menu(); break; case '0': funcion_lectura_entradas(); break; case '1': funcion_led_azul(); break; case '2': funcion_led_verde(); break; case '3': funcion_led_rojo(); break; case '4': funcion_led_amarillo(); break; } } }

[+/-] Ver / Ocultar versin ASM Para la simulacin sera necesario disponer de dos puertos serie en el PC y unirlos mediante un cable serie. En el Proteus configuraremos el componente COMPIM con uno de los puertos, en este caso el COM1. Y el HyperTerminal se deber configurar con el otro puerto, aqu el COM2. Pero existe otra opcin en el caso de no disponer de puertos serie fsicos o del cable de unin, instalando el programa Virtual Serial Port Driver desarrollado por Eltima software que permite crear una pareja de puertos virtuales. En este proyecto se ha elegido esta opcin.

En su pgina permite la descarga de una versin de prueba operativa durante 14 das. http://www.eltima.com/products/vspdxp/ Por ltimo queda configurar el Hyperterminal de Windows. Que se encuentra en: <Inicio> <Todos los programas> <Comunicaciones> <HyperTerminal> Mientras se abre pedir una serie elecciones: un nombre para la conexin, el puerto de comunicaciones (el que no se ha empleado para el Proteus de la pareja de puertos empleados), y la velocidad de la transmisin (9600 en este proyecto). Una vez abierto en <propiedades> <settings> <ASCII setup> se configura como se muestra.

Una vez configurado y conectado, al comenzar la simulacin en Proteus, el PIC responder con un mensaje de bienvenida y permitir la interaccin entre el HyperTerminal y el PIC. En esta animacin se puede ver una muestra de la simulacin.

Para el montaje fsico hay que tener en cuenta dos cosas frente a la simulacin. Por un lado ahora s que ser necesario, lgicamente, un puerto serie real o USB con un cable adaptador de USB a puerto serie. Este puerto COM ser el que habr que seleccionar en el HyperTerminal. En la ejecucin real de este caso concreto, se ha empleado uno de esos adaptadores USB y el resultado ha sido satisfactorio. Por otro lado, y como ya se ha dicho, entre las salidas RS232 del PIC y las seales procedentes del PC, es necesario intercalar un circuito adaptador de los niveles lgicos del PIC a los niveles de tensin del puerto serie del PC. En este caso un MAX232.

En el siguiente enlace se puede descargar los archivos del esquema en proteus, el programa para CCS, el cdigo de programacin del PIC y la animacin de la simulacin.