funciones pic16f877a

Queria saber si puedo hacer que un pic16f877a tenga varias funciones en cada uno de sus puertos y que funcionen al mismo tiempo . ejemplo: por el puerto A quiero sacar una secuencia de luces con leds que ya esta definida, por el pueto B quiero hacer una multiplexacion de 3 displays que tambien ya esta definida y por el puerto C quiero hacer encender uno o dos leds a diferentes frecuencias , queria saber si es posible y como hacerlo
los tres programas ya estan definidos lo que quiero saber es como hacer que funcionen al mismo tiempo , espero pronto respuesta. gracias por anticipado.
 
depende de la complejidad de cada una de las tres rutinas.

Yo utilizaria interrupciones, con el timer0.

una interrupcion cada 20ms, cambiaria el displas, con un contador que cada 100 veces cambiaria los led del por A.

El tema del puerto C tienes dos soluciones uno es utilizando el timer1+comparador1 CCP1 o el PWM y generar los pulsos automaticamente
o añadirlo tambien al timer0


Las interrupciones son realmente interesantes, porque puedes dejar un trabajo a medias y luego continuar..

No te olvides de salvar el acumulador,status y demas.
 
si pudiera aclarar un poco seria ideal, yo tambien aclaro que las rutinas, en el puerto A solo hay tres leds y su rutina basica es la de un semaforo, cuando el led verde se prende en el puerto A , ahi quisiera que el puerto B donde estan los 3 displays multiplexados comienzen a funcionar con un pulso de 10 Hz , y ese pulso pensaba sacarlo del puerto C y conectarlo directamente a RB0 para poder hacer la multiplexacion, espero que me haya dejado ubicar , te agradeceria mucho si puedes recomendar algo mas .
 
Sergio Ureña dijo:
si pudiera aclarar un poco seria ideal, yo tambien aclaro que las rutinas, en el puerto A solo hay tres leds y su rutina basica es la de un semaforo, cuando el led verde se prende en el puerto A , ahi quisiera que el puerto B donde estan los 3 displays multiplexados comienzen a funcionar con un pulso de 10 Hz , y ese pulso pensaba sacarlo del puerto C y conectarlo directamente a RB0 para poder hacer la multiplexacion, espero que me haya dejado ubicar , te agradeceria mucho si puedes recomendar algo mas .

Es una aplicación perfectamente realizable con el pic que elegiste. Es más hasta te diría que es 'demasiado' para dicha aplicación.

No se si codificas en C o en ensamblador o en otro lenguaje, pero es muy probable que puedas hacer este software con un 16F871 el cual cuesta varias veces menos que el que acabas de seleccionar (eso es si quieres hacer algo para dejarlo para siempre, si es para experimentar el pic que elegiste te permitirá luego hacer cosas más complejas).

En cuanto a las sugerencias, no hay mucho para decir, solo que uses los timers, cualquiera está bien ya que tu aplicación al ser de variables lentas no requiere mucha destreza en el tema ni tienes que luchar con tiempos ajustados.

Si usas el timer 0 tu aplicación será más facil de migrar a otros pics más pequeños porque en los más pequeños no estan todos los timers que tiene el pic16.

Como dato importante fijate de configurar bien los puertos como salida.

No has sido claro en eso de que los 3 programas estan bien definidos... es código de alguien mas? Si es así, como hace los retardos? por simples esperas? SI es por simples esperas, estarás en problemas de enlazar uno detras de otro ya que deberás tener en cuenta que las esperas se sumarán.

Lo más cómodo es hacer cosas con un timer, que todas las rutinas hagan referencia a él y uses una variable como contador. Al llegar dicha variable a un valor deseado, cambias la salida.

Por ej. Si el timer se ejecuta cada 10 mseg, y tu debes parpadear a 10Hz , el contador irá hasta 5 y una vez que llega a 5, tu lo pones a 0 y cambias la salida (a encendido o apagado depende cual sea el caso). De esa forma tendras estos cambios cada 50mseg y habrás hecho 10 encendidas y apagadas completas en 1 seg.

Lo mismo es aplicable para el resto de las rutinas.

Saludos
 
Atrás
Arriba