desktop

Comunicación serial con labview

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
 
Última edición:
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.
 

Adjuntos

  • Dibujo.JPG
    Dibujo.JPG
    25.8 KB · Visitas: 76
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,
ejfy2u.jpg

Diagrama en PROTEUS 8,
2q8y5hz.jpg


Código en MikroC,
Código:
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);

}
}
 
Última edición:
Bueno, encontré la solución. Aquí lo dejo por si alguien lo requiere,

Código:
[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);
}
}
 

Adjuntos

  • Sin título.jpg
    Sin título.jpg
    37.1 KB · Visitas: 19
Atrás
Arriba