Leds controlados con Pic 16f877a y pwm

#1
Estoy realizando un proyecto de iluminación con leds y estoy utilizando el pwm del 16f877a para variar su intensidad luminosa, hasta ahora he tenido éxito en la programación, sin embargo, tengo entendido que el pic solamente me puede dar una corriente de salida máxima de 25mA y quisiera conectar en paralelo 8 leds a esta salida. Esto no es posible debido a que cada led consume una corriente de 20mA ¿Alguien sabe que puedo hacer para poder conectar los leds en paralelo y conservar el pwm del pic para variar la intensidad luminosa de los leds?
 
#2
lo mejor es hacer que el pwm haga conmutar un transistor, y el transistor active y desactive los leds asi podras activar todos los leds que quieras, tan solo tienes que elegir un transistor adecuado, que casi que te valdrá cualquiera porque 160mA es bastante poco. Lo mas sencillo es un bjt del tipo npn.
Un saludo
 
#3
Hey pablet, gracias de antemano por tu respuesta. Estuve investigando un poco a cerca del uso de
transistores para ver cómo podía hacerlo conmutar como lo mencionas, sin embargo, no se cómo conectar el transistor de tal manera que me permita seguir trabajando con los leds. Agradecería mucho si pudieras explicarme cómo.

Saludos
 
#4
hola lalo!! es muy facil, simplemente conecta una resistencia a la salida del microcontrolador, y eso lo conectas a la base del transistor. la resistencia que pongas ha de ser mayor a 220, ya que con una resistencia de 200 la intensidad que sale del micro son mas o menos 20mA, yo creo que con una de 1K funcionara, luego conectas el colector de transistor a VCC, y en el emisor conectas los leds, bien cada uno con su resistencia, o bien una resistencia para todos y a masa y ya esta.
Un saludo
 
#5
Muchísimas gracias Pablet, disculpa la demora al responder. Solamente te quería decir que conecte el circuito tal y como me lo dijiste y funciono todo a la perfección.

Saludos
 
#7
Hola soy nuevo en el foro y en verdad estoy aprendiendo a usar el programa basicpro pero siempre se me presenta algo mas que quiero hacer y entro creo poco a poco mas al tema amigos he echo el siguiente programa pero me sale errores no en compilacion si no que no funciona como quisiera el tema son la interrupciones y los timer no se como se usan eh visto ejemplos pero en verdad no se para que y como se usan me compre un libro dogan ibrahim es muy bueno pero no tiene mucha explicacion en este tema mi programa funciona asi p1 activa led1 por 1 seg p2 activa led2 por 1 seg pero si presiono los dos p1 y
p2 ala vez el led3 oscila 5 veces y se apaga hasta ahi esta todo ok pero le agreegado un led4 que mi meta es que se encienda cada 10 min por 20 min de encendido pero cuando hago esto los p1 y p2 se desabilitan y no funciona podria ayudarme para saber como usar los interruptores o si es en estos casos los timer este es mi programa podrian corregirme y saber como es la mejor manera de usarlos

Código:
led1 var portb.2 
led2 var portb.3 
led3 var portb.4 
led4 var portb.5 
p1 var portb.0 
p2 var portb.1 
x var byte 
i var word 

option_reg = $05 
on interrupt goto isr 
intcon = $A0 

inicio 
if (p1=0) AND (p2=0) then encender2 
PAUSE 200 
if p1=0 then encender 
PAUSE 200 
if p2=0 then encender1 
PAUSE 200 
goto inicio 

encender: 
high led1 
pause 1000 
toggle led1 
pause 1000 
goto inicio 

encender1: 
high led2 
pause 1000 
toggle led2 
pause 1000 
goto inicio 

encender2: 
for x=0 TO 4 
high led3 
pause 300 
low led3 
pause 300 
NEXT 
goto inicio 

DISABLE 
ISR: 
HIGH LED4 
PAUSE 300 
LOW LED4 
PAUSE 300
muchas gracias por su ayuda les agradesco anticipadamente
 
#9
alguien tiene un proyecto con leds rgb y pwm?? lo necesito urgente apenas estoy empezando en esto de los pic concretamente estoy trabajando con el 16f877a necesito un hex con este pic agradeceria mucho su aporte intente un monton de veces pero el proteus me lanza muchos errores que todavia no los entiendo del todo
 
#12
hola a todos, ps estoy empezando con estos temas, tngo un proyecto, dond se programó en microcode, el valor de la salida d es del rango d 0 a 100, y quiero sacar este valor mediante un pwm para poder regular la intensidad de un foco(con un dimmer) o la velocidad de un motor, pero esto dependiendo del valor que me arroje la salida, si alguien me puede ayudar, gracias d antemano.

el pic q estoy utilizando es el 16F877A
 
Última edición:
#14
una pregunta la salida ccp1 del pwm del pic se puede meter a algun circuito de potencia es que quisiera que la luminosidad de led se viera tambien en la lampara incandescente estoy usando el pic16f877a ya tengo el programa jalando que puedo hacer con la potencia alguien podria ayudar
 
#16
Como carlos lo menciona puedes utilizar un triac o SCR para conectar tu bombilla. La salida del pic la puedes utilizar como señal de control de dichos dispositivos.
 
#17
HOLA,
ESTA FORMULA LA ESTOY USANDO PARA EL PR2
PR2= (PeriodoPWM/(4*TOsc*M)-1

TOsc= 1/frecuencia del cuarzo
M=1/Preescaler del tmr2.
Preescaler usado es de 1

MIREN MI DUDA ES LA SIGUIENTE:

SE QUE EL PR2 TIENE QUE TENER UN VALOR MAXIMO DE 255 (FF), PERO QUIERO USAR UN PERIODO DE PWM DE 20ms Y MI CRISTAL DE CUARZO ES DE 20MHz, LA M=1.

AL DESPEJARLA DE LA FORMULA OBTENGO UN PR2 DE 99999.

EL CCP1CON TENGO ENTENDIDO QUE ES EL CICLO DE TRABAJO, ENTONCES AHI LE PONGO??? EL TIEMPO QUE QUIERO QUE TRABAJE O COMO LO OBTENGO???

SI ESTOY USANDO BIEN LOS DATOS O QUE PASA?, GRACIAS

el codigo que estoy generando es el siguiente:

__CONFIG _WDT_OFF&_PWRTE_ON&_HS_OSC&_LVP_OFF&_CP_OFF ; Configuración para el programador

LIST p=16F877A
INCLUDE <P16F877A.INC>
ORG 0x00

INICIO
clrf STATUS
clrf PORTC
bsf STATUS,RP0
movlw 0x06
movwf ADCON1
clrf TRISC
bcf STATUS,RP0
;PRINCIPAL DECLARACION DE PWM

movlw 0x04 ; -> esta parte no se como manipularla.
movwf T2CON
bsf STATUS,RP0
movlw 0x
movwf PR2
bcf STATUS,RP0
movlw 0x3F
movwf CCP1CON
movlw 0x0F
movwf CCPR1L

;TERMINACION DE PWM

PRINCIPAL



nop
goto PRINCIPAL


end
 
Arriba