Autor Tema: Errores con memoria 24LC512 y ADC simulando en PROTEUS  (Leído 5657 veces)

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

Desconectado demorales

  • PIC10
  • *
  • Mensajes: 9
Errores con memoria 24LC512 y ADC simulando en PROTEUS
« en: 28 de Julio de 2008, 16:30:45 »
Hola,

Estoy simulando en proteus el acceso a unas memorias 24LC512, cuando estoy haciendo lectura, despues de haber capturado un byte hago el i2c_stop(), condicion de parada, en ese momento me sale una advertencia en el proteus que dice: "Stop condition whilst memory is tramitting data is unrealiable", puse antes de dar la condicion de parada 20 ms de retardo, pero aun asi  me sigue saliendo este error. Alguien sabe si es un problema del simulador, del compilador o que estoy haciendo mal? o al menos cuales son los tiempos que debo colocar entre cada uno de los pasos del protocolo para leer datos y escribir datos en estas memorias. El codigo es el siguiente:

Código: [Seleccionar]
short int leer_memoria(long int address,BYTE device,BYTE sizedata) {
    byte state,byte_control,i; 
    i2c_start();
   delay_us(3);
   byte_control = (device << 1) & 0x0E;   
   state = i2c_write(byte_control | 0xA0);   //Selecciona la Memoria
   delay_us(3);
   byte_control = (device | 0xA1);
   if (state==0) {
      state = i2c_write(address>>8);   //Parte alta de direccion
      delay_us(3);
      if (state==0) {
         state = i2c_write(address & 0x00FF);      //Parte Baja de direccion
         delay_us(3);
         if (state==0) {
            i2c_start();
            delay_us(3);
            state = i2c_write(byte_control);
            delay_us(3);
            if (state==0) {
               for (i=0;i<sizedata;i++) {         //Envio de los datos
                  buffer[i] = i2c_read();
                  delay_us(3); 
               }
               delay_ms(20);
               i2c_stop();
               return 1;
            }               
         }
      }
   }
   if (state==1) {
      delay_ms(5);
      i2c_stop();
      return 0;
   }
}

short int escribir_momoria(long int address,BYTE device,BYTE data[],BYTE sizedata) {
    byte state,i;   
   i2c_start();
   delay_us(3);
   device = (device << 1) & 0x0E;
   state = i2c_write(device | 0xA0);      //Selecciona la Memoria
   delay_us(3);   
   if (state==0) {
       state = i2c_write(address>>8);   //Envia la Parte alta de direccion
       delay_us(3);
      if (state==0) {
         state = i2c_write(address & 0x00FF);   //Parte Baja de direccion         
         delay_us(3);
         if (state==0) {
            for (i=0;i<sizedata;i++) {         //Envio de los datos
               state = i2c_write(data[i]);   
               if (state==1) {
                  delay_ms(5);
                  i2c_stop();
                  return 0;
               }               
            }
            delay_ms(5);
            i2c_stop();
            return 1;
         }
      }         
   }
   if (state==1) {
      delay_ms(5);
      i2c_stop();
      delay_us(3);
      return 0;
   }



La otra advertencia que me sales es: "ADC conversion clock period (1.80848e-07) period is possibly invalid for device clock frequency.", no entiendo por que me sale este error si no estoy usando el conversor analogo digital, lo tengo deshabilitado. La configuracion que le he dado para deshabilitarlo es la siguiente:

Código: [Seleccionar]
   SET_TRIS_A(0b00010001);
   setup_adc(adc_off);
   setup_adc_ports(no_analogs);



Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Errores con memoria 24LC512 y ADC simulando en PROTEUS
« Respuesta #1 en: 28 de Julio de 2008, 23:42:39 »
Qué tal!
No has probado con las propias librerías del CCS? Yo he simulado las memorias i2c en proteus y ha funcionado perfecto. Al principio no funcionaba bien, y era porque estaba colocando resistencias de 10K a +5V, consulté en el foro y el maestro Pocher me sugirió usar resistencias "PULLUPS" que trae el proteus. Y así funcionó de lujo.
Habría que ver también el resto del programa por si no esté otra cosa por allí dando problemas.
En lo que tenga un tiempo busco algún programa ejemplo que tenga de escribir en las memorias externas y lo publico, no más dame tiempo porque estoy un poco liado últimamente..
Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Errores con memoria 24LC512 y ADC simulando en PROTEUS
« Respuesta #2 en: 28 de Julio de 2008, 23:47:53 »
Aquí está el link donde mencioné lo de las memorias externas i2c usando FORCE_HW:
http://www.todopic.com.ar/foros/index.php?topic=22242.msg175636#msg175636
Allí está el código, puedes tomar algunas cosillas y adaptarlo a tus necesidades. No olvides mencionar tus avances!  :lol:
Nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado demorales

  • PIC10
  • *
  • Mensajes: 9
Re: Errores con memoria 24LC512 y ADC simulando en PROTEUS
« Respuesta #3 en: 29 de Julio de 2008, 01:37:58 »
Gracias Firepic,,, estoy usando las librerías del ccs, cuando simulo el circuito va bien, a veces me informa de errores en la escritura o lectura, por lo que creo que tengo problemas con los delay que hay que dejar entre instrucciones,,,, ahora el problema que menciono con el conversor AD me esta generando otros problemas,, hasta ahora he detectado que cuando configuro el PIC, el pin A1 hace unos cambios de estado que no controlo y me generan problemas en el circuito, (esto me pasaba con el proteus, pensé que eran fallas del simulador pero lo probé físicamente y también  obtuve el mismo resultado), supongo que es un problema de configuración pero la verdad que he intentado de todo y nada que me funciona.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Errores con memoria 24LC512 y ADC simulando en PROTEUS
« Respuesta #4 en: 29 de Julio de 2008, 16:22:16 »
Qué tal demorales! Sería bueno que cargaras el código completo a ver si no tienes algo mal por allí, tal vez en los fuses...
Ok un cordial saludo! nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado demorales

  • PIC10
  • *
  • Mensajes: 9
Re: Errores con memoria 24LC512 y ADC simulando en PROTEUS
« Respuesta #5 en: 30 de Julio de 2008, 19:14:43 »
el setup que le estoy dando es:

Código: [Seleccionar]
void setup(void)
   {
   setup_adc_ports(no_analogs);   
   setup_adc(adc_off);               //Disable ADC
   
   //Configuracion de puertos
   SET_TRIS_A(0b00010001);
   SET_TRIS_B(0b00101001);  //SET_TRIS_B(0b00111001);
   SET_TRIS_C(0b10100000);
   //Inicializacion de Puertos
   output_a(0b00000010);
   output_b(0xFF);
   output_c(0xE0);
   output_high(PCSIG);            //Reset to Modem Enfora
   
   //CONFIGURACION TIMER1 y 2
   SETUP_TIMER_2(T2_DISABLED,1,1);
   SETUP_TIMER_1(T1_DISABLED);
   SETUP_CCP1(CCP_OFF);
   SETUP_CCP2(CCP_OFF);
   //setup_counters(RTCC_INTERNAL,RTCC_DIV_8);     //configuro el timer
   //set_TIMER1(0x00);               //Establezco el timer1 A 0   
   
   setup_spi(false);
   setup_spi(SPI_SS_DISABLED);
   
   //ACTIVACION DE INTERRUPCIONES
   enable_interrupts(GLOBAL);                //Activo las interrupciones
   disable_interrupts(int_ssp);             //Activo la interrupcion del puerto de comunicacion ssp
   disable_interrupts(int_ext);             //Activar interrupcion externa
   disable_interrupts(int_rda);      //Int Rs-232
   disable_interrupts(INT_RTCC);
   disable_interrupts(INT_RB);
   disable_interrupts(INT_AD);
   disable_interrupts(INT_TBE);
   disable_interrupts(INT_TIMER1);
   disable_interrupts(INT_TIMER2);
   disable_interrupts(INT_CCP1);
   disable_interrupts(INT_CCP2);
   disable_interrupts(INT_BUSCOL);
   disable_interrupts(INT_EEPROM);
   disable_interrupts(INT_TIMER0);
   disable_interrupts(INT_COMP);
   init_ext_eeprom();
   lcd_init();
   }

y lo fuses

Código: [Seleccionar]
#include <16F876A.h>
#include<string.h>
#include "Declaraciones.h"


#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOCPD,NOWRT,NODEBUG,PROTECT
#use delay(clock=11059000)

#use fast_io(a)      //Cambio de estado de los puertos
#use fast_io(b)
#use fast_io(c)

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Errores con memoria 24LC512 y ADC simulando en PROTEUS
« Respuesta #6 en: 31 de Julio de 2008, 12:10:57 »
Bueno de los fuses lo único que veo es que para esa frecuencia de aprox. 1MHz no sería HS sino XT, ahora bien, ese no es el problema ya que proteus no ve los fuses del código... tú tienes que colocarselos en las propiedades del componente.
El error debe venir por código. Proteus da muchas advertencias que yo generalmente ignoro, como por ejemplo la del ADC, eso me sale bastante... pero es cuestión del modelo del componente y sus respectivos valores... pero definitivamente el error es código, ya que tampoco te funciona en físico.
Yo te recomendaría que uses la librería de CCS para esa memoria, y trates con las instrucciones write_ext_eeprom y read_ext_eeprom... a ver qué tal anda. Tiene que funcionar.
No olvides informar tus avances.
Saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado santicomp

  • PIC10
  • *
  • Mensajes: 1
Re: Errores con memoria 24LC512 y ADC simulando en PROTEUS
« Respuesta #7 en: 04 de Octubre de 2009, 15:58:01 »
Hola Estoy Intentando Simular escritura y lectura en una memoria 24lc512 con un pic 16f690 en proteus pero me salta un error en el debug
de  Attemp to Read Unimplemented Memory location at 0x093 with 0x01 ignored
mi version de proteus es 7.5sp3 Advaced Simulation y el CCS PCWHD 4.093
si alguien me pudiera decir que estoy haciendo mal o es un bug en el programa hace tiempo que estoy luchando con esto cualquier idea me sirve gracias

Desconectado maxibraun

  • PIC10
  • *
  • Mensajes: 1
Re: Errores con memoria 24LC512 y ADC simulando en PROTEUS
« Respuesta #8 en: 31 de Marzo de 2010, 17:02:16 »

Yo tuve el siguiente problema que puede tener que ver con lo que ocurrió.

Ejecutaba la función i2c_write(0xa0); y se me tildaba el programa del micro.
Entonces probé cambiar de versión de compilador.
Utilizando la versión 4.093 se me tildaba, pero usando la versión 4.023 no. Sin cambiar una coma del código.
Evidentemente hay alguna diferencia en cómo compila cada versión.
Eso me pasó con una memoria 24LC512 alimentada con 5[V], pullup de 4.7K y el micro PIC18F67J10.