uControl
Abril 24, 2014, 11:23:37 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1] 2   Ir Abajo
  Imprimir  
Autor Tema: como encender un led en proteus con labview  (Leído 9672 veces)
0 Usuarios y 1 Visitante están viendo este tema.
robotic
PIC12F
**
Desconectado Desconectado

Mensajes: 135



« : Septiembre 21, 2010, 10:58:11 »

Hola amigos del foro después de haber estudiado un poco de labview, programación en C con el compilador ccs y proteus 7.7, he llegado a tratar de encender un led con labview en proteus con un pic 16f877a. si alguien tienen un archivo por ahi o que decirme la forma de enviar a través de un botón en labview con puerto usb un 1 y un 0, bienvenido sera. Gracias de antemano.
En línea
robotic
PIC12F
**
Desconectado Desconectado

Mensajes: 135



« Respuesta #1 : Septiembre 22, 2010, 12:53:19 »

Esto es lo que he avanzado lo hice con el puerto serial. en el visa write falta colocar algo que capte el dato del led y lo transforme en string, eso no lo se espero me puedan ayudar

En línea
robotic
PIC12F
**
Desconectado Desconectado

Mensajes: 135



« Respuesta #2 : Septiembre 22, 2010, 04:16:35 »

He logrado encontrar la solución al problema anterior y he puesto un booleano 0,1 que me transformo la señal verdadero y falso a 1 y 0 y ese numero lo transforme a string para poder enviarlo por el puerto serial (espero que le sirva a alguien que quiera hacer lo mismo),

ahora a tratar de averiguar como reconocer ese 1 y 0 que ya esta recibiendo el puerto serial (en el terminal virtual salen los 00011100111, cada vez que cambiaba el swith en el labview)  y hacer que encienda el led RB2 conectado al pic16f877A en proteus,

 supongo que tendré que hacer un código en el compilador ccs. bang
En línea
robotic
PIC12F
**
Desconectado Desconectado

Mensajes: 135



« Respuesta #3 : Septiembre 22, 2010, 07:10:39 »

Este es el codigo donde estoy trabajando para que prenda el led con la info del puerto rs232, espero que alguien me pueda ayudar

#include <proyecto2.h>
#int_RDA
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,stream=HOSTPC)
int8 dato;
void  RDA_isr(void)
{
  dato=getc();
  output_bit(PIN_B2,1);     
}

void main()
{
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   //TODO: User Code

}
« Última modificación: Septiembre 22, 2010, 07:12:28 por robotic » En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5423


Con Qt...


WWW
« Respuesta #4 : Septiembre 22, 2010, 07:58:53 »

En //TODO: User Code coloca un while(1){} para que se quede en ese bucle infinito, sino se resetea el microcontrolador.

Ahora en la interrupción, deberías colocar dato=getc(HOSTPC);.
Luego podrías hacer un if como para decidir que hacer según el dato que viene:

if(Dato==1){
    // ...
}else{
    // ...
}


Saludos!
En línea

robotic
PIC12F
**
Desconectado Desconectado

Mensajes: 135



« Respuesta #5 : Septiembre 22, 2010, 11:49:48 »

En //TODO: User Code coloca un while(1){} para que se quede en ese bucle infinito, sino se resetea el microcontrolador.

Ahora en la interrupción, deberías colocar dato=getc(HOSTPC);.
Luego podrías hacer un if como para decidir que hacer según el dato que viene:

if(Dato==1){
    // ...
}else{
    // ...
}


Saludos!
gracias he podido solucionar el tema...  Wink
En línea
robotic
PIC12F
**
Desconectado Desconectado

Mensajes: 135



« Respuesta #6 : Septiembre 24, 2010, 01:01:39 »

el codigo para hacer prender el led fue:

#include <proyecto2.h>
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,stream=HOSTPC)
char dato;

#int_RDA
void  RDA_isr(void)
          {
             dato=getc(HOSTPC);
             if (dato=='0'){  //si el dato es 0 apaga el led
                    output_bit(PIN_B2,0);     
             }
             if (dato=='1'){ //si el dato es 1 enciende el led
                    output_bit(PIN_B2,1);     
             }
}
 
void main()
{
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
 
   //TODO: User Code
 
while (True){}
 
}
 
 
si faltan codigos es porque estan en el .h que genera el compilador ccs, para eso tendrias que generar un nuevo proyecto en wizard y elegir el pic16f877a y darle al reloj 4 mhz Wink
En línea
robotic
PIC12F
**
Desconectado Desconectado

Mensajes: 135



« Respuesta #7 : Septiembre 24, 2010, 01:12:16 »

hola amigos del foro, ya que se logro prender un led la vez pasada con labview ahora lo intentare con 2 led, creo que dos sera la puerta para prender los led que queramos desde labview ya que solo se ira añadiendo cada uno, espero que esta información sirva a futuros novatos como yo intentando hacer funcionar el labview con el proteus, siendo el gran he importante mediador  el código C en el compilador ccs.
En línea
robotic
PIC12F
**
Desconectado Desconectado

Mensajes: 135



« Respuesta #8 : Septiembre 24, 2010, 01:22:12 »

hola aca estaria el proteus en donde no abria mas quie decir que estarian conectados  los  dos led en RB0 Y RB1


Aca esta el labview en donde falta colocar algo que haga enviar los datos de los dos led, si alguien lo sabe espero que lo pueda escribir aca.


y solo copiare esta parte del codigo c ya que es la misma de arriba y solo cambiaran los codigos que van debajo de void  RDA_isr(void) aunque le he colocado char me imagino que deberia ser int porque recive datos de 1 y 0 y eso es de tipo entero.

#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,stream=HOSTPC)
char dato;
#int_RDA
void  RDA_isr(void)
          {
             dato=getc(HOSTPC);
             if (dato=='0'){  //si el dato es 0 apaga el led
                    output_bit(PIN_B2,0);     
             }
             if (dato=='1'){ //si el dato es 1 enciende el led
                    output_bit(PIN_B2,1);     
             }
}

 

En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5423


Con Qt...


WWW
« Respuesta #9 : Septiembre 24, 2010, 01:39:52 »

Todo depende de como te comuniques con LabView. Si usas la manera más cómoda, enviar un byte para el estado de cada led, o dentro de un byte especificar el estado de hasta 8 leds.

En el primer caso preguntas por cada byte que recibes, pero claro hay que definir cuando se comienza a enviar datos, o sea un byte de Start.

Para el segundo caso, si no hay más de 8 leds, con solo recibir el byte, testeas sus bits (ayuda de CCS -> bit_test(...)) y cargas el estado en el pin del led.


Saludos!
En línea

robotic
PIC12F
**
Desconectado Desconectado

Mensajes: 135



« Respuesta #10 : Septiembre 24, 2010, 01:59:34 »

Para el segundo caso, si no hay más de 8 leds, con solo recibir el byte, testeas sus bits (ayuda de CCS -> bit_test(...)) y cargas el estado en el pin del led.
me parece mejor esta idea de recibir de un byte los 8 bit que serian cada led los cuales abria que asignarselo a cada pin.

este es el ejemplo que sale en la ayuda del ccs

if( bit_test(x,3) || !bit_test (x,1) ){        //ya sea bit 3 es 1 o el bit 1 es 0
}
if(data!=0)
for(i=31;!bit_test(data, i);i--) ;              // i ahora tiene el bit más significativo en los datos, que se establece en un 1

bueno segun el ejemplo del ccs me dice que
for(i=31;!bit_test(data, i);i--) ;  
i empieza en el bit 31 despues la condicion que pide es que se cumpla la variable bit_test y despues que baje el decremento hasta llegar al bit 0
« Última modificación: Septiembre 24, 2010, 02:16:36 por robotic » En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5423


Con Qt...


WWW
« Respuesta #11 : Septiembre 24, 2010, 02:12:40 »

retorno=bit_test(Variable, Nbit):

Variable, es el dato de 8-bits (En este caso) al cual se necesita testear el estado de un bit.

Nbit, es el numero de bit a testear, o sea para 8-bits varia entre 0 y 7.

retorno, estado del bit (0 o 1)

Saludos!
En línea

robotic
PIC12F
**
Desconectado Desconectado

Mensajes: 135



« Respuesta #12 : Septiembre 24, 2010, 02:25:01 »

retorno=bit_test(Variable, Nbit):

Variable, es el dato de 8-bits (En este caso) al cual se necesita testear el estado de un bit.

Nbit, es el numero de bit a testear, o sea para 8-bits varia entre 0 y 7.

retorno, estado del bit (0 o 1)

Saludos!
me gustaria entender a la primera pero no puedo  :)
el codigo tendria que quedar asi?

#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,stream=HOSTPC)
char dato;
#int_RDA

void  RDA_isr(void)
          {
             retorno=bit_test(Variable, Nbit;
             dato=getc(HOSTPC);
             if (Nbits1=='0'){  //si el dato es 0 apaga el led
                    output_bit(PIN_B0,0);    
             }
             if (Nbits1=='1'){ //si el dato es 1 enciende el led
                    output_bit(PIN_B0,1);    
             }
             if (Nbits2=='1'){ //si el dato es 1 enciende el led
                    output_bit(PIN_B1,1);    
             }
             if (Nbits2=='1'){ //si el dato es 1 enciende el led
                    output_bit(PIN_B1,1);    
             }
}
« Última modificación: Septiembre 24, 2010, 02:26:42 por robotic » En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5423


Con Qt...


WWW
« Respuesta #13 : Septiembre 24, 2010, 02:49:24 »

Un  ejemplo, quiero saber en valor tiene el bit3 de la variable Estados:

Código:
int8 Estados;

if(bit_test(Estados,3)==1){
    Led=1;
}else{
    Led=0;
}

Hay que leer, estudiar, ver ejemplos, practicas, hacer debug (En youtube hay vídeos de como se hace en proteus), para no depender tanto de otros.


Saludos!
En línea

robotic
PIC12F
**
Desconectado Desconectado

Mensajes: 135



« Respuesta #14 : Septiembre 24, 2010, 03:51:33 »

gracias por el ejemplo del codigo
« Última modificación: Septiembre 26, 2010, 06:18:36 por robotic » En línea
Páginas: [1] 2   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.19 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.135 segundos con 28 consultas. (Pretty URLs adds 0.01s, 3q)
loggkey