sábado, 5 de junio de 2010

Conexión CDC PIC18F <-> LabView.


En el siguiente documento se detallan algunas funciones y procedimientos para realizar una conexion mediante CDC ( Emulación de puerto serie) con un microcontrolador de la familia 18F con soporte para USB y LabView. Son bienvenidas las observaciones, correciones y/o correciones sugerencias para este documento.


Conexion CDC PIC<->LabView






El hardware utilizado para este ejemplo dispone de 5 pushbuttons conectados en el puerto A (A1..A5) y 8 leds en el puerto B (B0..B7).




#include <18f2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL4,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)

#define LED1 PIN_B0
#define LED2 PIN_B1
#define LED3 PIN_B2
#define LED4 PIN_B3
#define LED5 PIN_B4
#define LED6 PIN_B5
#define LED7 PIN_B6
#define LED8 PIN_B7

#define LED_ON output_low
#define LED_OFF output_high


#include
#include

void main(void) {

char c;
usb_init();

while (TRUE) {
if (usb_enumerated()) {
if (usb_cdc_kbhit()) {

c=usb_cdc_getc();

if (c=='1') output_toggle(LED1);
if (c=='2') output_toggle(LED2);
if (c=='3') output_toggle(LED3);
if (c=='4') output_toggle(LED4);
if (c=='5') output_toggle(LED5);
if (c=='6') output_toggle(LED6);
if (c=='7') output_toggle(LED7);
if (c=='8') output_toggle(LED8);

}

if (input_STATE(PIN_A5)==0){
delay_ms(800);
printf(usb_cdc_putc,"5\r");
}

if (input_state(PIN_A4)==0){
delay_ms(800);
printf(usb_cdc_putc,"4\r");
}

if (input_state(PIN_A3)==0){
delay_ms(800);
printf(usb_cdc_putc,"3\r");
}

if (input_state(PIN_A2)==0){
delay_ms(800);
printf(usb_cdc_putc,"2\r");
}

if (input_state(PIN_A1)==0){
delay_ms(800);
printf(usb_cdc_putc,"1\r");
}

}
}
}







A continuación un video para complementar el documento...






.

jueves, 3 de junio de 2010

DAQ mediante CDC y LabView



Esta es una aplicación de la conectividad USB, en este caso en particular, usando la emulación de un puerto serie RS232 mediante un microcontrolador PIC18F2550 (Puede usarse cualquiera de esta familia) para la adquisición de datos analógicos usando el convertidor analógico-digital del mismo, y enviando estos datos a la PC y procesarlos mediante LabView.
Con el LabView se pueden realizar una cantidad de cosas impresionantes, y lo mas impresionante es el tiempo de implementación que es muy corto, en cuestión de minutos uno puede obtener una aplicación bastante poderosa.

Para esta aplicación se utilizaron los componentes VISA de labview para realizar la conexión serial de manera rápida pero eficaz, se utiliza un GRAPH CHART para graficar los datos adquiridos, y la función WRITE TO SPREED SHEET para guardar estos datos a una hoja de cálculo de exel.

CLICK AQUÍ PARA VER CÓDIGO [-/+]



//-----------------------------------------------------------------------------------
//
// Mas proyectos en: http://perfectalgorithm.blogspot.com
//
//----------------------------------------------------------------------------------
// Esta obra está bajo una licencia
// Atribución-No comercial-Licenciamiento Recíproco 2.5 México de Creative Commons.
// Para ver una copia de esta licencia, visite:
// http://creativecommons.org/licenses/by-nc-sa/2.5/mx/
// o envie una carta a Creative Commons, 171 Second Street, Suite 300,
// San Francisco, California 94105, USA.
//-----------------------------------------------------------------------------------

#include <18F2550.h>
#device ADC=10
#fuses XTPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)


#include <usb_cdc.h>
#include <lcd1.c> //Cambie por libreria LCD adecuada.
#include <string.h>

#BYTE TRISA = 0x0F92
#BYTE TRISB = 0x0F93
#BYTE PORTA = 0x0F80
#BYTE PORTB = 0x0F81
#BYTE ADCON0 = 0x0FC2
#BYTE ADCON1 = 0x0FC1
#BYTE CMCON = 0x0FB4



char comando[10];
char adc_string[10];
int16 adc_dato;
int len=0;
char c;

void commando();



void main(void) {

LCD_init();
usb_init();

TRISA = 0x0FF;
TRISB = 0x00;
ADCON1 = 0x0F;
CMCON = 0x07;


setup_comparator(NC_NC_NC_NC);
setup_adc_ports(AN0);
setup_adc(vss_vdd);
set_adc_channel(0);
setup_adc(adc_clock_internal);


printf(lcd_putc,"\fPerfectAlgorithm");
len=0;


while (TRUE) {
if (usb_enumerated()) {
if (usb_cdc_kbhit()) {
c=usb_cdc_getc();
Comando[len]=c;
len++;
}
if (len>2) {
commando();
len=0;
}
}
}
}

void envia_dato() {
int i;
read_adc(ADC_START_ONLY);
while (bit_test(ADCON0,1));
adc_dato = read_adc(ADC_READ_ONLY);
sprintf(adc_string,"%Lu",adc_dato);
for(i=0;i<strlen(adc_string)+1;i++) {
usb_cdc_putc(adc_string[i]);
while(!usb_cdc_putready());
}

}

void commando() {

if (Comando[0]=='G') { //----------- GDT
if (comando[1]=='D') {
if (comando[2]=='T') {
envia_dato();
}
}
}

}

CLICK AQUÍ PARA VER DESCARGAR SOURCE LABVIEW/PIC [-/+]



El archivo contiene el Firmware para el PIC (.C para copilador PCW CCS) y SOURCE para LabView v8.6

http://rapidshare.com/files/395453831/Conexion_CDC_con_Labview.rar.html







Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Powered by Blogger