Problema con programa contador de monedas PIC16F873A

#1
Hola, soy José Luis, vengo a hacerles un cuestionamiento, espero puedan ayudarme.

Tengo un circuito, lo adjunto, está en Isis (Proteus), que se compone de un PIC16F873A,de 5 interruptores con optoacopladores y 4 displays de 7 segmentos.

La función del circuito es para un sumador de monedas, se supone que cuando pasa una moneda, interrumpe la luz en determinados optos, según el tamaño de la moneda; la moneda mas grande (en México es la de 10 pesos) bloquea los 5 optos, y la mas pequeña solo uno. Las monedas las simule en Isis con unos switches. Se deben ir sumando los valores, segun su tamaño, y mostrar la suma en un display.

El programa del PIC consta de varios módulos:
  • El que interpreta los valores que le mandan los sensores y los suma en un contador. ("Registro de monedas" en el *.asm que adjunto)
  • El que separa las unidades de las decenas de lo que está en el contador. ("Traspaso de contador a unidades y decenas" en el *.asm que adjunto)
  • El que toma los valores de las unidades y decenas y los despliega en los displays. (Toda la primera parte del *.asm que adjunto)

El tercero no es de mi autoría, lo saque de un código que ví en internet (si debo poner el enlace, solo diganme). Los otros 2 si, los hice como pude, jejeje.

Probé el primero en un circuito de un solo digito, y si los suma, o sea, si sirvió.
Probé el tercero con solo un interruptor, y tambien funcionó.

El problema es a la hora de juntarlos, ya que para hacer que el tercer modulo (que toma valores separados de decenas, unidades y centenas) funcione con el primer módulo (que guarda toda la suma en un solo registro, o sea, en binario) solo se me ocurrió hacerlo con el segundo módulo, pero no funciona. No logro ver porque el display solo muestra ceros en la simulación.

Espero haber sido claro.

Por favor, les pido amablemente que me echen la mano. Gracias.
 

Adjuntos

#2
Ya logré encontrar el problema, jejejeje, era algo muy tonto, jejejeje. Resulta que el módulo que convierte lo que hay en contador a unidades y decenas, usaba estas dos variables: "unidad" y "decena", y el módulo que las despliega en el display usaba estas otras dos: "UNIDADES" y "DECENAS", el módulo trabajaba bien, solo que como las guardaba en otro lugar, en las variables que usaba el módulo del display siempre había ceros.

Gracias, ya termine mi proyecto, aunque le hice algunas modificaciones, pero la simulación en el proteus sale bien. Al rato crearé otro post para ponerlo y explicarlo, y que quede para futuras referencias.

Saludos.
 
Última edición por un moderador:
#3
Buenos dias, el otro dia se me ocurrio hacer un contador con pic, pero no un contador comun y corriente sino un contador que, yo al ingresar un peso , el numero suba, osea que quiero al ingresar una moneda por ej o algo mucho mas liviano el contador suba de 1 en 1. esto es posible? vi muchos post de como hacer un contador sencillo pero quisiera hacerlo hasta 1000, y alguna ves vieron algo parecido? calibrarlo por peso? Muchas gracias , no busco la solución total, solo su opinion y alguna ayuda. Muchas gracias!
 
#5
Ya encontre la forma de hacer mi contador de tapitas hasta 10.000 , que era lo que quería saber arriba , ahora el problema es que cuando yo corte la alimentación el contador va a empezar de 0 ,o va a mantener el numero de tapitas contadas durante todo el dia? y hay alguna forma de que el pic recuerde ese numero y que cuando le des tension de nuevo siga contando a partir de ese numero
 

Adjuntos

Última edición por un moderador:
#6
Si el numero lo mantienes en RAM y le quitan la alimentacion, el PIC comenzara desde cero al dia siguiente...

La manera de solucionar eso es detectar que le estan quitando la alimentacion al PIC y en ese momento guardar el dato en la EEPROM, para recuperarlo al dia siguiente...
 
#8
Si el micro tiene memoria EEPROM para datos interna entonces solo es añadir un circuito que detecte que lo quieren apagar y las instrucciones en C....

Si no tiene EEPROM de datos entonces hay que añadir una externa o una bateria para mantenerlo corriendo en modo de bajo consumo
 
Arriba