Autor Tema: USAR MEMORIA FLASH DEL PCI18F452 PARA DATOS DE USUARIO COMO? (resuelto)  (Leído 3612 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
Hola, gracias por leer este mail, estoy desarrollando una aplicacion donde, necesito usar de los 16K de la flash del PIC18F452, 2K para guardar una tabla de datos, la idea de usar la flash es porque usar una memoria serie hace mas lento el sistema, pues como los datos son absolutamente asimetricos y son 200 y cada uno es una cadena de 10 bytes, entonces si logro esto como las posiciones son de 16 bits usaria ademas la mitad de la memoria, 1000 bytes.

Todo esto me parecio muy sencillo, pero en el momento de hacer algunas pruebas, cuando leo los dato que leo no son los que intento grabar.


  direccion=0x0FA0;
     w=0;
    do
      {
      dato=string_c[w++];

      write_program_eeprom (direccion,dato);
      direccion++;

      }while (w!=20);

Con este ejemplo intento grabar desde la posiscion 0x0FA0 20 caracteres de un string, alguien utilizo esto alguna vez, de esta manera, desde ya les agradezco alguna respuesta.

 



« Última modificación: 30 de Octubre de 2006, 00:18:12 por pikman »
saludos
PikMan

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: USAR MEMORIA FLASH DEL PCI18F452 PARA DATOS DE USUARIO COMO?
« Respuesta #1 en: 01 de Octubre de 2006, 16:27:27 »
Hola, gracias por leer este mail, estoy desarrollando una aplicacion donde, necesito usar de los 16K de la flash del PIC18F452, 2K para guardar una tabla de datos, la idea de usar la flash es porque usar una memoria serie hace mas lento el sistema, pues como los datos son absolutamente asimetricos y son 200 y cada uno es una cadena de 10 bytes, entonces si logro esto como las posiciones son de 16 bits usaria ademas la mitad de la memoria, 1000 bytes.

Todo esto me parecio muy sencillo, pero en el momento de hacer algunas pruebas, cuando leo los dato que leo no son los que intento grabar.


  direccion=0x0FA0;
     w=0;
    do
      {
      dato=string_c[w++];

      write_program_eeprom (direccion,dato);
      direccion++;

      }while (w!=20);

Con este ejemplo intento grabar desde la posiscion 0x0FA0 20 caracteres de un string, alguien utilizo esto alguna vez, de esta manera, desde ya les agradezco alguna respuesta.



Qué es lo que hace esa función "write_program_eeprom" ? Acaso discrimina si un dato de acuerdo a su posición de memoria debe ir en la flash?


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
Re: USAR MEMORIA FLASH DEL PCI18F452 PARA DATOS DE USUARIO COMO?
« Respuesta #2 en: 02 de Octubre de 2006, 01:55:51 »
Hola MAUNIX,
                   No esta funcion lo que hace es grabar la flash del micro, como lo hacen los bootloaders, solo que pretendo usar la memoria del micro, para grabar datos que tengo que verificar, ademas de que me sobra flash es de 16 bits y la puedo leer mas rapido que una externa, son strigns de 10 bytes, me ha vuelto loco, creo que es un error del CCS no puede ser que no ande, voy a ver si lo puedo lograr asm

saludos

saludos
PikMan

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: USAR MEMORIA FLASH DEL PCI18F452 PARA DATOS DE USUARIO COMO?
« Respuesta #3 en: 02 de Octubre de 2006, 09:05:37 »
Hola MAUNIX,
                   No esta funcion lo que hace es grabar la flash del micro, como lo hacen los bootloaders, solo que pretendo usar la memoria del micro, para grabar datos que tengo que verificar, ademas de que me sobra flash es de 16 bits y la puedo leer mas rapido que una externa, son strigns de 10 bytes, me ha vuelto loco, creo que es un error del CCS no puede ser que no ande, voy a ver si lo puedo lograr asm

saludos

Entiendo, no uso el CCS así que no te puedo ayudar en este tema puntual del uso de esa función en específico. 

De todas formas, tú no habias especificado que usabas CCS y tu pregunta parecía un tanto mas "genérica" sobre el "si se podía" y "cómo se podia hacer" más que del uso de una función en particular.

Grabar la memoria flash es bastante diferente en los 18F que en los 16F.  Además en los 18F tu mismo debes hacer la operación de "borrado". 

No se qué tipo de documentación trae el CCS y qué cosas expliquen del uso de una función como la que mencionas pero en un 18F el borrado previo a la escritura , es de páginas de 64 bytes.  Si la función no tiene esto en cuenta (o si lo tiene te lo debiera aclarar) sería peligroso.  Si quieres solo escribir por ejemplo 20 bytes, lo que se hace es leer los 64 bytes en un array, modificar los 20 valores que te interesan y volver a grabar los 64 bytes.

Para leer no hay limitaciones, puedes leer 1 solo byte si quieres.


Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
Re: USAR MEMORIA FLASH DEL PCI18F452 PARA DATOS DE USUARIO COMO? (resuelto)
« Respuesta #4 en: 30 de Octubre de 2006, 00:16:45 »
Bueno, aca esta la solucion, CCS incluye funciones para leer y escribir la flash del micro, esto es para permitir que se autoprograme, o que la aplicacion sea reflasheable como dicen, pues bien, en mi caso he usado la memoria para datos, pues mi aplicacion debe revisar cadenas de 10 bytes (350)  y compararlas para determinar si esta en la base de datos para autorizar una operacion, el uso de una memoria 24 funciono pero es mucho mas lenta, con
la funcion incluida ademas de simplificar el soft la velocidad es mucho mayor, ademas de liberarme 3500 bytes de memoria externa para otros datos.
Aqui les pego la forma de usarlas, aclaro que las he probado solo en un PIC18F452, por lo que lei en el manual hay diferencias con los 16F87x y otros que permiten grabar la flash desde el programa.
Bueno, espero que les sirva, saludos.


// graba el string de 10 bytes en la memoria

write_program_memory(0x2100,string,10);

// graba la word de la posicion  de memoria

write_program_eeprom(0x210A,0x0001);

// lee 10 bytes de la memoria

read_program_memory(0x2100,string,10);

// lee la word de la memoria

memoria=read_program_eeprom(0x210A);


saludos
PikMan

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re:USAR MEMORIA FLASH DEL PCI18F452 PARA DATOS DE USUARIO COMO? (resuelto)
« Respuesta #5 en: 18 de Enero de 2017, 18:30:20 »
saludos pickman
a mi me graba solo la primera vez, cuando intento actualizar los datos ya no graba nada
he intentado en assembler y me pasa los mismo, a que se debera?