top of page

INTERFAZ VISUAL BASIC & MICROCONTROLADOR PIC18F POR PUERTO RS232-USB.

Estimado Lectores, el día de hoy les presento un Interfaz capaz de controlar el encendido de un grupo de 8 leds, el medio de comunicación que vamos a plantear sera el RS232, para tal fin debemos utilizar 3 programas (MPLAB XC8 IDE, VISUAL BASIC y PROTEUS).

Este sencillo ejercicio nos va a llevar a otro nivel, ya que al finalizar el proyecto terminaran como Roky en la playa muy felices, puesto que este proyecto les abrirá la puertas para poder diseñar interfaces HMI para el control de procesos.

Nuestro sencillo programa consiste en enviar instrucciones mediante un ordenador y mediante un interfaz desarrollado en Visual Basic esta enviara una letra ASCII "R", recordemos que en hexadecimal es 0x52h. de este modo y mediante una combinación de condicionales dentro MPLAB podemos indicar una acción.

Por otro lado, recordemos que los sistemas embebidos y la programación, son temas de alta especialización, por eso muchos clientes no entienden nada de codigos C, Pascal, C++, Java, Etc y nos buscan.

Por lo tanto, nosotros debemos proporcionarles una herramienta interactiva un interfaz capas de cubrir sus necesidades en el control de un determinado proceso por ejemplo: el arranque de un motor, encendido de luz de emergencia mediante un protocolo de seguridad incorporado.

Así pues, poder visualizar el proceso de su planta en una sola pantalla facilita la toma de decisiones, ademas permite control remoto, esto nos lleva a una etapa superior que es el sistema SCADA.

El SCADA, acrónimo de Supervisory Control And Data Acquisition (Supervisión, Control y Adquisición de Datos) como dice su nombre es una aplicación para adquisición de datos en tiempo real, ya que de esta manera se puede monitoria y actuar en procesos de manera remota.

La ingeniera Mecatronica actualmente esta revolucionando la manera en que las maquinas electromecanicas realizan un procesa, ya que de el se puede extraer datos fundamentales como temperatura, presion, etc, ademas podemos activar sus actuadores, por ejemplo encender motores, mover pistones y todo desde la comodidad de una oficina al otro lado del mundo.

Volviendo al tema que nos ocupa, los material que debemos tener en cuenta son los siguientes:

* PLACA DE DESARROLO PARA PIC18F4550.

* Cable USB RS232 A USB.

*LCD16x2.

*Microcontrolador PIC 18F4550.

*PC.

PROGRAMA MPLAB XC8 IDE


Analicemos el codigo fuente para el microcontrolador PIC18F4550:


/* * File: main.c * Author: Guillermo Angulo Niquen * * Created on 23 de JULIO de 2017, 11:24 */

#include <xc.h> #include <stdio.h> #include <stdlib.h> #include <plib/usart.h> #include <xc.h>

#define _XTAL_FREQ 20000000 #include "lcd_xc8.c" #include "lcd_xc8.h" volatile int Data, Kbhit=0;

//****************** Se discrimina el origen de la interrupción************* void interrupt high_isr (void) { if (PIR1bits.RCIF==1){ // Discrimina la interrupción Data=getcUSART(); // Se lee dato recibido Kbhit=1; // Indica que se ha recibido un dato PIR1bits.RCIF=0; // Borra bandera de interrupción } }

//********************PROGRAMA PRINCIPAL******************************/ void main(void){ ADCON1=0x0F; TRISD = 0x00; TRISE = 0x00; TRISB=0x00; TRISA=0x00; PORTEbits.RE1=0; PORTDbits.RD0=0; PORTDbits.RD1=0; PORTDbits.RD2=0; PORTDbits.RD3=0; unsigned char base =1; // Inicializa el USART y lo configura a 8N1, 9600 baud OpenUSART (USART_TX_INT_OFF & // TX sin interrupción USART_RX_INT_ON & // RX con interrupciónes USART_ASYNCH_MODE & // Modo asincrónico USART_EIGHT_BIT & // Modo alta velocidad USART_CONT_RX & // Recepción continua USART_BRGH_HIGH,129);// 9600 baudios a 20Mhz RCONbits.IPEN = 0; // Deshabilitamos prioridades INTCONbits.PEIE=1; // Habilitamos la interrupcion de perifericos lcd_init(); //Delay1KTCYx(25); lcd_putrs("USART PIC18F4550"); // Cartel inicial INTCONbits.GIE=1; //Habilita interrupción global while(1){ // BUCLE if(Kbhit !=0){ // Indica que hay nuevos datos recibidos Kbhit = 0; // Borra la marca de ISR if(Data!=0x00){ // El dato es distinto de 0? if(Data==0x49 & base > 0){ // Backspace & base son verdaderos? base--; lcd_gotoxy(base,2); lcd_putc(" "); PORTB=0x00; __delay_ms(25); } else{ lcd_gotoxy(base,2); lcd_putc(Data);// Muestra el dato en pantalla putcUSART (Data); base++; switch(Data) { case 0x52: // NUMERO ASCII "R" PORTB=0x0F; __delay_ms(25); break; case 0x4C: // NUMERO ASCII "L" PORTB=0xF0; __delay_ms(25); break; case 0x41: // NUMERO ASCII "A" PORTB=0xFF; __delay_ms(25); break; case 0x42: // NUMERO ASCII "B" PORTB=0x00; __delay_ms(25); break; } } } } } }

Con respecto al codigo se puede notar que he resaltado las partes mas importantes que considero lo integra.

Primeramente hablemos de la funcion OpenUSART (); ya que es una funcion de la libreria propia de MICROCHIP para microcontroladores PIC18F en codigo C, esta funcion permite configurar y establecer la forma en que se dara la comunicacion, indicando por que medio, la velocidad, entre otros, como se detalla a continuacion:

OpenUSART (USART_TX_INT_OFF & // TX sin interrupción USART_RX_INT_ON & // RX con interrupciónes USART_ASYNCH_MODE & // Modo asincrónico USART_EIGHT_BIT & // Modo alta velocidad USART_CONT_RX & // Recepción continua USART_BRGH_HIGH,129);// 9600 baudios a 20Mhz

Ademas, cuenta con dos funciones importantes que lo complementa, getcUSART(); y putcUSART (Data); estas dos funciones son valiosas para recibir información y para enviar por el USART.

Nuestro programa recibe la información mediante la función getcUSART y se almacena en una variable int que hemos denominado DATA, esta variable ingresara al programa principal lo cual permitirá que se ejecuten las instrucciones, finalmente se devuelve la misma variable data por la función putcUSART generando un eco. por lo tanto, podemos visualizar nuestra información recibida por el LCD 16x2 y ademas mediante un Hiperterminal visualizar que hemos

el dato retrasmitido.

Por ultimo, mediante una SWITCH(), indicamos que dependiendo del dato que se reciba se ejecuta una acción predeterminada por el puerto B como se indica a continuación:

switch(Data) { case 0x52: // NUMERO ASCII "R" PORTB=0x0F; // ENCENDER 4 LUCES A LA DERECHA. __delay_ms(25); break; case 0x4C: // NUMERO ASCII "L" PORTB=0xF0;// ENCENDER 4 LUCES A LA IZQUIERDA. __delay_ms(25); break; case 0x41: // NUMERO ASCII "A" PORTB=0xFF;// ENCENDER LAS 4 LUCES . __delay_ms(25); break; case 0x42: // NUMERO ASCII "B" PORTB=0x00;// APAGAR LAS 4 LUCES . __delay_ms(25); break;

Fig.02 PLATAFORMA MPLAB

PROGRAMA VISUAL BASIC 6.0

Primeramente, debemos determinar la comunicación por medio del bloque que tiene una imagen de teléfono, haciendo doble click en la barra de herramientas de la derecha del entrono de Visual basic 6.0, se despliega una cuadro de dialogo donde seleccionamos Microsoft comcontrol6.0.

Segundo, realizamos doble click en la pantalla de trabajo, y escribimos siguiente código que permitirá definir el medio, la velocidad entre otras características para que podamos realizar la comunicación como se detalla a continuación:

Private Sub Form_Load() MSComm1.CommPort = 5 // INDICA EL PUERTO MSComm1.Settings = "9600,n,8,1" // INDICA VELOCIDAD, BIT PR, TAMAÑO INFO. MSComm1.PortOpen = True End Sub

y eso es todo ya hemos establecido la comunicacion, a continuacion vamos a configurar lo botones que enviaran un dato por USART ya configurado.

Private Sub Command1_Click() MSComm1.Output = "R" End Sub

Private Sub Command2_Click() MSComm1.Output = "L" End Sub

Private Sub Command3_Click() MSComm1.Output = "B" End Sub

Private Sub Command4_Click() MSComm1.Output = "A" End Sub

Private Sub Command5_Click() MSComm1.Output = "I" End Sub

Finalmente le damos play al programa o lo volvemos un ejecutable como nos guste , compilamos nuestro programa en el microcontrolador y tenemos de resultado lo siguiente.

SIMULACION EN PROTEUS 8.0

IMPLEMENTACION DEL PROYECTO

Podes descargar el proyecto completo y mejorarlo:

Esperando les haya servido, dejanos tus comentarios y like.

Un cordial saludo.

MICROTECSD

Lima-Peru

 


About Me.

I'm a paragraph. Click here to add your own text and edit me. I’m a great place for you to tell a story and let your users know a little more about you.

  • Black Facebook Icon
  • Black Instagram Icon
  • Black Twitter Icon
Never Miss a Post!
bottom of page