Autor Tema: como enviar y recibir datos en labview a través de proteus  (Leído 4855 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado robotic

  • PIC12
  • **
  • Mensajes: 55
como enviar y recibir datos en labview a través de proteus
« en: 30 de Septiembre de 2010, 02:05:22 »
Hola amigos del foro, ya que pude en proyectos anteriores conectar 4 sensores de temperatura lm35 al pic 16f877a y hacer que cambiara los sensores de temperatura de labview.
y también a través de labview poder cambiar la frecuencia de un motor simulado en proteus.
junte los dos códigos en C compile y no me funciono ni lo uno ni lo otro.que podrá ser?
habrá que colocar interrupciones para que cuando este escribiendo deje de leer y viceversa?

la idea es

                                proteus => Labview
                                labview => proteus

acá esta el código
#include <ccs_tesis.h>
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,stream=HOSTPC)
#define LCD_ENABLE_PIN PIN_D0 //comunica el pin enable del lcd con el pin d0 del pic
#define LCD_RS_PIN PIN_D1//comunica el pin RS del lcd con el pin d1 del pic
#define LCD_RW_PIN PIN_D2//comunica el pin RW del lcd con el pin d2 del pic
#define LCD_DATA4 PIN_D4//comunica el pin D4 del lcd con el pin d4 del pic
#define LCD_DATA5 PIN_D5//comunica el pin D5 del lcd con el pin d5 del pic
#define LCD_DATA6 PIN_D6//comunica el pin D6 del lcd con el pin d6 del pic
#define LCD_DATA7 PIN_D7//comunica el pin D7 del lcd con el pin d7 del pic
#device adc=8
#FUSES NOWDT                //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT                  //No Power Up Timer
#FUSES NOPROTECT          //Code not protected from reading
#FUSES NODEBUG              //No Debug mode for ICD
#FUSES NOBROWNOUT        //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#use delay(clock=4000000)
#include <lcd.c> //incluye la configuracion del lcd en este documento
int8 valor;
void leerSensor(int sensor);
#int_RDA


void  RDA_isr(void) //configuracion de la interrupcion
{
       valor=getc(HOSTPC);   //toma el valor del dial del motor de labview
      leerSensor(0);
      leerSensor(1);
      leerSensor(2);
      leerSensor(3);

}
unsigned int8 tension;

//------Programa principal----------
void main(){
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_2 ( T2_DIV_BY_4, 249, 1);
   setup_ccp1(CCP_PWM);
   setup_comparator(NC_NC_NC_NC);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
   setup_vref(FALSE);

      lcd_init();                       //inicializo e lcd
      lcd_putc ("Electronic Tesis");    //escribo en el lcd
while (1){    
switch(Valor){
    case '0':
         set_pwm1_duty(0);
    break;
    case '1':
         set_pwm1_duty(35);
    break;
    case '2':
         set_pwm1_duty(54);
    break;
    case '3':
         set_pwm1_duty(81);
    break;
    case '4':
         set_pwm1_duty(108);
    break;
    case '5':
         set_pwm1_duty(135);
    break;
    case '6':
         set_pwm1_duty(162);
    break;
    case '7':
         set_pwm1_duty(189);
    break;
    case '8':
         set_pwm1_duty(216);
    break;
    case '9':
         set_pwm1_duty(249);
    break;
}

   }
   //TODO: User Code
}
void leerSensor(int sensor)         //
{
   set_adc_channel(sensor);         //
   delay_us(20);                    //espero 20 microsegundos
   tension=read_adc();              //
   printf("%c", tension);           //envia el valor de la tension
   delay_ms(80);                     //espero 80 milisegundos
}



« Última modificación: 01 de Octubre de 2010, 14:21:47 por robotic »

Desconectado jesalf

  • PIC10
  • *
  • Mensajes: 14
Re: como enviar y recibir datos en labview a través de proteus
« Respuesta #1 en: 11 de Octubre de 2010, 14:45:57 »
Hola Robotic,

No tengo a la mano el labview para probar tu código, pero yo por lo pronto dejaría las funciones leerSensor(n) fuera de la interrupción #int_RDA, yo he tenido problemas con esta interrupción cuando ejecuta un delay y en este caso tu tienes ocho.

ahora ¿cada cuanto tiempo envias el comando a través de labview a tu pic?

Saludos.