SlideShare una empresa de Scribd logo
Realizado por: George.manson.69
http://ucursos.webs.com
LEER PARA APRENDER / Por: Jorge Rdz, Editor
Pasó casi un año desde que ya no había realizado ninguna práctica utilizando
Microcontroladores PIC16, del cual me ha fascinado bastante ya que un día me
pregunte, Es necesario aprender Microcontroladores? Donde lo puedo aplicar? Estas
dos cuestiones me las hacía muy seguido, entonces un día, en mi trabajo encontré en
una maquina avanzada que había 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 más que una
tarjeta de control que se había quemado unos diodos, no fue muy difícil saber que era
la falla, y después como tenía tiempo necesario para hacer otras cosas me la pase
revisando que mas tenia o de que estaba compuesto la tarjeta y vi que había un
Microcontrolador y una calcomanía 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 había hecho con anterioridad, desde ese
momento supe que las horas perdidas pasándola programando y realizado proyectos
con esos PIC ahora sé a dónde van los conocimientos adquiridos de tantas horas
programando Microcontroladores PIC y sé que vale la pena seguir programando!.
Introducción
Este Manual concerniente a las prácticas sobre la utilización de comunicación serial
utilizando como hardware el Microcontrolador PIC16F886 y Labview para la interface
Hombre-Máquina fueron realizados para abrirnos paso a realizar nuevas maneras de
programar en Labview, y usando el compilador MPLAB X IDE para la programación 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 actualización 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 físicamente ya que nos ahorra tiempo en construcción y sacar fallas antes de
proceder, para nuestro caso usaremos una herramienta sumamente importante para la
simulaciones de circuitos lógicos y programables entre varios más, estamos hablando
de PROTEUS, simulador muy conocido entre toda la comunidad de electrónica y de
control.
1.2 LABVIEW
Para la interfaz del usuario usaremos el software Labview 2010 donde aprenderemos a
desarrollar comunicación seriales a su máxima 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 programación 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 máximo.
1.3.1 Entorno de MPLAB X
En nuestra primera impresión de usar MPLAB X es como si fuera una sombra de JAVA,
pero es muy distinto ya que es para Microcontroladores PIC.
1. Exploramos librerías del proyecto tanto los archivos principales.
2. Observamos el contenido de los archivos tanto las librerías y el programa principal.
3. Aquí podemos ver la información concerniente al Microcontrolador.
4. Salida donde podemos observar errores al compilarse el archivo también podemos
debuggear el programa.
1
2
3
4
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 , después buscaremos un lugar
para guardar nuestro proyecto y aceptamos.
Como en MPLAB 8.8 al tener el proyecto listo debemos de hacer una extensión “.c”
para ellos vamos a <New File> y en ventana de categorías buscaremos en <Micochip
embedded> y elegimos la carpeta donde está el compilador hi tech y en <File Type>en
la primera opción es que estamos buscando para el compilador hi tech for PIC16. En la
siguiente ventana nos pedirá el Nombre del archivo y la extensión después la ubicación
del archivo del cual debe ser la misma donde creamos el proyecto.
Al agregar el archivo con la extensión “.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
programación en C, ya que si hemos programado en Hi tech compiler es prácticamente
igual.
La idea de nuestro primer programa en C es hacer una comunicación serial que prenda
un puerto completo del cual podemos usar interrupciones por Recepción de datos o
simple recepción de datos.
1.4.1 Enlace PIC
En la segunda opción 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> después al
abrirse las dos ventas de Block diagram y Front Panel , nos pasaremos a la ventana de
Block Diagram del cual buscaremos la opción de SERIAL, que está ubicado en
<Functions> <Instrument I/O> <Serial> y seleccionamos la opción de VISA Configure
Serial Port que nos servirá para configurar los baudios, bits de paridad entre varias
opciones más.
Al agregar el control de configuración de puerto
agregaremos dos controles que harán la función
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 fácilmente escribiendo
sobre la velocidad de transmisión.
Después de configurar correctamente el puerto,
ahora podemos hacer un ciclo perpetuo hasta que
salgamos con un stop.
Para ello buscaremos la opción de While Loop ,
después buscaremos la opción 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 programación completa como debe de quedar
nuestro proyecto en Labview, recuerde siempre cerrar el puerto al terminar la conexión
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 transmisión 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 rápidamente 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 programación hemos usado
una buena lógica 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 función 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 práctica anterior, del cual el pic debe de capturar los datos y después
enviarlos. Para ello se debe de configurar correctamente el periférico de serial del pic a
una velocidad de 19200 baud, al guardar el dato leído del puerto B se debe llamar la
función que realiza el envío de datos hacia Labview. Al recibir los datos Labview este
debe de leer los datos existentes en ese momento para saber cuántos bytes necesita
leer y después capturar todos los datos que están guardados en su buffer, y
procesarlos hacer acciones.
1.5.1 Configuración 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 guárdalos en una variable, del
cual se enviara a Labview, para ello se agrega la librería USART como se realizo en la
práctica anterior, al tomar solo los 4 bits de menor peso del puerto B este solo se envía
para después esperar 100mS que servirán para sincronización.
/*
* 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 Configuración de enlace en Labview
Como hemos realizado en el proyecto anterior se debe de crear un Nuevo IV, después
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 más importante esta
en Block Diagram :
Visa resource name es donde podemos agregar el COM disponible del cual se puede
obtener al agregar las configuración del puerto.
Set up 19200 esto nos proporciona la velocidad a que
debe de trabajar la comunicación 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 visualización de 4 interruptores que
estarán conectado al nibble de menor peso del puerto
B del Microcontrolador.
Ahora entrando a lo más complicado que es la programación 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 parámetros que son el COM
y los BAUD.
Como ya hemos agregado la configuración del puerto, ahora se debe de crear un
evento, esto quiere decir que configuraremos un evento del cual al recibir un carácter o
un byte este rápidamente entrara, para ellos se debe de agregar el siguiente VI <Visa
Enable Event> nos pedirá un parámetro en particular que es la configuración del evento
o la selección del evento, tendremos varios de estos pero el más importante será al
recibir un carácter <Serial Character> después 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 conexión en un momento inesperado, se debe de
checar siempre el estado de este, se agrega la función <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 conexión o un ‘T’
cuando existen algún tipo de falla.
Para cuando la opción en Verdadera (T) solo se agrega un <case structure> que hara
la función de un if-else como en la programación en C.
En la ventana de Verdadero solo se directo las señales fuera del ciclo while-loop, como
se va en imagen siguiente:
Como vemos al salir del case structure se usa la misma señal de status para salir del
ciclo while-loop.
En la opción 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 señal de recepción de al menos un byte este rápidamente enviara una
señal de error y se saldrá del ciclo o marcara error.
Al recibir una señal este rápidamente 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 después 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 después buscar en el
arreglo de bytes el primer byte para después transformar de número a un arreglo
binario que este ya visualizara el estado de los interruptores. Y después solo
cerraremos el puerto pero antes se debe de borrar cualquier evento antes abierto.
1.5.3 Esquema del Diagrama Electrónico
2. Graficando señales análogas con DAC
Las mayorías de las veces necesitamos adquirir datos continuos, por ejemplo de
temperatura, Luz, y entre varios sensores que varíen con respecto a circunstancias
físicas. Después de tomar este dato análogo, se envía 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 práctica vas a proponer graficar datos continuos esto quiere decir que cada vez
que el Microcontrolador en s entrada análoga consiga leer el estado del sensor
rápidamente lo envié para apreciarlo en una grafica realizada en Labview con respecto
al tiempo.
1.2.1 Realización del Hardware y Software para el Microcontrolador
El primer paso es configurar puertos y entradas digitales o análogas, de esto solo se
debe de incluir la librería para el uso del convertidor análogo a digital, y después usar
solo una entrada análoga en este caso el AN0, estos datos se enviaran casi
instantáneo ya que usaremos nada mas un retardo de 1mS del cual nos servirá
también para adquirir correctamente la conversión de la variable análoga, 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 más básico para empezar, ya si el usuario quiere
cambiar más opciones lo puede hacer. Por ahora como vamos a recibir datos debemos
de crear un evento, que es esperar por 10s un carácter del rs232, al recibir estos datos
rápidamente debe leerlos y mandarlos a procesar que no es más que juntar los dos
bytes y enviarlo a graficar.
Siempre una buena presentación del programa puede ayudar mucho a la hora de
comercializar un software, por eso nunca deje la presentación su proyecto a un lado.
1.2.3 Diagrama Electrónico
3. Control de Intensidad de lámpara
Esta práctica conlleva a la manipulación de una lámpara de 12
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
dispositivo puede abrir
corriente
puede ser en control de intensidad de una lámpara, o control de velocidad de un motor.
3. Control de Intensidad de lámpara
Esta práctica conlleva a la manipulación de una lámpara de 12
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
dispositivo puede abrir
corriente en la puerta. Es usado en aplicaciones donde involucre corriente alterna como
puede ser en control de intensidad de una lámpara, o control de velocidad de un motor.
3. Control de Intensidad de lámpara
Esta práctica conlleva a la manipulación de una lámpara de 12
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
dispositivo puede abrir en cualquier dirección la corriente aplicando una pequeña
en la puerta. Es usado en aplicaciones donde involucre corriente alterna como
puede ser en control de intensidad de una lámpara, o control de velocidad de un motor.
3. Control de Intensidad de lámpara
Esta práctica conlleva a la manipulación de una lámpara de 12
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
en cualquier dirección la corriente aplicando una pequeña
en la puerta. Es usado en aplicaciones donde involucre corriente alterna como
puede ser en control de intensidad de una lámpara, o control de velocidad de un motor.
Esta práctica conlleva a la manipulación de una lámpara de 12
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
en cualquier dirección la corriente aplicando una pequeña
en la puerta. Es usado en aplicaciones donde involucre corriente alterna como
puede ser en control de intensidad de una lámpara, o control de velocidad de un motor.
Esta práctica conlleva a la manipulación de una lámpara de 12
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 tiristores invertidos en paralelo,
en cualquier dirección la corriente aplicando una pequeña
en la puerta. Es usado en aplicaciones donde involucre corriente alterna como
puede ser en control de intensidad de una lámpara, o control de velocidad de un motor.
Esta práctica conlleva a la manipulación de una lámpara de 127VCA
poder controlar corriente alterna se debe de usar un TRIAC de potencia como se
istores invertidos en paralelo,
en cualquier dirección la corriente aplicando una pequeña
en la puerta. Es usado en aplicaciones donde involucre corriente alterna como
puede ser en control de intensidad de una lámpara, o control de velocidad de un motor.
7VCA del cual para
poder controlar corriente alterna se debe de usar un TRIAC de potencia como se
istores invertidos en paralelo,
en cualquier dirección la corriente aplicando una pequeña
en la puerta. Es usado en aplicaciones donde involucre corriente alterna como
puede ser en control de intensidad de una lámpara, o control de velocidad de un motor.
fig 3.0
del cual para
poder controlar corriente alterna se debe de usar un TRIAC de potencia como se
istores invertidos en paralelo,este
en cualquier dirección la corriente aplicando una pequeña
en la puerta. Es usado en aplicaciones donde involucre corriente alterna como
puede ser en control de intensidad de una lámpara, o control de velocidad de un motor.
fig 3.0
en la puerta. Es usado en aplicaciones donde involucre corriente alterna como
Un triac es un interruptor de estado sólido, una pequeña 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 cátodo de uno de los SCR está
conectado hacia el ánodo del otro y viceversa. La puertas están conectadas juntas,
porque tenemos dos tipos configuración de SCR’s esto permite activar amos a medios
ciclos.
En el ejemplo anterior el interruptor realice la función de cortar la corriente cuando sea
necesario, la idea es usar una pequeña 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 lógico al menos que usen un pequeño relay como lo hacen los microondas.
Para controlar con un Microcontrolador sin dañarlo 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 lámpara 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 Lámpara
Para empezar a entender el funcionamiento de encender lámparas con TRIAC y PIC,
necesitamos hacer una pequeña practica para calentar motores, primero que nada la
idea es encender una lámpara 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 interrupción por recepción 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 lámpara sino el dato 0x77 para apagar la
lámpara.
En Labview la programación 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, después es subministrada para convertirse a arreglo
y después 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 continuación 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 lámpara cuando mandemos el dato de Labview al Micro.
3.1.4 Fotos del Proyecto
3.1.5 Tomando Señal
Ahora antes de desarrollar la practica deseada, debemos de entender cómo debemos
de tomar la referencia de la onda senoidal , esto quiere decir que al tomar la onda
positiva debemos de obtener la señal 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 después activar un transistor que
está alimentado con tan solo 5 volt esto hará una onda cuadra a nivel TTL, para
después 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.
Representación de la Idea:
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 señal generada antes y después del diodo es el siguiente:
Escala 2 volts.
Salida después del transistor
Entrada a la base del transistor
Con esta señal cuadrada que
genera es de 0 a 5 v, del cual ya podemos
trabajar con ella. Es muy fácil ahora que
tenemos esta señal 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.
Entrada para el
PIC
En la programación 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. Después
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 razón se usa la
función, “concaténate” para unir el ‘dato’ + “Hz”
En front Panel podemos ver cómo queda
nuestro programa, lo que debemos hacer
primer es Iniciar Labview y después
conectar rápidamente el hardware que es
el Microcontrolador.
Este marcara la frecuencia que tiene la
conexión VCA.
El diagrama a Manejar es el siguiente:
P. 1
P.2
Algunas fotos del Proyecto:
P.3
3.1.6 Manipulando la Intensidad de lámpara
Como hemos realizado en las dos prácticas anteriores, al controlar el encendido de la
lámpara y tomando la señal, al combinar las dos podemos crear un controlador de
intensidad de una lámpara, 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 señal PWM debe de recortar la onda exactamente cuándo 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 iluminación de la lámpara. 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 lámpara.
Como hemos realizado en la segunda práctica de este proyecto al obtener los ciclos o
los hertz de la corriente alterna, al usar ese método 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 lámpara encienda, y
obtendremos un ancho de pulso proporcional a la frecuencia de VCA.
El firmware del Microcontrolador es muy sencillo usando l interrupción por recepción de
datos (Rs232) y la interrupción por desbordamiento por timer0, podemos hacer esta
práctica:
/*
* 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 lámpara.
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 máximo.
Al enviar un dato de 0 a 255 este valor al ser cargado a la variable BUFFER carga
automáticamente al registro TMR0 del timer0 del cual indica cuando hay que
interrumpir para prender el led del optoacoplador, esto realizándose a 60Hz del cual el
PWM será del mismo valor de la frecuencia de VCA.
Foto del Proyecto
Diagrama:
RETOS:
Esta sección 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 análogo 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 señale cuando este en bajo nivel o alto.
Minvalor< DATO < Maxvalor
2.- Manipule dos lámpara 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 más peligrosas.
Realizado por
George arth
Pagina
http://ucursos.webs.com
http://ucursos.blogspot.com
“Aprende para que después compartas conocimientos”

Más contenido relacionado

La actualidad más candente

Ejemplo d h puma 560 paso a paso
Ejemplo d h puma 560 paso a pasoEjemplo d h puma 560 paso a paso
Ejemplo d h puma 560 paso a paso
Sandra Covelo
 
Control digital
Control digitalControl digital
Control digital
German Solis
 
Tutorial cadesimu
Tutorial cadesimuTutorial cadesimu
Tutorial cadesimu
Angel Benjamin Casas Duart
 
Presentación Autómatas Finito No Deterministico
Presentación  Autómatas Finito No DeterministicoPresentación  Autómatas Finito No Deterministico
Presentación Autómatas Finito No Deterministico
Scarlinr
 
Algoritmos para el problema de árbol de expansión mínima robusto con datos in...
Algoritmos para el problema de árbol de expansión mínima robusto con datos in...Algoritmos para el problema de árbol de expansión mínima robusto con datos in...
Algoritmos para el problema de árbol de expansión mínima robusto con datos in...
Francisco Pérez
 
Pruebas de autocorrelacion yule
Pruebas de autocorrelacion yulePruebas de autocorrelacion yule
Pruebas de autocorrelacion yule
Edna Gabriela Ceja Silva
 
Desviacion media
Desviacion mediaDesviacion media
Desviacion media
Tina Campos
 
sistema de llenado de tanque
sistema de llenado de tanque sistema de llenado de tanque
sistema de llenado de tanque
Jose Manuel Cedeño Garcia
 
Sintonización pid
Sintonización pidSintonización pid
Sintonización pid
Santiago Lucas Lucas
 
Análisis de la Respuesta Temporal en Sistema de 1er. Orden Entrada Escalón Un...
Análisis de la Respuesta Temporal en Sistema de 1er. Orden Entrada Escalón Un...Análisis de la Respuesta Temporal en Sistema de 1er. Orden Entrada Escalón Un...
Análisis de la Respuesta Temporal en Sistema de 1er. Orden Entrada Escalón Un...
La Universidad del Zulia, Facultad de Ingeniería, Maracaibo, Venezuela
 
Graficas con Matlab
Graficas con Matlab Graficas con Matlab
Graficas con Matlab
Carlitos Correa Jr.
 
ziegler nichols metodo 1
ziegler nichols metodo 1ziegler nichols metodo 1
ziegler nichols metodo 1
Rodrigo Alejandro Tay
 
como ensamblar una PC paso a paso
como ensamblar una PC paso a pasocomo ensamblar una PC paso a paso
como ensamblar una PC paso a paso
Cbetis 168 Francisco I. Madero
 
Graficas en matlab
Graficas en matlabGraficas en matlab
Graficas en matlab
Paul Martin Lopez
 
Representación matricial del simplex pdf
Representación matricial del simplex pdfRepresentación matricial del simplex pdf
Representación matricial del simplex pdf
mauricioeviana
 
Unidad 1 introducción a la modelación de sistemas (1)
Unidad 1 introducción a la modelación de sistemas (1)Unidad 1 introducción a la modelación de sistemas (1)
Unidad 1 introducción a la modelación de sistemas (1)
Edwin Hernandez
 
Proyecto control de humedad en el suelo por PID
Proyecto control de humedad en el suelo por PIDProyecto control de humedad en el suelo por PID
Proyecto control de humedad en el suelo por PID
Dayi Gilberto Agredo Diaz
 
CPI1 - CLASE 2 - PARTE 2
CPI1 - CLASE 2 - PARTE 2CPI1 - CLASE 2 - PARTE 2
CPI1 - CLASE 2 - PARTE 2
BlogsalDescubierto
 
Ajuste de controladores
Ajuste de controladoresAjuste de controladores
Ajuste de controladores
Wilmer Medrano
 
Sensores de presion
Sensores de presionSensores de presion

La actualidad más candente (20)

Ejemplo d h puma 560 paso a paso
Ejemplo d h puma 560 paso a pasoEjemplo d h puma 560 paso a paso
Ejemplo d h puma 560 paso a paso
 
Control digital
Control digitalControl digital
Control digital
 
Tutorial cadesimu
Tutorial cadesimuTutorial cadesimu
Tutorial cadesimu
 
Presentación Autómatas Finito No Deterministico
Presentación  Autómatas Finito No DeterministicoPresentación  Autómatas Finito No Deterministico
Presentación Autómatas Finito No Deterministico
 
Algoritmos para el problema de árbol de expansión mínima robusto con datos in...
Algoritmos para el problema de árbol de expansión mínima robusto con datos in...Algoritmos para el problema de árbol de expansión mínima robusto con datos in...
Algoritmos para el problema de árbol de expansión mínima robusto con datos in...
 
Pruebas de autocorrelacion yule
Pruebas de autocorrelacion yulePruebas de autocorrelacion yule
Pruebas de autocorrelacion yule
 
Desviacion media
Desviacion mediaDesviacion media
Desviacion media
 
sistema de llenado de tanque
sistema de llenado de tanque sistema de llenado de tanque
sistema de llenado de tanque
 
Sintonización pid
Sintonización pidSintonización pid
Sintonización pid
 
Análisis de la Respuesta Temporal en Sistema de 1er. Orden Entrada Escalón Un...
Análisis de la Respuesta Temporal en Sistema de 1er. Orden Entrada Escalón Un...Análisis de la Respuesta Temporal en Sistema de 1er. Orden Entrada Escalón Un...
Análisis de la Respuesta Temporal en Sistema de 1er. Orden Entrada Escalón Un...
 
Graficas con Matlab
Graficas con Matlab Graficas con Matlab
Graficas con Matlab
 
ziegler nichols metodo 1
ziegler nichols metodo 1ziegler nichols metodo 1
ziegler nichols metodo 1
 
como ensamblar una PC paso a paso
como ensamblar una PC paso a pasocomo ensamblar una PC paso a paso
como ensamblar una PC paso a paso
 
Graficas en matlab
Graficas en matlabGraficas en matlab
Graficas en matlab
 
Representación matricial del simplex pdf
Representación matricial del simplex pdfRepresentación matricial del simplex pdf
Representación matricial del simplex pdf
 
Unidad 1 introducción a la modelación de sistemas (1)
Unidad 1 introducción a la modelación de sistemas (1)Unidad 1 introducción a la modelación de sistemas (1)
Unidad 1 introducción a la modelación de sistemas (1)
 
Proyecto control de humedad en el suelo por PID
Proyecto control de humedad en el suelo por PIDProyecto control de humedad en el suelo por PID
Proyecto control de humedad en el suelo por PID
 
CPI1 - CLASE 2 - PARTE 2
CPI1 - CLASE 2 - PARTE 2CPI1 - CLASE 2 - PARTE 2
CPI1 - CLASE 2 - PARTE 2
 
Ajuste de controladores
Ajuste de controladoresAjuste de controladores
Ajuste de controladores
 
Sensores de presion
Sensores de presionSensores de presion
Sensores de presion
 

Similar a Labview & pic

Curso de-mcu-proteus
Curso de-mcu-proteusCurso de-mcu-proteus
Curso de-mcu-proteus
Francisco Nieva Ricaldi
 
53592868 curso-de-mcu-proteus
53592868 curso-de-mcu-proteus53592868 curso-de-mcu-proteus
53592868 curso-de-mcu-proteus
Deysi Zamata Ccari
 
Curso de-mcu-proteus
Curso de-mcu-proteusCurso de-mcu-proteus
Curso de-mcu-proteus
cemento chimborazo
 
Iniciando c
Iniciando cIniciando c
Iniciando c
____
 
"Hola Mundo" C18, PIC18F y MPLAB
"Hola Mundo"  C18,  PIC18F y MPLAB"Hola Mundo"  C18,  PIC18F y MPLAB
"Hola Mundo" C18, PIC18F y MPLAB
BlackD10
 
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
ezequiel
 
como programar un pic
como  programar un piccomo  programar un pic
como programar un pic
Ruderocker Billy
 
Como programar un PIC
Como programar un PICComo programar un PIC
Como programar un PIC
MicroPart
 
Uso Mplab
Uso MplabUso Mplab
Uso Mplab
victor pablo
 
PROGRAMACION DE LOS PIC 2021-1.pdf
PROGRAMACION DE LOS  PIC 2021-1.pdfPROGRAMACION DE LOS  PIC 2021-1.pdf
PROGRAMACION DE LOS PIC 2021-1.pdf
SistemadeEstudiosMed
 
Como programar en Arduino
Como programar en ArduinoComo programar en Arduino
Como programar en Arduino
Javier Leyva
 
02 programarpic
02 programarpic02 programarpic
02 programarpic
aserege66
 
02 programar
02 programar02 programar
Como programar un pic en 4 pasos
Como programar un pic en 4 pasosComo programar un pic en 4 pasos
Como programar un pic en 4 pasos
Yuri Cerezo Villasante
 
Programación de un PIC con Niple
Programación de un PIC con NipleProgramación de un PIC con Niple
Programación de un PIC con Niple
Hamiltonn Casallas
 
Contador
ContadorContador
Contador
Luis Collazos
 
como usar MPLAB
como usar MPLABcomo usar MPLAB
como usar MPLAB
MicroPart
 
2 florencia sepúlveda
2 florencia sepúlveda 2 florencia sepúlveda
2 florencia sepúlveda
flosepulve
 
Tutorial proton part 2
Tutorial proton part 2Tutorial proton part 2
Tutorial proton part 2
dar851112
 
SBC semana01
SBC semana01SBC semana01
SBC semana01
Aland Bravo Vecorena
 

Similar a Labview & pic (20)

Curso de-mcu-proteus
Curso de-mcu-proteusCurso de-mcu-proteus
Curso de-mcu-proteus
 
53592868 curso-de-mcu-proteus
53592868 curso-de-mcu-proteus53592868 curso-de-mcu-proteus
53592868 curso-de-mcu-proteus
 
Curso de-mcu-proteus
Curso de-mcu-proteusCurso de-mcu-proteus
Curso de-mcu-proteus
 
Iniciando c
Iniciando cIniciando c
Iniciando c
 
"Hola Mundo" C18, PIC18F y MPLAB
"Hola Mundo"  C18,  PIC18F y MPLAB"Hola Mundo"  C18,  PIC18F y MPLAB
"Hola Mundo" C18, PIC18F y MPLAB
 
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
C:\Documents And Settings\Earias\Escritorio\Pic 32\Iniciacion A La Programaci...
 
como programar un pic
como  programar un piccomo  programar un pic
como programar un pic
 
Como programar un PIC
Como programar un PICComo programar un PIC
Como programar un PIC
 
Uso Mplab
Uso MplabUso Mplab
Uso Mplab
 
PROGRAMACION DE LOS PIC 2021-1.pdf
PROGRAMACION DE LOS  PIC 2021-1.pdfPROGRAMACION DE LOS  PIC 2021-1.pdf
PROGRAMACION DE LOS PIC 2021-1.pdf
 
Como programar en Arduino
Como programar en ArduinoComo programar en Arduino
Como programar en Arduino
 
02 programarpic
02 programarpic02 programarpic
02 programarpic
 
02 programar
02 programar02 programar
02 programar
 
Como programar un pic en 4 pasos
Como programar un pic en 4 pasosComo programar un pic en 4 pasos
Como programar un pic en 4 pasos
 
Programación de un PIC con Niple
Programación de un PIC con NipleProgramación de un PIC con Niple
Programación de un PIC con Niple
 
Contador
ContadorContador
Contador
 
como usar MPLAB
como usar MPLABcomo usar MPLAB
como usar MPLAB
 
2 florencia sepúlveda
2 florencia sepúlveda 2 florencia sepúlveda
2 florencia sepúlveda
 
Tutorial proton part 2
Tutorial proton part 2Tutorial proton part 2
Tutorial proton part 2
 
SBC semana01
SBC semana01SBC semana01
SBC semana01
 

Último

Manual de mantenimiento hadware xperts pdf
Manual de mantenimiento hadware xperts pdfManual de mantenimiento hadware xperts pdf
Manual de mantenimiento hadware xperts pdf
cbtistechserv
 
Partes de una Computadora.documento.word.drive
Partes de una Computadora.documento.word.drivePartes de una Computadora.documento.word.drive
Partes de una Computadora.documento.word.drive
MiguelDoloriert
 
Manual Soporte y mantenimiento de computo.pdf
Manual Soporte y mantenimiento de computo.pdfManual Soporte y mantenimiento de computo.pdf
Manual Soporte y mantenimiento de computo.pdf
rmurillojesus
 
mi hermoso sector victor raul ,calle san jose
mi hermoso sector victor raul ,calle san josemi hermoso sector victor raul ,calle san jose
mi hermoso sector victor raul ,calle san jose
Ariana yglesias azañero
 
trabajo de mantenimiento de equipos ....
trabajo de mantenimiento de equipos ....trabajo de mantenimiento de equipos ....
trabajo de mantenimiento de equipos ....
luzmilalopez043tamar
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.TECLADO ERGONÓMICO Y PANTALLAS TACTILES.
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.
FransuaPeralta
 

Último (6)

Manual de mantenimiento hadware xperts pdf
Manual de mantenimiento hadware xperts pdfManual de mantenimiento hadware xperts pdf
Manual de mantenimiento hadware xperts pdf
 
Partes de una Computadora.documento.word.drive
Partes de una Computadora.documento.word.drivePartes de una Computadora.documento.word.drive
Partes de una Computadora.documento.word.drive
 
Manual Soporte y mantenimiento de computo.pdf
Manual Soporte y mantenimiento de computo.pdfManual Soporte y mantenimiento de computo.pdf
Manual Soporte y mantenimiento de computo.pdf
 
mi hermoso sector victor raul ,calle san jose
mi hermoso sector victor raul ,calle san josemi hermoso sector victor raul ,calle san jose
mi hermoso sector victor raul ,calle san jose
 
trabajo de mantenimiento de equipos ....
trabajo de mantenimiento de equipos ....trabajo de mantenimiento de equipos ....
trabajo de mantenimiento de equipos ....
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.TECLADO ERGONÓMICO Y PANTALLAS TACTILES.
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.
 

Labview & pic

  • 2. LEER PARA APRENDER / Por: Jorge Rdz, Editor Pasó casi un año desde que ya no había realizado ninguna práctica utilizando Microcontroladores PIC16, del cual me ha fascinado bastante ya que un día me pregunte, Es necesario aprender Microcontroladores? Donde lo puedo aplicar? Estas dos cuestiones me las hacía muy seguido, entonces un día, en mi trabajo encontré en una maquina avanzada que había 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 más que una tarjeta de control que se había quemado unos diodos, no fue muy difícil saber que era la falla, y después como tenía tiempo necesario para hacer otras cosas me la pase revisando que mas tenia o de que estaba compuesto la tarjeta y vi que había un Microcontrolador y una calcomanía 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 había hecho con anterioridad, desde ese momento supe que las horas perdidas pasándola programando y realizado proyectos con esos PIC ahora sé a dónde van los conocimientos adquiridos de tantas horas programando Microcontroladores PIC y sé que vale la pena seguir programando!.
  • 3. Introducción Este Manual concerniente a las prácticas sobre la utilización de comunicación serial utilizando como hardware el Microcontrolador PIC16F886 y Labview para la interface Hombre-Máquina fueron realizados para abrirnos paso a realizar nuevas maneras de programar en Labview, y usando el compilador MPLAB X IDE para la programación en C para Microcontroladores PIC16. A lo largo de este manual usted entenderá como hacer correctamente un enlace Serial hacia Labview y PIC16.
  • 4. 1. MPLAB X Recientemente Microchip ha lanzado un proyecto para mejorar el aspecto de su IDE en este caso de MPLAB. En su reciente actualización 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.
  • 5. 1.1 PROTEUS Una de las maneras de realizar un proyecto siempre es simularlo antes de empezar hacerlo físicamente ya que nos ahorra tiempo en construcción y sacar fallas antes de proceder, para nuestro caso usaremos una herramienta sumamente importante para la simulaciones de circuitos lógicos y programables entre varios más, estamos hablando de PROTEUS, simulador muy conocido entre toda la comunidad de electrónica y de control.
  • 6. 1.2 LABVIEW Para la interfaz del usuario usaremos el software Labview 2010 donde aprenderemos a desarrollar comunicación seriales a su máxima capacidad, entre otras herramientas necesarias para desarrollar sistemas muy estables para las comunicaciones.
  • 7. 1.3 INICIANDO EN MPLAB X En esta parte nos enfocaremos en la programación 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 máximo. 1.3.1 Entorno de MPLAB X En nuestra primera impresión de usar MPLAB X es como si fuera una sombra de JAVA, pero es muy distinto ya que es para Microcontroladores PIC. 1. Exploramos librerías del proyecto tanto los archivos principales. 2. Observamos el contenido de los archivos tanto las librerías y el programa principal. 3. Aquí podemos ver la información concerniente al Microcontrolador. 4. Salida donde podemos observar errores al compilarse el archivo también podemos debuggear el programa. 1 2 3 4
  • 8. 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.
  • 9. 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.
  • 10. Usaremos el compilador Hi tech Compiler for PIC16 , después buscaremos un lugar para guardar nuestro proyecto y aceptamos. Como en MPLAB 8.8 al tener el proyecto listo debemos de hacer una extensión “.c” para ellos vamos a <New File> y en ventana de categorías buscaremos en <Micochip embedded> y elegimos la carpeta donde está el compilador hi tech y en <File Type>en la primera opción es que estamos buscando para el compilador hi tech for PIC16. En la siguiente ventana nos pedirá el Nombre del archivo y la extensión después la ubicación del archivo del cual debe ser la misma donde creamos el proyecto. Al agregar el archivo con la extensión “.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.
  • 11. 1.4 Crear enlaces Como hemos realizado nuestro primer proyecto en MPLAB X no tiene mucha ciencia la programación en C, ya que si hemos programado en Hi tech compiler es prácticamente igual. La idea de nuestro primer programa en C es hacer una comunicación serial que prenda un puerto completo del cual podemos usar interrupciones por Recepción de datos o simple recepción de datos. 1.4.1 Enlace PIC En la segunda opción 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 */
  • 12. 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> después al abrirse las dos ventas de Block diagram y Front Panel , nos pasaremos a la ventana de Block Diagram del cual buscaremos la opción de SERIAL, que está ubicado en <Functions> <Instrument I/O> <Serial> y seleccionamos la opción de VISA Configure Serial Port que nos servirá para configurar los baudios, bits de paridad entre varias opciones más. Al agregar el control de configuración de puerto agregaremos dos controles que harán la función 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 fácilmente escribiendo sobre la velocidad de transmisión. Después de configurar correctamente el puerto, ahora podemos hacer un ciclo perpetuo hasta que salgamos con un stop. Para ello buscaremos la opción de While Loop , después buscaremos la opción 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 programación completa como debe de quedar nuestro proyecto en Labview, recuerde siempre cerrar el puerto al terminar la conexión para que este pueda cerrarse correctamente y que pueda seguir funcionando bien el puerto seleccionado.
  • 13. Si nos pasamos al lado de Front Panel nos quedara de la siguiente manera: Recuerde que usaremos una velocidad de transmisión 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 rápidamente 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.
  • 14. 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 programación hemos usado una buena lógica 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 función que hemos creado en Labview se puede usar para distintos Microcontroladores existentes en el mercado.
  • 15. 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 práctica anterior, del cual el pic debe de capturar los datos y después enviarlos. Para ello se debe de configurar correctamente el periférico de serial del pic a una velocidad de 19200 baud, al guardar el dato leído del puerto B se debe llamar la función que realiza el envío de datos hacia Labview. Al recibir los datos Labview este debe de leer los datos existentes en ese momento para saber cuántos bytes necesita leer y después capturar todos los datos que están guardados en su buffer, y procesarlos hacer acciones.
  • 16. 1.5.1 Configuración 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 guárdalos en una variable, del cual se enviara a Labview, para ello se agrega la librería USART como se realizo en la práctica anterior, al tomar solo los 4 bits de menor peso del puerto B este solo se envía para después esperar 100mS que servirán para sincronización. /* * 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
  • 17. 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 Configuración de enlace en Labview Como hemos realizado en el proyecto anterior se debe de crear un Nuevo IV, después 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 más importante esta en Block Diagram : Visa resource name es donde podemos agregar el COM disponible del cual se puede obtener al agregar las configuración del puerto. Set up 19200 esto nos proporciona la velocidad a que debe de trabajar la comunicación 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 visualización de 4 interruptores que estarán conectado al nibble de menor peso del puerto B del Microcontrolador. Ahora entrando a lo más complicado que es la programación 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 parámetros que son el COM y los BAUD.
  • 18. Como ya hemos agregado la configuración del puerto, ahora se debe de crear un evento, esto quiere decir que configuraremos un evento del cual al recibir un carácter o un byte este rápidamente entrara, para ellos se debe de agregar el siguiente VI <Visa Enable Event> nos pedirá un parámetro en particular que es la configuración del evento o la selección del evento, tendremos varios de estos pero el más importante será al recibir un carácter <Serial Character> después 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 conexión en un momento inesperado, se debe de checar siempre el estado de este, se agrega la función <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 conexión o un ‘T’ cuando existen algún tipo de falla. Para cuando la opción en Verdadera (T) solo se agrega un <case structure> que hara la función de un if-else como en la programación en C. En la ventana de Verdadero solo se directo las señales fuera del ciclo while-loop, como se va en imagen siguiente:
  • 19. Como vemos al salir del case structure se usa la misma señal de status para salir del ciclo while-loop. En la opción 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 señal de recepción de al menos un byte este rápidamente enviara una señal de error y se saldrá del ciclo o marcara error. Al recibir una señal este rápidamente 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 después 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 después buscar en el arreglo de bytes el primer byte para después transformar de número a un arreglo binario que este ya visualizara el estado de los interruptores. Y después solo cerraremos el puerto pero antes se debe de borrar cualquier evento antes abierto.
  • 20. 1.5.3 Esquema del Diagrama Electrónico 2. Graficando señales análogas con DAC Las mayorías de las veces necesitamos adquirir datos continuos, por ejemplo de temperatura, Luz, y entre varios sensores que varíen con respecto a circunstancias físicas. Después de tomar este dato análogo, se envía 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 práctica vas a proponer graficar datos continuos esto quiere decir que cada vez que el Microcontrolador en s entrada análoga consiga leer el estado del sensor rápidamente lo envié para apreciarlo en una grafica realizada en Labview con respecto al tiempo. 1.2.1 Realización del Hardware y Software para el Microcontrolador El primer paso es configurar puertos y entradas digitales o análogas, de esto solo se debe de incluir la librería para el uso del convertidor análogo a digital, y después usar solo una entrada análoga en este caso el AN0, estos datos se enviaran casi
  • 21. instantáneo ya que usaremos nada mas un retardo de 1mS del cual nos servirá también para adquirir correctamente la conversión de la variable análoga, 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){
  • 22. 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 más básico para empezar, ya si el usuario quiere cambiar más opciones lo puede hacer. Por ahora como vamos a recibir datos debemos de crear un evento, que es esperar por 10s un carácter del rs232, al recibir estos datos
  • 23. rápidamente debe leerlos y mandarlos a procesar que no es más que juntar los dos bytes y enviarlo a graficar. Siempre una buena presentación del programa puede ayudar mucho a la hora de comercializar un software, por eso nunca deje la presentación su proyecto a un lado.
  • 25. 3. Control de Intensidad de lámpara Esta práctica conlleva a la manipulación de una lámpara de 12 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 dispositivo puede abrir corriente puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. 3. Control de Intensidad de lámpara Esta práctica conlleva a la manipulación de una lámpara de 12 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 dispositivo puede abrir corriente en la puerta. Es usado en aplicaciones donde involucre corriente alterna como puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. 3. Control de Intensidad de lámpara Esta práctica conlleva a la manipulación de una lámpara de 12 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 dispositivo puede abrir en cualquier dirección la corriente aplicando una pequeña en la puerta. Es usado en aplicaciones donde involucre corriente alterna como puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. 3. Control de Intensidad de lámpara Esta práctica conlleva a la manipulación de una lámpara de 12 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 en cualquier dirección la corriente aplicando una pequeña en la puerta. Es usado en aplicaciones donde involucre corriente alterna como puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. Esta práctica conlleva a la manipulación de una lámpara de 12 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 en cualquier dirección la corriente aplicando una pequeña en la puerta. Es usado en aplicaciones donde involucre corriente alterna como puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. Esta práctica conlleva a la manipulación de una lámpara de 12 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 tiristores invertidos en paralelo, en cualquier dirección la corriente aplicando una pequeña en la puerta. Es usado en aplicaciones donde involucre corriente alterna como puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. Esta práctica conlleva a la manipulación de una lámpara de 127VCA poder controlar corriente alterna se debe de usar un TRIAC de potencia como se istores invertidos en paralelo, en cualquier dirección la corriente aplicando una pequeña en la puerta. Es usado en aplicaciones donde involucre corriente alterna como puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. 7VCA del cual para poder controlar corriente alterna se debe de usar un TRIAC de potencia como se istores invertidos en paralelo, en cualquier dirección la corriente aplicando una pequeña en la puerta. Es usado en aplicaciones donde involucre corriente alterna como puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. fig 3.0 del cual para poder controlar corriente alterna se debe de usar un TRIAC de potencia como se istores invertidos en paralelo,este en cualquier dirección la corriente aplicando una pequeña en la puerta. Es usado en aplicaciones donde involucre corriente alterna como puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. fig 3.0 en la puerta. Es usado en aplicaciones donde involucre corriente alterna como
  • 26. Un triac es un interruptor de estado sólido, una pequeña 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 cátodo de uno de los SCR está conectado hacia el ánodo del otro y viceversa. La puertas están conectadas juntas, porque tenemos dos tipos configuración de SCR’s esto permite activar amos a medios ciclos. En el ejemplo anterior el interruptor realice la función de cortar la corriente cuando sea necesario, la idea es usar una pequeña 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 lógico al menos que usen un pequeño relay como lo hacen los microondas.
  • 27. Para controlar con un Microcontrolador sin dañarlo 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 lámpara 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.
  • 28. 3.1 Control de Lámpara Para empezar a entender el funcionamiento de encender lámparas con TRIAC y PIC, necesitamos hacer una pequeña practica para calentar motores, primero que nada la idea es encender una lámpara 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 interrupción por recepción 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; } } }
  • 29. /* * 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 lámpara sino el dato 0x77 para apagar la lámpara. En Labview la programación es muy sencilla como podemos verla en el block diagram:
  • 30. Simple no? Solo enviamos el dato 255 que corresponde en hexadecimal 0xFF, y el dato 119 que corresponde a 0x77, después es subministrada para convertirse a arreglo y después 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 continuación 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 lámpara cuando mandemos el dato de Labview al Micro.
  • 31.
  • 32. 3.1.4 Fotos del Proyecto 3.1.5 Tomando Señal Ahora antes de desarrollar la practica deseada, debemos de entender cómo debemos de tomar la referencia de la onda senoidal , esto quiere decir que al tomar la onda positiva debemos de obtener la señal 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 después activar un transistor que está alimentado con tan solo 5 volt esto hará una onda cuadra a nivel TTL, para después 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.
  • 33. Representación de la Idea: 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 señal generada antes y después del diodo es el siguiente: Escala 2 volts. Salida después del transistor Entrada a la base del transistor Con esta señal cuadrada que genera es de 0 a 5 v, del cual ya podemos trabajar con ella. Es muy fácil ahora que tenemos esta señal 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. Entrada para el PIC
  • 34. En la programación 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. Después 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 */
  • 35. 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 razón se usa la función, “concaténate” para unir el ‘dato’ + “Hz”
  • 36. En front Panel podemos ver cómo queda nuestro programa, lo que debemos hacer primer es Iniciar Labview y después conectar rápidamente el hardware que es el Microcontrolador. Este marcara la frecuencia que tiene la conexión VCA. El diagrama a Manejar es el siguiente: P. 1 P.2
  • 37. Algunas fotos del Proyecto: P.3
  • 38. 3.1.6 Manipulando la Intensidad de lámpara Como hemos realizado en las dos prácticas anteriores, al controlar el encendido de la lámpara y tomando la señal, al combinar las dos podemos crear un controlador de intensidad de una lámpara, 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 señal PWM debe de recortar la onda exactamente cuándo 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 iluminación de la lámpara. 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 lámpara. Como hemos realizado en la segunda práctica de este proyecto al obtener los ciclos o los hertz de la corriente alterna, al usar ese método 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 lámpara encienda, y obtendremos un ancho de pulso proporcional a la frecuencia de VCA.
  • 39. El firmware del Microcontrolador es muy sencillo usando l interrupción por recepción de datos (Rs232) y la interrupción por desbordamiento por timer0, podemos hacer esta práctica: /* * 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 */
  • 40. 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 lámpara. 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 máximo. Al enviar un dato de 0 a 255 este valor al ser cargado a la variable BUFFER carga automáticamente al registro TMR0 del timer0 del cual indica cuando hay que interrumpir para prender el led del optoacoplador, esto realizándose a 60Hz del cual el PWM será del mismo valor de la frecuencia de VCA.
  • 42. Diagrama: RETOS: Esta sección 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 análogo 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 señale cuando este en bajo nivel o alto. Minvalor< DATO < Maxvalor 2.- Manipule dos lámpara 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 más peligrosas.