Vous êtes sur la page 1sur 10

Instrumentacin Avanzada. G. Murcia J.

Strack

GUIA DE EJERCICIOS
N 2
INSTRUMENTACIN AVANZADA

Comunicando LabVIEW
a un PIC18F2550

1
Instrumentacin Avanzada. G. Murcia J. Strack

2.-COMUNICANDO LABVIEW A UN PIC18F2550

Ejercicio 2.1
Tomando el ejercicio 1.4 realizar los ajustes necesarios para que adems de encenderse
un LED en pantalla se encienda un LED fsicamente sobre la placa PIC suministrada
por la ctedra.

Recordemos el ejercicio 1.4:

Como vimos en las transparencias de la Clase 2, para resolver el problema debemos:

1. Instalar el driver mchpcdc, para que la placa PIC didctica suministrada por la ctedra
sea reconocida por la PC como un dispositivo conectado a un puerto COM virtual.
2. Instalar las libreras NI-VISA, para poder realizar luego la comunicacin con el
dispositivo conectado al puerto COM virtual. Las herramientas que usaremos estn en la
pestaa Data Comunication del diagrama de bloques de labVIEW.

3. Generar una programacin en LabVIEW y en el PIC para resolver este problema, como
por ejemplo la que se representa en la siguiente figura:

2
Instrumentacin Avanzada. G. Murcia J. Strack

Programa en PC Programa en PIC

Que escriba un carcter en el Que lea un carcter en el buffer de


puerto COM que actu de recepcin COM virtual
instruccin para el PIC.
NO
Seguida a esa instruccin Es la
podramos enviar al COM instruccin?
virtual otros cuatro caracteres SI
que sean 1 o 0 segn se
Que lea los cuatro caracteres 1 o 0
quiera encender o apagar las
salidas RB0 a RB3 del PIC.
Que escriba los 1 o 0 en RB0 a RB3

4. El programa en el PIC se puede generar con el software PIC C Compiler. A continuacin


se muestra un cdigo que escribe las salidas RB0 a RB3 de un 18F2550 cuando se recibe
el carcter A a modo de instruccin.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//// ////
//// Programa Asignatura Instrumentacin - Ao 2015 - ////
//// ////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <18F2550.h>
#include <usb_bootloader.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include <usb_cdc.h>

//Asignacion de variables
#define LEDV PIN_C0
#define LEDR PIN_C1
#define LED_ON output_high
#define LED_OFF output_low

void usb_debug_task(void) // Funcin que atiende la comunicacin USB y gestiona el LED de dos colores
{
static int8 last_enumerated;
int8 new_connected;
int8 new_enumerated;
static int8 last_cdc;
int8 new_cdc;

//new_connected=usb_attached(); no uso sense pin


new_enumerated=usb_enumerated();
new_cdc=usb_cdc_connected();

if ((new_enumerated) && (new_cdc))


{LED_ON(LEDV); LED_OFF(LEDR);}
else
{LED_ON(LEDR); LED_OFF(LEDV);}

last_enumerated=new_enumerated;
last_cdc=new_cdc;
}

//declaramos variables globales


char c, B0, B1, B2, B3; // son variables tipo caracter

3
Instrumentacin Avanzada. G. Murcia J. Strack

void main(void) // Funcin principal


{
usb_init_cs();

set_tris_b(0xF0); //Configuracin para el puerto B como digital con 4 entradas/4 salidas


output_bit(PIN_B0,0); // Ponemos salidas a 0
output_bit(PIN_B1,0);
output_bit(PIN_B2,0);
output_bit(PIN_B3,0);

while (TRUE) // Abre un ciclo while infinito


{
usb_task();
usb_debug_task();

if (usb_cdc_kbhit()) // Vale 1 si hay un caracter en el buffer de recepcin


{
c=usb_cdc_getc(); // Leemos el caracter y la grabamos en la variable c

if (c=='A')// si el caracter ledo es A entra en rutina de escribir salidas digitales


{
B0=usb_cdc_getc(); // Leemos el caracter
output_bit(PIN_B0,B0); // Escribimos salida
B1=usb_cdc_getc(); // Leemos el caracter
output_bit(PIN_B1,B1); // Escribimos salida
B2=usb_cdc_getc(); // Leemos el caracter
output_bit(PIN_B2,B2); // Escribimos salida
B3=usb_cdc_getc(); // Leemos el caracter
output_bit(PIN_B3,B3); // Escribimos salida
}
}
} // Cierra el ciclo while infinito
} // Cierra la funcin principal

5. Una vez compilado el programa anterior (generacin del archivo.hex) cargamos el cdigo
en el PIC con el software SIOW.exe, haciendo uso del BootLoader previamente cargado
en el 18F2550 como vimos en las transparencias de la Clase 2.

4
Instrumentacin Avanzada. G. Murcia J. Strack

6. El programa en la PC haciendo uso de la librera VISA tendr que:


a) Abrir una comunicacin al puerto COM.
b) Enviar el carcter A (que acta como instruccin para entrar en
la rutina de escribir salidas digitales segn el cdigo del mostrado
en el punto 4) .
c) Enviar cuatro caracteres que sean 0 o 1 para encender o apagar
los LEDs respectivos.
d) Cerrar la comunicacin al puerto COM abierto en a).
Finalmente:

Ejercicio 2.2
Tomando el ejercicio 1.7 realizar los ajustes necesarios para que los pines RB0 a RB3 de la
placa PIC representen los ltimos 4 bit en binario de un nmero decimal ingresado en
pantalla.

Recordemos el ejercicio 1.7:

Ejercicio 2.3
Modifique el cdigo cargado en el PIC para que ahora si la PC le enva el carcter B
al microcontrolador este le responda con el estado de los pines RB4 a RB7. Muestre en
un panel frontal el estado de estas cuatro entradas digitales.

1. Como vimos en las transparencias de la Clase 2 para resolver el problema debemos


generar una programacin en LabVIEW y en el PIC, como por ejemplo la que se
representa en la siguiente figura:

5
Instrumentacin Avanzada. G. Murcia J. Strack

Programa en PC Programa en PIC

La PC enva el carcter B al Lee un carcter en el buffer de


puerto COM virtual recepcin

NO
Es una B?

SI
Lee las entradas RB4 a RB7

Arma un carcter (byte) con el estado


de RB4 a RB7

La PC lee el carcter con los Enva a la PC el carcter los estados


estados de RB4 a RB7 de RB4 a RB7

2. Podemos modificar el cdigo que ya hemos cargado en el PIC para agregarle esta nueva
funcin. El nuevo programa podra quedar as:

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//// ////
//// Programa Asignatura Instrumentacin - Ao 2015 - ////
//// ////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <18F2550.h>
#include <usb_bootloader.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include <usb_cdc.h>

//Asignacion de variables
#define LEDV PIN_C0
#define LEDR PIN_C1
#define LED_ON output_high
#define LED_OFF output_low

void usb_debug_task(void) // Funcin que atiende la comunicacin USB y gestiona el LED de dos colores
{
static int8 last_enumerated;
int8 new_connected;
int8 new_enumerated;
static int8 last_cdc;
int8 new_cdc;

//new_connected=usb_attached(); no uso sense pin


new_enumerated=usb_enumerated();
new_cdc=usb_cdc_connected();

if ((new_enumerated) && (new_cdc))


{LED_ON(LEDV); LED_OFF(LEDR);}
else
{LED_ON(LEDR); LED_OFF(LEDV);}

last_enumerated=new_enumerated;
last_cdc=new_cdc;
}

6
Instrumentacin Avanzada. G. Murcia J. Strack

//declaramos variables globales


char c, B0, B1, B2, B3, ENT_DIG; // son variables tipo caracter

void main(void) // Funcin principal Agregamos esta nueva variable


{
usb_init_cs();

set_tris_b(0xF0); //Configuracin para el puerto B como digital con 4 entradas/4 salidas


output_bit(PIN_B0,0); // Ponemos salidas a 0
output_bit(PIN_B1,0);
output_bit(PIN_B2,0);
output_bit(PIN_B3,0);

while (TRUE) // Abre un ciclo while infinito


{
usb_task();
usb_debug_task();

if (usb_cdc_kbhit()) // Vale 1 si hay un caracter en el buffer de recepcin


{
c=usb_cdc_getc(); // Leemos el caracter y la grabamos en la variable c

if (c=='A')// si el caracter ledo es A entra en rutina de escribir salidas digitales


{
B0=usb_cdc_getc(); // Leemos el caracter
output_bit(PIN_B0,B0); // Escribimos salida
B1=usb_cdc_getc(); // Leemos el caracter
output_bit(PIN_B1,B1); // Escribimos salida
B2=usb_cdc_getc(); // Leemos el caracter Agregamos esta porcin de cdigo
output_bit(PIN_B2,B2); // Escribimos salida
B3=usb_cdc_getc(); // Leemos el caracter
output_bit(PIN_B3,B3); // Escribimos salida
}

if (c=='B')// si el caracter ledo es B entra en rutina de leer entradas digitales


{
ENT_DIG=1*input(PIN_B4)+2*input(PIN_B5)+4*input(PIN_B6)+8*input(PIN_B7);
usb_cdc_putc(ENT_DIG);
}

}
} // Cierra el ciclo while infinito
} // Cierra la funcin principal

3. Compilamos y cargamos el nuevo cdigo.


4. Programamos en labVIEW:

7
Instrumentacin Avanzada. G. Murcia J. Strack

Ejercicio 2.4
Modifique nuevamente el cdigo cargado en el PIC para que ahora se pueda ver en la
PC el valor de la entrada analgica AN0, AN1, AN2 o AN3, funcionando el conversor
analgico/digital en 10 bits.

1. Como vimos en las transparencias de la Clase 2 para resolver el problema debemos


generar una programacin en LabVIEW y en el PIC, como por ejemplo la que se
representa en la siguiente figura:

Programa en PC Programa en PIC

La PC enva el carcter C al Lee un carcter en el buffer de


puerto COM virtual seguido de recepcin
otro carcter (un nmero de
0 a 3) que indica que
entrada leer. NO
Es una C?

SI
Lee el siguiente carcter (canal)

Selecciona la entrada analgica dada


por canal y lee el conv. A/D

La PC lee el carcter con el Enva a la PC el valor del conversor


estado del conversor A/D A/D

2. Podemos modificar nuevamente el cdigo que ya hemos cargado en el PIC para agregarle
esta nueva funcin. El nuevo programa quedara:

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//// ////
//// Programa Asignatura Instrumentacin - Ao 2015 - ////
//// ////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <18F2550.h> Agregamos esta instruccin que


#DEVICE ADC=10
#include <usb_bootloader.h>
configura el conversor A/D en 10 bit
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include <usb_cdc.h>

//Asignacion de variables
#define LEDV PIN_C0
#define LEDR PIN_C1
#define LED_ON output_high
#define LED_OFF output_low

void usb_debug_task(void) // Funcin que atiende la comunicacin USB y gestiona el LED de dos colores
{
static int8 last_enumerated;
int8 new_connected;
int8 new_enumerated;
static int8 last_cdc;
int8 new_cdc;

//new_connected=usb_attached(); no uso sense pin


new_enumerated=usb_enumerated();
new_cdc=usb_cdc_connected();

8
Instrumentacin Avanzada. G. Murcia J. Strack

if ((new_enumerated) && (new_cdc))


{LED_ON(LEDV); LED_OFF(LEDR);}
else
{LED_ON(LEDR); LED_OFF(LEDV);}
last_enumerated=new_enumerated;
last_cdc=new_cdc;
}

//declaramos variables globales


char c, B0, B1, B2, B3, ENT_DIG, CH_A; // son variables tipo caracter
int8 envia[2];
int16 dato; Agregamos estas nuevas variables
void main(void) // Funcin principal
{
usb_init_cs();

set_tris_b(0xF0); //Configuracin para el puerto B como digital con 4 entradas/4 salidas


output_bit(PIN_B0,0); // Ponemos salidas a 0
output_bit(PIN_B1,0);
output_bit(PIN_B2,0);
output_bit(PIN_B3,0);

setup_adc_ports(AN0_TO_AN3|VSS_VDD); //habilitamos 4 puertos para entrada analgica


setup_adc(ADC_CLOCK_INTERNAL); //Utilizamos el reloj interno

while (TRUE) // Abre un ciclo while infinito


{ Agregamos esta configuracin
usb_task();
usb_debug_task();
if (usb_cdc_kbhit()) // Vale 1 si hay un caracter en el buffer de recepcin
{
c=usb_cdc_getc(); // Leemos el caracter y la grabamos en la variable c

if (c=='A')// si el caracter ledo es A entra en rutina de escribir salidas digitales


{
B0=usb_cdc_getc(); // Leemos el caracter
output_bit(PIN_B0,B0); // Escribimos salida
B1=usb_cdc_getc(); // Leemos el caracter
output_bit(PIN_B1,B1); // Escribimos salida
B2=usb_cdc_getc(); // Leemos el caracter
output_bit(PIN_B2,B2); // Escribimos salida
B3=usb_cdc_getc(); // Leemos el caracter
output_bit(PIN_B3,B3); // Escribimos salida
}

if (c=='B')// si el caracter ledo es B entra en rutina de leer entradas digitales


{
ENT_DIG=1*input(PIN_B4)+2*input(PIN_B5)+4*input(PIN_B6)+8*input(PIN_B7);
usb_cdc_putc(ENT_DIG);
}

if (c=='C')// entra en rutina de leer un valor de una entrada analgica


{
CH_A=usb_cdc_getc();
set_adc_channel(CH_A);
delay_ms(1);
dato=read_adc(); // Leemos el dato Agregamos esta porcin de cdigo
delay_us(500);
dato=read_adc();
envia[0]=dato&0x00FF;
envia[1]=(dato&0xFF00)/256;
usb_cdc_putc(envia[0]);
usb_cdc_putc(envia[1]);
}
}
} // Cierra el ciclo while infinito
} // Cierra la funcin principal

9
Instrumentacin Avanzada. G. Murcia J. Strack

3. Compilamos y cargamos el nuevo cdigo.


4. Programamos en labVIEW:

Ejercicio 2.5
Explore la barra de herramientas INSTRUMENTACIN AVANZADA ubicada en la
paleta User Libraries.

Ejercicio 2.6
Imagine que un sensor de temperatura que entrega 10mV/C se conecta a una entrada
analgica de la placa PIC.
Simulando este sensor mediante un potencimetro muestre en pantalla la temperatura
medida en grados Centgrados y en grados Fahrenheit.

10

Vous aimerez peut-être aussi