Autor Tema: Un bug más de Proteus... o de ccs??, eeprom 18f2550  (Leído 6356 veces)

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

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Un bug más de Proteus... o de ccs??, eeprom 18f2550
« en: 14 de Junio de 2008, 12:48:27 »
saludos amigos acá de molestón otra vez, y encontrando un bug en proteus o quiza en ccs :z), un bug q me volvio loco y hasta el día de hoy que volvi a ver la memo descubrí el fallo, les cuento:

hago este codigo de ejemplo usando la directiva #rom, para preescribir en la rom:
Código: [Seleccionar]
#include <18f2550.h>
#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOPBADEN,NOLVP,NOCPD,NODEBUG,NOWRT,NOVREGEN,USBDIV,PLL5,CPUDIV1
#rom 0xf00000={1,5,0,8}

void main(){
}

el asm es:
Código: [Seleccionar]
Configuration Fuses:
   Word  1: 0E24   NOIESO NOFCMEN HSPLL PLL5 CPUDIV1 USBDIV
   Word  2: 1E18   NOBROWNOUT NOWDT BORV20 PUT WDT32768 NOVREGEN RESERVED
   Word  3: 0100   NOPBADEN CCP2C1 NOMCLR NOLPT1OSC RESERVED
   Word  4: 0081   STVREN NODEBUG NOLVP NOXINST RESERVED
   Word  5: C00F   NOPROTECT NOCPD NOCPB
   Word  6: E00F   NOWRT NOWRTD NOWRTC NOWRTB
   Word  7: 400F   NOEBTR NOEBTRB

ROM data:
F00000: 01 00 05 00 00 00 08 00

como se darán cuenta en rom data aparecen 8 bytes, lo cual esta mal, porque en mi codigo en c solo coloque 4, por tanto aparecieron unos ceros en medio de cada dato, y nose de donde salieron :D

en simulación tb aparecen esos ceros extra:


pero en winpic800 no :shock: :shock::


entonces concluyo q el bug es de proteus, pero el asm :shock:

nose no entendí, confusión total, alguien me ayuda a comprender q paso y si se puede arreglar para poder simular bien, porque la posición en la eeprom es muy importante.

muchas gracias
.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Un bug más de Proteus... o de ccs??, eeprom 18f2550
« Respuesta #1 en: 16 de Junio de 2008, 14:54:09 »
Hola

Tienes que definir que los datos son de 8 bits, ya que por default los pic 18 toman los datos para guardar 16 bits.
Prueba asi a ver que sucede:

Código: [Seleccionar]
#rom int8 0xf00000={1,5,0,8}

Saludos
El papel lo aguanta todo

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Un bug más de Proteus... o de ccs??, eeprom 18f2550
« Respuesta #2 en: 17 de Junio de 2008, 17:45:14 »
si era eso :mrgreen: muchas gracias por la ayuda :-/, no lo hubiera descubierto talvez nunca, de verdad muchas gracias, por q en el manual de ccs no dice algo especifico como eso, porque donde buscaba no decía eso :(

ahora quizá puedan ayudarme en un otro problema q tengo con el tamaño de la memo eeprom del 4550 y/o 2550 que solo son de 256 bytes y pues quizá utilice muchos mas datos, en el peor de los casos hasta 7 veces el tamaño de esta eeprom osea 7x256bytes (talvez menos) y pues para ello necesitaré utilizar la memoria flash, se de la existencia de las instrucciones de ccs para leer y escribir sobre posiciones de flash, que sugerencia me dais para dar el orden.
me explico, el programa esta en desarrollo y nose cuanta memoria de programa llegue a utilizar pero quiza sea grande y para ubicar esos datos en la flash nose en que posición debo comenzar o el programa o la seccion de datos, de tal forma que no se choquen, y como establezco esos limites, la direcctiva #org sirve?

serán datos que un usuario externo podrá modificar, la flash puede ser usada y q no hayan problemas?

un saludo y muchas gracias por la info

.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Un bug más de Proteus... o de ccs??, eeprom 18f2550
« Respuesta #3 en: 17 de Junio de 2008, 19:04:47 »
Hola.

Pues creo que con la directiva #reserve se puede hacer eso

Saludos
El papel lo aguanta todo

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Un bug más de Proteus... o de ccs??, eeprom 18f2550
« Respuesta #4 en: 18 de Junio de 2008, 11:25:36 »
me fije el #reserve en el manual y al parecer solo acepta reservas en la memo ram, pero nose si en la flash, o crees q colocando una dirección de la flash se reserve en la memo de programa, bueno, hare pruebas, un saludo y gracias por la respuesta :mrgreen:
.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Un bug más de Proteus... o de ccs??, eeprom 18f2550
« Respuesta #5 en: 18 de Junio de 2008, 12:20:23 »
Hola.

Y que tal con #org??


Saludos.
El papel lo aguanta todo

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Un bug más de Proteus... o de ccs??, eeprom 18f2550
« Respuesta #6 en: 18 de Junio de 2008, 14:22:37 »
 :mrgreen: en ese mismo me estaba fijando ahora

alguna vez haz utilizado las funciones:
write_program_eeprom();
read_program_eeprom();
sirven para grabar en la flash, cierto? pero con lo q he probado no me ha guardado bytes, sino 16bits hay alguna forma de hacerlo a 8 bits?


sabes como funcionan las otras dos funciones?
write_program_memory();
read_program_memory();
no las entendí muy bien en el manual, mi ingles no es muy bueno :(

gracias por la pronta respuesta, un saludo
.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Un bug más de Proteus... o de ccs??, eeprom 18f2550
« Respuesta #7 en: 18 de Junio de 2008, 17:19:31 »
Hola.

Pues nunca las he utilizado, pero monte el ejemplo del CCS y solo escribe el dato en la memoria de datos, en la memoria de programas no se ve ninguna modificacion
.

Adjunto la simulacion y el codigo.

Saludos
El papel lo aguanta todo

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Un bug más de Proteus... o de ccs??, eeprom 18f2550
« Respuesta #8 en: 19 de Junio de 2008, 07:24:28 »
La función write_program_eeprom(); sí que va bien. Puedes guardar datos de a 8, o de a 16 bits.

La función write_program_memory(); no la he probado nunca ¿como funciona?

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Un bug más de Proteus... o de ccs??, eeprom 18f2550
« Respuesta #9 en: 19 de Junio de 2008, 10:47:05 »
saludos pocher, sabes como utilizar la funcion write_program_eeprom para 8 bits? no encuentro al manera de hacerlo en el manual, solo he logrado escribir 16 bits.

MLO_ probe, nose si bien el write_program y a mi si me grabó en la memoria de programa, estoy utilizando un 4550, lo que hace es utilizar un bloque de programa creo, pero no logro comprender como va todo.

y quiza en este caso opte por hacer paso a paso, osea byte por byte, porque algunas veces se podrá modificar uno o unos cuantos, pero talvez sea muy conveniente lo de grabar por bloques

gracias por las respuestas, seguire buscando info y tratando de descifrar el ingles del ccs :mrgreen:
.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Un bug más de Proteus... o de ccs??, eeprom 18f2550
« Respuesta #10 en: 19 de Junio de 2008, 14:33:08 »
Sí, lo expresé mal. Realmente escribe solo datos de 16 bits, puedes darle un único byte (el LSB) y él te rellena el MSB con 0x00.

Puedes mandarle los datos de 2 en 2:

write_program_eeprom(0x0100,0xBBAA) --> Escribe 0xAA en la dirección 0x0100 de la flash y 0xBB en la dirección 0x0101 de la flash.

Estas usando PROTEUS? Como has usado el write_program_memory() para que te escriba?

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Un bug más de Proteus... o de ccs??, eeprom 18f2550
« Respuesta #11 en: 19 de Junio de 2008, 14:45:26 »
Vale, ya sé como funciona write_program_memory() para que escriba 1byte ó más ... hay que darle la dirección en lugar del dato.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Un bug más de Proteus... o de ccs??, eeprom 18f2550
« Respuesta #12 en: 19 de Junio de 2008, 15:26:04 »
Hola.

Código: [Seleccionar]
write_program_memory( address, dataptr, count );

La variable count no indica el numero de bytes que se van a escribir? sera que si se hace 1 escribira 1 byte?. El dato les aparece en el en PIC18 CPU Program memory? porque a mi me aparece en el PIC18 CPU Data memory.

Saludos
El papel lo aguanta todo

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Un bug más de Proteus... o de ccs??, eeprom 18f2550
« Respuesta #13 en: 20 de Junio de 2008, 05:14:28 »
Efectivamente, count es el nº de bytes que se van a escribir en address a partir de la dirección &x (dataptr) .

Pongo un ejemplo:

int x;
x=0x33;
write_program_memory( 0x0200, &x, 1 ); ---> Escribiria 0x33 en la dirección 0x2000 de la flash

Otro:

long x;
x=0x4433;
write_program_memory( 0x0200, &x, 2 ); ---> Escribiria 0x33 en la dirección 0x2000 de la flash y 0x44 en la 0x0201

Todo esto es fácilmente transportable a tablas.

Los datos aparecen en la flash de programa (Programm memory) de PROTEUS.

Todo esto funcionando en PROTEUS con PICs18. Con PICs16 no me va bien. ¿Alguién lo ha hecho con PICs16 en PROTEUS?

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Un bug más de Proteus... o de ccs??, eeprom 18f2550
« Respuesta #14 en: 20 de Junio de 2008, 12:00:31 »
gracis por las respuestas, me son de mucha ayuda.

tb he probado el wite_program_memory, y con el 1 si escribe solamente un byte, pero además borra todo un bloque de una cantidad de bytes, y pues por eso supuse q trabaja tb directamente con bloques.

y creen q sea bueno escribir con write_program_memory (8 bits) y leer con read__program_eeprom (16 bits??) creen q se pueda leer 8 bits con eeprom?

bueno yo tb lo probare, muchas gracias por la ayuda, un saludo.

ahhh se me olvidaba estoy usando tb un 18f (el 18f4550 y 2550), no he tocado los 16, porque recuerdo haber leído en un hilo anterior q esas funciones son solo para los 18f, y ambas funciones ...memory y ...eprom me dan los resultados en la memoria de programa
.