Sistema rudimentario de semaforos [16f628 - rs232]

Buenas gente del foro ...

Quería venir con este proyecto terminado pero no he sido capaz de hacerlo funcionar correctamente.

Resulta pues que me encomendaron realizar un sistema de semáforos que muestre un contador regresivo sobre el supuesto tiempo para que cambie. La idea es tener microcontroladores que se hagan cargo de mostrar el conteo y se comuniquen entre sí para sincronizar los conteos que hacen y los cambios de las luces.

En primer lugar, consulté si es posible comunicarse usando el estándar rs232 con el pic16f84 (ya que priori sabia que carece de modulo UART USART, o como sea que se llame :p) supuestamente si, pero tuve excesivos dolores de cabeza tratando de hacer que recogiera datos por lo que desistí de usarlo y me pasé para el 16f628 que si tiene, pensando de nuevo que me sería mas fácil, y que tiene oscilador interno entre otras cosas por lo que el puerto a y b me quedarían completamente libres.

Ahora que adapté el programa resulta que lo mas simple que es mostrar el contador resulta que no funciona. :| Parece ser que debo tener alguna clase de configuración adicional que desconozco, del oscilador o del puerto la verdad no se.

En este momento, esta cosa se compone de dos pics que se comunicarían mediante rs232, en donde uno de ellos haría el conteo regresivo mediante dos 74ls47 y enviaría este dato al otro y si cambia de luces enviaría algo para identificar este estado (un 100 para rojo y 101 para verde) ya que el contador debería poder contar hasta 99 (supuestamente 1 min y 30 segs mas o menos, el tiempo y su exactitud no son un factor importante).

Por favor observar que hay una formulita tonta para pasar correctamente los valores numéricos a los BCD. El código, esquema (en proteus) y demás los podrán encontrar en el archivo adjunto y su funcionamiento en el vídeo youtube.

Obvio que es muy probable que encuentren brutalidades y cosas que no deberían ser en el código por lo que me disculpo ya que no soy conocedor de ccs (compilador que estoy usando) y tampoco se mucho de estos bichos del infierno (los uC).

Entonces el código funcionaba excelente con el 16f84 simulando en proteus. Pero ahora el valor de la decena no se muestra como debería, muestra un número que no corresponde. Si se fijan en el bcd hay unos colores grises que no se que significan.

Alguna tontería será por desconocimiento, pero he buscado y tratado de todo y aun no funciona por lo que agradecería si me echasen un cable.


Espero que al menos sirva de guía para otras cosas.

Por cierto, si observan los caracteres de la terminal virtual verán que tampoco corresponden pero esto es harina de otro costal :p
 

Adjuntos

  • contador.rar
    53.5 KB · Visitas: 16
RA5 solo puede ser configurado como entrada nunca como salida :|

RA4 salida de colector abierto, debe usarse una resistencia pull-up :|

Sigo con mi matadero de cabeza.
 
Al final tuve que cambiar por completo el sistema operando todo desde un pic principal que envia pulsos de conteo y el estado de las luces.

Los demás PICS reciben los datos mediante interrupción y según sea el caso hacen su conteo o su cambio de luz respectivamente.

Si a alguien le interesa puedo poner mas información.

Salu2
 
Bueno resulta pues que muchas de las cosas que había hecho estaban mal enfocadas, leyendo leyendo fui encontrando soluciones a cada problema que se me iba presentando.

Pues bien este es el resultado de 3 semanas de trabajo, soy no0b entenderán :LOL:


Este sistema se compone de:

1. Pic programador que permite cambiar la cantidad de semáforos o líneas de paso (max 4). 16f877
2. Pic maestro que envia los conteos y controla el estado de los semaforos. 16f877
3. Pic esclavo que recibe los datos los codifica y multiplexa para mostrarlos en 2 display de 7 segmentos, mediante 2 74ls47. (16f628).

Los datos se comunican de pic a pic mediante rs232 y el programador usa un display 16x2 para mostrar un menú de programación al usuario.

Eso es todo.
 
Última edición:
Atrás
Arriba