# Comunicación serial con labview



## miguelantua (May 4, 2012)

buenas tardes a todos, soy estudiante de ing electrónica soy nuevo en labview y debo usar la comunicación serial con max232 y un pic18f452, debo usar una interface con labview para ver la grafica de temperatura y presión. solo se que hay que usar el visa serial pero no se mas agradezco quien me pueda orientar


----------



## lpnavy (May 4, 2012)

primeramente tienes que hacer que tu pic haga una comunicacion perfecta en tu pc lo puedes hacer desde proteus usando el emulador de puerto seria COMPIN para que se comunique al hiperterminal, si el envio de datos es bien procedes a diseñar tu interfaz en labview, usando el VISA, aqui hay una forma basica de como hacer la conexion.


----------



## ruben90 (Nov 17, 2016)

Hola, voy a exhumar este tema. Realice la comunicación de un microcontrolador PIC a mi Laptop mediante comunicación RS232-USB (adaptador). Utilizo el LabVIEW para graficar la temperatura de un componente durante una hora, todo perfecto hasta aquí.

Estoy utilizando lo típico, un sensor LM35 y el módulo ADC del uC. Pero ahora debo monitorear dos temperaturas diferentes con sus respectivas gráficas. Por el momento solo tengo los diagramas y códigos para un sensor ya que no encuentro la lógica para adjuntar el otro.

Alguien tendrá una idea o documentación para cumplir mi cometido, gracias.

*Diagrama LabVIEW para graficar un sensor LM35,*





*Diagrama en PROTEUS 8,*





*Código en MikroC,*

```
unsigned int adc_value = 0;
unsigned int      ms_1 = 0;
unsigned short    temp = 0;
unsigned short  second = 0;
char error = 3;

float resolution = 0.0;
float temp_value = 0.0;

void interrupt(void) { [B]//Delay de 1ms con TMR0[/B]
if(T0IF_bit == 1) {
TMR0 = 0x06;
     ms_1++;
if(ms_1 >= 1000) {
   second++;
   ms_1 = 0;
} T0IF_bit = 0;
}
}

void temperature() {
ADON_bit = 1;
delay_us(40);
  GO_bit = 1;
while(GO_bit == 1) {
} adc_value = (ADRESH << 8)
             + ADRESL + error;
       resolution = 2.5/10.23;
       temp_value = resolution * adc_value;
temp = temp_value;
}

void main(void) {
PORTA = 0;
PORTB = 0;
PORTC = 0;
TRISA = 0x09;
TRISB = 0;
ANSEL = 0x09;

ADCON0 = 0x80;
ADCON1 = 0x90;
ANSELH = 0;

   SPBRG = 12; [B]//Velocidad de 9600 bps[/B]
SPEN_bit = 1;
TXEN_bit = 1;

  ms_1 = 0; [B]//Resetea Delay[/B]
second = 0;

OPTION_REG = 0xD2;
    INTCON = 0xA0;

while(1) {
temperature(); [B]//Calcula temperatura...
[/B]
if(TRMT == 1 && second >= 1) { [B]//Cada 1 seg envía inf.[/B]
TXREG = temp;
  second = 0;
} while(!TRMT);

}
}
```


----------



## ruben90 (Nov 18, 2016)

Bueno, encontré la solución. Aquí lo dejo por si alguien lo requiere,


```
[B]unsigned int[/B] adc_value = 0;
[B]unsigned int[/B]    mseg_1 = 0;
[B]unsigned short[/B] temp,second;

[B]char[/B] error = 3;
[B]char[/B] text [20];
[B]float[/B] resolution = 0.0;
[B]float[/B] temp_value = 0.0;

[B]bit[/B] letra;

[B]void[/B] interrupt([B]void[/B]) {
if(T0IF_bit == 1) {
TMR0 = 0x06;
   mseg_1++;
if(mseg_1 >= 1000){
   second++;
 mseg_1 = 0;
}  T0IF_bit = 0;
}
}

[B]void[/B] temperature([B]void[/B]) {
ADON_bit = 1;
delay_us(40);
  GO_bit = 1;
while(GO_bit == 1) {
} adc_value = (ADRESH << 8)
             + ADRESL + error;
       resolution = 2.5/10.23;
       temp_value = resolution * adc_value;
temp = temp_value;
}

[B]void[/B] main([B]void[/B]) {
PORTA = 0;
PORTB = 0;
PORTC = 0;
TRISA = 0x0B;
TRISB = 0;
ANSEL = 0x0B;

ADCON0 = 0x80;
ADCON1 = 0x90;
ANSELH = 0;

   SPBRG = 12;
SPEN_bit = 1;
TXEN_bit = 1;

OPTION_REG = 0xD2;
    INTCON = 0xA0;

[B]while[/B](1) {
temperature();
ByteToStr(temp, text);

[B]if[/B](TRMT == 1 && second >= 1) {
        UART1_Write_Text(text);
[B]if[/B](!letra) { UART1_Write(0x41);
             CHS0_bit = 1;
    } [B]else[/B] { UART1_Write(0x42);
             CHS0_bit = 0;
} TXREG = 0x0D;
       letra++;
 second = 0x00;
} [B]while[/B](!TRMT);
  delay_us(10);
}
}
```


----------

