Вы находитесь на странице: 1из 43

Realizado por: George.manson.

69

http://ucursos.webs.com
LEER PARA APRENDER / Por: Jorge Rdz, Editor

Pas casi un ao desde que ya no haba realizado ninguna prctica utilizando

Microcontroladores PIC16, del cual me ha fascinado bastante ya que un da me

pregunte, Es necesario aprender Microcontroladores? Donde lo puedo aplicar? Estas

dos cuestiones me las haca muy seguido, entonces un da, en mi trabajo encontr en

una maquina avanzada que haba tenido una falla, ya que mi trabajo se trata de reparar

fallas en equipos, pues tuve que ir a ver que era esa tal falla, pues no era ms que una

tarjeta de control que se haba quemado unos diodos, no fue muy difcil saber que era

la falla, y despus como tena tiempo necesario para hacer otras cosas me la pase

revisando que mas tenia o de que estaba compuesto la tarjeta y vi que haba un

Microcontrolador y una calcomana tapando de qu tipo de Micro usaba, no espere

mucho tiempo para saber cual era, y valla sorpresa era un MicroPIC 16C57 cuando lo

vi me record todas las practicas que haba hecho con anterioridad, desde ese

momento supe que las horas perdidas pasndola programando y realizado proyectos

con esos PIC ahora s a dnde van los conocimientos adquiridos de tantas horas

programando Microcontroladores PIC y s que vale la pena seguir programando!.


Introduccin

Este Manual concerniente a las prcticas sobre la utilizacin de comunicacin serial

utilizando como hardware el Microcontrolador PIC16F886 y Labview para la interface

Hombre-Mquina fueron realizados para abrirnos paso a realizar nuevas maneras de

programar en Labview, y usando el compilador MPLAB X IDE para la programacin en

C para Microcontroladores PIC16.

A lo largo de este manual usted entender como hacer correctamente un enlace Serial

hacia Labview y PIC16.


1. MPLAB X

Recientemente Microchip ha lanzado un proyecto para mejorar el aspecto de su IDE en

este caso de MPLAB. En su reciente actualizacin 8.80 ha mejorado en sus aspectos

con unos pocos detalles del cual no son muy impactantes como son la competencia

casi directa con AVR son su AVRStudio 5, del cual es casi como programar en C#. Era

tiempo de que Microchip se pusiera las pilas y que lanzara su nuevo IDE basado en

JAVA, hablamos de MPLAB X.


1.1 PROTEUS

Una de las maneras de realizar un proyecto siempre es simularlo antes de empezar

hacerlo fsicamente ya que nos ahorra tiempo en construccin y sacar fallas antes de

proceder, para nuestro caso usaremos una herramienta sumamente importante para la

simulaciones de circuitos lgicos y programables entre varios ms, estamos hablando

de PROTEUS, simulador muy conocido entre toda la comunidad de electrnica y de

control.
1.2 LABVIEW

Para la interfaz del usuario usaremos el software Labview 2010 donde aprenderemos a

desarrollar comunicacin seriales a su mxima capacidad, entre otras herramientas

necesarias para desarrollar sistemas muy estables para las comunicaciones.


1.3 INICIANDO EN MPLAB X

En esta parte nos enfocaremos en la programacin en C usando el compilador HI

TECH FOR PIC16 del cual nos proporcionara la habilidad para programar los PIC de

una manera muy sencilla ahorrando memoria al mximo.

1.3.1 Entorno de MPLAB X

En nuestra primera impresin de usar MPLAB X es como si fuera una sombra de JAVA,

pero es muy distinto ya que es para Microcontroladores PIC.

3
4

1. Exploramos libreras del proyecto tanto los archivos principales.

2. Observamos el contenido de los archivos tanto las libreras y el programa principal.

3. Aqu podemos ver la informacin concerniente al Microcontrolador.

4. Salida donde podemos observar errores al compilarse el archivo tambin podemos


debuggear el programa.
1.3.2 Crear Nuevo proyecto

Para crear nuestro primer proyecto debemos de dar click en donde dice <Create New
Project> o podemos ir a <File><Creare New Project>

Como haremos nuestro proyecto desde cero daremos click en <Standalone Project>
daremos <Next> y elegiremos el Microcontrolador a usar en este caso para todos los
proyectos usaremos el PIC16F886.
Si tenemos un debugeador en nuestras manos podemos seleccionar uno de ellos como
puede ser el PICKit 2, 3 etc. Como vamos a usar un emulador simplemente
seleccionamos:

En la siguiente ventana encontraremos que compilador vamos a usar, normalmente por


default encontremos los disponibles en nuestra computadora.
Usaremos el compilador Hi tech Compiler for PIC16 , despus buscaremos un lugar
para guardar nuestro proyecto y aceptamos.

Como en MPLAB 8.8 al tener el proyecto listo debemos de hacer una extensin .c
para ellos vamos a <New File> y en ventana de categoras buscaremos en <Micochip
embedded> y elegimos la carpeta donde est el compilador hi tech y en <File Type>en
la primera opcin es que estamos buscando para el compilador hi tech for PIC16. En la
siguiente ventana nos pedir el Nombre del archivo y la extensin despus la ubicacin
del archivo del cual debe ser la misma donde creamos el proyecto.

Al agregar el archivo con la extensin .c aparecer en el explorador en <Important


Files> del cual solo debemos de pasarlo nuevamente a la carpeta <Source File> para
que este bien ubicado a la hora de compilar.
1.4 Crear enlaces

Como hemos realizado nuestro primer proyecto en MPLAB X no tiene mucha ciencia la
programacin en C, ya que si hemos programado en Hi tech compiler es prcticamente
igual.

La idea de nuestro primer programa en C es hacer una comunicacin serial que prenda
un puerto completo del cual podemos usar interrupciones por Recepcin de datos o
simple recepcin de datos.

1.4.1 Enlace PIC

En la segunda opcin podemos hacer un programa que nos quede de la siguiente


manera:
/*
* File: Main.c
* Author: george
*
* Created on November 13, 2011, 6:34 PM
*/

#include "pic.h"
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF
& IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF & BOR4V_BOR40V & WRT_OFF);

/*
* FOSC_HS 20Mhz External Crystal
* WDTE_OFF Watch dog disable
* PWERTE_ON Power System Enable
* MCLRE_ON Master Clear Enable
*/
#define _XTAL_FREQ 20000000 //
#include "libUSART/usartdr.h"//Libreria para usar el serial
/*
* VARIABLES GLOBALES DEL PROGRAMA
*/
unsigned char data;
//ISR Interrupt
static void interrupt
isr(void){}
//Programa Principal
void main(void) {
TRISC=0x80;//RX COMO ENTRADA Y TX COMO SALIDA
TRISB=0X00;//PUERTO COMPLETO COMO SALIDA
/*
* CONFIGURAMOS SERIAL
* VALUE=(FOSC/(BAUD*16))-1
* SIN INTERRUPCIONES
* A 19200
*/
OpenUSART(64,OFF,ON);//64=19200
GIE=0; //DESACTIVA INTERRUPCIONES GLOBALES
PEIE=0; //DESACTIVA INTERRUPCIONES POR PERIFERICOS
PORTB=0X00; //INICIALIZA PUERTO B COMO APAGADO

while(1){ //CICLO PERPETUO


data=getch(); //ESPERA A RECIBIR 1 BYTE DEL SERIAL
PORTB=data; //PROYECTA EL BYTE EN EL PUERTO B
}
}

1.4.1 Crear enlace en Labview

Lo que primero se debe de realizar en Labview es crear un <New VI> despus al


abrirse las dos ventas de Block diagram y Front Panel , nos pasaremos a la ventana de
Block Diagram del cual buscaremos la opcin de SERIAL, que est ubicado en
<Functions> <Instrument I/O> <Serial> y seleccionamos la opcin de VISA Configure
Serial Port que nos servir para configurar los baudios, bits de paridad entre varias
opciones ms.

Al agregar el control de configuracin de puerto


agregaremos dos controles que harn la funcin
de buscar el puerto que es VISA resource name
que cada vez que exista un puerto disponible, este
lo visualizara. En baud rate por defecto esta a
9600 que podemos cambiar fcilmente escribiendo
sobre la velocidad de transmisin.

Despus de configurar correctamente el puerto,


ahora podemos hacer un ciclo perpetuo hasta que
salgamos con un stop.

Para ello buscaremos la opcin de While Loop ,


despus buscaremos la opcin de escribir en el puerto, que consta de solo enviar una
cadena de caracteres pero en este caso solo enviaremos un byte, pero para enviar
este dato debe de transformarse de un arreglo booleano a numero y de este a un
arreglo de caracteres.

En la siguiente imagen tenemos la programacin completa como debe de quedar


nuestro proyecto en Labview, recuerde siempre cerrar el puerto al terminar la conexin
para que este pueda cerrarse correctamente y que pueda seguir funcionando bien el
puerto seleccionado.
Si nos pasamos al lado de Front Panel nos quedara de la siguiente manera:

Recuerde que usaremos una velocidad de transmisin de 19200 baud por defecto
siempre aparecer en 9200 baud.

Se debe de conectar primero el hardware que en este caso es el PIC16 ya que estar
esperando el dato de un byte, al este estar conectado daremos play en Labview para
correr el programa y rpidamente este enviara el primer dato, y ya podremos enviar los
estados de los switches.

Recuerde siempre usar el MAX 232 para las conversiones de niveles RS232.
1.4.2 Esquema del Proyecto

Hemos usado un regulador de voltaje 7805 para proporcionarle al Microcontrolador


exactamente 5 Volts. En el Puerto B est conectado en cada pin un led con su
respectiva resistencia para poder visualizar el interruptor presionado en Labview.
Aunque el esquema es demasiado sencillo, hemos empezado con algo as, para
calentar motores, ay que su usted se ha dado cuenta en la programacin hemos usado
una buena lgica para algo tan simple, entonces a lo largo de este curso usted
aprender a realizar cosas muy complejas con Labview y los Microcontroladores en
general, ay que este misma funcin que hemos creado en Labview se puede usar para
distintos Microcontroladores existentes en el mercado.
Siempre recuerde usar el circuito MAX232 para las conversiones del protocolo RS232,
ya que este protocolo aunque no sea mucha corriente a usar convierte de 5 volts a 12
volts aproximadamente.

1.5 Recibir datos del Pic Hacia Labview

Al recibir datos del Microcontrolador hacia Labview es un procedimiento demasiado


parecido a la prctica anterior, del cual el pic debe de capturar los datos y despus
enviarlos. Para ello se debe de configurar correctamente el perifrico de serial del pic a
una velocidad de 19200 baud, al guardar el dato ledo del puerto B se debe llamar la
funcin que realiza el envo de datos hacia Labview. Al recibir los datos Labview este
debe de leer los datos existentes en ese momento para saber cuntos bytes necesita
leer y despus capturar todos los datos que estn guardados en su buffer, y
procesarlos hacer acciones.
1.5.1 Configuracin de PIC16F886

La diferencia del proyecto anterior es que ahora es hacer que el puerto B sea Entrada
digital, y usar interruptores para que tomar los datos y gurdalos en una variable, del
cual se enviara a Labview, para ello se agrega la librera USART como se realizo en la
prctica anterior, al tomar solo los 4 bits de menor peso del puerto B este solo se enva
para despus esperar 100mS que servirn para sincronizacin.
/*
* File: Main.c
* Author: george
*
* Created on November 15, 2011, 8:22 PM
*/

#include "pic.h"
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF
& IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF & BOR4V_BOR40V & WRT_OFF);

/*
* FOSC_HS 20Mhz External Crystal
* WDTE_OFF Watch dog disable
* PWERTE_ON Power System Enable
* MCLRE_ON Master Clear Enable
*/
#define _XTAL_FREQ 20000000 //
#include "libUSART/usartdr.h"//Libreria para usar el serial
/*
* VARIBALES GLOBALES
*/
unsigned char dato;
//Funcion de Tiempo
void dly(unsigned int t){
while(--t)__delay_ms(1);
}
//ISR Interrupt
static void interrupt
isr(void){}
//Programa Principal
void main(void) {
TRISC=0x80;//RX COMO ENTRADA Y TX COMO SALIDA
TRISB=0X0F;//NIBBLE BAJO COMO ENTRADA RESTO SALIDA
ADCON0=0x00;//DESACTIVA ENTRADAS ANALOGAS
ANSELH=0x00;//ENTRADAS ANALOGAS EN PUERTO B APAGADO
/*
* CONFIGURAMOS SERIAL
* VALUE=(FOSC/(BAUD*16))-1
* SIN INTERRUPCIONES
* A 19200
*/
OpenUSART(64,OFF,OFF);//64=19200
GIE=0; //DESACTIVA INTERRUPCIONES GLOBALES
PEIE=0; //DESACTIVA INTERRUPCIONES POR PERIFERICOS

while(1){
dato=PORTB&0x0F; //TOMA SOLO NIBBLE BAJO
putch(dato); //CARGA DATO EN EL SERIAL PARA ENVIARLO
dly(100); //ESPERA 100mS
}
}

1.5.3 Configuracin de enlace en Labview

Como hemos realizado en el proyecto anterior se debe de crear un Nuevo IV, despus
en la ventana Font Panel agregaremos unos cuantos arreglos para que nos quede de
la siguiente forma, note que esto puede ser a su gusto ya que lo ms importante esta
en Block Diagram :
Visa resource name es donde podemos agregar el COM disponible del cual se puede
obtener al agregar las configuracin del puerto.
Set up 19200 esto nos proporciona la velocidad a que
debe de trabajar la comunicacin en Labview, como al
agregarlo por default aparecer con una velocidad de
9 600 baud solo se debe de escribir la velocidad
deseada que en este caso es de 19200 baud como se
ha configurado el Microcontrolador.

Mientras por ultimo podemos observar un arreglo


boleando compuesto por solo 4 bits, que nos
proporcionara la visualizacin de 4 interruptores que
estarn conectado al nibble de menor peso del puerto
B del Microcontrolador.

Ahora entrando a lo ms complicado que es la programacin de este mismo, se debe


siempre de configurar primero que nada el serial, esto se hace buscando el IV <VISA
Configure Serial Port> del cual solo debemos de sacar dos parmetros que son el COM
y los BAUD.
Como ya hemos agregado la configuracin del puerto, ahora se debe de crear un
evento, esto quiere decir que configuraremos un evento del cual al recibir un carcter o
un byte este rpidamente entrara, para ellos se debe de agregar el siguiente VI <Visa
Enable Event> nos pedir un parmetro en particular que es la configuracin del evento
o la seleccin del evento, tendremos varios de estos pero el ms importante ser al
recibir un carcter <Serial Character> despus se debe de estar seguro de que este
correctamente sin evento en ese momento del cual se agrega <Visa Discard Event> y
nos quedar de la siguiente manera:

Ahora como puede o no fallar la conexin en un momento inesperado, se debe de


checar siempre el estado de este, se agrega la funcin <unbundle by name>
Para obtener los status de errores, solo debemos de seleccionar el status para luego
usar el bit que nos arroja que es un F cuando no hay errores de conexin o un T
cuando existen algn tipo de falla.
Para cuando la opcin en Verdadera (T) solo se agrega un <case structure> que hara
la funcin de un if-else como en la programacin en C.
En la ventana de Verdadero solo se directo las seales fuera del ciclo while-loop, como
se va en imagen siguiente:
Como vemos al salir del case structure se usa la misma seal de status para salir del
ciclo while-loop.
En la opcin de False entra a esperar evento del cual hemos seleccionado Serial
Character la espera de timeout ser de 10,000 mS del cual si en este tempo no se
recibe ninguna seal de recepcin de al menos un byte este rpidamente enviara una
seal de error y se saldr del ciclo o marcara error.
Al recibir una seal este rpidamente pasa al cuantos byte se recibieron del cual es
property node en la forma de <Bytes at port> (bytes en el puerto) este leer todos los
bytes recibidos para despus usarlos para usar el IV para leer los datos, y arrojarlos
como una cadena de caracteres (string)

Como hemos visto al recibir los datos en forma de cadenas de caracteres del cual solo
es un byte, solo se debe de transformar en un arreglo de bytes y despus buscar en el
arreglo de bytes el primer byte para despus transformar de nmero a un arreglo
binario que este ya visualizara el estado de los interruptores. Y despus solo
cerraremos el puerto pero antes se debe de borrar cualquier evento antes abierto.
1.5.3 Esquema del Diagrama Electrnico

2. Graficando seales anlogas con DAC

Las mayoras de las veces necesitamos adquirir datos continuos, por ejemplo de
temperatura, Luz, y entre varios sensores que varen con respecto a circunstancias
fsicas. Despus de tomar este dato anlogo, se enva a una PC para procesar con
respecto a un algoritmo incluido en un tipo de software donde hace el proceso de
arrojar en la salida un dato digital o variable.

En esta prctica vas a proponer graficar datos continuos esto quiere decir que cada vez
que el Microcontrolador en s entrada anloga consiga leer el estado del sensor
rpidamente lo envi para apreciarlo en una grafica realizada en Labview con respecto
al tiempo.

1.2.1 Realizacin del Hardware y Software para el Microcontrolador

El primer paso es configurar puertos y entradas digitales o anlogas, de esto solo se


debe de incluir la librera para el uso del convertidor anlogo a digital, y despus usar
solo una entrada anloga en este caso el AN0, estos datos se enviaran casi
instantneo ya que usaremos nada mas un retardo de 1mS del cual nos servir
tambin para adquirir correctamente la conversin de la variable anloga, y al tener
cargado esta variable se enviara por serial para que laview procese este dato y lo pase
a graficar.

Todo lo anterior se resume al programa siguiente:

/*
* File: main.c
* Author: george
*
* Created on November 17, 2011, 6:34 PM
*/

#include "pic.h"
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF
& IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF & BOR4V_BOR40V & WRT_OFF);

/*
* FOSC_HS 20Mhz External Crystal
* WDTE_OFF Watch dog disable
* PWERTE_ON Power System Enable
* MCLRE_ON Master Clear Enable
*/
#define _XTAL_FREQ 20000000 //
#include "libADC/adcdr.h"
#include "libUSART/usartdr.h"
/*
* VARIABLES GLOBALES DEL PROGRAMA
*/
unsigned int value_adc;
unsigned char data[2];

/*
* SE OBTIENE EL DATO ANALOGO
* EN ESTE CASO AL LEER EL EL DATO SERA DE 1024 BITS
* DEL CUAL ES 2 BYTES
*/
unsigned int take_data_analog(){
__delay_ms(1);
startADC();
while(GO_DONE!=0);
return readADC();
}
/*
* SE DESPEJA EL DATO ANALOGO Y SEPARA LOS 2 BYTES
* PARQ QUE SE GUARDEN EN UN ARREGLO POR SEPARADO
* PARA PREPARARLO PARA EL ENVIO
*/
void convert_two_byte(unsigned int analog){
data[0]=(analog>>8)&0x03; //TOMA BYTE DE MAYOR PESO
data[1]=analog&0xFF; //TOMA BYTE DE MENOR PESO
}
/*
* ENVIA LOS DOS BYTES POR EL PUESRTO SERIAL
* ENVIA PRIMERO EL BYTE DE MAYOR PESO Y DEPSUES EL DE MENOR PESO
*/
void send_data_rs232(void){
putch(data[0]);
putch(data[1]);
}
//ISR Interrupt
static void interrupt
isr(void){}
/*
* FUNCION PRINCIPAL
*/
void main(void){
TRISA=0X01; //RA0 COMO ENTRADA ANALOGA
TRISC=0X80; //SE CONFIGURAMOS TX Y RX
/*
* CONFIGURAMOS SERIAL
* VALUE=(FOSC/(BAUD*16))-1
* SIN INTERRUPCIONES
* A 19200
*/
OpenUSART(64,OFF,OFF);//64=19200
/*
* CONFIGURAMOS ADC
* PUERTOB DESACTIVADO PARA ENTRADAS ANALOGAS
* SOLO SE ACTIVA EL RA0 COMO ENTRADA ANALOGA
*/
OpenADC(FOSC_32,AN0,OFF);
GIE=0;//INTERRUPCIONES GLOBALES ACTIVADAS
PEIE=0;//ACTIVA INTERURPCIONES POR PERIFERICOS
/*
* EMPIEZA EL PROGRAMA PRINCIPAL
*/
while(1){
value_adc=take_data_analog();//TOMA DATO ANALOGO
convert_two_byte(value_adc); //CONVIERTE A DOS BYTES
send_data_rs232(); //ENVIA DATOS
}
}

1.2.2 Graficado en Labview

Como hemos estado viendo en los proyectos anteriores siempre se debe de configurar
el puerto y los baudios que es lo ms bsico para empezar, ya si el usuario quiere
cambiar ms opciones lo puede hacer. Por ahora como vamos a recibir datos debemos
de crear un evento, que es esperar por 10s un carcter del rs232, al recibir estos datos
rpidamente debe leerlos y mandarlos a procesar que no es ms que juntar los dos
bytes y enviarlo a graficar.

Siempre una buena presentacin del programa puede ayudar mucho a la hora de
comercializar un software, por eso nunca deje la presentacin su proyecto a un lado.
1.2.3 Diagrama Electrnico
3. Control de Intensidad de lmpara

Esta prctica conlleva a la manipulacin de una lmpara de 12


127VCA
7VCA del cual para
poder controlar corriente alterna se debe de usar un TRIAC de potencia como se
muestra en parte de una hoja de datos de un TRIAC.

Como sabemos un triac es un switch de par de tir tiristores


istores invertidos en paralelo,
paralelo,este
dispositivo puede abrir en cualquier direccin la corriente aplicando una pequea
corriente en la puerta. Es usado en aplicaciones donde involucre corriente alterna como
puede ser en control de intensidad de una lmpara, o control de velocidad de un motor.

fig 3.0
Un triac es un interruptor de estado slido, una pequea corriente en la terminal de la
puerta puede conducir una gran corriente, pensando que un triac como dos SCR
puesto en paralelo invertido cada uno de ellos, donde el ctodo de uno de los SCR est
conectado hacia el nodo del otro y viceversa. La puertas estn conectadas juntas,
porque tenemos dos tipos configuracin de SCRs esto permite activar amos a medios
ciclos.

En el ejemplo anterior el interruptor realice la funcin de cortar la corriente cuando sea


necesario, la idea es usar una pequea corriente para controlar dispositivos de alto
voltaje como son motores y calentadores. Lo peligroso de aqu es el alto voltaje que
esta prendido en s mismo. Esto puede ser un gran problema para los controles de
estado lgico al menos que usen un pequeo relay como lo hacen los microondas.
Para controlar con un Microcontrolador sin daarlo por una sobre carga en la etapa de
potencia, se debe de usar un opto acoplador del cual se encarga de separar la etapa
de control que en este caso puede ser un microprocesador con la de potencia.

En la figura se puede observar un simple ejemplo de un control de una carga resistiva


esto puede ser una resistencia para generar calor, o una lmpara entre varios, mientras
en la Figura 8, es para cargas inductivas como puede ser motores con cruce por cero,
este ltimo se refiere a que no har caso a la onda negativa que genera la onda
sinodal.

Y cuando se desee usar las dos partes de la onda se recomiendo un opto con cruce
por cero.
3.1 Control de Lmpara

Para empezar a entender el funcionamiento de encender lmparas con TRIAC y PIC,


necesitamos hacer una pequea practica para calentar motores, primero que nada la
idea es encender una lmpara con Labview, del cual solo es ponerlo en encendido y
apagado.

3.1.1 Software para PIC

El programa consta de solo recibir un dato de Labview y reaccionar con forme a ello, el
dato ser solo de un 1 byte y que solo responda con un comando cuando hay que
encenderlo o apagarlo, para ello se usara la interrupcin por recepcin de datos.
/*
* File: MAIN.c
* Author: george
*
* Created on November 24, 2011, 8:53 PM
*/

#include "pic.h"
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF
& IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF & BOR4V_BOR40V & WRT_OFF);

/*
* FOSC_HS 20Mhz External Crystal
* WDTE_OFF Watch dog disable
* PWERTE_ON Power System Enable
* MCLRE_ON Master Clear Enable
*/
#define _XTAL_FREQ 20000000 //
#include "libUSART/usartdr.h"
//definiciones de variables globales
unsigned char DATA;
//definiciones de trabajo
#define LAMPARA_ON RB7=1
#define LAMPARA_OFF RB7=0
//ISR Interrupt
static void interrupt
isr(void){
if(RCIF){ //HEMOS RECIBIDO UN DATO?
RCIF=0; //RESET A FLAG DE INTERRUPCION DE DATO
DATA=getch();//TOMAMOS DATO
if(DATA==0xFF){//ES PARA ENCENDER?
LAMPARA_ON;
}
if(DATA==0x77){//ES PARA APAGAR
LAMPARA_OFF;
}
}
}
/*
* FUNCION PRINCIPAL
*/
void main(void) {
TRISB=0; //PUERTO B COMO SALIDA
TRISC=0X80; //SE CONFIGURAMOS TX Y RX
PORTB=0;
/*
* CONFIGURAMOS SERIAL
* VALUE=(FOSC/(BAUD*16))-1
* SIN INTERRUPCIONES
* A 19200
*/
OpenUSART(64,OFF,ON);//64=19200
GIE=1;//ACTIVAMOS INTERRUPCIONES GENERALES
PEIE=1;//ACTIVAMOS INTERRUPCIONES POR PERIFERICOS

while(1);
}

3.1.2 Software para Labview

La estrategia a seguir que al usar un interruptor virtual que solo mande verdadero o
falso, con este dato booleano entrara a un case structure del cual este elegir que dato
debe de enviar, en este caso como hemos programado en el Microcontrolador que al
recibir el dato 0xFF mande a prender la lmpara sino el dato 0x77 para apagar la
lmpara.

En Labview la programacin es muy sencilla como podemos verla en el block diagram:


Simple no? Solo enviamos el dato 255 que corresponde en hexadecimal 0xFF, y el
dato 119 que corresponde a 0x77, despus es subministrada para convertirse a arreglo
y despus convertir de arreglo a string.

En la parte de front panel podemos hacer unos cuantos arreglos para que nuestro
programa quede bien hecho.

3.1.3 Diagramas

El diagrama que a continuacin se da es solo la etapa de potencia del cual consta de


un moc3011 que es un optoacoplador a salida a triac esto quiere decir que podemos
usarlo para conectarlo directamente a gate del TRIAC que estar conectado a la carga.

En el Microcontrolador es igual del cual hemos estado trabajando conectado al


max232, nada mas que en el pin RB7 vamos a conectar el led del optoacoplador para
encender la lmpara cuando mandemos el dato de Labview al Micro.
3.1.4 Fotos del Proyecto

3.1.5 Tomando Seal

Ahora antes de desarrollar la practica deseada, debemos de entender cmo debemos


de tomar la referencia de la onda senoidal , esto quiere decir que al tomar la onda
positiva debemos de obtener la seal convertida a un nivel legible por el
Microcontrolador esto quiere decir que debemos de rectificar la entrada usando un
diodo antes de rectificador de onda completa, para despus activar un transistor que
est alimentado con tan solo 5 volt esto har una onda cuadra a nivel TTL, para
despus entre el Microcontrolador para saber cuando est en la onda positiva y cuando
est en la onda negativa, o en pocas palabras cuando cruza por cero.
Representacin de la Idea:

Entrada para el
PIC

Al realizar el siguiente circuito en la salida del transistor debemos de tener una onda
cuadra de 0 a 5v, del cual este entrara al Microcontrolador para decir cuando esta el
ciclo positivo y cuando est en el ciclo negativo.

La seal generada antes y despus del diodo es el siguiente:

Escala 2 volts.

Salida despus del transistor

Entrada a la base del transistor

Con esta seal cuadrada que


genera es de 0 a 5 v, del cual ya podemos
trabajar con ella. Es muy fcil ahora que
tenemos esta seal TTL, ya que podemos
usarla como una entrada para el
Microcontrolador, en este caso para el
pic16f886, tiene un PIC muy especial del
cual es la entrada para usar el Timer0
como contador de pulsos externos.
En la programacin del Microcontrolador se debe de hacer un ciclo perpetuo del
cual este integrado por un tiempo de retraso de envio que es de 1 segundo. Despus
de este lapso de tiempo ser tomado el valor actual del contador (Timer0) para enviarlo
a Labview.

El software es el siguiente:
/*
* File: main.c
* Author: george
*
* Created on November 29, 2011, 8:14 PM
*/

#include "pic.h"
__CONFIG(FOSC_HS& WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF
& IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF & BOR4V_BOR40V & WRT_OFF);

/*
* FOSC_HS 20Mhz External Crystal
* WDTE_OFF Watch dog disable
* PWERTE_ON Power System Enable
* MCLRE_ON Master Clear Enable
*/
#define _XTAL_FREQ 20000000 //
#include "libUSART/usartdr.h"
/*
* VARIABLES GLOBALES DE TRABAJO
*/
unsigned char senal;
/*
* FUNCION DE TIEMPO
*/
void dly(unsigned int t){
while(--t)__delay_ms(1);
}
/////////////////////////////////////////////////
//Funcion de interrupcion
//Si no se usa simplemente no hacemos nada...
//Esto sirve para direccionar lo los datos
//en un lugar muy cercano al Inicio de la memoria
//de datos
////////////////////////////////////////////////
static void interrupt
isr(void){}
/*
* PROGRAMA PRINCIPAL
*/
void main(void) {
/*
* Inicliazamos Puertos
*/
ANSELH=0X00;//Analogo desactivado
TRISA=0x10; //RA4 como entrada resto salida
TRISC=0x80;//
ADCON0=0x00;//
/*
* Inicializamos TIMER0
* Entrada de senal extarna,Prescalar 1:2
*/
OPTION_REG=0b10100000;
/*
* CONFIGURAMOS SERIAL
* VALUE=(FOSC/(BAUD*16))-1
* SIN INTERRUPCIONES
* A 19200
*/
OpenUSART(64,OFF,OFF);//64=19200
TMR0;
GIE=0;
PEIE=0;

while(1){
TMR0=0; //Reseteamos Contador
dly(1000); //Esperamos 1 Segundo
senal=TMR0;//Leemos El contador
putch(senal);//Enviamos dato
}
}

El programa en Labview es demasiado sencillo, del cual solo debe de recibir un dato (1
byte) este dato debemos de convertirlo a string, ya que hemos referenciado que el dato
recibido es un dato de Hz, del cual se debe juntar dos string por esta razn se usa la
funcin, concatnate para unir el dato + Hz
En front Panel podemos ver cmo queda
nuestro programa, lo que debemos hacer
primer es Iniciar Labview y despus
conectar rpidamente el hardware que es
el Microcontrolador.

Este marcara la frecuencia que tiene la


conexin VCA.

El diagrama a Manejar es el siguiente:

P. 1

P.2
P.3

Algunas fotos del Proyecto:


3.1.6 Manipulando la Intensidad de lmpara

Como hemos realizado en las dos prcticas anteriores, al controlar el encendido de la


lmpara y tomando la seal, al combinar las dos podemos crear un controlador de
intensidad de una lmpara, esto va a controlar la onda senoidal de voltaje de entrada
que son 127 VCA.

Para controlar la onda senoidal se debe de rectorar ambas ondas positiva y negativa
para hacer eso se debe de generar un PWM de la misma frecuencia pero cuadrada, del
cual esta seal PWM debe de recortar la onda exactamente cundo cruce por cero.

He recortado la onda de inicio tanto para la positiva y negativa porque ya que la onda
est decayendo el resultado es menor potencia del cual se reflejara en intensidad, y
podemos ver mucho mejor el descenso de la iluminacin de la lmpara. Ya que si fuera
al contrario no veremos mucho el cambio que realiza de intensidad ya que como la
onda empieza a subir tiene mayor potencia y aunque variemos el PWM al principio de
la onda este no reflejara mucho el cambio de intensidad de la lmpara.

Como hemos realizado en la segunda prctica de este proyecto al obtener los ciclos o
los hertz de la corriente alterna, al usar ese mtodo podemos sincronizar la frecuencia
PWM con la onda senoidal, ya que al cruzar por cero podemos apagar el optoacoplador
exactamente e iniciar el pulso PWM donde deseamos y cuando vuelva a cruzar por
cero apagamos y esperamos a iniciar el pulso para que de la lmpara encienda, y
obtendremos un ancho de pulso proporcional a la frecuencia de VCA.
El firmware del Microcontrolador es muy sencillo usando l interrupcin por recepcin de
datos (Rs232) y la interrupcin por desbordamiento por timer0, podemos hacer esta
prctica:
/*
* File: main.c
* Author: george
*
* Created on December 3, 2011, 1:45 PM
*/

#include "pic.h"
__CONFIG(FOSC_HS& WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF
& IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF & BOR4V_BOR40V & WRT_OFF);

/*
* FOSC_HS 20Mhz External Crystal
* WDTE_OFF Watch dog disable
* PWERTE_ON Power System Enable
* MCLRE_ON Master Clear Enable
*/
#define _XTAL_FREQ 20000000 //
#include "libTIMER0/OpenTIMER0.h"
#include "libUSART/usartdr.h"
/*
* DEFINICIONES GLOBALES
*/
#define PIN_INTENSIDAD RC0
/*
* VARIABLES GLOBALES
*/
unsigned char BUFFER=127;
/////////////////////////////////////////////////
//Funcion de interrupcion
//Si no se usa simplemente no hacemos nada...
//Esto sirve para direccionar lo los datos
//en un lugar muy cercano al Inicio de la memoria
//de datos
////////////////////////////////////////////////
static void interrupt
isr(void){
if(T0IF){
T0IF=0;
PIN_INTENSIDAD=1;
T0IE=0;
}else if(RCIF){
RCIF=0;
BUFFER=getch();
}
}
/*
* PROGRAMA PRINCIPAL
*/
void main(void) {
/*
* CONFIGURAMOS PUERTOS
*/
TRISA=0X10; //RA4 COMO ENTRADA RESTO SALIDA
TRISC=0X80; //RC7 COMO ENTRADA Y RC6 COMO SALIDA
ANSELH=0X00; //PORTB DIGITAL
ADCON0=0X00; //APAGAMOS CONVERTIDOR ANALOGO
CM1CON0=0x00;
CM2CON0=0x00;
/*
* Configuramos Timer 0
* FORMULA:
* TMR0=256-{TIEMPO_DESEADO/[(1/(_XTAL_FREQ/4)*PRESCLAR]}
* Tiempo Requerido T=0.004 s
* Valor del timer 0 a cargar = 50
*/
OpenTIMER0(prescalar_256,OFF);
/*
* CONFIGURAMOS SERIAL
* VALUE=(FOSC/(BAUD*16))-1
* SIN INTERRUPCIONES
* A 19200
*/
OpenUSART(64,OFF,ON);//64=19200
GIE=1; //TODAS LAS INTERRUPCIONES APAGADAS
PEIE=1; //TODAS LAS INTERRUPCIONES POR PERIFERICOS APAGADAS
while(1){
if(RA4==1){
TMR0=BUFFER;
T0IE=1;
PIN_INTENSIDAD=0;
while(RA4==1);
TMR0=BUFFER;
T0IE=1;
PIN_INTENSIDAD=0;
while(RA4==0);
}
}
}

El software en Labview muestra una sencillez ya que solo enviaremos un dato al


Microcontrolador y este al recibirlo solo cargara la variable BUFFER con el dato
enviado desde Labview que es el dato que corresponde a la intensidad de la lmpara.
Hemos configurado el timer0 con un prescalar de 256 y a una frecuencia de trabajo de
20Mhz esto ayuda a que genere exactamente 8mS de desbordamiento como mximo.

Al enviar un dato de 0 a 255 este valor al ser cargado a la variable BUFFER carga
automticamente al registro TMR0 del timer0 del cual indica cuando hay que
interrumpir para prender el led del optoacoplador, esto realizndose a 60Hz del cual el
PWM ser del mismo valor de la frecuencia de VCA.
Foto del Proyecto
Diagrama:

RETOS:

Esta seccin usted deber de realizar las siguientes practicas que involucren un enlace
con Labview, estar a prueba para conocer si usted all entendido correctamente las
practicas anteriores:

1.- Visualice y un dato anlogo que usted desee, como puede ser un sensor de
temperatura, sensor de proximidad o lo que usted desee, solo que al leer un dato que
este fuera del rango seale cuando este en bajo nivel o alto.

Minvalor< DATO < Maxvalor

2.- Manipule dos lmpara de 127 VCA del cual pueda ajustar la intensidad de cada uno
de ellos por separado.

Nota: Cuando trabaje con 127 VCA tenga mucho cuidado a la hora de conectar o
tener un corto circuito, ya que habla con una de las corrientes ms peligrosas.
Realizado por

George arth

Pagina

http://ucursos.webs.com

http://ucursos.blogspot.com

Aprende para que despus compartas conocimientos

Вам также может понравиться