Skip to content

Instantly share code, notes, and snippets.

@houmei
Created June 6, 2020 12:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save houmei/526371f9e76a9313210b80b3060fd2eb to your computer and use it in GitHub Desktop.
Save houmei/526371f9e76a9313210b80b3060fd2eb to your computer and use it in GitHub Desktop.
Read PROM on Arduino MEGA 2650
// read 2764-27512 ROM by Arduino MEGA 2650
//
// unsigned char Data[8] = {46,48,50,53,51,49,47,45};
// unsigned char Addr[16] = {44,42,40,38, 36,34,32,30, 33,35,41,37, 28,31,29,26};
unsigned char Data[8] = {46,48,50,53,51,49,47,45};
unsigned char Addr[16] = {44,42,40,38, 36,34,32,30, 33,35,41,37, 28,31,29,26};
unsigned char OE = 39 ;
unsigned char CS = 43 ;
unsigned char TMM2364_Vpp = Addr[15];
unsigned char TMM2364_CS1 = Addr[14];
unsigned char TMM2364_CS2 = Addr[13];
unsigned int romsize = 13 ; // 2764 [12:0]
unsigned int maxaddr = 1 ;
unsigned int btnA=52;
void setup() {
for(int i=0;i<8;i++) pinMode(Data[i],INPUT);
for(int i=0;i<15;i++) { pinMode(Addr[i],OUTPUT); digitalWrite(Addr[i],0); }
pinMode(OE,OUTPUT); digitalWrite(OE,1);
pinMode(CS,OUTPUT); digitalWrite(CS,1);
for(int i=0;i<romsize;i++) maxaddr *=2 ;
maxaddr-- ;
pinMode(btnA,INPUT_PULLUP);
Serial.begin(9600);
Serial.println();
//digitalWrite(TMM2364_Vpp,1);
//digitalWrite(TMM2364_CS1,1);
//digitalWrite(TMM2364_CS2,1);
digitalWrite(OE,0);
digitalWrite(CS,0);
}
void loop() {
unsigned char d;
while(digitalRead(btnA)) ;
Serial.println();
Serial.print("@00000000");
// Serial.println();
for (unsigned int aloop=0; aloop<=maxaddr; aloop++) {
setAddr(aloop,romsize);
d=getData();
if (aloop%16==0) {
Serial.println(); // sprinthex(aloop,4); Serial.print(" :");
} else {
Serial.print(" ");
}
sprinthex(d,2);
}
Serial.println();
delay(1000);
}
/*
void setAddr(unsigned int address, unsigned int size) {
int t;
if (size>=16 || size==0) return;
for (int i=0; i<=size-1; i++) {
t = (address & 1) ? 1 : 0 ;
digitalWrite(Addr[i],t);
address = address >> 1 ;
}
}
*/
void setAddr(unsigned int address, unsigned int size) {
int t=1;
if (size>=16 || size==0) return;
for (int i=0; i<=size-1; i++) {
digitalWrite(Addr[i], (address & t)?HIGH:LOW);
t *=2 ;
delay(1);
}
}
/*
unsigned char getData(void) {
unsigned char s,t ;
s=0;
for(int i=0; i<8; i++) {
s = s << 1 ;
t = Data[i]; t=digitalRead(t);
delay(5);
if (t) s = s | 1 ;
}
return s;
}
*/
unsigned char getData(void) {
unsigned char s ;
s=0;
if (digitalRead(Data[0])) s |= 1 ;
if (digitalRead(Data[1])) s |= 2 ;
if (digitalRead(Data[2])) s |= 4 ;
if (digitalRead(Data[3])) s |= 8 ;
if (digitalRead(Data[4])) s |= 16 ;
if (digitalRead(Data[5])) s |= 32 ;
if (digitalRead(Data[6])) s |= 64 ;
if (digitalRead(Data[7])) s |= 128 ;
return s;
}
void sprinthex(unsigned int x, int dg) {
if (dg>=4) if (x<0x1000) Serial.print("0");
if (dg>=3) if (x<0x100) Serial.print("0");
if (dg>=2) if (x<0x10) Serial.print("0");
Serial.print(x,HEX);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment