| Tauno Erik Dec 10 |
I found this tiny EEPROM from an old random board. Soldered it on copper board to use it as a through-hole component and to use on the breadboard The EEPROM is 24C02N. It uses i2C to communicate and is relatively easy to read/write. I used Arduino Nano for that. Some functions I wrote: #include <Arduino.h> #include <Wire.h> // TwoWire // read 0b10100001 // write 0b10100000 const int DEVICE_ADDR = 0b01010000; // 0 + 7bit address const int MEM_SIZE_BYTES = 256; /* Write Byte */ void write_byte(int word_addr, uint8_t data) { Wire.beginTransmission(DEVICE_ADDR); Wire.write(word_addr); Wire.write(data); Wire.endTransmission(); } /* Write array to eepromm */ void write_array(uint8_t word_addr, int data[], int size) { Wire.beginTransmission(DEVICE_ADDR); Wire.write(word_addr); for (int i = 0; i < size; i++) { Wire.write(data[i]); } Wire.endTransmission(); } /* Random Read Byte */ uint8_t read_byte(uint8_t word_addr) { uint8_t data = 0; Wire.beginTransmission(DEVICE_ADDR); Wire.write(word_addr); Wire.endTransmission(); //delay(1); Wire.requestFrom(DEVICE_ADDR, 1); // read 1 byte //delay(1); if ( Wire.available() ) { data = Wire.read(); } return data; } /* Read to array */ void read_to_array(int addr, int * array, int size ) { Wire.beginTransmission(DEVICE_ADDR); Wire.write(addr); Wire.endTransmission(); delay(1); for (int i = 0; i < size; i++) { Wire.requestFrom(DEVICE_ADDR, 1); // read 1 byte delay(1); if ( Wire.available() ) { array[i] = Wire.read(); } } } /* Print Memory content */ void print_ascii_table() { int stepp = 16; int line[stepp]; for (int address = 1; address < MEM_SIZE_BYTES; address += stepp) { char print_addr[6]; sprintf(print_addr, "%04x ", address); Serial.print(print_addr); for (int byte = 0; byte < stepp; byte++) { char hex_data[4]; line[byte] = read_byte(address+byte); sprintf(hex_data, "%02x ", line[byte]); Serial.print(hex_data); } Serial.print(" "); for (int ascii = 0; ascii < stepp; ascii++) { Serial.print((char) line[ascii]); } Serial.println(); } } /* Print Memory content */ void print_char_table() { int stepp = 16; int line[stepp]; for (int address = 1; address < MEM_SIZE_BYTES; address += stepp) { char print_addr[6]; sprintf(print_addr, "%04x ", address); Serial.print(print_addr); for (int byte = 0; byte < stepp; byte++) { char hex_data[4]; line[byte] = read_byte(address+byte); sprintf(hex_data, "%02x ", line[byte]); Serial.print(hex_data); } Serial.print(" "); // print char for (int ascii = 0; ascii < stepp; ascii++) { if (line[ascii] < 32 || line[ascii] > 126) { Serial.print("."); } else { Serial.print((char) line[ascii]); } } Serial.println(); } } void print_binary() { /* for (int i = 0; i < 256; i++) // 256 bytes total { uint8_t data_byte = read_byte(i); Serial.print(data_byte, BIN); Serial.print(" "); } */ int stepp = 8; int line[stepp]; for (int address = 1; address < MEM_SIZE_BYTES; address += stepp) { char print_addr[6]; sprintf(print_addr, "%04x ", address); Serial.print(print_addr); for (int byte = 0; byte < stepp; byte++) { //char hex_data[4]; line[byte] = read_byte(address+byte); // sprintf(hex_data, "%02x ", line[byte]); // Serial.print(hex_data); Serial.print(line[byte], BIN); Serial.print(" "); } // print char for (int ascii = 0; ascii < stepp; ascii++) { if (line[ascii] < 32 || line[ascii] > 126) { Serial.print("."); } else { Serial.print((char) line[ascii]); } } Serial.println(); } } void setup() { Serial.begin(115200); Wire.begin(); //write_byte(254, 105); //print_ascii_table(); print_char_table(); //print_binary(); /* int my_data[10] = {}; write_array(1, my_data, 10); int data[10]; read_to_array(1, data, 10); for (int i = 0; i < 10; i++) { Serial.print(data[i]); } */ } void loop() { } Links: |
| | | You can also reply to this email to leave a comment. |
|
|
|
|
No comments:
Post a Comment