Autor Tema: PIC 16f628a Led brillo  (Leído 3843 veces)

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

Desconectado thekako

  • PIC10
  • *
  • Mensajes: 16
PIC 16f628a Led brillo
« en: 29 de Febrero de 2016, 10:55:06 »
Buenas, recurro a este foro para pedir ayuda, si es que alguien sabe como hacer para encender un led pero de a poco a traves del tiempo y una vez encendido apagarlo lentamente igual. Sé como hacer encender y apagar led, solo que se hagan lentamente a traves del tiempo no se como hacerlo, si es que existe alguna instrucción o se debe hacer electrónicamente. Programo en C con CCS.
« Última modificación: 01 de Marzo de 2016, 12:08:28 por thekako »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:PIC 16f628a Led encender
« Respuesta #1 en: 29 de Febrero de 2016, 11:13:21 »
Solucion: PWM

2 formas de hacerlo:

- Con el modulo Capture/Compare/PWM ( obviamente te deshabilita el capture y compare )
- Software. Timers ( interrupciones )

El PWM buscalo por internet hay formas de ondas, explicaciones, etc , pero basicamente es tenerlo un tiempito encendido y otro tiempo apagado. en el que el tiempo de (encendido + apagado) sea constante. Y lo que varia es el tiempo de encendido. Mientras mas tiempo de encendido tenes mas "brillo" va a tener tu Led, pensa que tu forma de hacer encender el led es como tener un tiempo de apagado de 0.

Si tenes una frecuencia ( 1/Tiempo de apagado+encendido ) lo suficientemente rapida, la persistencia visual le va a hacer parecer a la persona que nunca se apago, sino que varia su brillo.

Desconectado thekako

  • PIC10
  • *
  • Mensajes: 16
Re:PIC 16f628a Led encender
« Respuesta #2 en: 29 de Febrero de 2016, 14:15:27 »
gracias intentare hacerlo con pwm, algun programa base para guiarme? pls

Desconectado thekako

  • PIC10
  • *
  • Mensajes: 16
Re:PIC 16f628a Led encender
« Respuesta #3 en: 29 de Febrero de 2016, 16:54:00 »
hay algun tutorial que pueda seguir para cambiar paulatinamente a traves del tiempo el brillo del led? he buscado por todos lados y no encuentro nada parecido en c t.t

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:PIC 16f628a Led encender
« Respuesta #4 en: 29 de Febrero de 2016, 17:30:41 »
Pensa un momento....

Si usas el PWM, tenes que cambiarle el duty, asi que cada cierto tiempo tenes que hacer eso.

Si lo haces por software, al tiempo de encendido y apagado total, mientras mas encendido este mas brillo, si lo queres hacer "paulatinamente" entonces le vas aumentando ese ciclo positivo cada ves mas..

Mira algo simple ( aunque no es lo que deberias hacer ):

Código: C
  1. while(1)
  2. {
  3.    delay_ms(x)
  4.    output_high(PIN_xx);
  5.    delay_ms(50 - x)
  6.    output_low(PIN_xx);
  7.    ++i;
  8.    if(i==20)
  9.   {
  10.        x+=10;
  11.        if ( x == 60 ) { x = 0;}
  12.    }
  13. }


Desconectado thekako

  • PIC10
  • *
  • Mensajes: 16
Re:PIC 16f628a Led encender
« Respuesta #5 en: 01 de Marzo de 2016, 11:06:41 »
Hola estoy tratando de subir el brillo de a poco al  led pero no me funciona el programa, tengo esto: ¿qué está mal?, estoy simulando en proteus y no veo cambio alguno, solo prende el led

Código: C
  1. #include <C:\librerias\16F628A.h>
  2. #use delay(internal = 20000000)
  3. #fuses HS, NOWDT,PUT,BROWNOUT,NOMCLR,NOLVP,PROTECT,NOCPD
  4. #use fast_io(A) // estandar de entrada y salidas de los puertos, necesario para que funcione
  5. #use fast_io(B)
  6. #zero_ram
  7. int data=0,time=0;
  8. void main(){
  9.  
  10. set_tris_b(0b00000000);
  11. delay_ms(50);
  12. setup_timer_2(T2_DIV_BY_1,254,1);
  13. setup_ccp1(ccp_pwm);
  14.  
  15. while(1){
  16.    data=data+5;
  17.    if(data==255){data=0;}
  18.    delay_ms(10+time);
  19.    set_pwm1_duty(data);
  20.   }
  21. }

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:PIC 16f628a Led encender
« Respuesta #6 en: 01 de Marzo de 2016, 11:50:20 »
Disculpa que no pueda ser de mas ayuda. No programo en CCS, espero que alguno te pueda ayudar

Desconectado thekako

  • PIC10
  • *
  • Mensajes: 16
Re:PIC 16f628a Led brillo
« Respuesta #7 en: 01 de Marzo de 2016, 14:42:59 »
ah ok, muchas gracias de igual forma  :)

Desconectado thekako

  • PIC10
  • *
  • Mensajes: 16
Re:PIC 16f628a Led brillo
« Respuesta #8 en: 01 de Marzo de 2016, 16:52:06 »
Código: [Seleccionar]
Intente algo nuevo y nisiquiera prende RB3, no se si me falta agregar cosas al diseño de proteus... e hize todos los calculos que necesitaba 4kHZ y obtuve este codigo nuevo:

[code = c]#include "C:\\librerias\\16F628A.h"
#use delay(clock = 20000000)
#fuses HS, NOWDT,PUT,BROWNOUT,NOMCLR,NOLVP,PROTECT,NOCPD
#use fast_io(A) // estandar de entrada y salidas de los puertos, necesario para que funcione
#use fast_io(B)
#zero_ram

int16 data=0;
void main(){
 
set_tris_b(0b00000000);
setup_timer_2(T2_DIV_BY_16,78,1); //78 por formula desbordamiento timer2
setup_ccp1(ccp_pwm); // habilita el pwm
 
while(1){   
if (data==313){
data=0;
}
data=data+2;
set_pwm1_duty(data);
delay_ms(25);

}
   
}

y el proteus:

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:PIC 16f628a Led brillo
« Respuesta #9 en: 01 de Marzo de 2016, 19:30:51 »
Si quieres que se vea bien, tendrás que encender el led con una escala exponencial:
4, 7, 10, 15, 23, 34, 51, 76, 114, 171, 255
en cada paso se multiplica por una constante (no se suma)
Es mejor así porque el ojo ve los cambios de luminosidad de forma logarítmica, de manera que esa escala exponencial al ojo le parecerá lineal.

Un saludo.


 

anything