uControl
Agosto 20, 2014, 09:21:21 *
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  

La gente de Niple nos ofrece un descuento especial para usuarios de uControl.
Entérate de como puedes aprovechar esta oferta haciendo click aqui.

Súmate, y ayuda a uControl con tu participación en esta interesante oportunidad que nos oferece Niple.

Páginas: [1] 2   Ir Abajo
  Imprimir  
Autor Tema: como encender un led en proteus con labview  (Leído 10444 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: 5434


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: 5434


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: 5434


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: 5434


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

La gente de Niple nos ofrece un descuento especial para usuarios de uControl.
Entérate de como puedes aprovechar esta oferta haciendo click aqui.

Súmate, y ayuda a uControl con tu participación en esta interesante oportunidad que nos oferece Niple.

Páginas: [1] 2   Ir Arriba
  Imprimir  
 
Ir a:  


La gente de Niple nos ofrece un descuento especial para usuarios de uControl.
Entérate de como puedes aprovechar esta oferta haciendo click aqui.

Súmate, y ayuda a uControl con tu participación en esta interesante oportunidad que nos oferece Niple.

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.131 segundos con 29 consultas. (Pretty URLs adds 0.026s, 3q)
loggkey