TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: xootraoox en 23 de Enero de 2006, 02:06:00
-
bueno eso necesito generar un pwm por software ya que necesito al menos 9 fuentes independientes de pwm
si alguien tiene idea de como seria lo mas efectivo.... agradesco enormemente
desde ya muchas gracias
-==XooTRAooX==-
-
Hola xootraoox, seria interesante que nos especifiques que frecuencia necesitas para el PWM, ya que no es lo mismo para una de 500 Hz que para otra de 100 KHz.
Puffffffffff si que son mucho ) salidas de PWM, yo creo que deberías de trabajar con el TMR para que en el momento de la interrupción por desborde se coloquen todas las salidas en alto, y luego a medida que determinado BIT dentro del TRM se coloque en 1 se genere una rutina que compare el valor actual del TMR con el valor del registro de la salida correspondiente, después de la comparación se decide si a esa salida le colocamos un 0 o continua en 1.
Sé que este método es algo complicado y lento de procesar pero por el momento es lo único que se me ocurre.
Suerte
Atte. CARLOS
-
La verdad es que no se bien la frecuencia que he de necesitar.... lo que si es para controlar la intensidad de iluminacion de leds rgb.... Uds. me podrian aconsejar la mejor frecuencia del pwm para controlar leds???
-
Hola xootraoox, en realidad los LED no son tan exigentes como algunos otros componentes a la hora de seleccionar una frecuencia para el PWM
Si partimos de que el LED con una frecuencia de 50 Hz ya no se le nota el parpadeo, podemos decir que a partir de esta frecuencia podemos seleccionar cualquiera, pero mi consejo seria que selecciones una entre las 100 Hz y los 500 Hz, porque teniendo en cuenta que tu debes generar el PWM por software esta frecuencia te permitirá no tener tan ocupado el micro para esta función.
Atte. CARLOS
-
muchas gracias Chaly29 espero alguien tenga una idea de como inplementar una buena rutina para este proposito ya que no se me ocurre de como poder controlar los 9 pwm"s al mismo tiempo, se agradece de antemano
-==XooTRAooX==-
-


esto de controlar un par de leds se me esta complicando mas de la cuenta......
alguien a tratado de controlar leds RGB que me pudiese hechar un cable, ya que me esta volviendo loco este asunto........
todo lo que necesito es generar un pwm por software, por lo cual he leido bastante y lo que mas se asemeja es al contol de varios servos pero no he podido crear la rutina adecuada aun... si alguien tiene idea de como quenerar un pwm por software que pueda variar su duty cycle de 0% a 100%, se lo agradeceria enormemente que me diera una pista
desde ya me despido agradecido en espera de un Byte caritativo
-
Microchip tiene una app de generacion de pwm por software, pero en asm.
La cantidad de canales pwm por software creo necesariamente requiere que los pwm esten desfasados unos con otros.....ahora, sobre la frecuencia, habria que considerar el tiempo de retencion del ojo humano...unos 1/20 seg creo que es...
Si no se usan los timers por hardware, habria que considerar necesariamente registros por decremento para cada pwm y los registros de estado de cada timer para recordar los valores previos y determinar los valores de recarga....
Interesante proyecto xoox.....si usas un chip tipo 18F452 creo tienes 4 timers y 2 pwm, incluso el 877 trae 3 trmX y 2 pwm tambien creo.....podrias multiplexar estos timers de modo comun para los 9 pwm teniendo los registros de estado para cada pwm...la rutina isr_tmrX debiera chequear cual fue el primer pwm ejecutado y asi sucesivamente, para despues cargar los tmrX con los valores correspondientes. Me imagino que el tmr0 asignado al 1,4,7 pwm, el tmr1 al 2,5,8 y el tmr2 al 3,6,9..
Solo una idea
Cuentanos como te va
Saludos
-
Pues si... todos los PWM_SOFT que he encontrado estan en ASM aunque he tratado de comprender algunos no he tennido buenos resultados, el ultimo que trate de hacer trabajar hasta el momento es uno que estaba en ASM y lo he tratado de pasar a C pero sin resultados positivos.... aunque si hubiese trabajado en realidad no me hubiese serbido en realidad ......
lo que si estuvo bien serca de trabajar fue un codigo de RedPic es cual es para manipular un servo por rs232 el cual trabajo en parte, pero estaba de lo mejor cuando me salio humito de la cabeza y lo borre de pura rabia por no poder dominar un simple led.........
bueno estuve conversando un poco por el MSN con el Amigo Chaly29 el cual fue muy agradable la conversacion pero no pudimos llegar a nada ya que el trabaja solo en ASM y yo en C....... pero por lo demas le explique un poco de lo que trata esto......... lo cual es para controlar una cantidad inmensa de leds RGB para darles la aplicacion de iluminacion ambiental.....
por otra parte agradesco tu comentario amigo piclutor ya que es muy buena tu idea de repartir el trabajo entre los 3 TIMERS disponibles, pero tengo una duda.... que pasa si es que por casualidad llegase a desbordar 2 o los 3 timers al mismo tiempo???? como se comportaria el pic ante las 3 interrupciones pidiendo servicio........ bueno espero no se gran problema y el C se encargue de eso
Una vez mas muchs gracias por los comentarios
-
Por eso te decia que deben estar desfasados, ahora, si usas los PIC18452, que hay en VICTRONICS, esos traen prioridades en la respuesta a interrupcion, de modo que puedes asignar importancia a un timer respecto de otro.(la programacion en C es absulutamente facil de traspasar de un 16 a un 18, total el compilador se encarga la parte maquina).....por ultimo, me parece que los timers por hadware no se detienen cuando hay una interrupcion, entonces eso significa que si se desbiorda el tmr0, el tmr1 sigue contando, eso te da bastante tiempo...ahora, como CCS redunda un poco en los codigos, quizá debieras contar muy bien los ciclos que genera el C al pasar al ASM, con eso ya debieras tener claro los ciclos que se ocupan entre cada atencion de interrupcion.
El codigo de microchip de pwm por software, es absolutamente copiable y adpatable a otras aplicaciones...si se trata de mas timers, solo habria que hacer la ruitna de ajuste....claro que en ASM la cosa es bastante dura, cierto?......bueno...cuentanos como te va......
Si tengo tiempo vere algo de como hacerlo en C......pero no aseguro nada
Chavela
-
muchas gracias piclutor..... tratare de ver si puedo obtener algo.....
NOTA: piclutor te he enviado un PV para hacerte una preguntilla espero lo puedas leer, Gracias
-
yo intentaria programar un timer para que desborde, por ejemplo, cada 100us y con la ayuda de variables y registro iria sumando desbordes hasta alcanzar el tiempo que cada pwm necesite.. seria algo asi:
#int_timer0
pwm1++;
if(pwm1==tiempoprender1) prederpwm1; pwm1=0;
if(pwm1==tiempoapagado1) apagarpwm1
pwm2++;
if(pwm2==tiempoprender2) prederpwm2; pwm2=0;
if(pwm2==tiempoapagado2) apagarpwm2
pwm3++;
if(pwm3==tiempoprender3) prederpwm3; pwm3=0;
if(pwm3==tiempoapagado3) apagarpwm3
entonces si el pwm1 oscila a 50Hz con un duty de 50% es un ciclo de 20ms, 10ms encendido y 10ms apagado.. seteas tiempoprender1=200 (20ms si tengo una base de 100us) y tiempoapagado1=100 (10ms)... con esto arranca el PWM1 a los 20ms inmediatamente el contador se va a cero, cuando este llegue a los 100, o sea 10ms despues, el PWM1 se apaga, este continua apagado hasta los 200 (10ms despues) y asi continua el ciclo..
Con este metodo podes poner todos los PWM que quieras dependiendo de la velocidad del micro y la resolucion o tiempo de desborde del timer.. Este metodo seria una especie de multitarea..
Si no necesitas mas precision creo que seria mejor setar desborde cada 1ms, 2ms o hasta 5ms, para que el micro tenga mas tiempo de ocuparce de otras cosas sin perder desbordes..
Esto se me ocurrio recien asi que no esta probado y solo es para dar un idea !!!!!!!!!
Saludos Mariano..
-
Sí, creo que esta solución de mirazulado es la más adecuada, aunque aporto un par de matices:
1) Puesto que todos los PWM funcionarán a la misma frecuencia pero con distinto duty, todos los PWM se podrían encender a la vez, y luego sólo tener en cuenta el momento de apagado.
2) Para llegar hasta 9 distintos, quizás sea bueno manejar un array con los duty y hacer la comparación en un bucle, en lugar de tener que escribir 9 líneas if
-
ufffff......... bueno despues de tanto probar y probar...... Por fin he dado con una solucion bastante aceptable

.... resulta que buscando y buscando me encontre con un pdf de la microchip el cual aparte de estar bastante interesante para aplicaciones con motores DC, hay un diagrama de flujo (pag. 21) el cual trata de un pwm por soft.... la cosa es que lo vi y me puse a programarlo.... y en menos de 7 minutos ya estaba trabajando a la perfeccion lo que yo necesitaba, bueno despues de 10 minutos adaptando algunas cosillas ya tengo el pwm por soft de 100 pasos de intensidad osea de 0% a 100% con resolucion de un 1%, mas que ideal para lo que yo lo necesito.
adjunto el pdf asi como el soft que dio la conclusion de todo esto asi como tambien 10 kilos de agradecimientos para todos los que aportaron su granito de arena....
Enlace al PDF Mensionado
Enlace al codigo
-
bueno aqui coloco un par de fotitos del resultado de la aplicacion de los 3 PWM"s, espero les gusten......







-
Que bueno, me alegro, se ve espectacular.
Te recomiendo amigo tambien postees tus resultados y codigos, puesto que todos tratamos de apoyarnos unos con otros, de modo que la ayuda es colaborativa. Si no es asi, este foro no tiene sentido.
Saludos
-
Cita:
adjunto el pdf asi como el soft que dio la conclusion de todo esto asi como tambien 10 kilos de agradecimientos para todos los que aportaron su granito de arena....
Enlace al PDF Mensionado
Enlace al codigo
esta todo puesto ya..... tanto el codigo como el pdf en el que me base para hacerlo.....
-
Perfecto..disculpa,...me estoy volviendo ciego...
http://ww1.microchip.com/downloads/en/AppNotes/00654a.pdf
Tambien está recomendable..
Saludos
-
Hola xootraox.
He estado fisgoneando el código y me parece que solo sirve para controlar un solo LED por pwm.
¿Como haces para controlar de forma independiente los 3 diodos de las fotos?
Un saludo
PD. ¿Cuanto vale un LED de estos?
-
Vi lo mismo....parece que usa un dispositivo a la vez...probando distintos tonos...de paso...donde encontraste tamañas cositas????
Existe por ahi la pagina del master 2005???
-
exacto pocher el programa antes puesto, solo controla un led pero esa era mi finalidad..... saber como generar un pwm por soft... ademas comento que ya lo he probado con 18 PWM al mismo tiempo y comparando los tiempos de desface en el osciloscopio entre el primero y el ultimo la verdad es que no lo noto..... sera que no hay desface????? y sera que es tan eficiente??? ya que ademas estoy usando los conversores A/D y comunicacion serial a 19200 b/s, todo corriendo solo a 4Mhz y todo trabaja de maravillas.... yo pense que se iba a sobrecargar el micro pero, la verdad es que el micro hace como si nada.... todo a la perfeccion......
bueno adjunto una modificacion del codigo la cual si controla 3 PWM"s y crea unos patrones para generar una gama de colores impresionantes con tan solo 1 led RGB... Tambien adjunto un par de videos para que vean como va lo del control por RGB.....
Codigo que crea un patron con led RGB y muestra el porcentaje de duty_cycle de cada les por el puerto serie
VIDEO 1
VIDEO 2
NOTA: EL LED SE ENCUENTRA DENTRO DE UNA PELOTA DE PING-PONG, A LA VEZ EL VIDEO ESTA BASTANTE POBRE DE CALIDAD, ASI COMO TAMBIEN AL OJO HUMANO SE VE BASTANTE MEJOR EL EFECTO, QUE DELANTE DE UNA CAMARA
-
Bueno esta es una foto de el led que se encuentra dentro de la pelota de PING - PONG.... bueno creo que esta demas decir pero por si alguien no lo sabe es solo un led que produce tres colores (RED - GREEN - BLUE(R-G-B)) es por eso que lleva 4 pines (R, G, B y GND)
-
Escrito originalmente por xootraoox
exacto pocher el programa antes puesto, solo controla un led pero esa era mi finalidad..... saber como generar un pwm por soft... ademas comento que ya lo he probado con 18 PWM al mismo tiempo y comparando los tiempos de desface en el osciloscopio entre el primero y el ultimo la verdad es que no lo noto..... sera que no hay desface????? y sera que es tan eficiente??? ya que ademas estoy usando los conversores A/D y comunicacion serial a 19200 b/s, todo corriendo solo a 4Mhz y todo trabaja de maravillas.... yo pense que se iba a sobrecargar el micro pero, la verdad es que el micro hace como si nada.... todo a la perfeccion......
bueno adjunto una modificacion del codigo la cual si controla 3 PWM"s y crea unos patrones para generar una gama de colores impresionantes con tan solo 1 led RGB... Tambien adjunto un par de videos para que vean como va lo del control por RGB.....
Codigo que crea un patron con led RGB y muestra el porcentaje de duty_cycle de cada les por el puerto serie
VIDEO 1
VIDEO 2
NOTA: EL LED SE ENCUENTRA DENTRO DE UNA PELOTA DE PING-PONG, A LA VEZ EL VIDEO ESTA BASTANTE POBRE DE CALIDAD, ASI COMO TAMBIEN AL OJO HUMANO SE VE BASTANTE MEJOR EL EFECTO, QUE DELANTE DE UNA CAMARA
Esimado xoot...a esta altura ya eres un maestro del pwm x software y de los RGBs...Bueno, decir que no se si los videos estan mejores o el codigo...que es super claro y secuencial...asi como repites las funciones, podrias repartir pwm hasta onde alcance las patillas del pic.....
Por otro lado, el color está dado por la frecuencia, por eso es que reduces el periodo a fin de aumentar la frecuencia....y la intesidad dada por el duty cicle..de modo que este lo aumentas para que el led vaya viendose mas intenso...
TMR0 lo cargas con 156, osea 256-156=100...cada 100 ciclos o 100 us se desborda...usando 4 MHz tenemos una frecuencia de 10Khz.....mientras que los duty disminuyen casi a 10 ms (un poco mas debido a la rutina isr_rtcc)
Muy, muy interesante...yo pensaba que el TMR0 lo ibas a utilizar como fuente de duty y frecuencia, pero veo que lo utilizas solo para efectos de interrupcion para completar los ciclos...
Podrias contarnos un poco de como funcionan estos vichos
Felicitaciones.
-
¿Qué tal están de luminosidad esos leds?, supongo que dentro de la pelota de ping pong no se verán con la luz encendida, ¿no?
Muy chula la aplicación, xootraoox.
-
Si señor, un programa sencillo y fácil de entender, como me gustan a mí. Automático y manual.
Gracias por compartirlo.
-
bueno con respecto a la luminosidad del led es bastante buena ya que incluso con la pelota de ping-pong se ve bastante claro a la luz del dia... lo que si los leds salen bastante costosos (1000 pesos chilenos + iva = 1200 pesos osea un poco mas de 2 usd), sin la pelota de ping-pong el led es capaz de casi escandilar la camara se podria decir ya que mantiene el balance de luminocidad de mi camara en constante trabajo... coloco un video en donde muestro por un costado al led trabajando por si solo.....
a la vez vuelvo a aclarar que en el video se ve bastante mal, pareciera que pasara de un color a otro bruscamente, pero como dije anteriormente es solo producto de la camara, hay que verlo trabajar para ver el verdadero efecto que se produce.
NOTA: el video esta hecho a plana luz.... la obscuridad que se observa es por la intensidad luminica irradiada por el led que ajusta el balance de blanco bajandolo casi al extremo....
Enlace al video
-
WOW..cualquiera diria que filmaste a un OVNI...jajaajaja
Envía el vídeo a la NASA !!!!!
Muy bueno....
PD: yo creo que lo mas caro es la pelota de PING-PONG
Chavela
-
Hola xootraoox, me e puesto a programas un poco en .asm y ya conseguí los tan ansiados 9 PWM, el programa no es muy complejo o sea que alguien que entienda los 2 idiomas podría llegar a traducirlo a C, en realidad lo realice de forma básica para que la traducción resulte más sencilla y con eso sacrifique un poco de memoria de programa, ya que sé que se puede reducir en una buena extensión el código, pero resultaría mas difícil de comprender para el traductor.
Las características son un poco diferentes al código que tu me as pasado por e-mail ya que este solo controlaba 1 salida por ves, o sea que nunca el PWM llegaría a un ciclo 100% efectivo, como este código provoca un desfasaje en el control de las salidas solo tendrá un duty-cicle máximo de 33.3%. En el programa que yo realice esto anterior no pasa ya que todas las salidas son controladas a la ves, por lo tanto están todas en fase y se consigue un duty-cicle máximo del 100% en todas las salidas.
Por otro lado después de realizar el programa, me e dado cuenta que para realizar varias rutinas de encendido distintas y seleccionarlas por medio de un pulsador, será necesario el uso de una memoria externa la cual tendrá que disponer en su interior las variadas secuencias de encendido para luego que el PIC leyendo de la misma pueda ejecutarlas, esto te lo comento por que recién después de que termine el control de las 9 salidas me e dado cuenta que para producir un ciclo con 10 pasos y un solo ciclo de encendido son necesarias 90 posiciones de memoria, por lo que para poder disponer de varios ciclos diferentes y de mas pasos no habrá PIC que le entre toda esta información dentro.
La frecuencia del PWM es de aproximadamente de 100 Hz con un cristal de 4 MHz para cada una de las salidas, la resolución es de 0-100, con esto ya se logra que el escalonado entre un duty-cicle y el próximo no sea notado por el ojo, así tampoco como la frecuencia de conmutación. O sea que para la vista resulta agradable y sin cambios bruscos.
El programa no esta terminado, lo que ya esta andando y probado es para que realice una sola secuencia de 10 pasos (la secuencia esta almacenada en la memoria de programa del PIC en forma de tabla) y el uso de 2 pulsadores para subir o bajar la velocidad del cambio de paso. Por lo que faltaría que en ves de estar en el PIC la secuencia, que lo lea de una memoria y el control de los 2 pulsadores para el cambio de secuencia.
Si alguien se siente capas de poder hacer la traducción al C le paso el .asm para que se guíe y luego lo pueda postear aquí para que todos dispongamos de esto.
Bueno, me e cansado de escribir
, espero que esto les sea de utilidad.
Suerte
Atte. CARLOS
-
Estimado Chaly29 en realidad no tienes por que preocuparte.... ya esta todo solucionado y con una eficiencia muy buena......... con decirte qeu un patron que he puesto que no es corto, he ocupado un poco mas alla de un kilo con los mensajes por rs232 y todo por lo que con los 4 kilos de memoria que tiene el 16f874 lo mas bien podria hacer como 50 patrones predeterminados.... sin consumirme cantidades de memoria en tablas...
-
Hola a todos,
bueno aki estoy nuevamente acomplejado con este mismo tema.... resulta que el codigo que logre hacer trabajar, funciona muy bien pero el problema es que me gustaria hacer que el pwm fuese de 8bits, cosa que no he podido realizar... en otras palabras lo que necesito es que el ajuste se realize de 0 a 255, no como el caso del anterior que era de 0 a 100.... a lo que mas he llegado es de 0 a 185 aproximadamente y de hay en adelante se comienza a ver un parpadeo en el led.... que se ve muy mal.
bueno la idea de esto es para poder ajustarme al CODIGO RGB con el cual teoricamente se puede alcanzar hasta 16.777.216 convinaciones de colores, la cual esta dada por un digito en hexadecimal de 24bits, por ejemplo el blanco es el 0xffffff, en codigo RGB en donde cada byte corresponde a un color en si... por lo que el blanco en decimal corresponde a 255 de rojo, 255 de verde y 255 de azul, en mi caso si puedo generar el blanco con el codigo que yo tengo pero la idea mia es cubrir toda la gama rgb a 24bits....
bueno espero me puedan hechar una mano ya que yo se que es posible hacerlo, pero por mas que he intentado al momento no he conseguido llegar a los 8bits de resolucion por color, todo tipo de ideas son bienvenidas y agradecidas.
-
Xoot..
Tu estas aumentando la frecuancia a lo largo de tu programa..esto significa que tu resolucion se reduce consecuentemente.....y como el RTCC no lo utilizas como fuente de pwm, bastaria creo que utilices variables int16. y con ellas manejar tus tiempos...
Quiza podrias aumentar la velociad del cristal..
Bueno, solo es una idea
Chavela
-
Hola xootraoox, mi programa lo realice para que el duty-cicle este entre 0-100 pero no tiene inconvenientes en correr entre 0-255, lo realice en los valores que te comente por el echo de tener una relación de porcentaje de encendido, nada mas, con solo cambiarle un valor (el de 100 ponerlo en 255 ) dentro del programa se soluciona.
Por otro lado,50 patrones en 4K a menos que los patrones sean de 7, 8 u 9 pasos no te entrarán, saca bien la cuanta, cada paso integrante de un patrón consume 9 bytes, como harías para meter 50 patrones de un largo considerable en solo 4K de memoria y eso sin contar el programa.
Espero que tengas suerte.
Atte. CARLOS
-
bueno quizas con un cristal de 20Mhz podria llegar a hacerlo pero el micro que estoy usando (16f874) no se lo que le pasa....no me trabaja con mas de 4Mhz se queda pegado sin hacer nada.....
ademas yo se que se puede a 4Mhz y quisiera que asi fuera ya que se me han ocurrido algunas cosas y quiero agregarselas al micro y para eso lo hare trabajar a 20Mhz pero quiero asegurarme de que a 20M me va a trabajar sin problemas el PWM, por lo que si alguien tiene idea
de como poder hacerlo se lo agradesco de antemano......
-
Hola Chaly29 sera posible ver el programa que haz hecho tu para ver si lo puedo pasar a C??? si es posible hazmelo saber porfavor.... desde ya te lo agradesco.
-
Hola xootraoox, en este link e colocado el programa:
http://miarroba.com/foros/ver.php?foroid=348538&temaid=4133394
Como ya e explicado el programa se puede mejorar, tanto en capacidad, como en rendimiento, el código es básico para que se entienda fácil.
Por otro lado ya esta reformado para que la resolución del PWM sea de 0-255, en la tabla se encuentra un pequeño patrón de 10 pasos, se puede modificar para que ocupe todo el rengo de PWM porque en este caso solo llega asta 100.
Suerte, si necesitas ayuda házmelo saber
Atte. CARLOS
-
Te lo he estado provando en el simulador para 255 y sin patrones, solo con el avance y retroceso de las 6 teclas (1 solo RGB) y funciona perfectamente. En principio has hecho esta prueba físicamente?
-
exacto fisicamente es como se producen los parpadeos....... bueno eso es debido a los tiempos nada mas, ya que en estos momentos lo estoy probando a 20Mhz y se ve impecable...... de 0 --> 255 sin ningun salto raro......
lo que si se me esta haciendo un problema en estos momentos es poder trabajar con enteros de 24 bits para poder escribir cadenas RGB (255,255,255), pero para eso habrire un nuevo tema para no mezclar dos cosas y quede mas estructurado todo....
de todos modos agradezco todos los comentarios.....
-
Bueno este es solo para mostrarles lo que he estado haciendo con el control RGB.... el cual lo voy a poder configurar desde el puerto serial..... todabia me falta bastante pero ya esta funcional al 50% se podria decir.... apenas resuelva unos problemitas que he tenido estara totalmente funcional este bicharraco
-
Hola xootraoox:
Qué programa usas para programar?, y el lenguaje?
Es Visual C++ ?
Un saludo
gONzAO
-
Hola gONzAO es solo visual basic, ya que se me complico mucho el C++ a la hora de el puerto serial es por eso que me decidi por el visual basic...
-
Bueno, aunque con meses de retardo, he querido aportar algo que funcionaría en un PIC16F84A. La frecuencia sería de unos 50 Hertz. Cuando se presiona un pulsador, la frecuencia baja unos microsegundos pero el efecto es inapreciable. Ahí va el código:
/*
* Nombre del proyecto:
LED multicolor
* Autor
jirardiyo
* Descripción:
LED tricolor que reproduce 256^3 colores (algo más de 16 millones)
El color se controla con seis pulsadores
El LED se conecta a 1, 2 y 3 del puerto A y a GND
Los pulsadores van conectados al puerto B, patillas de 0 a 5
El LED tricolor se puede sustuir por tres LEDs, rojo, verde y azul.
* Diseñado para:
MCU: PIC16F84A
Tarjeta: Hay que construirla
Oscilador: XT, 04.0000 MHz
Compilador: mikroC v5.0
*/
#define rLED PORTA.F1
#define gLED PORTA.F2
#define bLED PORTA.F3
#define rPulUp PORTB.F0
#define rPulDw PORTB.F1
#define gPulUp PORTB.F2
#define gPulDw PORTB.F3
#define bPulUp PORTB.F4
#define bPulDw PORTB.F5
void main() {
unsigned char i, rValue, gValue, bValue = 0;
PORTA = 0b00000000; // LEDs apagados
TRISA = 0b11110001; // salidas: RA1 ~ RA3
PORTB = 0b11111111; // ningún pulsador accionado
TRISB = 0b00111111; // pulsadores: RB0 ~ RB5
while(1) {
if(i==0) {
if(rValue > 0) rLED = 1;
if(gValue > 0) gLED = 1;
if(bValue > 0) bLED = 1;
}
else {
if(rValue == i) rLED = 0;
if(gValue == i) gLED = 0;
if(bValue == i) bLED = 0;
}//endif(i==0)
if(rPulUp == 0 && rValue < 254) rValue++;
if(rPulDw == 0 && rValue > 0) rValue--;
if(gPulUp == 0 && gValue < 254) gValue++;
if(gPulDw == 0 && gValue > 0) gValue--;
if(bPulUp == 0 && bValue < 254) bValue++;
if(bPulDw == 0 && bValue > 0) bValue--;
i++;
}//endwhile(1)
}
la programación va un poco a lo bruto, pero así se entiende mejor.
Saludos cordiales.
-
He enconntrado una página que aborda la construcción de un montaje que viene al pelo: http://www.best-microcontroller-projects.com/rgb-led.html
Saludos cordiales.
-
saludos amigo..
ya se que es un poco tarde ..pero alguien aun tiene el codigo de nuestro amigo Charly29.. para generar el los tres PWM para el led RGB... quisiera darle un vistazo..porfa si alguien lo tiene..pasenlo..que el enlace que nuestro amigo puso ya no funca
bueno esperare.. y gracias por todo :-/