TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: FJPPitta en 13 de Octubre de 2011, 19:25:47

Título: Contador de 10 digitos
Publicado por: FJPPitta en 13 de Octubre de 2011, 19:25:47
Hola que tal, necesito hacer un contador de 10 dígitos y ando en ideas para armarlo,

Las necesidades:

Contar de 0 a 1,999,999,999
Poder utilizar el número del conteo para visualizarlo en un LCD o mandarlo a una computadora

Se me ha ocurrido usar la variable long y pues

1.- ¿quisiera saber si es una buena idea?

ya que así puedo guardarlo en una variable de 32bits y poder manejar el resultado, ahora bien

2.- ¿se puede guardar este resultado en la EEPROM?

De antemano gracias por cualquier consejo que pudiera servir por pequeño que sea.
Título: Re: Contador de 10 digitos
Publicado por: fabianjsm en 13 de Octubre de 2011, 20:21:25
Para representar diez mil millones en base binaria se necesitan 34 bits.
5 bytes de EEPROM (40 bits) serían más que suficientes para guardar la cuenta.
Una de las tantas soluciones sería una variable de 32 bits y otra de 8.
---
Edito: se necesitan solo 31 bits:
 Log(1.999.999.999)/Log(2) = 30.9 -> 31 bits
32 serán suficientes   :lol:
Título: Re: Contador de 10 digitos
Publicado por: jhozate en 13 de Octubre de 2011, 20:39:13
se necesita contar hasta 1999.999.999 con una variable int32 es suficiente. Un int32 son 4bytes, serian tambien 4bytes de eeprom...no?
Título: Re: Contador de 10 digitos
Publicado por: MGLSOFT en 13 de Octubre de 2011, 21:00:23
Asi es, segun el lenguaje que utilizes trabajaras mas o menos para guardar ese dato.
Supongo que el dato no debe ser guardado hasta apagar el micro, no??
La eeprom de los micros solo se puede grabar entre 1 y 10 millones de veces y despues muere, si cuentas continuamente y grabas, ademas de lento puede suceder que mates la eeprom.
Título: Re: Contador de 10 digitos
Publicado por: FJPPitta en 13 de Octubre de 2011, 21:14:38
Gracias por sus comentarios

Para representar diez mil millones en base binaria se necesitan 34 bits.
5 bytes de EEPROM (40 bits) serían más que suficientes para guardar la cuenta.
Una de las tantas soluciones sería una variable de 32 bits y otra de 8.


Solo seria hasta 2mil millones por eso pense en la variable de 32bits.

se necesita contar hasta 1999.999.999 con una variable int32 es suficiente. Un int32 son 4bytes, serian tambien 4bytes de eeprom...no?

Así según yo debe bastar con esos 4bytes

Asi es, segun el lenguaje que utilizes trabajaras mas o menos para guardar ese dato.
Supongo que el dato no debe ser guardado hasta apagar el micro, no??
La eeprom de los micros solo se puede grabar entre 1 y 10 millones de veces y despues muere, si cuentas continuamente y grabas, ademas de lento puede suceder que mates la eeprom.

Quiero utilizar C es con el que mas me adapta a la hora de programar, fíjate que no había considerado los ciclos de la EEPROM si tienes razón si guardo a cada rato pues se va a ir pronto, se me ocurre solo cuando se apague el micro osea poner como que una forma de detectar que se va le alimentación y que la ultima instrucción sea guardar el dato y apagarse así cubriría los apagones accidentales y los reglamentarios.

En cuanto a lentitud pues si en 500ms logro escribir a EEPROM me bastara o eso creo  :)

Ahora estoy armando un borrador simple para ver si funciona la idea de la variable int32
Título: Re: Contador de 10 digitos
Publicado por: jukinch en 13 de Octubre de 2011, 21:28:24
Quizá te pueda ser útil un botón de encendido - apagado que sea controlado como el que sugiere Mario aquí :
Autopoweroff (http://www.neoteo.com/-21086-auto-power-off-apagado-automatico)
     Saludos
         Jukinch
Título: Re: Contador de 10 digitos
Publicado por: MGLSOFT en 13 de Octubre de 2011, 21:32:33
La eeprom tarda unos 18 mseg en escribir un byte, o sea que tardarias menos de 100 mseg para escribir tus 4 bytes.
Parece poco pero es una eternidad, pensando que no haras otra cosa mientras tanto, salvo que uses la interrupcion por escritura de eeprom.

el lenguaje C es el mas indicado en este caso, ya que permite optimizar tu codigo en caso que necesites velocidad, acudiendo a hacer tareas en assembler dentro de C.
Título: Re: Contador de 10 digitos
Publicado por: FJPPitta en 13 de Octubre de 2011, 22:11:11
Quizá te pueda ser útil un botón de encendido - apagado que sea controlado como el que sugiere Mario aquí :
Autopoweroff (http://www.neoteo.com/-21086-auto-power-off-apagado-automatico)
     Saludos
         Jukinch

Excelente articulo, me llamo mucho la atención creo que si me animo a implementar un sistema así.

La eeprom tarda unos 18 mseg en escribir un byte, o sea que tardarias menos de 100 mseg para escribir tus 4 bytes.
Parece poco pero es una eternidad, pensando que no haras otra cosa mientras tanto, salvo que uses la interrupcion por escritura de eeprom.

el lenguaje C es el mas indicado en este caso, ya que permite optimizar tu codigo en caso que necesites velocidad, acudiendo a hacer tareas en assembler dentro de C.

Claro es una eternidad, afortunadamente el proceso que tengo es lento, sin embargo solo sera al finalizar el día de trabajo y cuando exista un apagón se guarda el valor por lo que si logro mantener 100mseg energizado el micro cuando se vaya la alimentación lo habré logrado
Título: Re: Contador de 10 digitos
Publicado por: MGLSOFT en 13 de Octubre de 2011, 23:55:01
Puedes usar el Brown down detect, puesto al valor que mas te convenga.
Si ocurre la deteccion de baja tension dejas de hacer todo y disparas la escritura en eeprom, eso deberia ayudar bastante.
Título: Re: Contador de 10 digitos
Publicado por: FJPPitta en 14 de Octubre de 2011, 00:42:50
Puedes usar el Brown down detect, puesto al valor que mas te convenga.
Si ocurre la deteccion de baja tension dejas de hacer todo y disparas la escritura en eeprom, eso deberia ayudar bastante.


eso me parece buena idea, estaba pensando en colocar un capacitor de valor alto en alimentación que me de al menos medio segundo de energía al micro despues del corte y deterctar la ausencia de alimentación AC con un divisor de voltaje voy a probar lo que me comentas . . .
Título: Re: Contador de 10 digitos
Publicado por: fabianjsm en 14 de Octubre de 2011, 01:21:48
Ups, disculpen, :oops: se necesitan solo 31 bits: 32 serán suficientes  :lol: