El problema que tenés es que cada vez que
se queda esperando por la pulsación de un botón se queda ahí y deja de pasar
por las dos líneas. Si estás haciendo esto (detenerte en un punto del bucle
principal), te conviene usar interrupciones.
Otra cosa a tener en cuenta es que no se
debe poner 1 milisegundo de retardo porque sino cada ciclo del PWM tardará 256
milisegundos… o sea 1 cuarto de segundo, lo que se verá como un parpadeo.
Definitivamente, te recomiendo ver de poner esas dos líneas en una rutina de
interrupción (es lo más sencillo).
De:
electronica_desaplicada@...
[mailto:electronica_desaplicada@...] En nombre de Pablo Guillermo LOZANO
Enviado el: Sábado, 20 de
Septiembre de 2008 01:17
Para:
electronica_desaplicada@...
Asunto: Re: [E_Desaplicada]
PIC12F675 PWM
Mirko
He incertado las líneas que me has recomndado, pero no logro hacer que cada vez
que accione el pulsador NA conectado a GP3 (el led esta en GP1) aumente el
brillo. Si eres tan amable de mirar el fragmento del programa principal que lo
pongo a continuación:
void main()
{
char brillo;
char cuentabrillo;
unsigned char cnt;// contador
init ();//descativa comparadores y conversores ad
// Incialización
brillo = 255;
cuentabrillo = 0;
while ( TRUE ) //loop que hace que el programa se ejecute continuamente
{
// PWM LED en GP1
if (cuentabrillo++ == 0)
output_high( GP1 ); //enciende LED
if (brillo == cuentabrillo)
output_low( GP1 ); //apaga LED
// Incrementa brillo cada vez que se
ppulsa en GP3
for (cnt = 0; cnt <= 10; cnt++)
{
delay_ms(1);
if
(input(GP3) == 1)
cnt = 0;
}
brillo++;
for (cnt = 0; cnt <= 10; cnt++)
{
delay_ms(1);
if (input(GP3)
== 0)
cnt = 0;
}
}
}
Muchas gracias
Pablo
El día 18/09/08, Mirko
Serra <mirkoserra@...>
escribió:
Tenés que declarar una
variable:
char
brillo, cuentabrillo;
Y luego en el bucle del
programa principal o en una función de interrupción (la de algún timer) incluir
estas dos líneas:
if
(cuentabrillo++==0) PIN =
1; // Incrementa la cuenta, pone el pin en 1 cuando se
alcanza el 0.
if
(brillo==cuentabrillo) PIN
= 0; // Cuando la cuenta llega al valor deseado, cambia el pin a 0 nuevamente.
Donde PIN es, por
ejemplo GP0. Si vas a referir el LED a VCC en lugar de a masa, deberías cambiar
0 por 1 y viceversa para que cuanto más grande sea brillo más brillante esté el
LED. Luego, cambiando la variable brillo,
el brillo del LED será distinto.
Tené en cuenta que la
luminosidad percibida es logarítmica (por cómo funciona el ojo), así que
poniendo primero 128 en brillo y 255 luego, el
LED dará el doble de luz, aunque tu ojo va a ver un aumento del 30%.
Aún con el PWM, es necesario
el uso de un resistor en serie y un capacitor (el capacitor es opcional en el
caso del LED).
-----Mensaje original-----
De: electronica_desaplicada@...
[mailto:electronica_desaplicada@...] En nombre de
plozano74
Enviado el: Jueves, 18 de Septiembre de 2008 22:24
Para: electronica_desaplicada@...
Asunto: [E_Desaplicada] PIC12F675 PWM
Estimandos co-listeros:
Estoy aprendiendo a usar el
PIC12f675 programandolo en C con el
compilador de CCS.
Necesito generar una señal
de PWM para encender un led y variar su brillo.
Les quería pedir ayuda si
alguine ha realizado algo similar si puede
darme una mano con el
código, pues este microcontrolador no cuenta con
modulo PWM, y se debe
implementar en forma tradicional.
Saludos
Pablo
------------------------------------
*************************************************************
Direcciones Útiles:
Envió de mensajes: electronica_desaplicada@...
Subscribirse: electronica_desaplicada-subscribe@...
Desuscribirse: electronica_desaplicada-unsubscribe@...
Mensaje al Owner: electronica_desaplicada-owner@...
Para recibir ayuda: electronica_desaplicada-ayuda@...
Resumen diario: electronica_desaplicada-digest@...
Cancelar resumen diario: electronica_desaplicada-normal@...
Solo acceso Web: electronica_desaplicada-nomail@...
Pagina en Yahoo!: http://ar.groups.yahoo.com/group/electronica_desaplicada
*************************************************************
Enlaces a Yahoo! Grupos
<*> Para visitar tu
grupo en la web, ve a:
http://ar.groups.yahoo.com/group/electronica_desaplicada/
<*> La configuración
de tu correo:
Mensajes
individuales | Tradicional
<*> Para modificar la
configuración desde la Web, visita:
http://ar.groups.yahoo.com/group/electronica_desaplicada/join
(ID de
Yahoo! obligatoria)
<*> Para modificar la
configuración mediante el correo:
mailto:electronica_desaplicada-digest@...
mailto:electronica_desaplicada-fullfeatured@...
<*> Para cancelar tu
suscripción en este grupo, envía
un
mensaje en blanco a:
electronica_desaplicada-unsubscribe@...
<*> El uso que hagas
de Yahoo! Grupos está sujeto a
las
Condiciones del servicio de Yahoo!: