Foros de Electrónica

Comunidad de discusión sobre Automatización, Electrónica industrial, Microcontroladores y electrónica digital, Robótica, Domótica, Telemática, Tecnologías móviles, y muchos temas más.




funciones pic16f877a


       



#1  funciones pic16f877a
Sergio Ureña
Ubicación: Bolivia
Registrado: 25 Jul 2006
Mensajes: 27
citar
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.

#2  
tiopepe123
Colaborador
Ubicación: Barcelona (Espanya)
Registrado: 14 May 2006
Mensajes: 2878
citar
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.

#3  
Sergio Ureña
Ubicación: Bolivia
Registrado: 25 Jul 2006
Mensajes: 27
citar
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 .

#4  
maunix
Colaborador
Ubicación: Cordoba, Argentina
Registrado: 22 Oct 2005
Mensajes: 649
citar
Sergio Ureña escribió: 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

 Responder





 Otros temas de interés 
No hay mensajes nuevos Convertir de Puerto Paralelo a USB
No hay mensajes nuevos Como adquiero la señal de 20 sensores por un mismo puerto?
No hay mensajes nuevos Interface IrDA para el puerto serial
No hay mensajes nuevos Puerto infrarrojo IrDA para PC
No hay mensajes nuevos Activar registro del puerto paralelo

Foros de Electronica
|| Cuestiones Elementales de Electrónica || Fuentes de alimentacion || Circuitos de radio || Diseño de circuitos en general ||
|| Sistemas de Audio: Preamplificadores, Ecualizadores || Amplificadores || Reparación || Discusión ||
|| Microcontroladores y sistemas embebidos || Circuitos logicos combinacionales y secuenciales || Interfaces y Programacion || Dudas en general || Sistemas de Video || PC Hardware || Telematica y comunicaciones || Tecnologias moviles || Software Electronico || Robotica, Domotica y Mecatronica || Autotrónica || Automatizacion, Electronica industrial y de Potencia || Documentacion, circuitos y esquemas || Donde Las Ideas Convergen... || Tutoriales y Manuales || Proyectos Prácticos ||