Autor Tema: duda sobre quien maneja las variables  (Leído 1558 veces)

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

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
duda sobre quien maneja las variables
« en: 01 de Marzo de 2006, 19:19:00 »
tengo una duda: cuando en un for colocamos por ejemplo i=0;i<100;i++
el incremento o decremento en la variable i en que velocidad se desarrolla y de que depende(supongamos que i es int8)

desde ya graciasssss!!!!!!!!!!

Desconectado grouchy

  • PIC10
  • *
  • Mensajes: 39
RE: duda sobre quien maneja las variables
« Respuesta #1 en: 01 de Marzo de 2006, 22:25:00 »
Escrito originalmente por fastyx
tengo una duda: cuando en un for colocamos por ejemplo i=0;i<100;i++
el incremento o decremento en la variable i en que velocidad se desarrolla y de que depende(supongamos que i es int8)

desde ya graciasssss!!!!!!!!!!


Hola.
Bueno cuando estas ejecutando una rutina con FOR, el tiempo de ejecucion depende, primero de la frecuencia de oscilacion del micro, y segundo de las rutinas o instrucciones que se esten ejecutando dentro del ciclo de FOR, si lo que que quieres hacer son retardos con un tiempo especificado, hay instrucciones que lo hacen como delay_us, delay_cycles o delay_ms. Podrias ser un poco mas especifico en tu pregunta Sonrisa

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
RE: duda sobre quien maneja las variables
« Respuesta #2 en: 02 de Marzo de 2006, 05:08:00 »
bueno...
el tema es que por ejemplo en este caso yo estoy manejando pwm a traves de una entrada analogica(an0) y con un potenciometro vario el duty ya que defini el
set_pwm1_duty(read_adc())

ahora,mientras en el main se ejecuta esta instruccion ,tambien coloque un while (true) para que se encienda un led y se apague como testigo de funcionamiento.

cuando coloco delay en los tiempos del led,al miro como varia el pwm en el osciloscopio,al mover el potenciometro varia pero a saltos,mientras que si elimino
del main la instruccion sobre el led,el pwm se mueve al compas del pote,sin saltos

por eso es que queria armar algun conteo para el led que no dependiera de los delay, ya que porduce el efecto indeseado sobre el pwm

el pic que uso es un 16f873

#include <16F873.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT, xt, PUT, NOPROTECT, NOBROWNOUT, LVP, NOCPD, NOWRT, NODEBUG

#ZERO_RAM

// VARIABLES
// definiciones básicas



#byte porta= 0x05
#byte portb= 0x06
#byte portc= 0x07

#byte trisa= 0b10000101
#byte trisb= 0b10000000
#byte trisc= 0b11100001

#bit  tmr1if= 0x0C.0
#bit  tmr1on= 0x10.0

#bit  led = 0x07.5
#bit  led1= 0x07.6
#bit  led2= 0x07.7

main(){

while(true)

{
int16 i;

int16 valor;
valor=read_adc();
set_tris_c(0000000);
i=0;


  // setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DIV_BY_1,255,1);
   setup_adc_ports(AN0_AN1_VSS_VREF);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_ccp1(CCP_PWM);
  // set_adc_channel(0);
   set_pwm1_duty(read_adc());



while (i<30000)i++ ; led1= 1; led= 0 ;

 while (i>0) i-- ; led1= 0; led= 1 ;

}//while
}// main

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
RE: duda sobre quien maneja las variables
« Respuesta #3 en: 02 de Marzo de 2006, 06:26:00 »
Hola fantasyx!

Si no me equivoco tu programa hace lo siguiente:

1 - Configuras AD y utilizas el PWM.
2 - Led1 ON
3 - Led   ON

Hasta que vuelvas a utilizar otra vez el AD y el PWM el pic se quedará procesando el incremento que le haces a la variable "i" para controlar los leds.

No sería mejor esto??? Mira a ver que te parece.


Codigo:
main()
{
   int LedOn=0
   int16 i=0;
   int16 valor=0;
   set_tris_c(0000000);

   valor=read_adc();

   // setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DIV_BY_1,255,1);
   setup_adc_ports(AN0_AN1_VSS_VREF);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_ccp1(CCP_PWM);
   // set_adc_channel(0);

   while(true)
   {       
      set_pwm1_duty(read_adc());
      i++;

      if(i==30000 && LedOn==1)
      {
         LedOn==0;
         i=0;
      }

      if(i==30000 && LedOn==0)
      {
         LedOn==1;
         i=0;
      }

      if(LedOn==1)
      {
         led1= 1;       led= 0;
      }
      else
      {
         led1= 0;      led= 1;
      }
   }//while
}// main  


De esta forma, aunque un poco más lioso, los leds estarán un rato encendidos, otro rato apagados y... tus conversiones serán muy veloces puesto que se hacen de forma casi consecutiva.


Bueno... no se si me he explicado muy bien, si tienes alguna duda avisa que me empleo más a fondo jeje.


Un saludo desde Alicante

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
RE: duda sobre quien maneja las variables
« Respuesta #4 en: 02 de Marzo de 2006, 06:42:00 »
gracias .... lo voy a probar  a ver como se ve en el osciloscopio

la idea es que ningun bailoteo de los led testigos influyan en el rendimiento de la velocidad de cambio en el pwm,ya que despues de este ensayo pienso sacar el pote y colocar en an0 un lm35 para sensar temperatura