Autor Tema: Problema con retardo en CCS COMPILER  (Leído 2417 veces)

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

Desconectado leotronik

  • PIC10
  • *
  • Mensajes: 10
Problema con retardo en CCS COMPILER
« en: 30 de Diciembre de 2012, 15:32:16 »
Buenas Tardes Colegas del Foro...

Mi problema es que necesito generar un retardo de un determinado tiempo dentro de un ciclo while(true)  el cual al llegar a una temperatura determinada me encienda un led durante un tiempo y después lo apague.
Mi codigo es el siguiente:

#include <16f877.h>
#device adc=10 //Usa resolución de 10 bits.
#use delay(clock=4000000)
#fuses xt,nowdt,noput,nobrownout,nolvp,noprotect
#include <lcd.c> //libreria q maneja la lcd 2x16
#use standard_io (D)

FLOAT T1,P1,P9,;//VARIABLES PARA LA LECTURA DE TEMPERATURA
INT16 Q1;//VARIABLE PARA LECTURA DEL ADC

 setup_adc (adc_clock_INTERNAL);
 setup_adc_ports (RA0_RA1_RA3_ANALOG);

MAIN ()
{
 lcd_init(); //Inicia LCD
  WHILE (TRUE)
   {

 
 set_adc_channel (0); //Elige canal a medir RA0
 delay_ms (100);
 Q1=read_adc (); //Hace conversión AD
 P1=(5.0*(Q1)) / 1024.0;

 setup_adc (adc_off);  //Apaga ADC

 T1=(P1*(100));



lcd_gotoxy(0,2);
lcd_putc(" ");
PRINTF(LCD_PUTC,"V1=%01.2f V2=%01.2f",P1,P9);
delay_ms (1);
lcd_gotoxy(0,1);
lcd_putc(" ");
PRINTF(LCD_PUTC,"T1=%01.0fß T2=%01.0fß",T1);
delay_ms (1);
 

 //Aquí esta mi duda es posible hacer esto para que el led se encienda por un tiempo de 2 segundos y se apague pero que no quede intermitente solo que encienda por un tiempo y se apague totalmente?
   if(T1>=35)
     {   
      OUTPUT_HIGH(PIN_D3);
       delay_ms(2000)
       OUTPUT_low(PIN_D3);
     } 


//
   }

}

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con retardo en CCS COMPILER
« Respuesta #1 en: 30 de Diciembre de 2012, 16:22:01 »
Y porque no? El problema esta en que es lo único que hará, pasado ese tiempo recién vuelve a testear la temperatura. Luego, si apagas el ADC, la segunda conversión no la puedes realizar, entonces para que lo apagas?


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado leotronik

  • PIC10
  • *
  • Mensajes: 10
Re: Problema con retardo en CCS COMPILER
« Respuesta #2 en: 30 de Diciembre de 2012, 18:27:56 »
Muchas Gracias por responder Suky..

Mira cometí un error en la linea  "setup_adc (adc_off);  //Apaga ADC" esa no va, porque la idea es que el programa siempre realiza la conversión y se pregunte por la condición que se encuentra dentro del if
El asunto es que cuando el sensor de temperatura llegue a la temperatura deseada se prenda un led durante un tiempo determinado, de 2 segundos podria ser, no se si esto sea posible ya que la condición esta dentro de un ciclo repetitivo while o si tendre que realizar un proceso aparte.

Espero haberme hecho entender muchas gracias por la ayuda.

Desconectado parametro51

  • PIC10
  • *
  • Mensajes: 10
Re: Problema con retardo en CCS COMPILER
« Respuesta #3 en: 30 de Diciembre de 2012, 20:46:43 »
Yo lo que haría para que solo se encendiera una vez el led sería activar un bit una sola vez si la temperatura es superior o igual a los 35º, poniendo ese bit como condición del if y desactivando dicho bit si la temperatura es inferior a 35.... de este modo cada vez que la temperatura supere los 35 grados te prende el led y no se vuelve a prender hasta que no baje de los 35....algo así:

int banderas;
#bit bit = banderas.0;
bit =0;
// Todo lo anterior fuera del bucle while

 if(T1>=35 && !bit)
     {   
      OUTPUT_HIGH(PIN_D3);
       delay_ms(2000)
       OUTPUT_low(PIN_D3);
       bit=1;
     }
else if (T1<35)
     {
       bit=0;
     }

Se nota que no soy experto y tendré algunos errores pero solo es una idea.

Suerte con tu proyecto

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Problema con retardo en CCS COMPILER
« Respuesta #4 en: 30 de Diciembre de 2012, 21:00:50 »
Muchas Gracias por responder Suky..

Mira cometí un error en la linea  "setup_adc (adc_off);  //Apaga ADC" esa no va, porque la idea es que el programa siempre realiza la conversión y se pregunte por la condición que se encuentra dentro del if
El asunto es que cuando el sensor de temperatura llegue a la temperatura deseada se prenda un led durante un tiempo determinado, de 2 segundos podria ser, no se si esto sea posible ya que la condición esta dentro de un ciclo repetitivo while o si tendre que realizar un proceso aparte.

Espero haberme hecho entender muchas gracias por la ayuda.

lo que quieres hacer es cuando el sensor alcance la temepratura encienda el led durante 2 segundos.... cierto?
y despues? que es lo que deseas seguir haciendo? lo mismo? que siga comprobando el valor de la entrada ADC y que avise que si pasa de esa temperatura vuelva a prender el led?
si eso es asi.... ya lo tienes... solo quita lo de setup_adc (adc_off)
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Problema con retardo en CCS COMPILER
« Respuesta #5 en: 30 de Diciembre de 2012, 22:07:26 »
Hola leotronic, entiendo que lo que quieres es más o menos lo que te sugiere parametro51. Puedes abreviar un poco el programa iniciando la variable tipo bit que en CCS se puede directamente así:

Código: [Seleccionar]
int1 bit=false;

// Lo anterior fuera del bucle while

 if(T1>=35 && !bit)
     {   
        OUTPUT_HIGH(PIN_D3);
        delay_ms(2000)
        OUTPUT_low(PIN_D3);
        bit=true;
     }
else if (T1<35)
     {
        bit=false;
     }

Saludos!

Desconectado leotronik

  • PIC10
  • *
  • Mensajes: 10
Re: Problema con retardo en CCS COMPILER
« Respuesta #6 en: 31 de Diciembre de 2012, 15:53:03 »
Muy buenas tardes Colegas..

Les tengo muy buenas noticias me ha funcionado lo que quería muchas gracias por sus aportes realmente son muy valiosos para resolver cualquier inquietud.

Muchas y muchas gracias.


 

anything