Autor Tema: como puedo armar una funcion para encender unos leds y que otros parpadeen?  (Leído 3113 veces)

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

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Amigos: estoy tratando de hacer una funcion pero no sale...
el asunto es 8 leds inicialmente prendidos por poner a todos los pines digamos del puerto b a 0 ,y reflejar la salida en el puerto c. hasta ahi todo bien :D...ahora en lugar de apagar el led seleccionado ,hay que hacerlo titilar,o sea cuando el pin del puerto a esta en 0 el correspondiente del puerto c que esté prendido,pero cuando el pin de puerto a pase a 1 que comience a titilar,luego se elige otro led y ese deja de estar encendido y parpadean los 2 elegidos,y el resto prendidos...asi hasta elegir todos.
desde ya gracias...
« Última modificación: 19 de Mayo de 2006, 11:28:43 por fastyx »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: como puedo armar una funcion para encender unos leds y que otros parpadeen?
« Respuesta #1 en: 19 de Mayo de 2006, 19:16:47 »
Amigos: estoy tratando de hacer una funcion pero no sale...
el asunto es 8 leds inicialmente prendidos por poner a todos los pines digamos del puerto b a 0 ,y reflejar la salida en el puerto c. hasta ahi todo bien :D...ahora en lugar de apagar el led seleccionado ,hay que hacerlo titilar,o sea cuando el pin del puerto a esta en 0 el correspondiente del puerto c que esté prendido,pero cuando el pin de puerto a pase a 1 que comience a titilar,luego se elige otro led y ese deja de estar encendido y parpadean los 2 elegidos,y el resto prendidos...asi hasta elegir todos.
desde ya gracias...

Podrias usar un timer , el cual dispare el flag del timer por ejemplo cada 50mseg (asi no titila tan rapido).
Al detectar el flag encendido, incrementas un contador.  Si el contador es > 2 luego contador = 0.

Entonces

1) Lees el Puerto A
2) Si el pin 'a1' esta en 0, dejas el pin correspondiente c1 encendido.
3) Si el pin 'a1' esta en 1, entonces te fijas
3.a) Si contador = 0, dejas prendido el pin c1
3.b) Si contador = 1 , apagas el pin c1
4) Pruebas para el siguiente pin
5) Si está encendido el flag del timer, va a la rutina de incremento del contador
6) Vuelve a 1)


De esta forma si algún pin del puerto a, se pone en 0, hará que el pin quede encendido. 
Si esta en 1, hará parpadear su salida correspondiente en el puerto C. 
Si vuelve a 0, la rutina hará que lo mantenga encendido.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: como puedo armar una funcion para encender unos leds y que otros parpadeen?
« Respuesta #2 en: 21 de Mayo de 2006, 10:18:24 »
gracias mauricio lo voy a implementar y luego te cuento...

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: como puedo armar una funcion para encender unos leds y que otros parpadeen?
« Respuesta #3 en: 22 de Mayo de 2006, 14:50:48 »
te hago una pregunta: a que velocidad va a contar el contador de 2? eso no determinaria el tiempo de encendido y apagado del led?

me confunde con los 50 mseg del timer

desde ya gracias!!!

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: como puedo armar una funcion para encender unos leds y que otros parpadeen?
« Respuesta #4 en: 22 de Mayo de 2006, 15:23:36 »
te hago una pregunta: a que velocidad va a contar el contador de 2? eso no determinaria el tiempo de encendido y apagado del led?

me confunde con los 50 mseg del timer

desde ya gracias!!!

Al encenderse el flag del timer que uses (por ej. TMR1IF).  La variable contador siempre será 0 o 1, ya que al ser >= 2 lo deberás poner en 0.

He visto que puse > 2, bueno debiera ser >= 2.

Si el timer está configurado para desbordar cada 50mseg entonces el contador variará cada 50 mseg.

Espero haberme explicado.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: como puedo armar una funcion para encender unos leds y que otros parpadeen?
« Respuesta #5 en: 22 de Mayo de 2006, 18:09:31 »
haber si entendi: el contador hasta 2 cuenta en el 100% de la duracion hasta que desborda el timer: o sea que si hubieses puesto el timer desbordando a 500mseg la cuenta de 1 se haria a los 250 mseg y la del 2 a los 500 mseg en que se pondria de nuevo a 0.

es esto correcto?

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: como puedo armar una funcion para encender unos leds y que otros parpadeen?
« Respuesta #6 en: 22 de Mayo de 2006, 18:33:49 »
haber si entendi: el contador hasta 2 cuenta en el 100% de la duracion hasta que desborda el timer: o sea que si hubieses puesto el timer desbordando a 500mseg la cuenta de 1 se haria a los 250 mseg y la del 2 a los 500 mseg en que se pondria de nuevo a 0.

es esto correcto?

No, no es correcto.

1) El contador inicia en 0
2) Si configuras el desbordamiento a 500mseg ,  entonces el flag del TMR1IF se activará a los 500Mseg.  Al detectar el flag incrementas el contador --> contador = 1 y apagas el TMR1IF. 
3) Rutina de E/S.  Si contador=1 --> Apagas el pin a la salida si el pin de entrada está en 1.
4) Luego al volver a ocurrir el desbordamiento (ocurrieron otros 500mseg) y el flag TMR1IF se encendió.  Apagas el flag TMR1IF. Vas a incrementar el contador --> contador = (contador+1) = 2 , luego como la condicion es si contador >= 2 --> contador=0 vuelve el ciclo
5) Rutina de E/S.  Si contador=0 --> Dejas encendido el pin encendido.


Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: como puedo armar una funcion para encender unos leds y que otros parpadeen?
« Respuesta #7 en: 23 de Mayo de 2006, 08:00:02 »
ahora entendi :-/
el contador se incrementa con cada desbordamiento...
tengo una negacion con las interrupciones...voy  atener que ir al analista :D

gracias !!!!


 

anything