TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: fastyx en 19 de Mayo de 2006, 11:26:44
-
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...
-
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
-
gracias mauricio lo voy a implementar y luego te cuento...
-
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!!!
-
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
-
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?
-
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
-
ahora entendi :-/
el contador se incrementa con cada desbordamiento...
tengo una negacion con las interrupciones...voy atener que ir al analista :D
gracias !!!!