Memorizar un valor en pic

Hola a todos hermanos de este mundo llamado electronica.

bueno les cuento hace tiempo trabajo con Pic's pero ahora me encontre en una problematica que me dejo pensando,declaro
int timer;

luego en la funcion

void funcion_1(void){
if(input(pin_a1)==1){
timer++;
if(timer==100){
set_pwm1_duty(timer);
printf(lcd_putc"duty:%u",timer);
}
}

cada vez que apague el circuito timer sera 0, como lo hago para que cuando energice nuevamente este solo reconozca el valor en el que quedo? ...
 
Última edición por un moderador:
ok, lo ley y ahora estoy usando las funciones
write_eeprom(adrres,valor);
read_eeprom(adrres);

peor mi pregunta es, si tengo un contador que registra cada paso osea cada paso
realiza
write_eeprom(0000,duty); por ejemplo
no se supone que por ser eeprom tengo un limite de escrituras? o puedo escribir en ese registro cuantas veces quiera?
 
El "addres" en write_eeprom(adrres,valor); o read_eeprom(adrres); indica una posición de la memoria EEPROM, cada posición es de 1 byte y puede ser escrito/leido muchas veces (ver especificaciones en la hoja de datos), la cantidad de posiciones depende de cada PIC, así por ejemplo el PIC16F628A tiene 128 bytes de EEPROM.

El tiempo de escritura es según el PIC, pero por ejemplo la escritura dura unos 10ms para el 16F628 y la lectura es en un ciclo de reloj. Para que lo tomes en cuenta en tus diseños, ygual esto y más estan en la hoja de datos.

Saludos.
 
Para no hacer tantos ciclos de escritura puedes asegurarte de grabar solo ese valor cuando este cambie ;) (sobre todo para agilizar el programa, fijate en la diferencia de tiempos entre leer y escribir dicho valor)
 
haber pero yo no entender jaj

en mi caso escribi
duty=read_eeprom(0000);

ante el dato es escrito por usuario mientras configura el brillo de un lcd

void funcion_1(void){
if(input(pin_a1)==1){
write_eeprom(0000,duty);
delay_ms(30);
return;
}
}

eso no se modificara siempre. pero mi duda es, u estuviera en un proceso donde se cuente por ejemplo 60 min donde cada segundo deberá ser registrado, por que supongamos es un proceso con un batido por tiempo. estoy especulando, pero se supone que este producto debe ser batido una hora exacta. y se corta la luz justo en mi 45 min 3 segundos. osea este dato estará guardandoce cada segundo en la eeprom, en teoría esta memoria no puede ser escrita infinitas veces, bajo ese concepto mi pic durara menos de un mes?
 
Si, de echo puede fallar con escrituras periodicas a largo plazo... tú método funciona pero si quieres conservar la vida de la memoria una forma fácil es guardar por periodos más largos (cada minuto, cada 10 minutos) por ejemplo o por hardware para que guarde el "duty" en la memoria justo después del corte de luz, para no estar escribiendo en todo momento.

Una forma es usando una especie de circuito UPS (Uninterrumpible Power Supply) simple que dure unos segundos con una pila/bateria auxiliar o supercapacitor junto a un Opamp como compartador de voltaje, todo para que el PIC pueda determinar en que momento se ha cortado la energía principal y poder guardar el valor del "duty" en la memoria... algo así como en la imagen.

Claro que el circuito sería algo más complejo ya que:
- El PIC tendría que trabajar con el voltaje auxiliar cuando se va la luz...
- Si es bateria o supercapacitor, se tiene que cargar automáticamente...

Saludos
 

Adjuntos

  • boceto1.png
    boceto1.png
    7.6 KB · Visitas: 8
justamente en eos estaba pensando en poner una pila de respaldo y un comparador al detectar el corte atravez de una entrada digital, guardo en mi Addres!!! Mucha Gracias Amigo mio.
 
Atrás
Arriba