Autor Tema: Control de intensidad de luz de un led blanco  (Leído 12655 veces)

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

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Control de intensidad de luz de un led blanco
« Respuesta #15 en: 14 de Febrero de 2004, 02:15:00 »
Así es Norberto.

Además añade encima del primer delay_ms(2000):

output_bit(PIN_B0,0);
output_bit(PIN_B1,1);

... y encima del segundo delay_ms(2000):

output_bit(PIN_B0,1);
output_bit(PIN_B1,0);

adolfoadc

  • Visitante
RE: Control de intensidad de luz de un led blanco
« Respuesta #16 en: 26 de Febrero de 2004, 12:23:00 »
Ante todo daros las gracias a todos por vuestra ayuda,
mil gracias a POCHER por el programita ya estoy obligado a aprender C y lo mejor es que le he cogido el gustillo.
Os coloco el codigo ya depurado para un 12c508a, habia algunas cosillas que no me funcionaban, pero las consegui enmendar.

// Ejer30_5A.C
// El LED se enciende suavemente hasta el máximo y luego se apaga suavemente hasta cero

#include <12c508a.h>

//#fuses INTRC,NOWDT,NOMCLR,PROTECT
#use delay(Clock=4000000)

main()
{
int16 b;
int16 c;
int8 d;
int16 e;


setup_counters(RTCC_INTERNAL,RTCC_DIV_16);
//setup_timer_1(T1_DISABLED);
//setup_comparator(NC_NC_NC_NC);
//setup_vref(FALSE);
output_B(0x00);
set_tris_b(0x00);
b=0;
c=0;
e=255;
while(TRUE)
{
output_bit(PIN_B0,0);
delay_ms(2000);

while(b<255)
   {
     d=0;

       while(d<6)
//     set_timer0(50);
//     while(get_timer0()<220)
      {
      output_high(pin_B0);
      for(c=b;c!=0;c--)
      delay_us(2);

      output_low(pin_B0);
      for(c=e-b;c!=0;c--)
      delay_us(28);
      d++;
      }
   b++;
   }

output_bit(PIN_B0,1);
delay_ms(3000);

while(b>0)
   {
       d=0;
       while(d<6)
//     set_timer0(50);
//     while(get_timer0()<220)
      {
      output_high(pin_B0);
      for(c=b;c!=0;c--)
      delay_us(5);

      output_low(pin_B0);
      for(c=e-b;c!=0;c--)
      delay_us(25);
      d++;
      }
   b--;
   }
}
}


Una de las cosas que me fallaron fue el timer0, lo sustitui por una variable que hace repetir el ciclo las veces que uno quiera para que vaya mas rapido o mas lento la subida y la bajada, otro problema fue la operacion de c=255-b, cuando realizaba esta operacion me daba un c de 16bits, mayor que 255 que es el valor maximo que toman ambas variables(sin embargo en el 12F629 no tuve problemas con dicho valor y lo unico que no iba era el tmr0), al final cambie algunos valores del delay para los anchos de pulsos para obtener un efecto mejor, todo fue cuestion de probar.
Todo va como la seda y he decidido de ahora en adelante programar en C, joder si hubiese tenido que hacer esto en asembler me da algo y para cambiar cosas esto es una maravilla.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Control de intensidad de luz de un led blanco
« Respuesta #17 en: 26 de Febrero de 2004, 13:47:00 »
je, je a mí también me pasó eso, es como si cambiaras de ir en bici a ir en coche.

Me alegro que hayas podido adaptar el programa al micro que querías.

Un saludo

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Control de intensidad de luz de un led blanco
« Respuesta #18 en: 26 de Febrero de 2004, 14:09:00 »
Y como se dieron cuenta??

No entiendo porqué hace eso si está siempre dentro del rango para un byte.
Saludos desde Huelva (ESPAÑA)

adolfoadc

  • Visitante
RE: Control de intensidad de luz de un led blanco
« Respuesta #19 en: 03 de Marzo de 2004, 08:57:00 »
Lo probe en el mplab en modo sim, y vi que tardaba un monton en ir de la instruccion de encendido a la de apagado, luego fui mirando el valor de las variables en C y vuala, que leches es esto si c=255-b y b siempre esta entre 0 y 255, como puede ser que c=64238. Prueba del millon, y si añado otra variable que sea del mismo tipo que c (int16)?, pues que funciona perfectamente, la razon no la se pero la solucion si .

La verdad es que el simulador del mplab va bastante bien, casi se puede decir que es en tiempo real.