TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: RedPic en 11 de Diciembre de 2007, 03:40:50

Título: Datasheet 18F4550 y memoria EEPROM.
Publicado por: RedPic en 11 de Diciembre de 2007, 03:40:50
¿Podría alguien ser tan amable de indicarme en qué página del Datasheet del 18F4550 aparece la dirección de memoria donde empieza la EEPROM interna?  :shock:

Gracia que espera le sea concedida para que surta los efectos oportunos, y sin mas por el momento se despide de usted su seguro servidor, beso a vuecencia la mano y quedo a sus pies.
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: stk500 en 11 de Diciembre de 2007, 04:00:43
Hola Diego  :-/ :-/
aparte de encontrar todos tus virus en internet  :D :D
de picmania  :D :D me encontre esto http://eegeek.net/content/view/27/32/1/1/   :D :D
espero te sirva
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: stk500 en 11 de Diciembre de 2007, 04:04:50
Hola Diego  :-/ :-/
aparte de encontrar todos tus virus en internet  :D :D
de picmania  :D :D me encontre esto http://eegeek.net/content/view/27/32/1/1/   :D :D
espero te sirva


y si no podia encotrarlo aqui esto
http://ww1.microchip.com/downloads/en/DeviceDoc/39632D.pdf
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: RedPic en 11 de Diciembre de 2007, 05:01:30
... http://eegeek.net/content/view/27/32/1/1/   :D :D
espero te sirva

¿Tiene algo que ver con la EEPROM?

Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: RedPic en 11 de Diciembre de 2007, 05:02:38
y si no podia encotrarlo aqui esto
http://ww1.microchip.com/downloads/en/DeviceDoc/39632D.pdf

El Datasheet hace años que lo tengo, mi pregunta es si habéis encontrado la dirección donde se encuentra la EEPROM.
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: RedPic en 11 de Diciembre de 2007, 05:06:06
Que yo recuerde, en ninguna.
La EEPROM la puedes direccionar con
ORG   0xf00000

Entonces esa dirección para llegar a conocerla debo ... ¿esperar la inspiración divina? ¿probar a ver si acierto? No entiendo esto de Microchip :shock:

Lo que quería es cargar la EEPROM desde el programa (en CCS C) con #ROM address ... y no pude encontrar el Address ...
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: Nocturno en 11 de Diciembre de 2007, 05:15:50
#rom int8 0xf00000={1,2,3,0,0,0,0,0,0,0}

Bien, ya os habéis adelantado con la solución.
En cualquier caso, amigo Diego, te digo un método que alguna vez he usado para averiguarlo y que suele ser más rápido que leer la data, sobre todo porque el maestro Sisco ya la leyó antes que yo. Abro winpic800, selecciono el micro en cuestión, escribo en la zona de datos, guardo el hex y lo miro con el Ultraedit para saber dónde apunta  :D
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: maunix en 11 de Diciembre de 2007, 08:25:18
Que yo recuerde, en ninguna.
La EEPROM la puedes direccionar con
ORG   0xf00000

Entonces esa dirección para llegar a conocerla debo ... ¿esperar la inspiración divina? ¿probar a ver si acierto? No entiendo esto de Microchip :shock:

Lo que quería es cargar la EEPROM desde el programa (en CCS C) con #ROM address ... y no pude encontrar el Address ...

Es así, es un impuesto desde los primeros 18F.  La idea es otorgarle un address para que todos los tools y herramientas sepan de qué se trata cuando se habla de una memoria que hace referencia a la eeprom interna

Es digamos una convención pero impuesta por microchip.  Es así en todos los 18F.

Recién entro al post pero si tienes dudas para este y otros micros puedes fijarte en su linker file y ver la dirección a la que apunta la eeprom.  :) :)


Ej, para el 18f4550


// File: 18f4550.lkr
// Sample linker script for the PIC18F4550 processor

LIBPATH .

FILES c018i.o
FILES clib.lib
FILES p18f4550.lib

CODEPAGE   NAME=vectors    START=0x0            END=0x29           PROTECTED
CODEPAGE   NAME=page       START=0x2A           END=0x7FFF
CODEPAGE   NAME=idlocs     START=0x200000       END=0x200007       PROTECTED
CODEPAGE   NAME=config     START=0x300000       END=0x30000D       PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE       END=0x3FFFFF       PROTECTED
CODEPAGE   NAME=eedata     START=0xF00000       END=0xF000FF       PROTECTED

ACCESSBANK NAME=accessram  START=0x0            END=0x5F
DATABANK   NAME=gpr0       START=0x60           END=0xFF
DATABANK   NAME=gpr1       START=0x100          END=0x1FF
DATABANK   NAME=gpr2       START=0x200          END=0x2FF
DATABANK   NAME=gpr3       START=0x300          END=0x3FF
DATABANK   NAME=usb4       START=0x400          END=0x4FF          PROTECTED
DATABANK   NAME=usb5       START=0x500          END=0x5FF          PROTECTED
DATABANK   NAME=usb6       START=0x600          END=0x6FF          PROTECTED
DATABANK   NAME=usb7       START=0x700          END=0x7FF          PROTECTED
ACCESSBANK NAME=accesssfr  START=0xF60          END=0xFFF          PROTECTED

SECTION    NAME=CONFIG     ROM=config

STACK SIZE=0x100 RAM=gpr3
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: jfmateos2 en 17 de Enero de 2008, 08:44:27
Pues yo tengo el mismo problema que RedPIC pero con un 18f2455: no soy capaz de encontrar la dirección en la que comienza la data eeprom.

Aplicando el método sugerido por Nocturno he escrito 8 AA al principio de la memeria de datos y he abierto el archivo HEX generado por WinPIC800 con un editor. Aparece lo siguiente, pero no sé interpretarlo.

Código: [Seleccionar]
:020000040020DA
:020000040030CA
:0E0000003FCF3F1F0087E5000FC00FE00F400D
:0200000400F00A
:10000000AA00AA00AA00AA00AA00AA00AA00AA00A0
:00000001FF

Luego he intentado el método propuesto por Maunix, pero no encuentro el archivo 18f2455.lkr por ningún sitio.

¿Alguien puede echarme una mano? gracias
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: Nocturno en 17 de Enero de 2008, 08:57:56
En este post del amigo Jesús viene muy bien explicado el formato HEX:
http://www.todopic.com.ar/foros/index.php?topic=17595.msg118837#msg118837

Si no me equivoco, interprentando esta línea en ese chorizo de bytes que te ha salido, la dirección de tu eeprom es también la 00F0 0000:
:0200000400F00A

Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: jfmateos2 en 17 de Enero de 2008, 09:09:33
Gracias Nocturno, he comprobado que efectivamente es la 00f0 0000.

Leyendo el post de jfh entiendo de dónde sale el 00f0, pero no el 0000
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: Nocturno en 17 de Enero de 2008, 09:11:47
Pues porque el comando 04 (Extended linear address record) determina la parte alta de la dirección.
La dirección es un dato de 32 bits, y en esa línea sólo se indican los 16 más significativos.
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: jfmateos2 en 17 de Enero de 2008, 09:15:09
Sí eso sí lo entendí, ¿pero en la línea siguiente no deberían ir los otros 16 bits (los menos significativos), es decir el 0000? ¿o es que se asume que los 16 bits menos significativos son todos 0?
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: Nocturno en 17 de Enero de 2008, 09:18:10
Exacto, si no los pones se asumen como 0000.
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: jhozate en 10 de Mayo de 2010, 21:56:46
hola muchachos, tengo un problemilla con un programita, tengo un programa que al inicio hago
Código: [Seleccionar]
#ROM  0XF00000={'1','2','3','4'}es una clave pero luego cuando quiero rectificarla no me coincide. se supone que desde esa direccion es la direccion cero..no?
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: migsantiago en 10 de Mayo de 2010, 22:25:35
Hola Jhozate, ¿acaso te sale 0x31, 0x32, ... ?  ;-)
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: jhozate en 10 de Mayo de 2010, 22:28:58
no, es decir cuando por teclado  pido la clave no me reconoce
aqui en codigo
Código: [Seleccionar]
#USE DELAY(CLOCK=48000000)
#USE STANDARD_IO(A)
#USE STANDARD_IO(B)
#USE STANDARD_IO(C)
#USE STANDARD_IO(D)
#INCLUDE "FLEX_LCD420.C"
#INCLUDE <KBD.C>
//#INCLUDE <STDLIB.H>
//#ZERO_RAM
#ROM  0XF00000={'1','2','3','4'}



INT SECUENCIA=0;
INT ERRORES=0;
INT1 FLAG_CLAVE_OK=0;
VOID MAIN()
{
setup_adc_ports(NO_ANALOGS);  //NO ENTRADAS ANALOGAS
setup_adc(ADC_OFF);
SETUP_SPI(FALSE);
SETUP_PSP(PSP_DISABLED);
SETUP_COMPARATOR(NC_NC_NC_NC);
SETUP_VREF(FALSE);
port_b_pullups(TRUE);



CHAR K;
INT I;
CHAR DATA[4], CLAVE[4];

LCD_INIT();
KBD_INIT();


LCD_GOTOXY(3,1);
LCD_PUTC("***BIENVENIDO***");
LCD_GOTOXY(8,2);
LCD_PUTC("PARA");
LCD_GOTOXY(3,3);
LCD_PUTC("INGRESAR PASSWORD");
LCD_GOTOXY(3,4);
LCD_PUTC("MARQUE LA TECLA #");


DO
{
   K=KBD_GETC();
}WHILE(K!='#');


WHILE(TRUE)
{
K=KBD_GETC();
SWITCH(SECUENCIA)
{
   
   CASE 0: 
            I=0;
            PRINTF(LCD_PUTC,"\fPULSAR TECLA 1\n");
            WHILE(I<=3)
            {
               K=KBD_GETC();
               IF(K!=0)
                  {
                  DATA[I]=K;
                  I++;
                  LCD_GOTOXY(1,1);
                  PRINTF(LCD_PUTC,"PULSAR TECLA %u\n",I+1);
                  LCD_GOTOXY(I,2);
                  LCD_PUTC("*");
                  }
            }
   
            FOR(I=0;I<=3;I++)
            {
                  CLAVE[I]= READ_EEPROM(I);
            }
            IF ((DATA[0]==CLAVE[0])&&(DATA[1]==CLAVE[1])&&(DATA[2]==CLAVE[2] && DATA[3]==CLAVE[3]))
               {
               PRINTF(LCD_PUTC,"\fPUERTA ABIERTA");
               LCD_GOTOXY(1,2);
               LCD_PUTC("BIENVENIDO");
               LCD_GOTOXY(1,3);
               LCD_PUTC("A");
               LCD_GOTOXY(1,4);
               LCD_PUTC("CASA");
               OUTPUT_HIGH(PIN_A0);
               DELAY_MS(1000);
               LCD_PUTC("\f");
               SECUENCIA=1; //SIGUIENTE PASO
               }       
            ELSE
            {
                 ERRORES++;
                 IF(ERRORES==3){
                 OUTPUT_HIGH(PIN_D0);}
                 LCD_GOTOXY(1,1);
                 PRINTF(LCD_PUTC,"\fCLAVE ERRONEA");
                 LCD_GOTOXY(1,2);
                 LCD_PUTC("PUERTA CERRADA");
                 LCD_GOTOXY(1,3);
                 LCD_PUTC("NUMERO DE FALLOS:");
                 LCD_GOTOXY(1,4);
                 PRINTF(LCD_PUTC,"%u",ERRORES);
                 DELAY_MS(1500);
                 SECUENCIA=0; // VOLVER AL INICIO
            }
            BREAK;
    CASE 1: LCD_GOTOXY(1,1);
            LCD_PUTC("QUE DESEA HACER");
            LCD_GOTOXY(1,2);
            LCD_PUTC("1-PRENDER LUZ");
            LCD_GOTOXY(1,3);
            LCD_PUTC("2-APAGAR LUZ");
            IF(K=='1')
            {
            OUTPUT_HIGH(PIN_C0);
            }
            IF(K=='2')
            {
            OUTPUT_LOW(PIN_C0);
            }
            BREAK;
}//FIN DEL SWITCH
}//FIN DEL CICLO INFINITO WHILE
}//FIN DEL MAIN PRINCIPAL
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: migsantiago en 10 de Mayo de 2010, 22:38:47
Ohh pensaba que no manejarías ASCII

Checa esta línea, te faltan paréntesis...

Código: [Seleccionar]
IF ((DATA[0]==CLAVE[0])&&(DATA[1]==CLAVE[1])&&(DATA[2]==CLAVE[2] && DATA[3]==CLAVE[3]))
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: jhozate en 10 de Mayo de 2010, 22:45:08
 :( sigue igual
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: BrunoF en 10 de Mayo de 2010, 23:06:24
Eso te pasa porque el CCS es una histérica con el tamaño por defecto de los datos a grabar en la EEPROM.

Proba poniendo:

#ROM int8 0XF00000={'1','2','3','4'}

Y que CCS se apiade de nuestras canas...
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: jhozate en 10 de Mayo de 2010, 23:14:29
gracias santiago y bruno :-/ juraria q habia probado eso, pero ya funciona bien, ahora me surge una duda. Durante programa puedo cambiar esos datos, pero entonces cada vez que resetee el pic vuelve el 1 2 3 4?
Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: BrunoF en 10 de Mayo de 2010, 23:17:55
No no. Esos serían los contenidos iniciales de la EEPROM. Si los cambiás no vuelven más a 1,2,3,4 hasta que regrabes el PIC o el programa internamente decida volverlos a 1,2,3,4(alguna rutina de reseteo general de la aplicacion que decidas sobreescriba la EEPROM con esos valores iniciales).

Título: Re: Datasheet 18F4550 y memoria EEPROM.
Publicado por: jhozate en 10 de Mayo de 2010, 23:25:30
 :mrgreen: gracias!