Electronics > Beginners
Programming CAT28C65
(1/1)
koba30:
Hi

I am programming a EEPROM with a Arduino Mega, i have two EEPROM types, ATMEL AT28C64B, that works fine, reading and programming works, but the other one a CAT28C65BP only is possible reading, i check the programming software proteccion on the two types, on the ATMEL i can activate and desactivate the software proteccion.


--- Code: ---//Lectura
//mostrando los datos de cada direccion por medio del leds
//Definimos puerto de direcciones
#define A0 2
#define A1 3
#define A2 4
#define A3 5
#define A4 6
#define A5 7
#define A6 8
#define A7 9
#define A8 10
#define A9 11
#define A10 12
#define A11 32
#define A12 33
#define A13 34
#define A14 35
#define A15 36
#define W_enable 38
#define ReadWrite 39
#define Out_enable 40
#define Chip_enable 41
//Definimos puerto de datos
#define D0 22
#define D1 23
#define D2 24
#define D3 25
#define D4 26
#define D5 27
#define D6 28
#define D7 29
long addr=0;
byte datosmem=0;
int contador=0;
int datos=0;
/////////////////////////////////////////////////////////
void SetAddress(long a){
digitalWrite(A0,  (a&1)?HIGH:LOW    );
digitalWrite(A1,  (a&2)?HIGH:LOW    );
digitalWrite(A2,  (a&4)?HIGH:LOW    );
digitalWrite(A3,  (a&8)?HIGH:LOW    );
digitalWrite(A4,  (a&16)?HIGH:LOW   );
digitalWrite(A5,  (a&32)?HIGH:LOW   );
digitalWrite(A6,  (a&64)?HIGH:LOW   );
digitalWrite(A7,  (a&128)?HIGH:LOW  );
digitalWrite(A8,  (a&256)?HIGH:LOW  );
digitalWrite(A9,  (a&512)?HIGH:LOW  );
digitalWrite(A10,  (a&1024)?HIGH:LOW  );
digitalWrite(A11,  (a&2048)?HIGH:LOW  );
digitalWrite(A12,  (a&4096)?HIGH:LOW  );
digitalWrite(A13,  (a&8192)?HIGH:LOW  );
digitalWrite(A14,  (a&16384)?HIGH:LOW  );
digitalWrite(A15,  (a&32768)?HIGH:LOW  );
}
/////////////////////////////////////////////////////
void SetData(long a){
digitalWrite(D0,  (a&1)?HIGH:LOW    );
digitalWrite(D1,  (a&2)?HIGH:LOW    );
digitalWrite(D2,  (a&4)?HIGH:LOW    );
digitalWrite(D3,  (a&8)?HIGH:LOW    );
digitalWrite(D4,  (a&16)?HIGH:LOW   );
digitalWrite(D5,  (a&32)?HIGH:LOW   );
digitalWrite(D6,  (a&64)?HIGH:LOW   );
digitalWrite(D7,  (a&128)?HIGH:LOW  );
}
//Funcion para leer datos
byte ReadData()
{
  byte b = 0;

  if (digitalRead(D0) == HIGH) b |= 1;
  if (digitalRead(D1) == HIGH) b |= 2;
  if (digitalRead(D2) == HIGH) b |= 4;
  if (digitalRead(D3) == HIGH) b |= 8;
  if (digitalRead(D4) == HIGH) b |= 16;
  if (digitalRead(D5) == HIGH) b |= 32;
  if (digitalRead(D6) == HIGH) b |= 64;
  if (digitalRead(D7) == HIGH) b |= 128;

  return(b);
}
/////////////////////////////////////////////////////////////////
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);                     //Inicio puerto serial
pinMode(13,OUTPUT);                       //Configuro salidas direcciones
pinMode(A0,OUTPUT);
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(A3,OUTPUT);
pinMode(A4,OUTPUT);
pinMode(A5,OUTPUT);
pinMode(A6,OUTPUT);
pinMode(A7,OUTPUT);
pinMode(A8,OUTPUT);
pinMode(A9,OUTPUT);
pinMode(A10,OUTPUT);
pinMode(A11,OUTPUT);
pinMode(A12,OUTPUT);
pinMode(A13,OUTPUT);
pinMode(A14,OUTPUT);
pinMode(A15,OUTPUT);
pinMode(W_enable,OUTPUT);
pinMode(ReadWrite,INPUT);
pinMode(Out_enable,OUTPUT);
pinMode(Chip_enable,OUTPUT);
delay(50);
/////////////////////////////////////////////////////
}
/////////////////////////////////////////////////////////////////
void loop() {
  // put your main code here, to run repeatedly:
  if (digitalRead (ReadWrite)==0){                //Cero para leer
//Configuro entradas pines de datos
pinMode(D0,INPUT);           
pinMode(D1,INPUT);
pinMode(D2,INPUT);
pinMode(D3,INPUT);
pinMode(D4,INPUT);
pinMode(D5,INPUT);
pinMode(D6,INPUT);
pinMode(D7,INPUT);
digitalWrite(W_enable,HIGH);
digitalWrite(Chip_enable,HIGH);
digitalWrite(Out_enable, HIGH);
Serial.print("0\t1\t2\t3\t4\t5\t6\t7\tAddress");
Serial.println(" ");
while(addr<32)                                   //Lee hasta la posicion anterior
{                                                 //a la direccion puesta
SetAddress(addr);
delay(1);
digitalWrite(Chip_enable,LOW);
delayMicroseconds(10);
digitalWrite(Out_enable,LOW);
delay(1);
datosmem=ReadData();
digitalWrite(Out_enable,HIGH);
digitalWrite(Chip_enable,HIGH);                           
Serial.print(datosmem);                         
Serial.print("\t");
addr=addr+1;
contador=contador+1;
if(contador==8)
{
  Serial.println(addr);
  contador=0;
}
}
  }
  else {                                        //Si ReadWrite es 1 ejecuto codigo abajo
////////////////////////////////////////////////////////////////////////\
/////////////////// ESCRITURA///////////////////////////////////////////
//Configuro entradas pines de datos
pinMode(D0,OUTPUT);           
pinMode(D1,OUTPUT);
pinMode(D2,OUTPUT);
pinMode(D3,OUTPUT);
pinMode(D4,OUTPUT);
pinMode(D5,OUTPUT);
pinMode(D6,OUTPUT);
pinMode(D7,OUTPUT);
digitalWrite(Out_enable,HIGH);                    // High:pines datos ENTRADA / Low:pines datos SALIDA
digitalWrite(W_enable,HIGH);
digitalWrite(Chip_enable,HIGH);
Serial.print("0\t1\t2\t3\t4\t5\t6\t7\tAddress");
Serial.println(" ");
while(addr<32)                                   //Lee hasta la posicion anterior
{                                                 //a la direccion puesta
//////////////////////////////////////////////////////////
/*
SetAddress(5461);
SetData(170);
digitalWrite(Chip_enable,LOW);
delayMicroseconds(10);
digitalWrite(W_enable,LOW);
delay(5);
digitalWrite(W_enable,HIGH);
digitalWrite(Chip_enable,HIGH);
delay(5);
SetAddress(2730);
SetData(85);
digitalWrite(Chip_enable,LOW);
delayMicroseconds(10);
digitalWrite(W_enable,LOW);
delay(5);
digitalWrite(W_enable,HIGH);
digitalWrite(Chip_enable,HIGH);
delay(5);
SetAddress(5461);
SetData(160);
digitalWrite(Chip_enable,LOW);
delayMicroseconds(10);
digitalWrite(W_enable,LOW);
delay(5);
digitalWrite(W_enable,HIGH);
digitalWrite(Chip_enable,HIGH);
delay(5);
*/
////////////////////////////////////////////////////////
SetAddress(addr);
SetData(datos);
//datos=datos+1;
digitalWrite(Chip_enable,LOW);
delayMicroseconds(10);
digitalWrite(W_enable,LOW);                 
delay(5);                               
digitalWrite(W_enable,HIGH);                   
digitalWrite(Chip_enable,HIGH);
delay(5);
Serial.print(datos);                         
Serial.print("\t");
addr=addr+1;
contador=contador+1;
if(contador==8)
{
  Serial.println(addr);
  contador=0;
}
}
  }
while(true)
digitalWrite(13,HIGH);
digitalWrite(Chip_enable,HIGH);
digitalWrite(Out_enable,HIGH);
}

--- End code ---


Can anybody helpme to know what is happening to fail the programming on the CAT28C65.

Thanks in advance.
Navigation
Message Index
There was an error while thanking
Thanking...

Go to full version
Powered by SMFPacks Advanced Attachments Uploader Mod