Autor Tema: Ayuda con write_program_memory y proteus  (Leído 4031 veces)

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

Desconectado Chikyto

  • PIC10
  • *
  • Mensajes: 1
Ayuda con write_program_memory y proteus
« en: 12 de Julio de 2009, 11:34:32 »
Estimados, como andan?

Es la primera ves que escribo, generalmente he podido encontrar las soluciones a mis problemas leyendo los post anteriormente realizados pero en ésta oportunidad estoy estancado.

Estoy desarrollando un proyecto personal en el cual tengo la necesidad de guardar datos en memoria (flash el objetivo) de forma permanente...los cuales se van a grabar en una única oportunidad pero que pueden ser accedidos en más de una.

Para implementar el dispositivo estoy utilizando el PIC18F242 el cual había programado en asm en varias oportunidades, pero debido a la complejidad del soft a implementar, me lansé con el CCS. Ya pude leer un teclado de 4x4 y escribir en un display de 4x20 sin mayores problemas! eso pude simularlo en Proteus 7.5 sp3 sin problemas y funciona en el circuito también.

Ahora bien, llegó le momento de guardar los datos ingresados por el usuario y cuando quiero usar los comandos del CCS write_program_memory, no se bien que es lo que hace...el simulador solo pinta todas FF ...pinta FF FF FF FF FF FF FF FF.

La función usada es

   for(i=0x1000;i<=0x11ff;i++)
   {
      value= 0x1010; // value es un int16
      write_program_memory(i, value, 1);
      delay_ms(10);
   }

a partir del 0x1000 hay código de programa y ahí si el proteus simula que graba en la memoria pintando las FF anteriormente citadas pero si cambio el inicio de i por 0x1500 donde no hay código no hace nada.
También intenté borrar previamente pero no cambia en nada...hace lo mismo, si hay código de programa si borra.

Si alguno pudo usar éstas funciones y simularlas en proteus, le agradería mucho que me de una mano!!


Desconectado mauro27

  • PIC10
  • *
  • Mensajes: 4
Re: Ayuda con write_program_memory y proteus
« Respuesta #1 en: 10 de Noviembre de 2009, 10:25:18 »
Hola Chikyto, yo estoy intentando algo similar en este momento y no logro grabar nada en la flash utilizando la instruccion write_program_memory, quizas puedas darme una mano si ya lo has solucionado.

saludos

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Ayuda con write_program_memory y proteus
« Respuesta #2 en: 10 de Noviembre de 2009, 10:47:34 »
El proteus no sirve para simular el grabado y borrado de la flash

Te tocará probarlo en circuito real.
.

Desconectado mauro27

  • PIC10
  • *
  • Mensajes: 4
Re: Ayuda con write_program_memory y proteus
« Respuesta #3 en: 10 de Noviembre de 2009, 17:31:16 »
El programa lo estoy cargando con el winpic800 y al leerlo veo que se graban los datos a partir de la direccion 0x800 cuando yo puse 0x1000 en mi código, de esa manera modifiqué la direccion de lectura del dato a partir de la 0x800 y efectivamente funciona, no se si es muy tonta la pregunta pero me pierdo un poco. Alguien podría explicarmelo?

Gracias

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Ayuda con write_program_memory y proteus
« Respuesta #4 en: 14 de Noviembre de 2009, 14:21:13 »
Hay que considerar que los datos que se guardan son words y no bytes, si multiplicas 800h x2 te da la dirección 1000h que pusiste, pero esa dirección sería si fueran bytes los datos de la flash, como son words se almacenan en esa otra dirección que es exactamente la mitad.

Saludos.
.

Desconectado mauro27

  • PIC10
  • *
  • Mensajes: 4
Re: Ayuda con write_program_memory y proteus
« Respuesta #5 en: 15 de Noviembre de 2009, 18:19:09 »
Gracias Cryn por responder, pero sigo teniendo problemas para leer los datos que grabo, escribo lo siguiente y veo todos cuadraditos en el display

char dato1[4]={1,2,3,4};
char dato1[4]={5,6,7,8};
char dat1[4];
char dat1[4];

void main(){
dirw=0x1000;
dirr=0x800;
.
write_program_memory(dirw, dato1, 4);
delay_ms(1000);
write_program_memory(dirw+4, dato2, 4);
delay_ms(1000);
.
.
read_program_memory(dirr, dato1, 4);
delay_ms(1000);
read_program_memory(dirr+4, dato2, 4);
delay_ms(1000);
.
printf(lcd_putc,"\fDATO1: %s\nDATO2: %s",dat1,dat2);
.
}

seguro estoy cometiendo alguna burrada(ó mas de una a la vez) pero no me doy cuenta, también estoy probando
cambiar el tipo de datos que recibo a int, long y cambio el tipo de datos a mostrar en la instrucción del lcd, .... y en el display aparecen cosas rarisimas jaja

Espero ayuda, mientras tanto sigo intentando cambios, si lo descubro lo publico.

gracias

Desconectado mauro27

  • PIC10
  • *
  • Mensajes: 4
Re: Ayuda con write_program_memory y proteus
« Respuesta #6 en: 16 de Noviembre de 2009, 21:52:32 »
Bueno, la solucion era muy sencilla pero ya que lo saque lo quiero compartir, quizas pueda ayudar a alguien mas que se esté iniciando como yo, aca vá:

log dir_w=0x1000;
long dat1=1234;
long dat2=5678;
long da1;
long da2;

void main(){
.
write_program_memory(dir_w, &dat1, 2);   //la solucion fue utilizar & para señalar la direccion del dato
delay_ms(1000);
write_program_memory(dir_w+2, &dat2, 2);
delay_ms(1000);
.
.
read_program_memory(dir_w, &da1, 2);
delay_ms(1000);
read_program_memory(dir_w+2, &da2, 2);
delay_ms(1000);
.
printf(lcd_putc,"\fDATO1: %Lu \nDATO2: %Lu",da1,da2);   //si coloco %Lx en lugar de Lu visualizo el dato en hexa
.
}

espero les sirva.

Otra cosa que me gustaría saber es como afecta el tiempo que coloco en el delay, yo estoy utilizando 1000ms pero estaría bueno poder bajarlo, alguien podría decirme algo sobre esto?

Saludos

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Ayuda con write_program_memory y proteus
« Respuesta #7 en: 16 de Noviembre de 2009, 22:29:45 »
Que bueno que lo hayas solucionado, no me había fijado los &

Saludos
.

Desconectado felipito

  • PIC10
  • *
  • Mensajes: 19
Re: Ayuda con write_program_memory y proteus
« Respuesta #8 en: 18 de Noviembre de 2009, 12:25:34 »
Es necesario utilizar write_program_erase (dir_w)  (borra 64 byte) para dejar en FF y asì grabar con write_program_memory,  Con proteus no funciona se queda en FF.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Ayuda con write_program_memory y proteus
« Respuesta #9 en: 18 de Noviembre de 2009, 12:56:35 »
Si, es necesario borrar.

Proteus no simula bien ello. Pruébalo físicamente
.

Desconectado martino84

  • PIC10
  • *
  • Mensajes: 32
Re: Ayuda con write_program_memory y proteus
« Respuesta #10 en: 24 de Junio de 2011, 16:32:44 »
ya se que paso mucho tiempo pero me podrias explicar los parametros de la funcion write_program_memory( address, dataptr, count );

estoy intentando grabar en la memoria flash y no entiendo.


 

anything