Autor Tema: [PIC16 LOAD] Program or EEPROM data has invalid address [2003] for this device [  (Leído 804 veces)

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

Desconectado FFAQ

  • PIC10
  • *
  • Mensajes: 1
Alguien podria ayudarme, usando el pic16f690 me sale ese error en proteus a pesar de que el codigo compila correctamente
#include <pic.h>
/*   PIC Configuration Bit:
**   INTIO     - Using Internal RC No Clock
**   WDTDIS    - Wacthdog Timer Disable
**   PWRTEN    - Power Up Timer Enable
**   MCLREN    - Master Clear Enable
**   UNPROTECT - Code Un-Protect
**   UNPROTECT - Data EEPROM Read Un-Protect
**   BORDIS    - Borwn Out Detect Disable
**   IESODIS   - Internal External Switch Over Mode Disable
**   FCMDIS    - Monitor Clock Fail Safe Disable
*/
__CONFIG(INTIO & WDTDIS & PWRTEN & MCLREN & UNPROTECT \
  & UNPROTECT & BORDIS & IESODIS & FCMDIS);
// Using Internal Clock of 8 Mhz

#define FOSC 8000000L
// Servo definition and variables
#define MAX_VALUE 200
#define CCW_ROTATION MAX_VALUE - 20
#define CW_ROTATION MAX_VALUE - 10
#define STOP_ROTATION MAX_VALUE
#define THRESHOLD_VALUE 50
unsigned char pulse_max=0;
unsigned char pulse_top=0;
unsigned char top_value = 0;
void __interrupt() isr(void)
{
  if(T0IF) {               // TIMER0 Interrupt Flag
    pulse_max++;            // Pulse Max Increment
    pulse_top++;            // Pulse Top Increment

    /* MAX_VALUE=200 turn off the pulse */
    if (pulse_max >= MAX_VALUE) {
      pulse_max=0;
      pulse_top=0;
      RC2=0;                // Turn off RC2
    }

    /* top_value = MAX_VALUE - n, n=10: 10 x 0.1ms = 1.0ms, n=20: 20 x 0.1ms = 2.0ms */
    /* 2ms -> CCW Rotation, 1ms -> CW Rotation */
    if (pulse_top == top_value) {
      RC2=1;                // Turn On RC2
    }
    TMR0 = 156;             // Initial Value for 0.1ms Interrupt
    T0IF = 0;          // Clear TIMER0 interrupt flag
  }
}
void main(void)
{
  unsigned char ldr_left;
  unsigned char ldr_right;
  int ldr_diff;
  OSCCON=0x70;         // Select 8 Mhz internal clock
  ANSEL = 0x00;
ANSELH = 0x00;
TRISC = 0x00;
PORTC = 0x00;

  /* Initial Port Used */
  TRISC = 0x03;        // Set RC0 and RC1 as input others as Output
  ANSEL = 0x30;        // Set PORT AN4 and AN5 as analog input
  ANSELH = 0x00;       // Set PORT AN8 to AN11 as Digital I/O
  PORTC = 0x00;        // Turn Off all PORTC
  /* Init Servo Pulse */
  pulse_max=0;
  pulse_top=0;
  top_value = MAX_VALUE; // top_value = MAX_VALUE: Servo Motor Stop
  /* Initial ADC */
  ADCON1=0b00110000;   // Select the FRC for 8 Mhz
  /* Init TIMER0: Period: Fosc/4 x Prescaler x TMR0
     0.0005 ms x 2 * 100 = 0.1 ms */
  OPTION_REG = 0b00000000; // 1:2 Prescaller
  TMR0=156;            // Interupt every 0.1 ms
  T0IE = 1;             // Enable interrupt on TMR0 overflow
  GIE = 1;             // Global interrupt enable

  for(;;) {
    /* Read the ADC here */
    ADCON0=0b00010001;       // select left justify result. ADC port channel AN4
    GO_DONE=1;                // initiate conversion on the channel 4
    while(GO_DONE) continue;  // Wait for ldr_left conversion done
    ldr_left=ADRESH;         // Read 8 bits MSB, Ignore 2 bits LSB in ADRESL
    ADCON0=0b00010101;       // select left justify result. ADC port channel AN5
    GO_DONE=1;                // initiate conversion on the channel 5
    while(GO_DONE) continue;  // Wait for ldr_right conversion done
    ldr_right=ADRESH;        // Read 8 bits MSB, Ignore 2 bits LSB in ADRESL

    /* Get the different */
    ldr_diff=ldr_left - ldr_right;   

    if ((ldr_diff >= -THRESHOLD_VALUE) && (ldr_diff <= THRESHOLD_VALUE)) {
      top_value = MAX_VALUE;     // Stop the Servo Motor
    } else {
      if (ldr_diff > THRESHOLD_VALUE) {
        top_value = CCW_ROTATION;  // Counterclockwise Rotation
      } else {
        top_value = CW_ROTATION;   // Clockwise Rotation
       
        /* Init TIMER0: Period: Fosc/4 x Prescaler x TMR0
   0.0005 ms x 2 * 100 = 0.1 ms */

      }
    }
  }
}
/* Init TIMER0: Period: Fosc/4 x Prescaler x TMR0
   0.0005 ms x 2 * 100 = 0.1 ms */

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:[PIC16 LOAD] Program or EEPROM data has invalid address [2003] for this device [
« Respuesta #1 en: 04 de Septiembre de 2022, 22:20:32 »
Alguien podria ayudarme, usando el pic16f690 me sale ese error en proteus a pesar de que el codigo compila correctamente

Si te compila correctamente, no saldría ningún error


Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:[PIC16 LOAD] Program or EEPROM data has invalid address [2003] for this device [
« Respuesta #2 en: 04 de Septiembre de 2022, 22:28:15 »
Buscando ese error en google



https://www.electro-tech-online.com/threads/proteus-simulation-error.141061/


Lo que indica es que al intentar acceder a la memoria EEPROM de tu dispositivo, a las direcciones donde deseas escribir y/o leer algo, no existe.

Lo más seguro es que tomaste el código para un PIC y lo estás deseando implementar en otro donde una de las características que posee, en este caso la memoria EEPROM, no corresponde o no son iguales.

Tampoco se ve en el código una rutina u algo relacionado con la administración de esa región de la memoria.

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:[PIC16 LOAD] Program or EEPROM data has invalid address [2003] for this device [
« Respuesta #3 en: 04 de Septiembre de 2022, 22:45:29 »
Estaba buscando tu problema y parece algo común, hasta en este foro hay alguien que hace la misma pregunta sin respuesta:

https://www.todopic.com.ar/foros/index.php?topic=24665.0

Ahora comprendo lo que dices que compila bien, pero al intentar simular el hexadecimal, te da ese error a pesar que no estás trabajando con esa región de la memoria.

Y parece que es un error de proteus que no logra interpretar la EEPROM para la simulación (A pesar que no se la use)

EN ninguna parte dicen como solucionarlo, sólo acá indica que se solucionó al rehacer el proyecto.

Citar
Al intentar obtener el IC en proteus, intenté abrir el proyecto y estaba dañado y no me dejaba abrirlo. Así que lo he vuelto a hacer. Cuando haya simulado el nuevo proyecto de nuevo para ver los errores. Ha funcionado correctamente. Así que supongo que todo fue porque el proyecto anterior estaba mal. Gracias por la ayuda

https://electronics.stackexchange.com/questions/485571/proteus-program-address-is-not-within-code-memory

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:[PIC16 LOAD] Program or EEPROM data has invalid address [2003] for this device [
« Respuesta #4 en: 04 de Septiembre de 2022, 23:31:45 »

A ese código lo compilo con XC8 y lo simulo en Proteus 8.12 y no da error.

(Solamente Proteus protesta porque entre la selección del canal y el inicio de la conversión no dejaste pasar un tiempo)


 

anything