Created
June 6, 2020 12:36
-
-
Save houmei/526371f9e76a9313210b80b3060fd2eb to your computer and use it in GitHub Desktop.
Read PROM on Arduino MEGA 2650
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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