Autor Tema: mantener un valor depues del reset  (Leído 2879 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ionizador

  • PIC10
  • *
  • Mensajes: 5
mantener un valor depues del reset
« en: 30 de Noviembre de 2007, 15:24:33 »
buenas, saludos a todos los que ayudan a los que sabemos poco en este foro :)
una consulta puntual

existe alguna manera de guardar el valor de una variable y mantenerla en ese valor aunque el PIC sea reseteado?
si es asi me podrian decir como porfavor.
necesito mantener el valor de la posicion de un encoder optico para que cuando se resetee el PIC, la variable quede como estaba la ultima vez que se guardó

muchas gracias

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: mantener un valor depues del reset
« Respuesta #1 en: 30 de Noviembre de 2007, 15:41:35 »
Sí, lo puedes hacer guardando la variable en la memoria no volatil EEPROM del PIC.

Se hace con las instrucciones:

- write_eeprom(address,value)  -----> Para guardarla

- value=read_eeprom(address)  -----> Para recuperarla

Un saludo.

PD. Mira como funcionan en el help del programa de CCS

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: mantener un valor depues del reset
« Respuesta #2 en: 30 de Noviembre de 2007, 15:52:01 »
como no dices que pic es, también sirve la propia flash (en aquellos uc que lo soporten)

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado ionizador

  • PIC10
  • *
  • Mensajes: 5
Re: mantener un valor depues del reset
« Respuesta #3 en: 30 de Noviembre de 2007, 16:34:51 »
Pocher:
gracias por la respuesta tan rapida, pero tengo otras consultas, que valores le puedo dar a address?
toi usando un bootloader q se llama tiny bootloader, hay algun problema con eso?
gracias

PalitroqueZ:
el pic es un 18F452
se puede con este?
me puedes dar un ejemplo en caso de que si?

muchas gracias por la rapidez, kede sorprendido :)

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: mantener un valor depues del reset
« Respuesta #4 en: 30 de Noviembre de 2007, 16:40:20 »
Pereira - Colombia

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: mantener un valor depues del reset
« Respuesta #5 en: 30 de Noviembre de 2007, 16:46:58 »
Pocher:
gracias por la respuesta tan rapida, pero tengo otras consultas, que valores le puedo dar a address?
toi usando un bootloader q se llama tiny bootloader, hay algun problema con eso?
gracias

PalitroqueZ:
el pic es un 18F452
se puede con este?
me puedes dar un ejemplo en caso de que si?

muchas gracias por la rapidez, kede sorprendido :)

sip se puede, es una opción que estoy diciendo, de todas formas mira la otra usando la e2prom.

1.- en la página 57 de 39564c.pdf dedican una sección a la programación de la memoria flash.
2.- ejemplos grabando, no tengo pero si leyendo, mira este post.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: mantener un valor depues del reset
« Respuesta #6 en: 30 de Noviembre de 2007, 17:15:00 »
Te conviene más usar la eeprom si el pic la trae incrporada de serie, es menos problemática.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: mantener un valor depues del reset
« Respuesta #7 en: 30 de Noviembre de 2007, 18:28:05 »
De todas formas dale un vistazo a este hilo porque puedes ver algunas cosas interesantes: Un efecto de la RAM de los PIC's peligroso para incautos como yo.

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado ionizador

  • PIC10
  • *
  • Mensajes: 5
Re: mantener un valor depues del reset
« Respuesta #8 en: 30 de Noviembre de 2007, 18:39:55 »
ujaa
gracias por toda esa informacion
no sabia por donde buscar

cuando termine mi proyecto se los muestro, creo q les gustará

genial la ram jaja , no tenia idea de q no se perdian los datos en el reset :D
como siempre inicializo las variables, toncs no me habia dado cuenta

gracias RedPIC, vszener, PalitroqueZ, dhmejia y pocher, por darse el trabajo de ayudarle a este principiante
saludos :)





Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: mantener un valor depues del reset
« Respuesta #9 en: 30 de Noviembre de 2007, 19:31:31 »
Una cosa importante acerca de este tema de la RAM y los Reset's.

En CCS C si declaras una variable de la forma int8 MyVar no se perderá su valor tras un Reset producido por un pulso a LOW del Pin MCLR del PIC, pero si declaras esta misma variable en la forma STATIC int8 MyVar si que lo perderas ya que al declararla STATIC el compilador añade su puesta a 0x00 en el bloque inicial del programa, el que se ejecuta al principio tras un reset.

Esto se puede ver muy fácilmente con el siguiente simplísimo código C

Código: C++
  1. #include <18F2550.h>
  2. #fuses HS,NOPROTECT,NOLVP,PUT,BROWNOUT
  3. #use delay(clock=20000000)
  4.  
  5. int8 MyVar;
  6.  
  7. void main() {
  8.  
  9.   do {
  10.       MyVar = 0x000;
  11.   } while (TRUE);
  12. }

Al compilarlo genera el siguiente ASM

Código: ASM
  1. 0000:  GOTO   0004
  2. 0004:  CLRF   FF8
  3. 0006:  BCF    FD0.7
  4. 0008:  CLRF   FEA
  5. 000A:  CLRF   FE9
  6. 000C:  MOVF   FC1,W
  7. 000E:  ANDLW  C0
  8. 0010:  IORLW  0F
  9. 0012:  MOVWF  FC1
  10. 0014:  MOVLW  07
  11. 0016:  MOVWF  FB4
  12. ....................   do {
  13. ....................       MyVar = 0x000;
  14. 0018:  CLRF   05
  15. ....................   } while (TRUE);
  16. .................... }
  17. 001A:  BRA    0018
  18. ....................
  19. 001C:  SLEEP

En cambio si declaramos STATIC nuestra variable ...

Código: C++
  1. #include <18F2550.h>
  2. #fuses HS,NOPROTECT,NOLVP,PUT,BROWNOUT
  3. #use delay(clock=20000000)
  4.  
  5. static int8 MyVar;
  6.  
  7. void main() {
  8.  
  9.   do {
  10.       MyVar = 0x000;
  11.   } while (TRUE);
  12. }

El nuevo ASM queda de la siguiente forma ...

Código: ASM
  1. 0000:  GOTO   0004
  2. 0004:  CLRF   FF8
  3. 0006:  BCF    FD0.7
  4. 0008:  CLRF   FEA
  5. 000A:  CLRF   FE9
  6. 000C:  MOVF   FC1,W
  7. 000E:  ANDLW  C0
  8. 0010:  IORLW  0F
  9. 0012:  MOVWF  FC1
  10. 0014:  MOVLW  07
  11. 0016:  MOVWF  FB4
  12. 0018:  CLRF   05      <-------- Esta línea la añade antes de entrar en el bucle infinito.
  13. ....................   do {
  14. ....................       MyVar = 0x000;
  15. 001A:  CLRF   05  <------------------- que es igual a nuestra puesta a cero dentro de él.
  16. ....................   } while (TRUE);
  17. .................... }
  18. 001C:  BRA    001A
  19. ....................
  20. 001E:  SLEEP


Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: mantener un valor depues del reset
« Respuesta #10 en: 01 de Diciembre de 2007, 05:38:30 »
Curiosamente hoy he estado bicheando un proyecto de Dimmer que utiliza el RESET como interrupción, de manera que despierta al micro en cada cruce por 0 de la alterna, y la regulación de intensidad funciona perfectamente basándose en una variable de RAM que no se pierde al resetear al PIC.
Me ha parecido muy original esa propuesta y me anoto la idea.


 

anything