├── .gitignore ├── LICENSE ├── README.md ├── eeprom-programmer.ino ├── populated-board.jpg └── schematic ├── Arduino_Nano.kicad_mod ├── C_Disc_D5.0mm_W2.5mm_P5.00mm.kicad_mod ├── DIP254P1524X482-28.kicad_mod ├── DIP254P762X508-16.kicad_mod ├── eeprom-programmer.dcm ├── eeprom-programmer.kicad_pcb ├── eeprom-programmer.lib ├── eeprom-programmer.net ├── eeprom-programmer.pro └── eeprom-programmer.sch /.gitignore: -------------------------------------------------------------------------------- 1 | *cache* 2 | *-backup 3 | *.bak 4 | *.bck 5 | sym-lib-table 6 | mmap_* -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Warren Mann 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # eeprom-programmer 2 | An Arduino Nano sketch and schematic for an Atmel 28cx programmer. The schematic started out only targeting 8kx8 chips (rev. A) but has been updated to connect all address lines for the 28cx series (rev. B), so any of those eeproms should work up to the 32kx8 chips. The design is based on [this one](https://youtu.be/K88pgWhEb1M), from Ben Eater. 3 | 4 | The Arduino Nano sketch implements a serial interface to the programmer. It accepts one-letter commands: 5 | - e - erase the eeprom 6 | - f - fill eeprom with incrementing bytes 7 | - h - help (this) text 8 | - l - lock the eeprom against writes 9 | - r - read and dump eeprom contents 10 | - s - set the size of the eeprom 11 | - u - unlock eeprom writes 12 | - v - software version info 13 | - x - xmodem transfer binary file to eeprom 14 | 15 | Any standard terminal program can be used to talk to the programmer. I use the following: 16 | - [serial](http://www.decisivetactics.com/products/serial/) for the Mac 17 | - [teraterm](https://ttssh2.osdn.jp/index.html.en) for Windows 18 | - [minicom](https://linux.die.net/man/1/minicom) for Linux 19 | 20 | Be sure to set the size of your target eeprom with the s command before doing anything. It doesn't affect the chip in any way, but tells the programmer what size your chip is for the erase, fill and read commands and error checking in the xmodem transfer. 21 | 22 | The programmer uses standard x-modem, as provided by any respectable terminal program—and certainly all of the 23 | above listed terminal programs—to put binary files onto the eeprom. No other software is required. The programmer 24 | will verify every 64 bytes as they are written (the size of an internal eeprom page). 25 | 26 | Although the eeprom chips are supposed to come from the factory unlocked, I've heard stories of some chips being 27 | purchased off ebay that arrive locked. Try doing an unlock on a chip if you have problems writing to it. 28 | 29 | When doing an xmodem transfer to the chip, the program will wait indefinitely for you to start the xmodem transfer from your terminal software. You can abort the transfer at this point by pressing the ESC key. Otherwise, once you have started the transfer, it will continue until the process completes or an error is detected. 30 | 31 | If you want to fill the eeprom with a specific byte, say the 6502 nop 0xea, just change 32 | 33 | fill[j] = i + j; 34 | on line 490 to 35 | 36 | fill[j] = 0xea; 37 | -------------------------------------------------------------------------------- /eeprom-programmer.ino: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * eeprom-programmer.ino 3 | * 4 | * Arduino Nano code for the at28c64b-15pu programmer. Note that this code is 5 | * specific to the Nano (really, the ATmega328P). If you use this on another 6 | * device, either make sure the port mappings are the same or you will need to 7 | * rewrite most of the code to use the correct mappings. 8 | * 9 | * I haven't looked at other EEPROMs, so I don't know how easy/difficult it 10 | * would be to adapt this code to one. I'm not even sure if the pinouts for the 11 | * address lines or page sizes for the block write operations are the same 12 | * for different sizes of this same chip. 13 | * 14 | * The clock speed of the Nano (16MHz) is also assumed for getting the number 15 | * of nops to use for delays: 1 nop = 1 clock cycle = 1 / speed in MHz. So, 16 | * in the case of the Nano, 1 nop = 1 / 16000000 = 62.5ns. 17 | * 18 | * Serial port settings: 19 | * 57600, 8n1, no flow control 20 | * 21 | * If you want to use other than 57600, change the SERIAL_BAUD constant below. 22 | * 23 | * Terminal settings: 24 | * turn off local echo 25 | * Newline receive: LF 26 | * Newline transmit: LF 27 | */ 28 | 29 | 30 | /* These are used in the x-modem protocol */ 31 | #define CHAR_SOH 0x01 32 | #define CHAR_EOT 0x04 33 | #define CHAR_ACK 0x06 34 | #define CHAR_NAK 0x15 35 | #define CHAR_ETB 0x17 36 | #define CHAR_CAN 0x18 37 | #define CHAR_ESC 0x1b 38 | #define CHAR_C 0x43 39 | 40 | #define XMODEM_RETRIES 10 41 | #define XMODEM_DELAY 2000 42 | #define XMODEM_PACKET_MAX 128 43 | 44 | /* Serial commands accepted by the programmer */ 45 | #define CMD_ERASE 'e' 46 | #define CMD_FILL 'f' 47 | #define CMD_HELP 'h' 48 | #define CMD_LOCK 'l' 49 | #define CMD_READ 'r' 50 | #define CMD_SIZE 's' 51 | #define CMD_UNLOCK 'u' 52 | #define CMD_VERSION 'v' 53 | #define CMD_XMODEM 'x' 54 | 55 | /* Software version 56 | */ 57 | #define VERSION_MAJ 1 58 | #define VERSION_MIN 2 59 | #define VERSION_BLD 0 60 | 61 | /* Change this to match whatever baud rate you want to use for the serial 62 | * connection. 63 | */ 64 | #define SERIAL_BAUD 57600 65 | 66 | /* Set this to the size, in bytes of the EEPROM. In the case of the at28c64b, 67 | * it's 8k. 68 | */ 69 | #define DEFAULT_EEPROM_SIZE 32768 70 | #define PAGE_SIZE 64 71 | 72 | /* Milliseconds to wait for a write to complete. */ 73 | #define WRITE_DELAY 25 74 | 75 | 76 | /* Pin assignments 77 | * 78 | * These pin assigments correspond to these port mappings on the Atmega328P 79 | * (and Atmega168): 80 | * 81 | * x4HC595 shift registers 82 | * PORTC, bit 4 = serial data pin (SER) 83 | * PORTC, bit 3 = serial clock pin (SRCLK) 84 | * PORTC, bit 2 = serial output enable (/OE) 85 | * PORTC, bit 1 = serial read clock (RCLK) 86 | * PORTC, bit 0 = reset all (/SRCLR) 87 | * 88 | * at28c64b eeprom 89 | * PORTB, bit 4 = eeprom output enable (/OE) 90 | * PORTB, bit 3 = eeprom chip enable (/CE) 91 | * PORTB, bit 2 = eeprom write enable (/WE) 92 | * PORTB, bit 1 = I/O7 93 | * PORTB, bit 0 = I/O6 94 | * PORTD, bit 7 = I/O5 95 | * PORTD, bit 6 = I/O4 96 | * PORTD, bit 5 = I/O3 97 | * PORTD, bit 4 = I/O2 98 | * PORTD, bit 3 = I/O1 99 | * PORTD, bit 2 = I/O0 100 | */ 101 | const int srSerialData = A4; 102 | const int srSerialClock = A3; 103 | const int srNotOutputEnable = A2; 104 | const int srReadClock = A1; 105 | const int srNotResetAll = A0; 106 | const int eeNotWriteEnable = 10; 107 | const int eeNotChipEnable = 11; 108 | const int eeNotOutputEnable = 12; 109 | const int eeD0 = 2; 110 | const int eeD1 = 3; 111 | const int eeD2 = 4; 112 | const int eeD3 = 5; 113 | const int eeD4 = 6; 114 | const int eeD5 = 7; 115 | const int eeD6 = 8; 116 | const int eeD7 = 9; 117 | 118 | unsigned int eeprom_size = DEFAULT_EEPROM_SIZE; 119 | 120 | 121 | /* Clear the outputs of all shift registers to 0 by toggling the /srclr line. 122 | * /SRCLR needs to be low for 120ns, worst case. That's 3 nops, counting a 123 | * nop as 60ns. 124 | */ 125 | void sr_clear(void) 126 | { 127 | PORTC = B00000100; 128 | __asm__ __volatile__ ("nop\n\t"); 129 | __asm__ __volatile__ ("nop\n\t"); 130 | __asm__ __volatile__ ("nop\n\t"); 131 | PORTC = B00000101; 132 | } 133 | 134 | 135 | /* Setup the shift registers and shift in an address bit. Assumes that the bit 136 | * in question has already been shifted into bit 4: so, in the same position as 137 | * the "1" here: 00010000. 138 | */ 139 | void __attribute__((always_inline)) sr_shift_bit(byte bit) 140 | { 141 | bit &= B00010000; 142 | // clear clock and data lines 143 | PORTC = B00000101 | bit; 144 | __asm__ __volatile__ ("nop\n\t"); 145 | PORTC = B00001101 | bit; 146 | __asm__ __volatile__ ("nop\n\t"); 147 | } 148 | 149 | 150 | /* Shifts out a given address on the 74HC595s. 151 | * 152 | * This is all about speed: no loops, no digitalRead()/Write(), always inline. 153 | * It's expected that the proper directions for the PORT bits used here are 154 | * already setup properly. Namely, PORTC bits 3 and 4 should be setup for 155 | * output. 156 | * 157 | * The observant programmer may notice we shift 16 bits onto the address lines. 158 | * This isn't a problem, even though we only have 13 address lines (on the 159 | * targetted 8k x 8 chip, chips with more memory, of course, will have more 160 | * address lines). The upper three bits simply aren't connected to anything and 161 | * the order in which the bits go out the shift registers guarantees that the 162 | * lower bits are always in the right place, no matter how many bits are 163 | * shifted out. If this ends up being used with a larger EEPROM, then this 164 | * function at least won't have to be modified. 165 | */ 166 | void __attribute__((always_inline)) sr_address(word address) 167 | { 168 | // disable output 169 | PORTC |= B00000100; 170 | 171 | // shift the address into the shift registers 172 | sr_shift_bit(address >> 11); 173 | sr_shift_bit(address >> 10); 174 | sr_shift_bit(address >> 9); 175 | sr_shift_bit(address >> 8); 176 | sr_shift_bit(address >> 7); 177 | sr_shift_bit(address >> 6); 178 | sr_shift_bit(address >> 5); 179 | sr_shift_bit(address >> 4); 180 | sr_shift_bit(address >> 3); 181 | sr_shift_bit(address >> 2); 182 | sr_shift_bit(address >> 1); 183 | sr_shift_bit(address); 184 | sr_shift_bit(address << 1); 185 | sr_shift_bit(address << 2); 186 | sr_shift_bit(address << 3); 187 | sr_shift_bit(address << 4); 188 | 189 | // make sure the clock and data lines are clear 190 | PORTC = B00000101; 191 | 192 | // put the address on the output pins by setting output enable low 193 | // and setting the read clock high 194 | PORTC = B00000011; 195 | } 196 | 197 | 198 | /* Puts a data value onto the data bus. The lower six bits of the data bus go 199 | * to the upper 6 bits of PORTD. PORTB's lower two bits hold the the upper two 200 | * bits of data. Again, this is about speed: The function is inline and uses 201 | * direct PORT writes. It's expected that all data pins are setup as OUTPUT 202 | * prior to this function being invoked. 203 | */ 204 | void __attribute__((always_inline)) write_data(byte data) 205 | { 206 | PORTD = ((PORTD & B00000011) | (data << 2)); 207 | PORTB = ((PORTB & B11111100) | (data >> 6)); 208 | } 209 | 210 | 211 | /* Reads the data value in the EEPROM at the address currently on the address 212 | * pins. Assumes that the I/O lines are already setup as INPUTs and that the 213 | * /OE line is set properly. 214 | */ 215 | byte __attribute__((always_inline)) read_data(void) 216 | { 217 | return ((PIND >> 2) | (PINB << 6)); 218 | } 219 | 220 | 221 | /* Set all I/O (data) pins to output 222 | */ 223 | void io_set_output(void) 224 | { 225 | // all data pins are outputs 226 | DDRD |= B11111100; 227 | DDRB |= B00000011; 228 | } 229 | 230 | 231 | /* Set all I/O (data) pins to input 232 | */ 233 | void io_set_input(void) 234 | { 235 | // all data pins are inputs 236 | DDRD &= B00000011; 237 | DDRB &= B11111100; 238 | } 239 | 240 | 241 | /* Executes the appropriate write sequence to enable the software locking 242 | * mechanism of the chip. After this function executes, the chip will not 243 | * recognize writes unless unlock_chip() is called. 244 | */ 245 | int lock_chip(void) 246 | { 247 | // Setup a known state. Enable chip. 248 | digitalWrite(eeNotChipEnable, LOW); 249 | digitalWrite(eeNotOutputEnable, HIGH); 250 | digitalWrite(eeNotWriteEnable, HIGH); 251 | 252 | // Set data lines to outputs 253 | io_set_output(); 254 | 255 | // aah to address 1555h 256 | sr_address(0x1555); 257 | write_data(0xaa); 258 | digitalWrite(eeNotWriteEnable, LOW); 259 | digitalWrite(eeNotWriteEnable, HIGH); 260 | 261 | // 55h to address 0aaah 262 | sr_address(0x0aaa); 263 | write_data(0x55); 264 | digitalWrite(eeNotWriteEnable, LOW); 265 | digitalWrite(eeNotWriteEnable, HIGH); 266 | 267 | // a0h to address 1555h 268 | sr_address(0x1555); 269 | write_data(0xa0); 270 | digitalWrite(eeNotWriteEnable, LOW); 271 | digitalWrite(eeNotWriteEnable, HIGH); 272 | 273 | delay(WRITE_DELAY); 274 | 275 | return 1; 276 | } 277 | 278 | 279 | /* Disables the software write protect mechanism. 280 | */ 281 | int unlock_chip(void) 282 | { 283 | // Setup a known state. Enable chip. 284 | digitalWrite(eeNotChipEnable, LOW); 285 | digitalWrite(eeNotOutputEnable, HIGH); 286 | digitalWrite(eeNotWriteEnable, HIGH); 287 | 288 | // Set data lines to outputs 289 | io_set_output(); 290 | 291 | // aah to address 1555h 292 | sr_address(0x1555); 293 | write_data(0xaa); 294 | digitalWrite(eeNotWriteEnable, LOW); 295 | digitalWrite(eeNotWriteEnable, HIGH); 296 | 297 | // 55h to address 0aaah 298 | sr_address(0x0aaa); 299 | write_data(0x55); 300 | digitalWrite(eeNotWriteEnable, LOW); 301 | digitalWrite(eeNotWriteEnable, HIGH); 302 | 303 | // 80h to address 1555h 304 | sr_address(0x1555); 305 | write_data(0x80); 306 | digitalWrite(eeNotWriteEnable, LOW); 307 | digitalWrite(eeNotWriteEnable, HIGH); 308 | 309 | // aah to address 1555h 310 | sr_address(0x1555); 311 | write_data(0xaa); 312 | digitalWrite(eeNotWriteEnable, LOW); 313 | digitalWrite(eeNotWriteEnable, HIGH); 314 | 315 | // 55h to address 0aaah 316 | sr_address(0x0aaa); 317 | write_data(0x55); 318 | digitalWrite(eeNotWriteEnable, LOW); 319 | digitalWrite(eeNotWriteEnable, HIGH); 320 | 321 | // 20h to address 1555h 322 | sr_address(0x1555); 323 | write_data(0x20); 324 | digitalWrite(eeNotWriteEnable, LOW); 325 | digitalWrite(eeNotWriteEnable, HIGH); 326 | 327 | delay(WRITE_DELAY); 328 | 329 | return 1; 330 | } 331 | 332 | 333 | /* Writes a single input byte at a specified address. 334 | */ 335 | int write_byte(word address, byte data) 336 | { 337 | // set data lines as outputs 338 | io_set_output(); 339 | 340 | // setup initial chip state 341 | digitalWrite(eeNotChipEnable, LOW); 342 | digitalWrite(eeNotOutputEnable, HIGH); 343 | digitalWrite(eeNotWriteEnable, HIGH); 344 | 345 | // set the address pins from the shift registers 346 | sr_address(address); 347 | 348 | // put the data on the EEPROM's i/o pins 349 | write_data(data); 350 | 351 | // setup the we-controlled write state 352 | digitalWrite(eeNotWriteEnable, LOW); 353 | 354 | // end the write state 355 | digitalWrite(eeNotWriteEnable, HIGH); 356 | 357 | delay(WRITE_DELAY); 358 | 359 | // byte was successfully written 360 | return 1; 361 | } 362 | 363 | 364 | /* Write a page of a given length (64 bytes max) at a given address. 365 | */ 366 | int write_page(word address, byte *data, byte len) 367 | { 368 | // all data pins are outputs 369 | io_set_output(); 370 | 371 | // setup initial state for control lines 372 | digitalWrite(eeNotChipEnable, LOW); 373 | digitalWrite(eeNotOutputEnable, HIGH); 374 | digitalWrite(eeNotWriteEnable, HIGH); 375 | 376 | while (len--) { 377 | // put address into shift registers 378 | sr_address(address++); 379 | // put data byte on EEPROM pins 380 | write_data(*data++); 381 | // bring write enable low 382 | digitalWrite(eeNotWriteEnable, LOW); 383 | // bring write enable high 384 | digitalWrite(eeNotWriteEnable, HIGH); 385 | } 386 | 387 | // turn off write state 388 | digitalWrite(eeNotWriteEnable, HIGH); 389 | digitalWrite(eeNotOutputEnable, LOW); 390 | 391 | // wait for updates to be committed to chip 392 | delay(WRITE_DELAY); 393 | 394 | return 1; 395 | } 396 | 397 | 398 | /* Write an xmodem packet 1 EEPROM page at a time. 399 | */ 400 | void write_packet(word address, byte *data, word len) 401 | { 402 | word i; 403 | 404 | for (i = 0; i < len; i += PAGE_SIZE, data += PAGE_SIZE) { 405 | write_page(address + i, data, PAGE_SIZE); 406 | } 407 | } 408 | 409 | 410 | /* Very that the received xmodem packet matches what was 411 | * written to the EEPROM. 412 | */ 413 | int verify_packet(word address, byte *data, word len) 414 | { 415 | word i; 416 | 417 | for (i = 0; i < len; i++, address++, data++) { 418 | if (read_byte(address) != *data) { 419 | return 0; 420 | } 421 | } 422 | return 1; 423 | } 424 | 425 | 426 | /* Erase the EEPROM by writing all 1s to it. We do it this way, since the 427 | * hardware isn't there to do a hardware erase. That would require putting 428 | * a 12 volt line in the circuit, and... why bother... 429 | */ 430 | int erase_eeprom(void) 431 | { 432 | byte fill[] = { 433 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 434 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 435 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 436 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 437 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 438 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 439 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 440 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 441 | }; 442 | word i; 443 | for (i = 0; i < eeprom_size; i += PAGE_SIZE) { 444 | if (i % 1024 == 0) { 445 | Serial.print("."); 446 | } 447 | if (!write_page(i, fill, PAGE_SIZE)) { 448 | return 0; 449 | } 450 | } 451 | return 1; 452 | } 453 | 454 | 455 | /* Returns the byte at the given address in the EEPROM. 456 | */ 457 | byte read_byte(word address) 458 | { 459 | byte data; 460 | 461 | digitalWrite(eeNotOutputEnable, HIGH); 462 | digitalWrite(eeNotWriteEnable, HIGH); 463 | digitalWrite(eeNotChipEnable, LOW); 464 | 465 | // all data pins are inputs 466 | io_set_input(); 467 | 468 | sr_address(address); 469 | 470 | digitalWrite(eeNotOutputEnable, LOW); 471 | 472 | data = read_data(); 473 | 474 | digitalWrite(eeNotOutputEnable, HIGH); 475 | 476 | return data; 477 | } 478 | 479 | 480 | /* Writes a pattern to the EEPROM. The pattern is address = address & 0xff. So, 481 | * essentially, every address is set to the value of its lower 8 bits. I guess 482 | * that's the long way to say, it repeats from 0 to 255 until the end of memory. 483 | */ 484 | int write_pattern(void) 485 | { 486 | byte fill[PAGE_SIZE]; 487 | word i, j; 488 | for (i = 0; i < eeprom_size; i += PAGE_SIZE) { 489 | for (j = 0; j < PAGE_SIZE; j++) { 490 | fill[j] = i + j; 491 | } 492 | if (i % 1024 == 0) { 493 | Serial.print("."); 494 | } 495 | if (!write_page(i, fill, PAGE_SIZE)) { 496 | return 0; 497 | } 498 | } 499 | return 1; 500 | } 501 | 502 | 503 | /* Reads the entire EEPROM. Prints the data out in the format: 504 | * aaaa xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ................ 505 | * Where aaaa is the address in hex, xx is 16 bytes of data in hex and 506 | * ............... is the ascii representation for each data byte, if it is 507 | * printable. 508 | */ 509 | void read_eeprom(void) 510 | { 511 | char s[6]; 512 | word i, j; 513 | byte d; 514 | for (i = 0; i < eeprom_size; i += 16) { 515 | sprintf(s, "%04x ", i); 516 | Serial.print(s); 517 | for (j = 0; j < 16; j++) { 518 | sprintf(s, " %02x", read_byte(i + j)); 519 | Serial.print(s); 520 | } 521 | Serial.print(" "); 522 | for (j = 0; j < 16; j++) { 523 | d = read_byte(i + j); 524 | sprintf(s, "%c", isprint(d) ? d : '.'); 525 | Serial.print(s); 526 | } 527 | Serial.println(""); 528 | } 529 | } 530 | 531 | 532 | /* Display terminal prompt 533 | */ 534 | void show_prompt(void) 535 | { 536 | Serial.print("> "); 537 | } 538 | 539 | 540 | /* Display serial command help. 541 | */ 542 | void cmd_help(void) 543 | { 544 | Serial.println("commands:"); 545 | Serial.print(CMD_ERASE); Serial.println(" - erase the eeprom"); 546 | Serial.print(CMD_FILL); Serial.println(" - fill eeprom with incrementing bytes"); 547 | Serial.print(CMD_HELP); Serial.println(" - help (this) text"); 548 | Serial.print(CMD_LOCK); Serial.println(" - lock the eeprom against writes"); 549 | Serial.print(CMD_READ); Serial.println(" - read and dump eeprom contents"); 550 | Serial.print(CMD_SIZE); Serial.print(" - set the size of the eeprom (currently "); Serial.print(eeprom_size / 1024); Serial.print("k x 8, "); 551 | if (eeprom_size == 8192) { 552 | Serial.print("AT28C64"); 553 | } else if (eeprom_size == 32768) { 554 | Serial.print("AT28C256"); 555 | } else { 556 | Serial.print("Unknown chip"); 557 | } 558 | Serial.println(")"); 559 | Serial.print(CMD_VERSION); Serial.println(" - print software version info"); 560 | Serial.print(CMD_UNLOCK); Serial.println(" - unlock eeprom writes"); 561 | Serial.print(CMD_XMODEM); Serial.println(" - xmodem transfer binary file to eeprom"); 562 | } 563 | 564 | 565 | /* Initial board setup. 566 | */ 567 | void setup() 568 | { 569 | pinMode(srSerialData, OUTPUT); 570 | pinMode(srSerialClock, OUTPUT); 571 | pinMode(srNotOutputEnable, OUTPUT); 572 | pinMode(srReadClock, OUTPUT); 573 | pinMode(srNotResetAll, OUTPUT); 574 | pinMode(eeNotWriteEnable, OUTPUT); 575 | pinMode(eeNotChipEnable, OUTPUT); 576 | pinMode(eeNotOutputEnable, OUTPUT); 577 | 578 | pinMode(LED_BUILTIN, OUTPUT); 579 | 580 | pinMode(eeD0, OUTPUT); 581 | pinMode(eeD1, OUTPUT); 582 | pinMode(eeD2, OUTPUT); 583 | pinMode(eeD3, OUTPUT); 584 | pinMode(eeD4, OUTPUT); 585 | pinMode(eeD5, OUTPUT); 586 | pinMode(eeD6, OUTPUT); 587 | pinMode(eeD7, OUTPUT); 588 | 589 | sr_clear(); 590 | 591 | digitalWrite(srSerialData, LOW); 592 | digitalWrite(srSerialClock, LOW); 593 | digitalWrite(srNotOutputEnable, HIGH); 594 | digitalWrite(srReadClock, LOW); 595 | 596 | digitalWrite(eeNotWriteEnable, HIGH); 597 | digitalWrite(eeNotChipEnable, LOW); 598 | digitalWrite(eeNotOutputEnable, HIGH); 599 | 600 | Serial.begin(SERIAL_BAUD); 601 | cmd_help(); 602 | show_prompt(); 603 | } 604 | 605 | 606 | /* Flush the serial input buffer 607 | */ 608 | void flush_serial_input(void) 609 | { 610 | while (Serial.available()) { 611 | Serial.read(); 612 | } 613 | } 614 | 615 | 616 | /* Sends the xmodem abort sequence out the serial port. 617 | */ 618 | void abort_xmodem(char *s) 619 | { 620 | int i; 621 | 622 | for (i = 0; i < 8; i++) { 623 | Serial.write(CHAR_CAN); 624 | Serial.flush(); 625 | delay(1000); 626 | } 627 | Serial.print("transfer aborted: "); 628 | Serial.println(s); 629 | flush_serial_input(); 630 | } 631 | 632 | 633 | /* Read the next available byte from the serial port. 634 | */ 635 | int read_serial(void) 636 | { 637 | while (!Serial.available()); 638 | return Serial.read(); 639 | } 640 | 641 | 642 | /* Erase the EEPROM. 643 | */ 644 | void cmd_erase(void) 645 | { 646 | Serial.print("erasing eeprom "); 647 | if (!erase_eeprom()) { 648 | Serial.println(" error"); 649 | return; 650 | } else { 651 | Serial.println(" ok"); 652 | } 653 | } 654 | 655 | 656 | /* Fill the EEPROM with a sequence. 657 | */ 658 | void cmd_fill(void) 659 | { 660 | Serial.print("filling eeprom "); 661 | if (!write_pattern()) { 662 | Serial.println(" error"); 663 | return; 664 | } else { 665 | Serial.println(" ok"); 666 | } 667 | } 668 | 669 | 670 | /* Lock the chip against writes. 671 | */ 672 | void cmd_lock(void) 673 | { 674 | Serial.print("locking chip ... "); 675 | if (lock_chip()) { 676 | Serial.println("ok"); 677 | } else { 678 | Serial.println("error"); 679 | } 680 | } 681 | 682 | 683 | /* Read the entire EEPROM. 684 | */ 685 | void cmd_read(void) 686 | { 687 | Serial.println("reading eeprom:"); 688 | read_eeprom(); 689 | Serial.println("all addresses read"); 690 | } 691 | 692 | 693 | /* Display size command help 694 | */ 695 | void cmd_size_help(void) 696 | { 697 | Serial.println("select new eeprom size:"); 698 | Serial.println("1 - 8k x 8 (AT28C64)"); 699 | Serial.println("2 - 32k x 8 (AT28C256)"); 700 | Serial.println("any other key to cancel"); 701 | } 702 | 703 | 704 | /* Set the EEPROM size. 705 | */ 706 | void cmd_size(void) 707 | { 708 | int ch; 709 | cmd_size_help(); 710 | show_prompt(); 711 | ch = read_serial(); 712 | if (ch == '1') { 713 | eeprom_size = 8192; 714 | } else if (ch == '2') { 715 | eeprom_size = 32768; 716 | } else { 717 | Serial.println(""); 718 | return; 719 | } 720 | Serial.print("eeprom size set to "); Serial.print(eeprom_size / 1024); Serial.print("k x 8 ("); 721 | if (eeprom_size == 8192) { 722 | Serial.print("AT28C64"); 723 | } else if (eeprom_size == 32768) { 724 | Serial.print("AT28C256"); 725 | } 726 | Serial.println(")"); 727 | Serial.println(""); 728 | cmd_help(); 729 | } 730 | 731 | 732 | /* Print software info. 733 | */ 734 | void cmd_version(void) 735 | { 736 | char version[12]; 737 | Serial.println("software version info:"); 738 | sprintf(version, "%02i\.%02i.%02i", VERSION_MAJ, VERSION_MIN, VERSION_BLD); 739 | Serial.print("version: "); 740 | Serial.println(version); 741 | } 742 | 743 | 744 | /* Disable software write protection. 745 | */ 746 | void cmd_unlock(void) 747 | { 748 | Serial.print("unlocking chip ... "); 749 | if (unlock_chip()) { 750 | Serial.println("ok"); 751 | } else { 752 | Serial.println("error"); 753 | } 754 | } 755 | 756 | 757 | /* Read the next available byte from the serial port. 758 | */ 759 | int xmodem_read_serial(void) 760 | { 761 | unsigned long start = millis(); 762 | while (!Serial.available()) { 763 | if (millis() - start >= XMODEM_DELAY) { 764 | return -1; 765 | } 766 | } 767 | return Serial.read(); 768 | } 769 | 770 | 771 | /* Print packet data 772 | */ 773 | void print_packet_data(byte *packet) { 774 | char s[3]; 775 | for (int i = 1; i <= XMODEM_PACKET_MAX; i++) { 776 | sprintf(s, "%02x ", packet[i - 1]); 777 | Serial.print(s); 778 | if (i % 16 == 0) { 779 | Serial.println(""); 780 | } 781 | } 782 | } 783 | 784 | 785 | /* Begin xmodem transfer to the EEPROM. 786 | */ 787 | void cmd_xmodem(void) 788 | { 789 | unsigned long int start; 790 | word addr = 0; 791 | int retry; 792 | int ch; 793 | byte pkt_len; 794 | byte prev_pkt_num = 0; 795 | byte pkt_num = 1; 796 | byte remote_pkt_num; 797 | byte remote_not_pkt_num; 798 | byte remote_chk; 799 | byte chk; 800 | byte response_char = CHAR_NAK; 801 | byte error_count = 0; 802 | static byte packet[XMODEM_PACKET_MAX]; 803 | char s[12]; 804 | char *last_error; 805 | 806 | Serial.println("Starting xmodem"); 807 | Serial.println("Start transfer now or press 'ESC' key to abort"); 808 | 809 | while (1) { 810 | // packet start 811 | retry = XMODEM_RETRIES; 812 | while (retry--) { 813 | if (response_char) { 814 | Serial.write(response_char); 815 | Serial.flush(); 816 | ch = xmodem_read_serial(); 817 | switch (ch) { 818 | case CHAR_SOH: 819 | goto begin; 820 | case CHAR_ESC: 821 | Serial.println("Aborted by user"); 822 | return; 823 | case CHAR_CAN: 824 | ch = xmodem_read_serial(); 825 | if (ch == CHAR_CAN) { 826 | flush_serial_input(); 827 | } 828 | Serial.write(CHAR_ACK); 829 | Serial.flush(); 830 | Serial.println("Remote cancelled transfer"); 831 | return; 832 | case CHAR_EOT: 833 | Serial.write(CHAR_NAK); 834 | Serial.flush(); 835 | delay(1000); 836 | ch = xmodem_read_serial(); 837 | if (ch == CHAR_EOT) { 838 | Serial.write(CHAR_ACK); 839 | Serial.flush(); 840 | delay(1000); 841 | flush_serial_input(); 842 | Serial.println("transfer complete"); 843 | return; 844 | } 845 | ch = 0; 846 | break; 847 | } 848 | } 849 | } 850 | begin: 851 | if (ch != CHAR_SOH) { 852 | response_char = CHAR_NAK; 853 | flush_serial_input(); 854 | continue; 855 | } 856 | response_char = 0; 857 | // packet number 858 | ch = xmodem_read_serial(); 859 | if (ch == -1) { 860 | last_error = "timeout waiting for remote_pkt_num"; 861 | error_count++; 862 | goto skip; 863 | } 864 | remote_pkt_num = ch; 865 | // complement packet number 866 | ch = xmodem_read_serial(); 867 | if (ch == -1) { 868 | last_error = "timeout waiting for remote_not_pkt_num"; 869 | error_count++; 870 | goto skip; 871 | } 872 | remote_not_pkt_num = ch; 873 | // packet 874 | pkt_len = 0; 875 | chk = 0; 876 | while (pkt_len < XMODEM_PACKET_MAX) { 877 | start = millis(); 878 | while (!Serial.available()) { 879 | if (millis() - start >= XMODEM_DELAY) { 880 | last_error = "timeout waiting for packet data"; 881 | error_count++; 882 | goto skip; 883 | } 884 | } 885 | ch = Serial.read(); 886 | if (ch == -1) { 887 | last_error = "timeout reading packet data"; 888 | error_count++; 889 | goto skip; 890 | } 891 | packet[pkt_len++] = ch; 892 | chk += (byte)ch; 893 | } 894 | ch = xmodem_read_serial(); 895 | if (ch == -1) { 896 | last_error = "timeout waiting for checksum"; 897 | error_count++; 898 | goto skip; 899 | } 900 | remote_chk = ch; 901 | // make sure data < EEPROM size 902 | if (addr == eeprom_size) { 903 | abort_xmodem("image is too large for eeprom"); 904 | return; 905 | } 906 | // check complement error 907 | if (remote_not_pkt_num + pkt_num != 255) { 908 | Serial.write(CHAR_NAK); 909 | Serial.flush(); 910 | last_error = "check complement error"; 911 | error_count++; 912 | goto skip; 913 | } 914 | // check duplicate packet 915 | if (remote_pkt_num == prev_pkt_num) { 916 | Serial.write(CHAR_ACK); 917 | Serial.flush(); 918 | last_error = "check duplicate packet"; 919 | error_count = 0; 920 | goto skip; 921 | // check out of sequence 922 | } else if (remote_pkt_num != pkt_num) { 923 | last_error = "out of sequence"; 924 | goto skip; 925 | } 926 | // checksum test 927 | if (remote_chk != chk) { 928 | Serial.write(CHAR_NAK); 929 | Serial.flush(); 930 | last_error = "checksum error"; 931 | error_count++; 932 | goto skip; 933 | } 934 | // no errors, send an ACK and write the pages to the EEPROM 935 | Serial.write(CHAR_ACK); 936 | Serial.flush(); 937 | write_packet(addr, packet, XMODEM_PACKET_MAX); 938 | if (!verify_packet(addr, packet, XMODEM_PACKET_MAX)) { 939 | abort_xmodem("verify failed writing packet, aborting"); 940 | print_packet_data(packet); 941 | return; 942 | } 943 | addr += XMODEM_PACKET_MAX; 944 | prev_pkt_num = pkt_num; 945 | pkt_num = remote_pkt_num + 1; 946 | error_count = 0; 947 | skip: 948 | if (error_count == XMODEM_RETRIES) { 949 | abort_xmodem(last_error); 950 | Serial.print("prev_pkt_num = "); Serial.println(prev_pkt_num); 951 | Serial.print("pkt_num = "); Serial.println(pkt_num); 952 | sprintf(s, " (%02x)", remote_pkt_num); 953 | Serial.print("remote_pkt_num = "); Serial.print(remote_pkt_num); Serial.println(s); 954 | sprintf(s, " (%02x)", remote_not_pkt_num); 955 | Serial.print("remote_not_pkt_num = "); Serial.print(remote_not_pkt_num); Serial.println(s); 956 | sprintf(s, " (%02x)", remote_chk); 957 | Serial.print("remote_chk = "); Serial.print(remote_chk); Serial.println(s); 958 | Serial.print("chk = "); Serial.println(chk); 959 | print_packet_data(packet); 960 | return; 961 | } 962 | } 963 | } 964 | 965 | 966 | /* Unknown command. 967 | */ 968 | void cmd_unknown(char cmd) 969 | { 970 | Serial.print("unknown command: '"); 971 | Serial.print(cmd); 972 | Serial.println("'"); 973 | Serial.println("use 'h' for help"); 974 | } 975 | 976 | 977 | /* Process the specified command. 978 | */ 979 | void process_cmd(char cmd) 980 | { 981 | cmd = tolower(cmd); 982 | Serial.println(cmd); 983 | 984 | switch (cmd) { 985 | case CMD_ERASE: 986 | cmd_erase(); 987 | break; 988 | case CMD_FILL: 989 | cmd_fill(); 990 | break; 991 | case CMD_HELP: 992 | cmd_help(); 993 | break; 994 | case CMD_LOCK: 995 | cmd_lock(); 996 | break; 997 | case CMD_READ: 998 | cmd_read(); 999 | break; 1000 | case CMD_SIZE: 1001 | cmd_size(); 1002 | break; 1003 | case CMD_UNLOCK: 1004 | cmd_unlock(); 1005 | break; 1006 | case CMD_VERSION: 1007 | cmd_version(); 1008 | break; 1009 | case CMD_XMODEM: 1010 | cmd_xmodem(); 1011 | break; 1012 | default: 1013 | cmd_unknown(cmd); 1014 | break; 1015 | } 1016 | } 1017 | 1018 | 1019 | /* Process commands from the serial port, output results. 1020 | */ 1021 | void loop() 1022 | { 1023 | process_cmd(read_serial()); 1024 | show_prompt(); 1025 | } 1026 | -------------------------------------------------------------------------------- /populated-board.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yoppeh/eeprom-programmer/42c06be66b405f21167ee4be13bea77293b069d5/populated-board.jpg -------------------------------------------------------------------------------- /schematic/Arduino_Nano.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Module:Arduino_Nano (layer F.Cu) (tedit 58ACAF70) 2 | (descr "Arduino Nano, http://www.mouser.com/pdfdocs/Gravitech_Arduino_Nano3_0.pdf") 3 | (tags "Arduino Nano") 4 | (fp_text reference REF** (at 7.62 -5.08) (layer F.SilkS) 5 | (effects (font (size 1 1) (thickness 0.15))) 6 | ) 7 | (fp_text value Arduino_Nano (at 8.89 19.05 90) (layer F.Fab) 8 | (effects (font (size 1 1) (thickness 0.15))) 9 | ) 10 | (fp_line (start 16.75 42.16) (end -1.53 42.16) (layer F.CrtYd) (width 0.05)) 11 | (fp_line (start 16.75 42.16) (end 16.75 -4.06) (layer F.CrtYd) (width 0.05)) 12 | (fp_line (start -1.53 -4.06) (end -1.53 42.16) (layer F.CrtYd) (width 0.05)) 13 | (fp_line (start -1.53 -4.06) (end 16.75 -4.06) (layer F.CrtYd) (width 0.05)) 14 | (fp_line (start 16.51 -3.81) (end 16.51 39.37) (layer F.Fab) (width 0.1)) 15 | (fp_line (start 0 -3.81) (end 16.51 -3.81) (layer F.Fab) (width 0.1)) 16 | (fp_line (start -1.27 -2.54) (end 0 -3.81) (layer F.Fab) (width 0.1)) 17 | (fp_line (start -1.27 39.37) (end -1.27 -2.54) (layer F.Fab) (width 0.1)) 18 | (fp_line (start 16.51 39.37) (end -1.27 39.37) (layer F.Fab) (width 0.1)) 19 | (fp_line (start 16.64 -3.94) (end -1.4 -3.94) (layer F.SilkS) (width 0.12)) 20 | (fp_line (start 16.64 39.5) (end 16.64 -3.94) (layer F.SilkS) (width 0.12)) 21 | (fp_line (start -1.4 39.5) (end 16.64 39.5) (layer F.SilkS) (width 0.12)) 22 | (fp_line (start 3.81 41.91) (end 3.81 31.75) (layer F.Fab) (width 0.1)) 23 | (fp_line (start 11.43 41.91) (end 3.81 41.91) (layer F.Fab) (width 0.1)) 24 | (fp_line (start 11.43 31.75) (end 11.43 41.91) (layer F.Fab) (width 0.1)) 25 | (fp_line (start 3.81 31.75) (end 11.43 31.75) (layer F.Fab) (width 0.1)) 26 | (fp_line (start 1.27 36.83) (end -1.4 36.83) (layer F.SilkS) (width 0.12)) 27 | (fp_line (start 1.27 1.27) (end 1.27 36.83) (layer F.SilkS) (width 0.12)) 28 | (fp_line (start 1.27 1.27) (end -1.4 1.27) (layer F.SilkS) (width 0.12)) 29 | (fp_line (start 13.97 36.83) (end 16.64 36.83) (layer F.SilkS) (width 0.12)) 30 | (fp_line (start 13.97 -1.27) (end 13.97 36.83) (layer F.SilkS) (width 0.12)) 31 | (fp_line (start 13.97 -1.27) (end 16.64 -1.27) (layer F.SilkS) (width 0.12)) 32 | (fp_line (start -1.4 -3.94) (end -1.4 -1.27) (layer F.SilkS) (width 0.12)) 33 | (fp_line (start -1.4 1.27) (end -1.4 39.5) (layer F.SilkS) (width 0.12)) 34 | (fp_line (start 1.27 -1.27) (end -1.4 -1.27) (layer F.SilkS) (width 0.12)) 35 | (fp_line (start 1.27 1.27) (end 1.27 -1.27) (layer F.SilkS) (width 0.12)) 36 | (fp_text user %R (at 6.35 19.05 90) (layer F.Fab) 37 | (effects (font (size 1 1) (thickness 0.15))) 38 | ) 39 | (pad 16 thru_hole oval (at 15.24 35.56) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 40 | (pad 15 thru_hole oval (at 0 35.56) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 41 | (pad 30 thru_hole oval (at 15.24 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 42 | (pad 14 thru_hole oval (at 0 33.02) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 43 | (pad 29 thru_hole oval (at 15.24 2.54) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 44 | (pad 13 thru_hole oval (at 0 30.48) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 45 | (pad 28 thru_hole oval (at 15.24 5.08) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 46 | (pad 12 thru_hole oval (at 0 27.94) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 47 | (pad 27 thru_hole oval (at 15.24 7.62) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 48 | (pad 11 thru_hole oval (at 0 25.4) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 49 | (pad 26 thru_hole oval (at 15.24 10.16) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 50 | (pad 10 thru_hole oval (at 0 22.86) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 51 | (pad 25 thru_hole oval (at 15.24 12.7) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 52 | (pad 9 thru_hole oval (at 0 20.32) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 53 | (pad 24 thru_hole oval (at 15.24 15.24) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 54 | (pad 8 thru_hole oval (at 0 17.78) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 55 | (pad 23 thru_hole oval (at 15.24 17.78) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 56 | (pad 7 thru_hole oval (at 0 15.24) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 57 | (pad 22 thru_hole oval (at 15.24 20.32) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 58 | (pad 6 thru_hole oval (at 0 12.7) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 59 | (pad 21 thru_hole oval (at 15.24 22.86) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 60 | (pad 5 thru_hole oval (at 0 10.16) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 61 | (pad 20 thru_hole oval (at 15.24 25.4) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 62 | (pad 4 thru_hole oval (at 0 7.62) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 63 | (pad 19 thru_hole oval (at 15.24 27.94) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 64 | (pad 3 thru_hole oval (at 0 5.08) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 65 | (pad 18 thru_hole oval (at 15.24 30.48) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 66 | (pad 2 thru_hole oval (at 0 2.54) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 67 | (pad 17 thru_hole oval (at 15.24 33.02) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 68 | (pad 1 thru_hole rect (at 0 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 69 | (model ${KISYS3DMOD}/Module.3dshapes/Arduino_Nano_WithMountingHoles.wrl 70 | (at (xyz 0 0 0)) 71 | (scale (xyz 1 1 1)) 72 | (rotate (xyz 0 0 0)) 73 | ) 74 | ) 75 | -------------------------------------------------------------------------------- /schematic/C_Disc_D5.0mm_W2.5mm_P5.00mm.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm (layer F.Cu) (tedit 5AE50EF0) 2 | (descr "C, Disc series, Radial, pin pitch=5.00mm, , diameter*width=5*2.5mm^2, Capacitor, http://cdn-reichelt.de/documents/datenblatt/B300/DS_KERKO_TC.pdf") 3 | (tags "C Disc series Radial pin pitch 5.00mm diameter 5mm width 2.5mm Capacitor") 4 | (fp_text reference REF** (at 2.5 -2.5) (layer F.SilkS) 5 | (effects (font (size 1 1) (thickness 0.15))) 6 | ) 7 | (fp_text value C_Disc_D5.0mm_W2.5mm_P5.00mm (at 2.5 2.5) (layer F.Fab) 8 | (effects (font (size 1 1) (thickness 0.15))) 9 | ) 10 | (fp_text user %R (at 2.5 0) (layer F.Fab) 11 | (effects (font (size 1 1) (thickness 0.15))) 12 | ) 13 | (fp_line (start 6.05 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) 14 | (fp_line (start 6.05 1.5) (end 6.05 -1.5) (layer F.CrtYd) (width 0.05)) 15 | (fp_line (start -1.05 1.5) (end 6.05 1.5) (layer F.CrtYd) (width 0.05)) 16 | (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) 17 | (fp_line (start 5.12 1.055) (end 5.12 1.37) (layer F.SilkS) (width 0.12)) 18 | (fp_line (start 5.12 -1.37) (end 5.12 -1.055) (layer F.SilkS) (width 0.12)) 19 | (fp_line (start -0.12 1.055) (end -0.12 1.37) (layer F.SilkS) (width 0.12)) 20 | (fp_line (start -0.12 -1.37) (end -0.12 -1.055) (layer F.SilkS) (width 0.12)) 21 | (fp_line (start -0.12 1.37) (end 5.12 1.37) (layer F.SilkS) (width 0.12)) 22 | (fp_line (start -0.12 -1.37) (end 5.12 -1.37) (layer F.SilkS) (width 0.12)) 23 | (fp_line (start 5 -1.25) (end 0 -1.25) (layer F.Fab) (width 0.1)) 24 | (fp_line (start 5 1.25) (end 5 -1.25) (layer F.Fab) (width 0.1)) 25 | (fp_line (start 0 1.25) (end 5 1.25) (layer F.Fab) (width 0.1)) 26 | (fp_line (start 0 -1.25) (end 0 1.25) (layer F.Fab) (width 0.1)) 27 | (pad 2 thru_hole circle (at 5 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 28 | (pad 1 thru_hole circle (at 0 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) 29 | (model ${KISYS3DMOD}/Capacitor_THT.3dshapes/C_Disc_D5.0mm_W2.5mm_P5.00mm.wrl 30 | (at (xyz 0 0 0)) 31 | (scale (xyz 1 1 1)) 32 | (rotate (xyz 0 0 0)) 33 | ) 34 | ) 35 | -------------------------------------------------------------------------------- /schematic/DIP254P1524X482-28.kicad_mod: -------------------------------------------------------------------------------- 1 | (module DIP254P1524X482-28 (layer F.Cu) (tedit 0) 2 | (fp_text reference DIP254P1524X482-28 (at -8.74626 5.00878) (layer F.SilkS) 3 | (effects (font (size 1.64163 1.64163) (thickness 0.05))) 4 | ) 5 | (fp_text value VAL** (at -5.87398 -37.9138) (layer F.SilkS) 6 | (effects (font (size 1.64183 1.64183) (thickness 0.05))) 7 | ) 8 | (fp_line (start -0.635 -34.163) (end -0.635 -35.179) (layer F.SilkS) (width 0.1524)) 9 | (fp_line (start -14.605 2.159) (end -0.635 2.159) (layer F.SilkS) (width 0.1524)) 10 | (fp_line (start -0.635 2.159) (end -0.635 1.143) (layer F.SilkS) (width 0.1524)) 11 | (fp_line (start -0.635 -35.179) (end -7.3152 -35.179) (layer F.SilkS) (width 0.1524)) 12 | (fp_line (start -7.3152 -35.179) (end -7.9248 -35.179) (layer F.SilkS) (width 0.1524)) 13 | (fp_line (start -7.9248 -35.179) (end -14.605 -35.179) (layer F.SilkS) (width 0.1524)) 14 | (fp_line (start -14.605 -35.179) (end -14.605 -34.3408) (layer F.SilkS) (width 0.1524)) 15 | (fp_line (start -14.605 1.143) (end -14.605 2.159) (layer F.SilkS) (width 0.1524)) 16 | (fp_arc (start -7.62 -35.179) (end -7.9248 -35.179) (angle -180) (layer F.SilkS) (width 0.1524)) 17 | (fp_line (start -14.605 -32.4612) (end -14.605 -33.5788) (layer Eco2.User) (width 0)) 18 | (fp_line (start -14.605 -33.5788) (end -15.7988 -33.5788) (layer Eco2.User) (width 0)) 19 | (fp_line (start -15.7988 -33.5788) (end -15.7988 -32.4612) (layer Eco2.User) (width 0)) 20 | (fp_line (start -15.7988 -32.4612) (end -14.605 -32.4612) (layer Eco2.User) (width 0)) 21 | (fp_line (start -14.605 -29.9212) (end -14.605 -31.0388) (layer Eco2.User) (width 0)) 22 | (fp_line (start -14.605 -31.0388) (end -15.7988 -31.0388) (layer Eco2.User) (width 0)) 23 | (fp_line (start -15.7988 -31.0388) (end -15.7988 -29.9212) (layer Eco2.User) (width 0)) 24 | (fp_line (start -15.7988 -29.9212) (end -14.605 -29.9212) (layer Eco2.User) (width 0)) 25 | (fp_line (start -14.605 -27.3812) (end -14.605 -28.4988) (layer Eco2.User) (width 0)) 26 | (fp_line (start -14.605 -28.4988) (end -15.7988 -28.4988) (layer Eco2.User) (width 0)) 27 | (fp_line (start -15.7988 -28.4988) (end -15.7988 -27.3812) (layer Eco2.User) (width 0)) 28 | (fp_line (start -15.7988 -27.3812) (end -14.605 -27.3812) (layer Eco2.User) (width 0)) 29 | (fp_line (start -14.605 -24.8412) (end -14.605 -25.9588) (layer Eco2.User) (width 0)) 30 | (fp_line (start -14.605 -25.9588) (end -15.7988 -25.9588) (layer Eco2.User) (width 0)) 31 | (fp_line (start -15.7988 -25.9588) (end -15.7988 -24.8412) (layer Eco2.User) (width 0)) 32 | (fp_line (start -15.7988 -24.8412) (end -14.605 -24.8412) (layer Eco2.User) (width 0)) 33 | (fp_line (start -14.605 -22.3012) (end -14.605 -23.4188) (layer Eco2.User) (width 0)) 34 | (fp_line (start -14.605 -23.4188) (end -15.7988 -23.4188) (layer Eco2.User) (width 0)) 35 | (fp_line (start -15.7988 -23.4188) (end -15.7988 -22.3012) (layer Eco2.User) (width 0)) 36 | (fp_line (start -15.7988 -22.3012) (end -14.605 -22.3012) (layer Eco2.User) (width 0)) 37 | (fp_line (start -14.605 -19.7612) (end -14.605 -20.8788) (layer Eco2.User) (width 0)) 38 | (fp_line (start -14.605 -20.8788) (end -15.7988 -20.8788) (layer Eco2.User) (width 0)) 39 | (fp_line (start -15.7988 -20.8788) (end -15.7988 -19.7612) (layer Eco2.User) (width 0)) 40 | (fp_line (start -15.7988 -19.7612) (end -14.605 -19.7612) (layer Eco2.User) (width 0)) 41 | (fp_line (start -14.605 -17.2212) (end -14.605 -18.3388) (layer Eco2.User) (width 0)) 42 | (fp_line (start -14.605 -18.3388) (end -15.7988 -18.3388) (layer Eco2.User) (width 0)) 43 | (fp_line (start -15.7988 -18.3388) (end -15.7988 -17.2212) (layer Eco2.User) (width 0)) 44 | (fp_line (start -15.7988 -17.2212) (end -14.605 -17.2212) (layer Eco2.User) (width 0)) 45 | (fp_line (start -14.605 -14.6812) (end -14.605 -15.7988) (layer Eco2.User) (width 0)) 46 | (fp_line (start -14.605 -15.7988) (end -15.7988 -15.7988) (layer Eco2.User) (width 0)) 47 | (fp_line (start -15.7988 -15.7988) (end -15.7988 -14.6812) (layer Eco2.User) (width 0)) 48 | (fp_line (start -15.7988 -14.6812) (end -14.605 -14.6812) (layer Eco2.User) (width 0)) 49 | (fp_line (start -14.605 -12.1412) (end -14.605 -13.2588) (layer Eco2.User) (width 0)) 50 | (fp_line (start -14.605 -13.2588) (end -15.7988 -13.2588) (layer Eco2.User) (width 0)) 51 | (fp_line (start -15.7988 -13.2588) (end -15.7988 -12.1412) (layer Eco2.User) (width 0)) 52 | (fp_line (start -15.7988 -12.1412) (end -14.605 -12.1412) (layer Eco2.User) (width 0)) 53 | (fp_line (start -14.605 -9.6012) (end -14.605 -10.7188) (layer Eco2.User) (width 0)) 54 | (fp_line (start -14.605 -10.7188) (end -15.7988 -10.7188) (layer Eco2.User) (width 0)) 55 | (fp_line (start -15.7988 -10.7188) (end -15.7988 -9.6012) (layer Eco2.User) (width 0)) 56 | (fp_line (start -15.7988 -9.6012) (end -14.605 -9.6012) (layer Eco2.User) (width 0)) 57 | (fp_line (start -14.605 -7.0612) (end -14.605 -8.1788) (layer Eco2.User) (width 0)) 58 | (fp_line (start -14.605 -8.1788) (end -15.7988 -8.1788) (layer Eco2.User) (width 0)) 59 | (fp_line (start -15.7988 -8.1788) (end -15.7988 -7.0612) (layer Eco2.User) (width 0)) 60 | (fp_line (start -15.7988 -7.0612) (end -14.605 -7.0612) (layer Eco2.User) (width 0)) 61 | (fp_line (start -14.605 -4.5212) (end -14.605 -5.6388) (layer Eco2.User) (width 0)) 62 | (fp_line (start -14.605 -5.6388) (end -15.7988 -5.6388) (layer Eco2.User) (width 0)) 63 | (fp_line (start -15.7988 -5.6388) (end -15.7988 -4.5212) (layer Eco2.User) (width 0)) 64 | (fp_line (start -15.7988 -4.5212) (end -14.605 -4.5212) (layer Eco2.User) (width 0)) 65 | (fp_line (start -14.605 -1.9812) (end -14.605 -3.0988) (layer Eco2.User) (width 0)) 66 | (fp_line (start -14.605 -3.0988) (end -15.7988 -3.0988) (layer Eco2.User) (width 0)) 67 | (fp_line (start -15.7988 -3.0988) (end -15.7988 -1.9812) (layer Eco2.User) (width 0)) 68 | (fp_line (start -15.7988 -1.9812) (end -14.605 -1.9812) (layer Eco2.User) (width 0)) 69 | (fp_line (start -14.605 0.5588) (end -14.605 -0.5588) (layer Eco2.User) (width 0)) 70 | (fp_line (start -14.605 -0.5588) (end -15.7988 -0.5588) (layer Eco2.User) (width 0)) 71 | (fp_line (start -15.7988 -0.5588) (end -15.7988 0.5588) (layer Eco2.User) (width 0)) 72 | (fp_line (start -15.7988 0.5588) (end -14.605 0.5588) (layer Eco2.User) (width 0)) 73 | (fp_line (start -0.635 -0.5588) (end -0.635 0.5588) (layer Eco2.User) (width 0)) 74 | (fp_line (start -0.635 0.5588) (end 0.5588 0.5588) (layer Eco2.User) (width 0)) 75 | (fp_line (start 0.5588 0.5588) (end 0.5588 -0.5588) (layer Eco2.User) (width 0)) 76 | (fp_line (start 0.5588 -0.5588) (end -0.635 -0.5588) (layer Eco2.User) (width 0)) 77 | (fp_line (start -0.635 -3.0988) (end -0.635 -1.9812) (layer Eco2.User) (width 0)) 78 | (fp_line (start -0.635 -1.9812) (end 0.5588 -1.9812) (layer Eco2.User) (width 0)) 79 | (fp_line (start 0.5588 -1.9812) (end 0.5588 -3.0988) (layer Eco2.User) (width 0)) 80 | (fp_line (start 0.5588 -3.0988) (end -0.635 -3.0988) (layer Eco2.User) (width 0)) 81 | (fp_line (start -0.635 -5.6388) (end -0.635 -4.5212) (layer Eco2.User) (width 0)) 82 | (fp_line (start -0.635 -4.5212) (end 0.5588 -4.5212) (layer Eco2.User) (width 0)) 83 | (fp_line (start 0.5588 -4.5212) (end 0.5588 -5.6388) (layer Eco2.User) (width 0)) 84 | (fp_line (start 0.5588 -5.6388) (end -0.635 -5.6388) (layer Eco2.User) (width 0)) 85 | (fp_line (start -0.635 -8.1788) (end -0.635 -7.0612) (layer Eco2.User) (width 0)) 86 | (fp_line (start -0.635 -7.0612) (end 0.5588 -7.0612) (layer Eco2.User) (width 0)) 87 | (fp_line (start 0.5588 -7.0612) (end 0.5588 -8.1788) (layer Eco2.User) (width 0)) 88 | (fp_line (start 0.5588 -8.1788) (end -0.635 -8.1788) (layer Eco2.User) (width 0)) 89 | (fp_line (start -0.635 -10.7188) (end -0.635 -9.6012) (layer Eco2.User) (width 0)) 90 | (fp_line (start -0.635 -9.6012) (end 0.5588 -9.6012) (layer Eco2.User) (width 0)) 91 | (fp_line (start 0.5588 -9.6012) (end 0.5588 -10.7188) (layer Eco2.User) (width 0)) 92 | (fp_line (start 0.5588 -10.7188) (end -0.635 -10.7188) (layer Eco2.User) (width 0)) 93 | (fp_line (start -0.635 -13.2588) (end -0.635 -12.1412) (layer Eco2.User) (width 0)) 94 | (fp_line (start -0.635 -12.1412) (end 0.5588 -12.1412) (layer Eco2.User) (width 0)) 95 | (fp_line (start 0.5588 -12.1412) (end 0.5588 -13.2588) (layer Eco2.User) (width 0)) 96 | (fp_line (start 0.5588 -13.2588) (end -0.635 -13.2588) (layer Eco2.User) (width 0)) 97 | (fp_line (start -0.635 -15.7988) (end -0.635 -14.6812) (layer Eco2.User) (width 0)) 98 | (fp_line (start -0.635 -14.6812) (end 0.5588 -14.6812) (layer Eco2.User) (width 0)) 99 | (fp_line (start 0.5588 -14.6812) (end 0.5588 -15.7988) (layer Eco2.User) (width 0)) 100 | (fp_line (start 0.5588 -15.7988) (end -0.635 -15.7988) (layer Eco2.User) (width 0)) 101 | (fp_line (start -0.635 -18.3388) (end -0.635 -17.2212) (layer Eco2.User) (width 0)) 102 | (fp_line (start -0.635 -17.2212) (end 0.5588 -17.2212) (layer Eco2.User) (width 0)) 103 | (fp_line (start 0.5588 -17.2212) (end 0.5588 -18.3388) (layer Eco2.User) (width 0)) 104 | (fp_line (start 0.5588 -18.3388) (end -0.635 -18.3388) (layer Eco2.User) (width 0)) 105 | (fp_line (start -0.635 -20.8788) (end -0.635 -19.7612) (layer Eco2.User) (width 0)) 106 | (fp_line (start -0.635 -19.7612) (end 0.5588 -19.7612) (layer Eco2.User) (width 0)) 107 | (fp_line (start 0.5588 -19.7612) (end 0.5588 -20.8788) (layer Eco2.User) (width 0)) 108 | (fp_line (start 0.5588 -20.8788) (end -0.635 -20.8788) (layer Eco2.User) (width 0)) 109 | (fp_line (start -0.635 -23.4188) (end -0.635 -22.3012) (layer Eco2.User) (width 0)) 110 | (fp_line (start -0.635 -22.3012) (end 0.5588 -22.3012) (layer Eco2.User) (width 0)) 111 | (fp_line (start 0.5588 -22.3012) (end 0.5588 -23.4188) (layer Eco2.User) (width 0)) 112 | (fp_line (start 0.5588 -23.4188) (end -0.635 -23.4188) (layer Eco2.User) (width 0)) 113 | (fp_line (start -0.635 -25.9588) (end -0.635 -24.8412) (layer Eco2.User) (width 0)) 114 | (fp_line (start -0.635 -24.8412) (end 0.5588 -24.8412) (layer Eco2.User) (width 0)) 115 | (fp_line (start 0.5588 -24.8412) (end 0.5588 -25.9588) (layer Eco2.User) (width 0)) 116 | (fp_line (start 0.5588 -25.9588) (end -0.635 -25.9588) (layer Eco2.User) (width 0)) 117 | (fp_line (start -0.635 -28.4988) (end -0.635 -27.3812) (layer Eco2.User) (width 0)) 118 | (fp_line (start -0.635 -27.3812) (end 0.5588 -27.3812) (layer Eco2.User) (width 0)) 119 | (fp_line (start 0.5588 -27.3812) (end 0.5588 -28.4988) (layer Eco2.User) (width 0)) 120 | (fp_line (start 0.5588 -28.4988) (end -0.635 -28.4988) (layer Eco2.User) (width 0)) 121 | (fp_line (start -0.635 -31.0388) (end -0.635 -29.9212) (layer Eco2.User) (width 0)) 122 | (fp_line (start -0.635 -29.9212) (end 0.5588 -29.9212) (layer Eco2.User) (width 0)) 123 | (fp_line (start 0.5588 -29.9212) (end 0.5588 -31.0388) (layer Eco2.User) (width 0)) 124 | (fp_line (start 0.5588 -31.0388) (end -0.635 -31.0388) (layer Eco2.User) (width 0)) 125 | (fp_line (start -0.635 -33.5788) (end -0.635 -32.4612) (layer Eco2.User) (width 0)) 126 | (fp_line (start -0.635 -32.4612) (end 0.5588 -32.4612) (layer Eco2.User) (width 0)) 127 | (fp_line (start 0.5588 -32.4612) (end 0.5588 -33.5788) (layer Eco2.User) (width 0)) 128 | (fp_line (start 0.5588 -33.5788) (end -0.635 -33.5788) (layer Eco2.User) (width 0)) 129 | (fp_line (start -14.605 2.159) (end -0.635 2.159) (layer Eco2.User) (width 0)) 130 | (fp_line (start -0.635 2.159) (end -0.635 -35.179) (layer Eco2.User) (width 0)) 131 | (fp_line (start -0.635 -35.179) (end -7.3152 -35.179) (layer Eco2.User) (width 0)) 132 | (fp_line (start -7.3152 -35.179) (end -7.9248 -35.179) (layer Eco2.User) (width 0)) 133 | (fp_line (start -7.9248 -35.179) (end -14.605 -35.179) (layer Eco2.User) (width 0)) 134 | (fp_line (start -14.605 -35.179) (end -14.605 2.159) (layer Eco2.User) (width 0)) 135 | (fp_arc (start -7.62 -35.179) (end -7.9248 -35.179) (angle -180) (layer Eco2.User) (width 0)) 136 | (pad 1 thru_hole rect (at -15.24 -33.02) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 137 | (pad 2 thru_hole circle (at -15.24 -30.48) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 138 | (pad 3 thru_hole circle (at -15.24 -27.94) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 139 | (pad 4 thru_hole circle (at -15.24 -25.4) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 140 | (pad 5 thru_hole circle (at -15.24 -22.86) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 141 | (pad 6 thru_hole circle (at -15.24 -20.32) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 142 | (pad 7 thru_hole circle (at -15.24 -17.78) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 143 | (pad 8 thru_hole circle (at -15.24 -15.24) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 144 | (pad 9 thru_hole circle (at -15.24 -12.7) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 145 | (pad 10 thru_hole circle (at -15.24 -10.16) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 146 | (pad 11 thru_hole circle (at -15.24 -7.62) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 147 | (pad 12 thru_hole circle (at -15.24 -5.08) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 148 | (pad 13 thru_hole circle (at -15.24 -2.54) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 149 | (pad 14 thru_hole circle (at -15.24 0) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 150 | (pad 15 thru_hole circle (at 0 0) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 151 | (pad 16 thru_hole circle (at 0 -2.54) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 152 | (pad 17 thru_hole circle (at 0 -5.08) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 153 | (pad 18 thru_hole circle (at 0 -7.62) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 154 | (pad 19 thru_hole circle (at 0 -10.16) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 155 | (pad 20 thru_hole circle (at 0 -12.7) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 156 | (pad 21 thru_hole circle (at 0 -15.24) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 157 | (pad 22 thru_hole circle (at 0 -17.78) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 158 | (pad 23 thru_hole circle (at 0 -20.32) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 159 | (pad 24 thru_hole circle (at 0 -22.86) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 160 | (pad 25 thru_hole circle (at 0 -25.4) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 161 | (pad 26 thru_hole circle (at 0 -27.94) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 162 | (pad 27 thru_hole circle (at 0 -30.48) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 163 | (pad 28 thru_hole circle (at 0 -33.02) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 164 | ) 165 | -------------------------------------------------------------------------------- /schematic/DIP254P762X508-16.kicad_mod: -------------------------------------------------------------------------------- 1 | (module SN74LS595N:DIP254P762X508-16 (layer F.Cu) (tedit 0) 2 | (fp_text reference DIP254P762X508-16 (at -4.57616 -20.3132) (layer F.SilkS) 3 | (effects (font (size 1.6415 1.6415) (thickness 0.05))) 4 | ) 5 | (fp_text value VAL** (at -4.31918 2.71854) (layer F.SilkS) 6 | (effects (font (size 1.64044 1.64044) (thickness 0.05))) 7 | ) 8 | (fp_arc (start -3.81 -18.7452) (end -4.1148 -18.7452) (angle -180) (layer Eco2.User) (width 0)) 9 | (fp_line (start -7.112 -18.7452) (end -7.112 0.9652) (layer Eco2.User) (width 0.1524)) 10 | (fp_line (start -4.1148 -18.7452) (end -7.112 -18.7452) (layer Eco2.User) (width 0.1524)) 11 | (fp_line (start -3.5052 -18.7452) (end -4.1148 -18.7452) (layer Eco2.User) (width 0.1524)) 12 | (fp_line (start -0.508 -18.7452) (end -3.5052 -18.7452) (layer Eco2.User) (width 0.1524)) 13 | (fp_line (start -0.508 0.9652) (end -0.508 -18.7452) (layer Eco2.User) (width 0.1524)) 14 | (fp_line (start -7.112 0.9652) (end -0.508 0.9652) (layer Eco2.User) (width 0.1524)) 15 | (fp_line (start 0.5588 -18.3388) (end -0.508 -18.3388) (layer Eco2.User) (width 0.1524)) 16 | (fp_line (start 0.5588 -17.2212) (end 0.5588 -18.3388) (layer Eco2.User) (width 0.1524)) 17 | (fp_line (start -0.508 -17.2212) (end 0.5588 -17.2212) (layer Eco2.User) (width 0.1524)) 18 | (fp_line (start -0.508 -18.3388) (end -0.508 -17.2212) (layer Eco2.User) (width 0.1524)) 19 | (fp_line (start 0.5588 -15.7988) (end -0.508 -15.7988) (layer Eco2.User) (width 0.1524)) 20 | (fp_line (start 0.5588 -14.6812) (end 0.5588 -15.7988) (layer Eco2.User) (width 0.1524)) 21 | (fp_line (start -0.508 -14.6812) (end 0.5588 -14.6812) (layer Eco2.User) (width 0.1524)) 22 | (fp_line (start -0.508 -15.7988) (end -0.508 -14.6812) (layer Eco2.User) (width 0.1524)) 23 | (fp_line (start 0.5588 -13.2588) (end -0.508 -13.2588) (layer Eco2.User) (width 0.1524)) 24 | (fp_line (start 0.5588 -12.1412) (end 0.5588 -13.2588) (layer Eco2.User) (width 0.1524)) 25 | (fp_line (start -0.508 -12.1412) (end 0.5588 -12.1412) (layer Eco2.User) (width 0.1524)) 26 | (fp_line (start -0.508 -13.2588) (end -0.508 -12.1412) (layer Eco2.User) (width 0.1524)) 27 | (fp_line (start 0.5588 -10.7188) (end -0.508 -10.7188) (layer Eco2.User) (width 0.1524)) 28 | (fp_line (start 0.5588 -9.6012) (end 0.5588 -10.7188) (layer Eco2.User) (width 0.1524)) 29 | (fp_line (start -0.508 -9.6012) (end 0.5588 -9.6012) (layer Eco2.User) (width 0.1524)) 30 | (fp_line (start -0.508 -10.7188) (end -0.508 -9.6012) (layer Eco2.User) (width 0.1524)) 31 | (fp_line (start 0.5588 -8.1788) (end -0.508 -8.1788) (layer Eco2.User) (width 0.1524)) 32 | (fp_line (start 0.5588 -7.0612) (end 0.5588 -8.1788) (layer Eco2.User) (width 0.1524)) 33 | (fp_line (start -0.508 -7.0612) (end 0.5588 -7.0612) (layer Eco2.User) (width 0.1524)) 34 | (fp_line (start -0.508 -8.1788) (end -0.508 -7.0612) (layer Eco2.User) (width 0.1524)) 35 | (fp_line (start 0.5588 -5.6388) (end -0.508 -5.6388) (layer Eco2.User) (width 0.1524)) 36 | (fp_line (start 0.5588 -4.5212) (end 0.5588 -5.6388) (layer Eco2.User) (width 0.1524)) 37 | (fp_line (start -0.508 -4.5212) (end 0.5588 -4.5212) (layer Eco2.User) (width 0.1524)) 38 | (fp_line (start -0.508 -5.6388) (end -0.508 -4.5212) (layer Eco2.User) (width 0.1524)) 39 | (fp_line (start 0.5588 -3.0988) (end -0.508 -3.0988) (layer Eco2.User) (width 0.1524)) 40 | (fp_line (start 0.5588 -1.9812) (end 0.5588 -3.0988) (layer Eco2.User) (width 0.1524)) 41 | (fp_line (start -0.508 -1.9812) (end 0.5588 -1.9812) (layer Eco2.User) (width 0.1524)) 42 | (fp_line (start -0.508 -3.0988) (end -0.508 -1.9812) (layer Eco2.User) (width 0.1524)) 43 | (fp_line (start 0.5588 -0.5588) (end -0.508 -0.5588) (layer Eco2.User) (width 0.1524)) 44 | (fp_line (start 0.5588 0.5588) (end 0.5588 -0.5588) (layer Eco2.User) (width 0.1524)) 45 | (fp_line (start -0.508 0.5588) (end 0.5588 0.5588) (layer Eco2.User) (width 0.1524)) 46 | (fp_line (start -0.508 -0.5588) (end -0.508 0.5588) (layer Eco2.User) (width 0.1524)) 47 | (fp_line (start -8.1788 0.5588) (end -7.112 0.5588) (layer Eco2.User) (width 0.1524)) 48 | (fp_line (start -8.1788 -0.5588) (end -8.1788 0.5588) (layer Eco2.User) (width 0.1524)) 49 | (fp_line (start -7.112 -0.5588) (end -8.1788 -0.5588) (layer Eco2.User) (width 0.1524)) 50 | (fp_line (start -7.112 0.5588) (end -7.112 -0.5588) (layer Eco2.User) (width 0.1524)) 51 | (fp_line (start -8.1788 -1.9812) (end -7.112 -1.9812) (layer Eco2.User) (width 0.1524)) 52 | (fp_line (start -8.1788 -3.0988) (end -8.1788 -1.9812) (layer Eco2.User) (width 0.1524)) 53 | (fp_line (start -7.112 -3.0988) (end -8.1788 -3.0988) (layer Eco2.User) (width 0.1524)) 54 | (fp_line (start -7.112 -1.9812) (end -7.112 -3.0988) (layer Eco2.User) (width 0.1524)) 55 | (fp_line (start -8.1788 -4.5212) (end -7.112 -4.5212) (layer Eco2.User) (width 0.1524)) 56 | (fp_line (start -8.1788 -5.6388) (end -8.1788 -4.5212) (layer Eco2.User) (width 0.1524)) 57 | (fp_line (start -7.112 -5.6388) (end -8.1788 -5.6388) (layer Eco2.User) (width 0.1524)) 58 | (fp_line (start -7.112 -4.5212) (end -7.112 -5.6388) (layer Eco2.User) (width 0.1524)) 59 | (fp_line (start -8.1788 -7.0612) (end -7.112 -7.0612) (layer Eco2.User) (width 0.1524)) 60 | (fp_line (start -8.1788 -8.1788) (end -8.1788 -7.0612) (layer Eco2.User) (width 0.1524)) 61 | (fp_line (start -7.112 -8.1788) (end -8.1788 -8.1788) (layer Eco2.User) (width 0.1524)) 62 | (fp_line (start -7.112 -7.0612) (end -7.112 -8.1788) (layer Eco2.User) (width 0.1524)) 63 | (fp_line (start -8.1788 -9.6012) (end -7.112 -9.6012) (layer Eco2.User) (width 0.1524)) 64 | (fp_line (start -8.1788 -10.7188) (end -8.1788 -9.6012) (layer Eco2.User) (width 0.1524)) 65 | (fp_line (start -7.112 -10.7188) (end -8.1788 -10.7188) (layer Eco2.User) (width 0.1524)) 66 | (fp_line (start -7.112 -9.6012) (end -7.112 -10.7188) (layer Eco2.User) (width 0.1524)) 67 | (fp_line (start -8.1788 -12.1412) (end -7.112 -12.1412) (layer Eco2.User) (width 0.1524)) 68 | (fp_line (start -8.1788 -13.2588) (end -8.1788 -12.1412) (layer Eco2.User) (width 0.1524)) 69 | (fp_line (start -7.112 -13.2588) (end -8.1788 -13.2588) (layer Eco2.User) (width 0.1524)) 70 | (fp_line (start -7.112 -12.1412) (end -7.112 -13.2588) (layer Eco2.User) (width 0.1524)) 71 | (fp_line (start -8.1788 -14.6812) (end -7.112 -14.6812) (layer Eco2.User) (width 0.1524)) 72 | (fp_line (start -8.1788 -15.7988) (end -8.1788 -14.6812) (layer Eco2.User) (width 0.1524)) 73 | (fp_line (start -7.112 -15.7988) (end -8.1788 -15.7988) (layer Eco2.User) (width 0.1524)) 74 | (fp_line (start -7.112 -14.6812) (end -7.112 -15.7988) (layer Eco2.User) (width 0.1524)) 75 | (fp_line (start -8.1788 -17.2212) (end -7.112 -17.2212) (layer Eco2.User) (width 0.1524)) 76 | (fp_line (start -8.1788 -18.3388) (end -8.1788 -17.2212) (layer Eco2.User) (width 0.1524)) 77 | (fp_line (start -7.112 -18.3388) (end -8.1788 -18.3388) (layer Eco2.User) (width 0.1524)) 78 | (fp_line (start -7.112 -17.2212) (end -7.112 -18.3388) (layer Eco2.User) (width 0.1524)) 79 | (fp_arc (start -3.81 -18.7452) (end -4.1148 -18.7452) (angle -180) (layer F.SilkS) (width 0)) 80 | (fp_line (start -4.1148 -18.7452) (end -6.2992 -18.7452) (layer F.SilkS) (width 0.1524)) 81 | (fp_line (start -3.5052 -18.7452) (end -4.1148 -18.7452) (layer F.SilkS) (width 0.1524)) 82 | (fp_line (start -0.889 -18.7452) (end -3.5052 -18.7452) (layer F.SilkS) (width 0.1524)) 83 | (fp_line (start -6.731 0.9652) (end -0.889 0.9652) (layer F.SilkS) (width 0.1524)) 84 | (pad 16 thru_hole circle (at 0 -17.78) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 85 | (pad 15 thru_hole circle (at 0 -15.24) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 86 | (pad 14 thru_hole circle (at 0 -12.7) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 87 | (pad 13 thru_hole circle (at 0 -10.16) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 88 | (pad 12 thru_hole circle (at 0 -7.62) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 89 | (pad 11 thru_hole circle (at 0 -5.08) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 90 | (pad 10 thru_hole circle (at 0 -2.54) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 91 | (pad 9 thru_hole circle (at 0 0) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 92 | (pad 8 thru_hole circle (at -7.62 0) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 93 | (pad 7 thru_hole circle (at -7.62 -2.54) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 94 | (pad 6 thru_hole circle (at -7.62 -5.08) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 95 | (pad 5 thru_hole circle (at -7.62 -7.62) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 96 | (pad 4 thru_hole circle (at -7.62 -10.16) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 97 | (pad 3 thru_hole circle (at -7.62 -12.7) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 98 | (pad 2 thru_hole circle (at -7.62 -15.24) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 99 | (pad 1 thru_hole rect (at -7.62 -17.78) (size 1.6764 1.6764) (drill 1.1176) (layers *.Cu *.Mask)) 100 | ) 101 | -------------------------------------------------------------------------------- /schematic/eeprom-programmer.dcm: -------------------------------------------------------------------------------- 1 | EESchema-DOCLIB Version 2.0 2 | # 3 | $CMP 74HC595 4 | D 8-bit serial in/out Shift Register 3-State Outputs 5 | K HCMOS SR 3State 6 | F http://www.ti.com/lit/ds/symlink/sn74hc595.pdf 7 | $ENDCMP 8 | # 9 | $CMP 74HCT595 10 | D 8-bit serial in/out Shift Register 3-State Outputs 11 | K HCTMOS SR 3State 12 | F https://assets.nexperia.com/documents/data-sheet/74HC_HCT595.pdf 13 | $ENDCMP 14 | # 15 | $CMP 74LS595 16 | D 8-bit serial in/out Shift Register 3-State Outputs 17 | K TTL SR 3State 18 | F http://www.ti.com/lit/gpn/sn74ls595 19 | $ENDCMP 20 | # 21 | $CMP AT28C256-15PU 22 | D AT28C256-15PU, Parallel EEPROM Memory 256kbit, Parallel, 150ns 4.5 5.5 V, 28-Pin PDIP 23 | F https://componentsearchengine.com/Datasheets/1/AT28C64B-15PU.pdf 24 | $ENDCMP 25 | # 26 | $CMP AT28C64B-15PU 27 | D AT28C64B-15PU, Parallel EEPROM Memory 64kbit, Parallel, 150ns 4.5 5.5 V, 28-Pin PDIP 28 | F https://componentsearchengine.com/Datasheets/1/AT28C64B-15PU.pdf 29 | $ENDCMP 30 | # 31 | $CMP Arduino_Nano_v2.x 32 | D Arduino Nano v2.x 33 | K Arduino nano microcontroller module USB 34 | F https://www.arduino.cc/en/uploads/Main/ArduinoNanoManual23.pdf 35 | $ENDCMP 36 | # 37 | $CMP Arduino_Nano_v3.x 38 | D Arduino Nano v3.x 39 | K Arduino nano microcontroller module USB 40 | F http://www.mouser.com/pdfdocs/Gravitech_Arduino_Nano3_0.pdf 41 | $ENDCMP 42 | # 43 | $CMP C 44 | D Unpolarized capacitor 45 | K cap capacitor 46 | F ~ 47 | $ENDCMP 48 | # 49 | $CMP GND 50 | D Power flag, ground 51 | K power-flag 52 | $ENDCMP 53 | # 54 | #End Doc Library 55 | -------------------------------------------------------------------------------- /schematic/eeprom-programmer.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.4 2 | #encoding utf-8 3 | # 4 | # 74HC595 5 | # 6 | DEF 74HC595 U 0 20 Y Y 1 F N 7 | F0 "U" -300 550 50 H V C CNN 8 | F1 "74HC595" -300 -650 50 H V C CNN 9 | F2 "" 0 0 50 H I C CNN 10 | F3 "" 0 0 50 H I C CNN 11 | ALIAS 74LS595 74HCT595 12 | $FPLIST 13 | DIP*W7.62mm* 14 | SOIC*3.9x9.9mm*P1.27mm* 15 | TSSOP*4.4x5mm*P0.65mm* 16 | SOIC*5.3x10.2mm*P1.27mm* 17 | SOIC*7.5x10.3mm*P1.27mm* 18 | $ENDFPLIST 19 | DRAW 20 | S -300 500 300 -600 1 1 10 f 21 | X QB 1 400 300 100 L 50 50 1 0 T 22 | X ~SRCLR 10 -400 100 100 R 50 50 1 0 I 23 | X SRCLK 11 -400 200 100 R 50 50 1 0 I 24 | X RCLK 12 -400 -100 100 R 50 50 1 0 I 25 | X ~OE 13 -400 -200 100 R 50 50 1 0 I 26 | X SER 14 -400 400 100 R 50 50 1 0 I 27 | X QA 15 400 400 100 L 50 50 1 0 T 28 | X VCC 16 0 600 100 D 50 50 1 0 W 29 | X QC 2 400 200 100 L 50 50 1 0 T 30 | X QD 3 400 100 100 L 50 50 1 0 T 31 | X QE 4 400 0 100 L 50 50 1 0 T 32 | X QF 5 400 -100 100 L 50 50 1 0 T 33 | X QG 6 400 -200 100 L 50 50 1 0 T 34 | X QH 7 400 -300 100 L 50 50 1 0 T 35 | X GND 8 0 -700 100 U 50 50 1 0 W 36 | X QH' 9 400 -500 100 L 50 50 1 0 O 37 | ENDDRAW 38 | ENDDEF 39 | # 40 | # AT28C256-15PU 41 | # 42 | DEF AT28C256-15PU IC 0 30 Y Y 1 F N 43 | F0 "IC" -500 1500 50 H V L CNN 44 | F1 "AT28C256-15PU" -500 1400 50 H V L CNN 45 | F2 "DIP1556W56P254L3702H483Q28N" -500 1300 50 H I L CNN 46 | F3 "" -500 1200 50 H I L CNN 47 | F4 "AT28C256-15PU, Parallel EEPROM Memory 256kbit, Parallel, 150ns 4.5 5.5 V, 28-Pin PDIP" -500 1100 50 H I L CNN "Description" 48 | F5 "4.826" -500 1000 50 H I L CNN "Height" 49 | F6 "556-AT28C25615PU" -500 900 50 H I L CNN "Mouser Part Number" 50 | F7 "https://www.mouser.com/Search/Refine.aspx?Keyword=AT28C256" -500 800 50 H I L CNN "Mouser Price/Stock" 51 | F8 "Microchip" -500 700 50 H I L CNN "Manufacturer_Name" 52 | F9 "AT28C256-15PU" -500 600 50 H I L CNN "Manufacturer_Part_Number" 53 | DRAW 54 | S 200 -1500 200 -1500 0 1 0 N 55 | S 900 -1500 200 100 0 1 0 N 56 | X A0 10 1100 0 200 L 50 50 0 0 B 57 | X I/O0 11 0 0 200 R 50 50 0 0 B 58 | X I/O1 12 0 -100 200 R 50 50 0 0 B 59 | X I/O2 13 0 -200 200 R 50 50 0 0 B 60 | X GND 14 550 -1700 200 U 50 50 0 0 B 61 | X I/O3 15 0 -300 200 R 50 50 0 0 B 62 | X I/O4 16 0 -400 200 R 50 50 0 0 B 63 | X I/O5 17 0 -500 200 R 50 50 0 0 B 64 | X I/O6 18 0 -600 200 R 50 50 0 0 B 65 | X I/O7 19 0 -700 200 R 50 50 0 0 B 66 | X A12 2 1100 -1200 200 L 50 50 0 0 B 67 | X ~CE 20 0 -850 200 R 50 50 0 0 B 68 | X A10 21 1100 -1000 200 L 50 50 0 0 B 69 | X ~OE 22 0 -1050 200 R 50 50 0 0 B 70 | X A11 23 1100 -1100 200 L 50 50 0 0 B 71 | X A9 24 1100 -900 200 L 50 50 0 0 B 72 | X A8 25 1100 -800 200 L 50 50 0 0 B 73 | X ~WE 27 0 -950 200 R 50 50 0 0 B 74 | X VCC 28 550 300 200 D 50 50 0 0 B 75 | X A7 3 1100 -700 200 L 50 50 0 0 B 76 | X A6 4 1100 -600 200 L 50 50 0 0 B 77 | X A5 5 1100 -500 200 L 50 50 0 0 B 78 | X A4 6 1100 -400 200 L 50 50 0 0 B 79 | X A3 7 1100 -300 200 L 50 50 0 0 B 80 | X A2 8 1100 -200 200 L 50 50 0 0 B 81 | X A1 9 1100 -100 200 L 50 50 0 0 B 82 | X A14 1 1100 -1400 200 L 50 50 1 1 B 83 | X A13 26 1100 -1300 200 L 50 50 1 1 B 84 | ENDDRAW 85 | ENDDEF 86 | # 87 | # AT28C64B-15PU 88 | # 89 | DEF AT28C64B-15PU IC 0 30 Y Y 1 F N 90 | F0 "IC" -500 1500 50 H V L CNN 91 | F1 "AT28C64B-15PU" -500 1400 50 H V L CNN 92 | F2 "DIP1556W56P254L3702H483Q28N" -500 1300 50 H I L CNN 93 | F3 "https://componentsearchengine.com/Datasheets/1/AT28C64B-15PU.pdf" -500 1200 50 H I L CNN 94 | F4 "AT28C64B-15PU, Parallel EEPROM Memory 64kbit, Parallel, 150ns 4.5 5.5 V, 28-Pin PDIP" -500 1100 50 H I L CNN "Description" 95 | F5 "4.826" -500 1000 50 H I L CNN "Height" 96 | F6 "556-AT28C64B15PU" -500 900 50 H I L CNN "Mouser Part Number" 97 | F7 "https://www.mouser.com/Search/Refine.aspx?Keyword=556-AT28C64B15PU" -500 800 50 H I L CNN "Mouser Price/Stock" 98 | F8 "Microchip" -500 700 50 H I L CNN "Manufacturer_Name" 99 | F9 "AT28C64B-15PU" -500 600 50 H I L CNN "Manufacturer_Part_Number" 100 | DRAW 101 | P 5 0 1 6 200 100 900 100 900 -1400 200 -1400 200 100 N 102 | X NC 1 0 -1350 200 R 50 50 0 0 B 103 | X A0 10 1100 0 200 L 50 50 0 0 B 104 | X I/O0 11 0 0 200 R 50 50 0 0 B 105 | X I/O1 12 0 -100 200 R 50 50 0 0 B 106 | X I/O2 13 0 -200 200 R 50 50 0 0 B 107 | X GND 14 550 -1600 200 U 50 50 0 0 B 108 | X I/O3 15 0 -300 200 R 50 50 0 0 B 109 | X I/O4 16 0 -400 200 R 50 50 0 0 B 110 | X I/O5 17 0 -500 200 R 50 50 0 0 B 111 | X I/O6 18 0 -600 200 R 50 50 0 0 B 112 | X I/O7 19 0 -700 200 R 50 50 0 0 B 113 | X A12 2 1100 -1200 200 L 50 50 0 0 B 114 | X ~CE 20 0 -850 200 R 50 50 0 0 B 115 | X A10 21 1100 -1000 200 L 50 50 0 0 B 116 | X ~OE 22 0 -1050 200 R 50 50 0 0 B 117 | X A11 23 1100 -1100 200 L 50 50 0 0 B 118 | X A9 24 1100 -900 200 L 50 50 0 0 B 119 | X A8 25 1100 -800 200 L 50 50 0 0 B 120 | X NC_1 26 0 -1250 200 R 50 50 0 0 B 121 | X ~WE 27 0 -950 200 R 50 50 0 0 B 122 | X VCC 28 550 300 200 D 50 50 0 0 B 123 | X A7 3 1100 -700 200 L 50 50 0 0 B 124 | X A6 4 1100 -600 200 L 50 50 0 0 B 125 | X A5 5 1100 -500 200 L 50 50 0 0 B 126 | X A4 6 1100 -400 200 L 50 50 0 0 B 127 | X A3 7 1100 -300 200 L 50 50 0 0 B 128 | X A2 8 1100 -200 200 L 50 50 0 0 B 129 | X A1 9 1100 -100 200 L 50 50 0 0 B 130 | ENDDRAW 131 | ENDDEF 132 | # 133 | # Arduino_Nano_v3.x 134 | # 135 | DEF Arduino_Nano_v3.x A 0 40 Y Y 1 F N 136 | F0 "A" -200 1025 50 H V R CNN 137 | F1 "Arduino_Nano_v3.x" -200 950 50 H V R CNN 138 | F2 "Module:Arduino_Nano" 150 -950 50 H I L CNN 139 | F3 "" 0 -1000 50 H I C CNN 140 | ALIAS Arduino_Nano_v2.x 141 | $FPLIST 142 | Arduino*Nano* 143 | $ENDFPLIST 144 | DRAW 145 | S -400 900 400 -900 0 1 10 f 146 | X D1/TX 1 -500 500 100 R 50 50 1 1 B 147 | X D7 10 -500 -100 100 R 50 50 1 1 B 148 | X D8 11 -500 -200 100 R 50 50 1 1 B 149 | X D9 12 -500 -300 100 R 50 50 1 1 B 150 | X D10 13 -500 -400 100 R 50 50 1 1 B 151 | X D11 14 -500 -500 100 R 50 50 1 1 B 152 | X D12 15 -500 -600 100 R 50 50 1 1 B 153 | X D13 16 -500 -700 100 R 50 50 1 1 B 154 | X 3V3 17 100 1000 100 D 50 50 1 1 w 155 | X AREF 18 500 200 100 L 50 50 1 1 I 156 | X A0 19 500 0 100 L 50 50 1 1 B 157 | X D0/RX 2 -500 600 100 R 50 50 1 1 B 158 | X A1 20 500 -100 100 L 50 50 1 1 B 159 | X A2 21 500 -200 100 L 50 50 1 1 B 160 | X A3 22 500 -300 100 L 50 50 1 1 B 161 | X A4 23 500 -400 100 L 50 50 1 1 B 162 | X A5 24 500 -500 100 L 50 50 1 1 B 163 | X A6 25 500 -600 100 L 50 50 1 1 B 164 | X A7 26 500 -700 100 L 50 50 1 1 B 165 | X +5V 27 200 1000 100 D 50 50 1 1 w 166 | X RESET 28 500 600 100 L 50 50 1 1 I 167 | X GND 29 100 -1000 100 U 50 50 1 1 W 168 | X RESET 3 500 500 100 L 50 50 1 1 I 169 | X VIN 30 -100 1000 100 D 50 50 1 1 W 170 | X GND 4 0 -1000 100 U 50 50 1 1 W 171 | X D2 5 -500 400 100 R 50 50 1 1 B 172 | X D3 6 -500 300 100 R 50 50 1 1 B 173 | X D4 7 -500 200 100 R 50 50 1 1 B 174 | X D5 8 -500 100 100 R 50 50 1 1 B 175 | X D6 9 -500 0 100 R 50 50 1 1 B 176 | ENDDRAW 177 | ENDDEF 178 | # 179 | # C 180 | # 181 | DEF C C 0 10 N Y 1 F N 182 | F0 "C" 25 100 50 H V L CNN 183 | F1 "C" 25 -100 50 H V L CNN 184 | F2 "" 38 -150 50 H I C CNN 185 | F3 "" 0 0 50 H I C CNN 186 | $FPLIST 187 | C_* 188 | $ENDFPLIST 189 | DRAW 190 | P 2 0 1 20 -80 -30 80 -30 N 191 | P 2 0 1 20 -80 30 80 30 N 192 | X ~ 1 0 150 110 D 50 50 1 1 P 193 | X ~ 2 0 -150 110 U 50 50 1 1 P 194 | ENDDRAW 195 | ENDDEF 196 | # 197 | # GND 198 | # 199 | DEF GND #PWR 0 0 Y Y 1 F P 200 | F0 "#PWR" 0 -250 50 H I C CNN 201 | F1 "GND" 0 -150 50 H V C CNN 202 | F2 "" 0 0 50 H I C CNN 203 | F3 "" 0 0 50 H I C CNN 204 | DRAW 205 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 206 | X GND 1 0 0 0 D 50 50 1 1 W N 207 | ENDDRAW 208 | ENDDEF 209 | # 210 | #End Library 211 | -------------------------------------------------------------------------------- /schematic/eeprom-programmer.net: -------------------------------------------------------------------------------- 1 | (export (version D) 2 | (design 3 | (source /Users/warren/Documents/dev/arduino/eeprom-programmer/schematic/eeprom-programmer.sch) 4 | (date "Monday, December 30, 2019 at 11:35:23 PM") 5 | (tool "Eeschema (5.1.5-0-10_14)") 6 | (sheet (number 1) (name /) (tstamps /) 7 | (title_block 8 | (title "AT28C EEPROM Programmer") 9 | (company) 10 | (rev b) 11 | (date 2019-12-05) 12 | (source eeprom-programmer.sch) 13 | (comment (number 1) (value "")) 14 | (comment (number 2) (value "")) 15 | (comment (number 3) (value "")) 16 | (comment (number 4) (value ""))))) 17 | (components 18 | (comp (ref A1) 19 | (value Arduino_Nano_v3.x) 20 | (footprint eeprom-programmer:Arduino_Nano) 21 | (datasheet http://www.mouser.com/pdfdocs/Gravitech_Arduino_Nano3_0.pdf) 22 | (libsource (lib eeprom-programmer) (part Arduino_Nano_v3.x) (description "Arduino Nano v3.x")) 23 | (sheetpath (names /) (tstamps /)) 24 | (tstamp 5DEB64C7)) 25 | (comp (ref U1) 26 | (value 74LS595) 27 | (footprint eeprom-programmer:DIP254P762X508-16) 28 | (datasheet http://www.ti.com/lit/gpn/sn74ls595) 29 | (libsource (lib eeprom-programmer) (part 74LS595) (description "8-bit serial in/out Shift Register 3-State Outputs")) 30 | (sheetpath (names /) (tstamps /)) 31 | (tstamp 5DEB723F)) 32 | (comp (ref U2) 33 | (value 74LS595) 34 | (footprint eeprom-programmer:DIP254P762X508-16) 35 | (datasheet http://www.ti.com/lit/gpn/sn74ls595) 36 | (libsource (lib eeprom-programmer) (part 74LS595) (description "8-bit serial in/out Shift Register 3-State Outputs")) 37 | (sheetpath (names /) (tstamps /)) 38 | (tstamp 5DEB7D2E)) 39 | (comp (ref IC1) 40 | (value AT28C256-15PU) 41 | (footprint eeprom-programmer:DIP254P1524X482-28) 42 | (datasheet https://componentsearchengine.com/Datasheets/1/AT28C64B-15PU.pdf) 43 | (fields 44 | (field (name Description) "AT28C256-15PU, Parallel EEPROM Memory 256kbit, Parallel, 150ns 4.5 5.5 V, 28-Pin PDIP") 45 | (field (name Height) 4.826) 46 | (field (name Manufacturer_Name) Microchip) 47 | (field (name Manufacturer_Part_Number) AT28C256-15PU) 48 | (field (name "Mouser Part Number") 556-AT28C25615PU) 49 | (field (name "Mouser Price/Stock") https://www.mouser.com/Search/Refine.aspx?Keyword=AT28C256)) 50 | (libsource (lib eeprom-programmer) (part AT28C256-15PU) (description "AT28C256-15PU, Parallel EEPROM Memory 256kbit, Parallel, 150ns 4.5 5.5 V, 28-Pin PDIP")) 51 | (sheetpath (names /) (tstamps /)) 52 | (tstamp 5DEBE083)) 53 | (comp (ref C1) 54 | (value .1uf) 55 | (footprint eeprom-programmer:C_Disc_D5.0mm_W2.5mm_P5.00mm) 56 | (datasheet ~) 57 | (libsource (lib Device) (part C) (description "Unpolarized capacitor")) 58 | (sheetpath (names /) (tstamps /)) 59 | (tstamp 5E0AC806)) 60 | (comp (ref C2) 61 | (value .1uf) 62 | (footprint eeprom-programmer:C_Disc_D5.0mm_W2.5mm_P5.00mm) 63 | (datasheet ~) 64 | (libsource (lib Device) (part C) (description "Unpolarized capacitor")) 65 | (sheetpath (names /) (tstamps /)) 66 | (tstamp 5E0AD397)) 67 | (comp (ref C3) 68 | (value .1uf) 69 | (footprint eeprom-programmer:C_Disc_D5.0mm_W2.5mm_P5.00mm) 70 | (datasheet ~) 71 | (libsource (lib Device) (part C) (description "Unpolarized capacitor")) 72 | (sheetpath (names /) (tstamps /)) 73 | (tstamp 5E0ADC8B))) 74 | (libparts 75 | (libpart (lib Device) (part C) 76 | (description "Unpolarized capacitor") 77 | (docs ~) 78 | (footprints 79 | (fp C_*)) 80 | (fields 81 | (field (name Reference) C) 82 | (field (name Value) C)) 83 | (pins 84 | (pin (num 1) (name ~) (type passive)) 85 | (pin (num 2) (name ~) (type passive)))) 86 | (libpart (lib eeprom-programmer) (part 74HC595) 87 | (aliases 88 | (alias 74LS595) 89 | (alias 74HCT595)) 90 | (description "8-bit serial in/out Shift Register 3-State Outputs") 91 | (docs http://www.ti.com/lit/ds/symlink/sn74hc595.pdf) 92 | (footprints 93 | (fp DIP*W7.62mm*) 94 | (fp SOIC*3.9x9.9mm*P1.27mm*) 95 | (fp TSSOP*4.4x5mm*P0.65mm*) 96 | (fp SOIC*5.3x10.2mm*P1.27mm*) 97 | (fp SOIC*7.5x10.3mm*P1.27mm*)) 98 | (fields 99 | (field (name Reference) U) 100 | (field (name Value) 74HC595)) 101 | (pins 102 | (pin (num 1) (name QB) (type 3state)) 103 | (pin (num 2) (name QC) (type 3state)) 104 | (pin (num 3) (name QD) (type 3state)) 105 | (pin (num 4) (name QE) (type 3state)) 106 | (pin (num 5) (name QF) (type 3state)) 107 | (pin (num 6) (name QG) (type 3state)) 108 | (pin (num 7) (name QH) (type 3state)) 109 | (pin (num 8) (name GND) (type power_in)) 110 | (pin (num 9) (name QH') (type output)) 111 | (pin (num 10) (name ~SRCLR) (type input)) 112 | (pin (num 11) (name SRCLK) (type input)) 113 | (pin (num 12) (name RCLK) (type input)) 114 | (pin (num 13) (name ~OE) (type input)) 115 | (pin (num 14) (name SER) (type input)) 116 | (pin (num 15) (name QA) (type 3state)) 117 | (pin (num 16) (name VCC) (type power_in)))) 118 | (libpart (lib eeprom-programmer) (part AT28C256-15PU) 119 | (description "AT28C256-15PU, Parallel EEPROM Memory 256kbit, Parallel, 150ns 4.5 5.5 V, 28-Pin PDIP") 120 | (docs https://componentsearchengine.com/Datasheets/1/AT28C64B-15PU.pdf) 121 | (fields 122 | (field (name Reference) IC) 123 | (field (name Value) AT28C256-15PU) 124 | (field (name Footprint) DIP1556W56P254L3702H483Q28N) 125 | (field (name Description) "AT28C256-15PU, Parallel EEPROM Memory 256kbit, Parallel, 150ns 4.5 5.5 V, 28-Pin PDIP") 126 | (field (name Height) 4.826) 127 | (field (name "Mouser Part Number") 556-AT28C25615PU) 128 | (field (name "Mouser Price/Stock") https://www.mouser.com/Search/Refine.aspx?Keyword=AT28C256) 129 | (field (name Manufacturer_Name) Microchip) 130 | (field (name Manufacturer_Part_Number) AT28C256-15PU)) 131 | (pins 132 | (pin (num 1) (name A14) (type BiDi)) 133 | (pin (num 2) (name A12) (type BiDi)) 134 | (pin (num 3) (name A7) (type BiDi)) 135 | (pin (num 4) (name A6) (type BiDi)) 136 | (pin (num 5) (name A5) (type BiDi)) 137 | (pin (num 6) (name A4) (type BiDi)) 138 | (pin (num 7) (name A3) (type BiDi)) 139 | (pin (num 8) (name A2) (type BiDi)) 140 | (pin (num 9) (name A1) (type BiDi)) 141 | (pin (num 10) (name A0) (type BiDi)) 142 | (pin (num 11) (name I/O0) (type BiDi)) 143 | (pin (num 12) (name I/O1) (type BiDi)) 144 | (pin (num 13) (name I/O2) (type BiDi)) 145 | (pin (num 14) (name GND) (type BiDi)) 146 | (pin (num 15) (name I/O3) (type BiDi)) 147 | (pin (num 16) (name I/O4) (type BiDi)) 148 | (pin (num 17) (name I/O5) (type BiDi)) 149 | (pin (num 18) (name I/O6) (type BiDi)) 150 | (pin (num 19) (name I/O7) (type BiDi)) 151 | (pin (num 20) (name ~CE) (type BiDi)) 152 | (pin (num 21) (name A10) (type BiDi)) 153 | (pin (num 22) (name ~OE) (type BiDi)) 154 | (pin (num 23) (name A11) (type BiDi)) 155 | (pin (num 24) (name A9) (type BiDi)) 156 | (pin (num 25) (name A8) (type BiDi)) 157 | (pin (num 26) (name A13) (type BiDi)) 158 | (pin (num 27) (name ~WE) (type BiDi)) 159 | (pin (num 28) (name VCC) (type BiDi)))) 160 | (libpart (lib eeprom-programmer) (part Arduino_Nano_v3.x) 161 | (aliases 162 | (alias Arduino_Nano_v2.x)) 163 | (description "Arduino Nano v3.x") 164 | (docs http://www.mouser.com/pdfdocs/Gravitech_Arduino_Nano3_0.pdf) 165 | (footprints 166 | (fp Arduino*Nano*)) 167 | (fields 168 | (field (name Reference) A) 169 | (field (name Value) Arduino_Nano_v3.x) 170 | (field (name Footprint) Module:Arduino_Nano)) 171 | (pins 172 | (pin (num 1) (name D1/TX) (type BiDi)) 173 | (pin (num 2) (name D0/RX) (type BiDi)) 174 | (pin (num 3) (name RESET) (type input)) 175 | (pin (num 4) (name GND) (type power_in)) 176 | (pin (num 5) (name D2) (type BiDi)) 177 | (pin (num 6) (name D3) (type BiDi)) 178 | (pin (num 7) (name D4) (type BiDi)) 179 | (pin (num 8) (name D5) (type BiDi)) 180 | (pin (num 9) (name D6) (type BiDi)) 181 | (pin (num 10) (name D7) (type BiDi)) 182 | (pin (num 11) (name D8) (type BiDi)) 183 | (pin (num 12) (name D9) (type BiDi)) 184 | (pin (num 13) (name D10) (type BiDi)) 185 | (pin (num 14) (name D11) (type BiDi)) 186 | (pin (num 15) (name D12) (type BiDi)) 187 | (pin (num 16) (name D13) (type BiDi)) 188 | (pin (num 17) (name 3V3) (type power_out)) 189 | (pin (num 18) (name AREF) (type input)) 190 | (pin (num 19) (name A0) (type BiDi)) 191 | (pin (num 20) (name A1) (type BiDi)) 192 | (pin (num 21) (name A2) (type BiDi)) 193 | (pin (num 22) (name A3) (type BiDi)) 194 | (pin (num 23) (name A4) (type BiDi)) 195 | (pin (num 24) (name A5) (type BiDi)) 196 | (pin (num 25) (name A6) (type BiDi)) 197 | (pin (num 26) (name A7) (type BiDi)) 198 | (pin (num 27) (name +5V) (type power_out)) 199 | (pin (num 28) (name RESET) (type input)) 200 | (pin (num 29) (name GND) (type power_in)) 201 | (pin (num 30) (name VIN) (type power_in))))) 202 | (libraries 203 | (library (logical Device) 204 | (uri "/Library/Application Support/kicad/library/Device.lib")) 205 | (library (logical eeprom-programmer) 206 | (uri /Users/warren/Documents/dev/arduino/eeprom-programmer/schematic/eeprom-programmer.lib))) 207 | (nets 208 | (net (code 1) (name "Net-(U1-Pad9)") 209 | (node (ref U1) (pin 9)) 210 | (node (ref U2) (pin 14))) 211 | (net (code 2) (name "Net-(A1-Pad17)") 212 | (node (ref A1) (pin 17))) 213 | (net (code 3) (name "Net-(A1-Pad25)") 214 | (node (ref A1) (pin 25))) 215 | (net (code 4) (name "Net-(A1-Pad26)") 216 | (node (ref A1) (pin 26))) 217 | (net (code 5) (name "Net-(A1-Pad16)") 218 | (node (ref A1) (pin 16))) 219 | (net (code 6) (name "Net-(A1-Pad2)") 220 | (node (ref A1) (pin 2))) 221 | (net (code 7) (name "Net-(A1-Pad1)") 222 | (node (ref A1) (pin 1))) 223 | (net (code 8) (name "Net-(A1-Pad28)") 224 | (node (ref A1) (pin 28))) 225 | (net (code 9) (name "Net-(A1-Pad3)") 226 | (node (ref A1) (pin 3))) 227 | (net (code 10) (name "Net-(A1-Pad30)") 228 | (node (ref A1) (pin 30))) 229 | (net (code 11) (name "Net-(A1-Pad4)") 230 | (node (ref A1) (pin 4))) 231 | (net (code 12) (name "Net-(A1-Pad18)") 232 | (node (ref A1) (pin 18))) 233 | (net (code 13) (name "Net-(A1-Pad24)") 234 | (node (ref A1) (pin 24))) 235 | (net (code 14) (name /addr00) 236 | (node (ref U1) (pin 15)) 237 | (node (ref IC1) (pin 10))) 238 | (net (code 15) (name /addr01) 239 | (node (ref U1) (pin 1)) 240 | (node (ref IC1) (pin 9))) 241 | (net (code 16) (name /addr02) 242 | (node (ref IC1) (pin 8)) 243 | (node (ref U1) (pin 2))) 244 | (net (code 17) (name /addr03) 245 | (node (ref IC1) (pin 7)) 246 | (node (ref U1) (pin 3))) 247 | (net (code 18) (name /addr04) 248 | (node (ref IC1) (pin 6)) 249 | (node (ref U1) (pin 4))) 250 | (net (code 19) (name /addr05) 251 | (node (ref IC1) (pin 5)) 252 | (node (ref U1) (pin 5))) 253 | (net (code 20) (name /addr06) 254 | (node (ref IC1) (pin 4)) 255 | (node (ref U1) (pin 6))) 256 | (net (code 21) (name /addr07) 257 | (node (ref IC1) (pin 3)) 258 | (node (ref U1) (pin 7))) 259 | (net (code 22) (name /addr08) 260 | (node (ref U2) (pin 15)) 261 | (node (ref IC1) (pin 25))) 262 | (net (code 23) (name /addr10) 263 | (node (ref U2) (pin 2)) 264 | (node (ref IC1) (pin 21))) 265 | (net (code 24) (name /addr11) 266 | (node (ref U2) (pin 3)) 267 | (node (ref IC1) (pin 23))) 268 | (net (code 25) (name /addr12) 269 | (node (ref U2) (pin 4)) 270 | (node (ref IC1) (pin 2))) 271 | (net (code 26) (name /addr09) 272 | (node (ref U2) (pin 1)) 273 | (node (ref IC1) (pin 24))) 274 | (net (code 27) (name /data4) 275 | (node (ref A1) (pin 9)) 276 | (node (ref IC1) (pin 16))) 277 | (net (code 28) (name /data5) 278 | (node (ref IC1) (pin 17)) 279 | (node (ref A1) (pin 10))) 280 | (net (code 29) (name /data6) 281 | (node (ref IC1) (pin 18)) 282 | (node (ref A1) (pin 11))) 283 | (net (code 30) (name /data7) 284 | (node (ref IC1) (pin 19)) 285 | (node (ref A1) (pin 12))) 286 | (net (code 31) (name /data3) 287 | (node (ref IC1) (pin 15)) 288 | (node (ref A1) (pin 8))) 289 | (net (code 32) (name /data2) 290 | (node (ref IC1) (pin 13)) 291 | (node (ref A1) (pin 7))) 292 | (net (code 33) (name /data1) 293 | (node (ref IC1) (pin 12)) 294 | (node (ref A1) (pin 6))) 295 | (net (code 34) (name /data0) 296 | (node (ref IC1) (pin 11)) 297 | (node (ref A1) (pin 5))) 298 | (net (code 35) (name GND) 299 | (node (ref A1) (pin 29)) 300 | (node (ref C1) (pin 1)) 301 | (node (ref C2) (pin 1)) 302 | (node (ref C3) (pin 1)) 303 | (node (ref IC1) (pin 14)) 304 | (node (ref U1) (pin 8)) 305 | (node (ref U2) (pin 9)) 306 | (node (ref U2) (pin 8)) 307 | (node (ref U2) (pin 7))) 308 | (net (code 36) (name /addr13) 309 | (node (ref U2) (pin 5)) 310 | (node (ref IC1) (pin 26))) 311 | (net (code 37) (name /addr14) 312 | (node (ref U2) (pin 6)) 313 | (node (ref IC1) (pin 1))) 314 | (net (code 39) (name eeNotWriteEnable) 315 | (node (ref A1) (pin 13)) 316 | (node (ref IC1) (pin 27))) 317 | (net (code 40) (name eeNotChipEnable) 318 | (node (ref A1) (pin 14)) 319 | (node (ref IC1) (pin 20))) 320 | (net (code 41) (name eeNotOutputEnable) 321 | (node (ref A1) (pin 15)) 322 | (node (ref IC1) (pin 22))) 323 | (net (code 42) (name srReadClock) 324 | (node (ref U1) (pin 12)) 325 | (node (ref U2) (pin 12)) 326 | (node (ref A1) (pin 20))) 327 | (net (code 43) (name srNotOutputEnable) 328 | (node (ref A1) (pin 21)) 329 | (node (ref U1) (pin 13)) 330 | (node (ref U2) (pin 13))) 331 | (net (code 44) (name srSerialData) 332 | (node (ref U1) (pin 14)) 333 | (node (ref A1) (pin 23))) 334 | (net (code 45) (name Arduino5V) 335 | (node (ref IC1) (pin 28)) 336 | (node (ref U2) (pin 16)) 337 | (node (ref U1) (pin 16)) 338 | (node (ref A1) (pin 27)) 339 | (node (ref C1) (pin 2)) 340 | (node (ref C2) (pin 2)) 341 | (node (ref C3) (pin 2))) 342 | (net (code 46) (name srNotResetAll) 343 | (node (ref U1) (pin 10)) 344 | (node (ref U2) (pin 10)) 345 | (node (ref A1) (pin 19))) 346 | (net (code 47) (name srSerialClock) 347 | (node (ref A1) (pin 22)) 348 | (node (ref U1) (pin 11)) 349 | (node (ref U2) (pin 11))))) -------------------------------------------------------------------------------- /schematic/eeprom-programmer.pro: -------------------------------------------------------------------------------- 1 | update=Friday, January 03, 2020 at 11:52:04 PM 2 | version=1 3 | last_client=kicad 4 | [general] 5 | version=1 6 | RootSch= 7 | BoardNm= 8 | [cvpcb] 9 | version=1 10 | NetIExt=net 11 | [eeschema] 12 | version=1 13 | LibDir= 14 | [eeschema/libraries] 15 | [schematic_editor] 16 | version=1 17 | PageLayoutDescrFile= 18 | PlotDirectoryName= 19 | SubpartIdSeparator=0 20 | SubpartFirstId=65 21 | NetFmtName=Pcbnew 22 | SpiceAjustPassiveValues=0 23 | LabSize=50 24 | ERC_TestSimilarLabels=1 25 | [pcbnew] 26 | version=1 27 | PageLayoutDescrFile= 28 | LastNetListRead=eeprom-programmer.net 29 | CopperLayerCount=2 30 | BoardThickness=1.6 31 | AllowMicroVias=0 32 | AllowBlindVias=0 33 | RequireCourtyardDefinitions=0 34 | ProhibitOverlappingCourtyards=1 35 | MinTrackWidth=0.1524 36 | MinViaDiameter=0.508 37 | MinViaDrill=0.254 38 | MinMicroViaDiameter=0.508 39 | MinMicroViaDrill=0.254 40 | MinHoleToHole=0.25 41 | TrackWidth1=0.25 42 | ViaDiameter1=0.8 43 | ViaDrill1=0.4 44 | dPairWidth1=0.2 45 | dPairGap1=0.25 46 | dPairViaGap1=0.25 47 | SilkLineWidth=0.15 48 | SilkTextSizeV=1 49 | SilkTextSizeH=1 50 | SilkTextSizeThickness=0.15 51 | SilkTextItalic=0 52 | SilkTextUpright=1 53 | CopperLineWidth=0.2 54 | CopperTextSizeV=1.5 55 | CopperTextSizeH=1.5 56 | CopperTextThickness=0.3 57 | CopperTextItalic=0 58 | CopperTextUpright=1 59 | EdgeCutLineWidth=0.09999999999999999 60 | CourtyardLineWidth=0.05 61 | OthersLineWidth=0.15 62 | OthersTextSizeV=1 63 | OthersTextSizeH=1 64 | OthersTextSizeThickness=0.15 65 | OthersTextItalic=0 66 | OthersTextUpright=1 67 | SolderMaskClearance=0.0508 68 | SolderMaskMinWidth=0 69 | SolderPasteClearance=0 70 | SolderPasteRatio=-0 71 | [pcbnew/Layer.F.Cu] 72 | Name=F.Cu 73 | Type=0 74 | Enabled=1 75 | [pcbnew/Layer.In1.Cu] 76 | Name=In1.Cu 77 | Type=0 78 | Enabled=0 79 | [pcbnew/Layer.In2.Cu] 80 | Name=In2.Cu 81 | Type=0 82 | Enabled=0 83 | [pcbnew/Layer.In3.Cu] 84 | Name=In3.Cu 85 | Type=0 86 | Enabled=0 87 | [pcbnew/Layer.In4.Cu] 88 | Name=In4.Cu 89 | Type=0 90 | Enabled=0 91 | [pcbnew/Layer.In5.Cu] 92 | Name=In5.Cu 93 | Type=0 94 | Enabled=0 95 | [pcbnew/Layer.In6.Cu] 96 | Name=In6.Cu 97 | Type=0 98 | Enabled=0 99 | [pcbnew/Layer.In7.Cu] 100 | Name=In7.Cu 101 | Type=0 102 | Enabled=0 103 | [pcbnew/Layer.In8.Cu] 104 | Name=In8.Cu 105 | Type=0 106 | Enabled=0 107 | [pcbnew/Layer.In9.Cu] 108 | Name=In9.Cu 109 | Type=0 110 | Enabled=0 111 | [pcbnew/Layer.In10.Cu] 112 | Name=In10.Cu 113 | Type=0 114 | Enabled=0 115 | [pcbnew/Layer.In11.Cu] 116 | Name=In11.Cu 117 | Type=0 118 | Enabled=0 119 | [pcbnew/Layer.In12.Cu] 120 | Name=In12.Cu 121 | Type=0 122 | Enabled=0 123 | [pcbnew/Layer.In13.Cu] 124 | Name=In13.Cu 125 | Type=0 126 | Enabled=0 127 | [pcbnew/Layer.In14.Cu] 128 | Name=In14.Cu 129 | Type=0 130 | Enabled=0 131 | [pcbnew/Layer.In15.Cu] 132 | Name=In15.Cu 133 | Type=0 134 | Enabled=0 135 | [pcbnew/Layer.In16.Cu] 136 | Name=In16.Cu 137 | Type=0 138 | Enabled=0 139 | [pcbnew/Layer.In17.Cu] 140 | Name=In17.Cu 141 | Type=0 142 | Enabled=0 143 | [pcbnew/Layer.In18.Cu] 144 | Name=In18.Cu 145 | Type=0 146 | Enabled=0 147 | [pcbnew/Layer.In19.Cu] 148 | Name=In19.Cu 149 | Type=0 150 | Enabled=0 151 | [pcbnew/Layer.In20.Cu] 152 | Name=In20.Cu 153 | Type=0 154 | Enabled=0 155 | [pcbnew/Layer.In21.Cu] 156 | Name=In21.Cu 157 | Type=0 158 | Enabled=0 159 | [pcbnew/Layer.In22.Cu] 160 | Name=In22.Cu 161 | Type=0 162 | Enabled=0 163 | [pcbnew/Layer.In23.Cu] 164 | Name=In23.Cu 165 | Type=0 166 | Enabled=0 167 | [pcbnew/Layer.In24.Cu] 168 | Name=In24.Cu 169 | Type=0 170 | Enabled=0 171 | [pcbnew/Layer.In25.Cu] 172 | Name=In25.Cu 173 | Type=0 174 | Enabled=0 175 | [pcbnew/Layer.In26.Cu] 176 | Name=In26.Cu 177 | Type=0 178 | Enabled=0 179 | [pcbnew/Layer.In27.Cu] 180 | Name=In27.Cu 181 | Type=0 182 | Enabled=0 183 | [pcbnew/Layer.In28.Cu] 184 | Name=In28.Cu 185 | Type=0 186 | Enabled=0 187 | [pcbnew/Layer.In29.Cu] 188 | Name=In29.Cu 189 | Type=0 190 | Enabled=0 191 | [pcbnew/Layer.In30.Cu] 192 | Name=In30.Cu 193 | Type=0 194 | Enabled=0 195 | [pcbnew/Layer.B.Cu] 196 | Name=B.Cu 197 | Type=0 198 | Enabled=1 199 | [pcbnew/Layer.B.Adhes] 200 | Enabled=1 201 | [pcbnew/Layer.F.Adhes] 202 | Enabled=1 203 | [pcbnew/Layer.B.Paste] 204 | Enabled=1 205 | [pcbnew/Layer.F.Paste] 206 | Enabled=1 207 | [pcbnew/Layer.B.SilkS] 208 | Enabled=1 209 | [pcbnew/Layer.F.SilkS] 210 | Enabled=1 211 | [pcbnew/Layer.B.Mask] 212 | Enabled=1 213 | [pcbnew/Layer.F.Mask] 214 | Enabled=1 215 | [pcbnew/Layer.Dwgs.User] 216 | Enabled=1 217 | [pcbnew/Layer.Cmts.User] 218 | Enabled=1 219 | [pcbnew/Layer.Eco1.User] 220 | Enabled=1 221 | [pcbnew/Layer.Eco2.User] 222 | Enabled=1 223 | [pcbnew/Layer.Edge.Cuts] 224 | Enabled=1 225 | [pcbnew/Layer.Margin] 226 | Enabled=1 227 | [pcbnew/Layer.B.CrtYd] 228 | Enabled=1 229 | [pcbnew/Layer.F.CrtYd] 230 | Enabled=1 231 | [pcbnew/Layer.B.Fab] 232 | Enabled=1 233 | [pcbnew/Layer.F.Fab] 234 | Enabled=1 235 | [pcbnew/Layer.Rescue] 236 | Enabled=0 237 | [pcbnew/Netclasses] 238 | [pcbnew/Netclasses/Default] 239 | Name=Default 240 | Clearance=0.2 241 | TrackWidth=0.25 242 | ViaDiameter=0.8 243 | ViaDrill=0.4 244 | uViaDiameter=0.8 245 | uViaDrill=0.4 246 | dPairWidth=0.2 247 | dPairGap=0.25 248 | dPairViaGap=0.25 249 | -------------------------------------------------------------------------------- /schematic/eeprom-programmer.sch: -------------------------------------------------------------------------------- 1 | EESchema Schematic File Version 4 2 | EELAYER 30 0 3 | EELAYER END 4 | $Descr A 11000 8500 5 | encoding utf-8 6 | Sheet 1 1 7 | Title "AT28C EEPROM Programmer" 8 | Date "2019-12-05" 9 | Rev "b" 10 | Comp "" 11 | Comment1 "" 12 | Comment2 "" 13 | Comment3 "" 14 | Comment4 "" 15 | $EndDescr 16 | Text GLabel 5500 1750 0 50 Input ~ 0 17 | Arduino5V 18 | Text GLabel 5500 3950 0 50 Input ~ 0 19 | Arduino5V 20 | Text GLabel 3400 2300 1 50 Output ~ 0 21 | Arduino5V 22 | Wire Wire Line 23 | 5100 4550 4950 4550 24 | Wire Wire Line 25 | 4950 4550 4950 3750 26 | Wire Wire Line 27 | 4950 3750 5900 3750 28 | Text GLabel 2700 4100 0 50 Output ~ 0 29 | eeNotWriteEnable 30 | Text GLabel 2700 4200 0 50 Output ~ 0 31 | eeNotChipEnable 32 | Text GLabel 2700 4300 0 50 Output ~ 0 33 | eeNotOutputEnable 34 | NoConn ~ 3300 2700 35 | NoConn ~ 3700 4300 36 | NoConn ~ 3700 4400 37 | NoConn ~ 2700 4400 38 | NoConn ~ 2700 3100 39 | NoConn ~ 2700 3200 40 | NoConn ~ 3700 3100 41 | NoConn ~ 3700 3200 42 | NoConn ~ 3100 2700 43 | NoConn ~ 3200 4700 44 | NoConn ~ 3700 3500 45 | NoConn ~ 3700 4200 46 | Text GLabel 7850 2300 0 50 Input ~ 0 47 | Arduino5V 48 | Text Label 5900 2350 0 50 ~ 0 49 | addr00 50 | Text Label 5900 2450 0 50 ~ 0 51 | addr01 52 | Text Label 5900 2550 0 50 ~ 0 53 | addr02 54 | Text Label 5900 2650 0 50 ~ 0 55 | addr03 56 | Text Label 5900 2750 0 50 ~ 0 57 | addr04 58 | Text Label 5900 2850 0 50 ~ 0 59 | addr05 60 | Text Label 5900 2950 0 50 ~ 0 61 | addr06 62 | Text Label 5900 3050 0 50 ~ 0 63 | addr07 64 | Wire Wire Line 65 | 6200 2350 5900 2350 66 | Wire Wire Line 67 | 6200 2450 5900 2450 68 | Wire Wire Line 69 | 6200 2550 5900 2550 70 | Wire Wire Line 71 | 6200 2650 5900 2650 72 | Wire Wire Line 73 | 6200 2750 5900 2750 74 | Wire Wire Line 75 | 6200 2850 5900 2850 76 | Wire Wire Line 77 | 6200 2950 5900 2950 78 | Wire Wire Line 79 | 6200 3050 5900 3050 80 | Wire Wire Line 81 | 5900 4550 6200 4550 82 | Wire Wire Line 83 | 6200 4750 5900 4750 84 | Wire Wire Line 85 | 6200 4850 5900 4850 86 | Wire Wire Line 87 | 6200 4950 5900 4950 88 | Text Label 5900 4550 0 50 ~ 0 89 | addr08 90 | Text Label 6200 4750 2 50 ~ 0 91 | addr10 92 | Wire Wire Line 93 | 6200 4650 5900 4650 94 | Text Label 6200 4650 2 50 ~ 0 95 | addr09 96 | Text Label 6200 4850 2 50 ~ 0 97 | addr11 98 | Text Label 6200 4950 2 50 ~ 0 99 | addr12 100 | Text Label 8400 3000 0 50 ~ 0 101 | addr00 102 | Text Label 8400 3100 0 50 ~ 0 103 | addr01 104 | Text Label 8400 3200 0 50 ~ 0 105 | addr02 106 | Text Label 8400 3300 0 50 ~ 0 107 | addr03 108 | Text Label 8400 3400 0 50 ~ 0 109 | addr04 110 | Text Label 8400 3500 0 50 ~ 0 111 | addr05 112 | Text Label 8400 3600 0 50 ~ 0 113 | addr06 114 | Text Label 8400 3700 0 50 ~ 0 115 | addr07 116 | Wire Wire Line 117 | 8700 3000 8400 3000 118 | Wire Wire Line 119 | 8700 3100 8400 3100 120 | Wire Wire Line 121 | 8700 3200 8400 3200 122 | Wire Wire Line 123 | 8700 3300 8400 3300 124 | Wire Wire Line 125 | 8700 3400 8400 3400 126 | Text Label 8400 3800 0 50 ~ 0 127 | addr08 128 | Text Label 8700 4000 2 50 ~ 0 129 | addr10 130 | Text Label 8700 3900 2 50 ~ 0 131 | addr09 132 | Text Label 8700 4100 2 50 ~ 0 133 | addr11 134 | Text Label 8700 4200 2 50 ~ 0 135 | addr12 136 | Wire Wire Line 137 | 5900 3250 5900 3750 138 | Wire Wire Line 139 | 8400 3500 8700 3500 140 | Wire Wire Line 141 | 8400 3600 8700 3600 142 | Wire Wire Line 143 | 8400 3700 8700 3700 144 | Wire Wire Line 145 | 8400 3800 8700 3800 146 | Wire Wire Line 147 | 8400 4000 8700 4000 148 | Wire Wire Line 149 | 8400 4100 8700 4100 150 | Wire Wire Line 151 | 8400 4200 8700 4200 152 | Wire Wire Line 153 | 8400 3900 8700 3900 154 | Entry Bus Bus 155 | 6900 2900 7000 3000 156 | Entry Bus Bus 157 | 6900 3000 7000 3100 158 | Entry Bus Bus 159 | 6900 3100 7000 3200 160 | Entry Bus Bus 161 | 6900 3200 7000 3300 162 | Entry Bus Bus 163 | 6900 3300 7000 3400 164 | Entry Bus Bus 165 | 6900 3400 7000 3500 166 | Entry Bus Bus 167 | 6900 3500 7000 3600 168 | Entry Bus Bus 169 | 6900 3600 7000 3700 170 | Entry Bus Bus 171 | 2300 3800 2400 3900 172 | Entry Bus Bus 173 | 2300 3900 2400 4000 174 | Wire Wire Line 175 | 7300 3400 7000 3400 176 | Wire Wire Line 177 | 7300 3500 7000 3500 178 | Wire Wire Line 179 | 7300 3600 7000 3600 180 | Wire Wire Line 181 | 7300 3700 7000 3700 182 | Text Label 7300 3400 2 50 ~ 0 183 | data4 184 | Text Label 7300 3500 2 50 ~ 0 185 | data5 186 | Text Label 7300 3600 2 50 ~ 0 187 | data6 188 | Text Label 7300 3700 2 50 ~ 0 189 | data7 190 | Entry Bus Bus 191 | 2300 3200 2400 3300 192 | Entry Bus Bus 193 | 2300 3300 2400 3400 194 | Entry Bus Bus 195 | 2300 3400 2400 3500 196 | Entry Bus Bus 197 | 2300 3500 2400 3600 198 | Entry Bus Bus 199 | 2300 3700 2400 3800 200 | Entry Bus Bus 201 | 2300 3600 2400 3700 202 | Wire Wire Line 203 | 2700 3800 2400 3800 204 | Text Label 2700 3800 2 50 ~ 0 205 | data5 206 | Wire Wire Line 207 | 2700 3700 2400 3700 208 | Wire Wire Line 209 | 2700 3600 2400 3600 210 | Wire Wire Line 211 | 2700 3500 2400 3500 212 | Wire Wire Line 213 | 2700 3400 2400 3400 214 | Wire Wire Line 215 | 2700 3300 2400 3300 216 | Text Label 2700 3300 2 50 ~ 0 217 | data0 218 | Text Label 2700 3400 2 50 ~ 0 219 | data1 220 | Text Label 2700 3500 2 50 ~ 0 221 | data2 222 | Text Label 2700 3600 2 50 ~ 0 223 | data3 224 | Text Label 2700 3700 2 50 ~ 0 225 | data4 226 | Wire Wire Line 227 | 2700 3900 2400 3900 228 | Wire Wire Line 229 | 2700 4000 2400 4000 230 | Text Label 2700 3900 2 50 ~ 0 231 | data6 232 | Text Label 2700 4000 2 50 ~ 0 233 | data7 234 | Wire Wire Line 235 | 7300 3000 7000 3000 236 | Wire Wire Line 237 | 7300 3100 7000 3100 238 | Wire Wire Line 239 | 7300 3200 7000 3200 240 | Wire Wire Line 241 | 7300 3300 7000 3300 242 | Text Label 7300 3000 2 50 ~ 0 243 | data0 244 | Text Label 7300 3100 2 50 ~ 0 245 | data1 246 | Text Label 7300 3200 2 50 ~ 0 247 | data2 248 | Text Label 7300 3300 2 50 ~ 0 249 | data3 250 | Entry Bus Bus 251 | 6200 2350 6300 2450 252 | Entry Bus Bus 253 | 6200 2450 6300 2550 254 | Entry Bus Bus 255 | 6200 2550 6300 2650 256 | Entry Bus Bus 257 | 6200 2650 6300 2750 258 | Entry Bus Bus 259 | 6200 2750 6300 2850 260 | Entry Bus Bus 261 | 6200 2850 6300 2950 262 | Entry Bus Bus 263 | 6200 2950 6300 3050 264 | Entry Bus Bus 265 | 6200 3050 6300 3150 266 | Entry Bus Bus 267 | 6200 4550 6300 4650 268 | Entry Bus Bus 269 | 6200 4650 6300 4750 270 | Entry Bus Bus 271 | 6200 4750 6300 4850 272 | Entry Bus Bus 273 | 6200 4850 6300 4950 274 | Entry Bus Bus 275 | 6200 4950 6300 5050 276 | Entry Bus Bus 277 | 8700 3000 8800 3100 278 | Entry Bus Bus 279 | 8700 3100 8800 3200 280 | Entry Bus Bus 281 | 8700 3200 8800 3300 282 | Entry Bus Bus 283 | 8700 3300 8800 3400 284 | Entry Bus Bus 285 | 8700 3400 8800 3500 286 | Entry Bus Bus 287 | 8700 3500 8800 3600 288 | Entry Bus Bus 289 | 8700 3600 8800 3700 290 | Entry Bus Bus 291 | 8700 3700 8800 3800 292 | Entry Bus Bus 293 | 8700 3800 8800 3900 294 | Entry Bus Bus 295 | 8700 3900 8800 4000 296 | Entry Bus Bus 297 | 8700 4000 8800 4100 298 | Entry Bus Bus 299 | 8700 4100 8800 4200 300 | Entry Bus Bus 301 | 8700 4200 8800 4300 302 | Wire Bus Line 303 | 8800 5050 6300 5050 304 | Text GLabel 7300 3950 0 50 Input ~ 0 305 | eeNotWriteEnable 306 | Text GLabel 7300 3850 0 50 Input ~ 0 307 | eeNotChipEnable 308 | Text GLabel 7300 4050 0 50 Input ~ 0 309 | eeNotOutputEnable 310 | Wire Bus Line 311 | 2300 1550 6900 1550 312 | Text GLabel 5100 2350 0 50 Input ~ 0 313 | srSerialData 314 | Text GLabel 3700 4100 2 50 Output ~ 0 315 | srSerialData 316 | Text GLabel 5100 4750 0 50 Input ~ 0 317 | srSerialClock 318 | Text GLabel 5100 2550 0 50 Input ~ 0 319 | srSerialClock 320 | Text GLabel 3700 4000 2 50 Output ~ 0 321 | srSerialClock 322 | Text GLabel 3700 3900 2 50 Output ~ 0 323 | srNotOutputEnable 324 | Text GLabel 5100 2950 0 50 Input ~ 0 325 | srNotOutputEnable 326 | Text GLabel 5100 5150 0 50 Input ~ 0 327 | srNotOutputEnable 328 | Text GLabel 3700 3800 2 50 Output ~ 0 329 | srReadClock 330 | Text GLabel 5100 5050 0 50 Input ~ 0 331 | srReadClock 332 | Text GLabel 5100 2850 0 50 Input ~ 0 333 | srReadClock 334 | Text GLabel 5100 4850 0 50 Input ~ 0 335 | srNotResetAll 336 | Text GLabel 5100 2650 0 50 Input ~ 0 337 | srNotResetAll 338 | Text GLabel 3700 3700 2 50 Output ~ 0 339 | srNotResetAll 340 | Wire Wire Line 341 | 3300 4700 3300 5100 342 | Wire Wire Line 343 | 5900 5050 6200 5050 344 | Text Label 5900 5050 0 50 ~ 0 345 | addr13 346 | Wire Wire Line 347 | 5900 5150 6200 5150 348 | Text Label 5900 5150 0 50 ~ 0 349 | addr14 350 | Entry Bus Bus 351 | 6200 5050 6300 5150 352 | Entry Bus Bus 353 | 6200 5150 6300 5250 354 | Connection ~ 6300 5050 355 | Wire Wire Line 356 | 3400 2300 3400 2700 357 | $Comp 358 | L eeprom-programmer:Arduino_Nano_v3.x A1 359 | U 1 1 5DEB64C7 360 | P 3200 3700 361 | F 0 "A1" H 3200 2611 50 0000 C CNN 362 | F 1 "Arduino_Nano_v3.x" H 3200 2520 50 0000 C CNN 363 | F 2 "eeprom-programmer:Arduino_Nano" H 3350 2750 50 0001 L CNN 364 | F 3 "http://www.mouser.com/pdfdocs/Gravitech_Arduino_Nano3_0.pdf" H 3200 2700 50 0001 C CNN 365 | 1 3200 3700 366 | 1 0 0 -1 367 | $EndComp 368 | Wire Wire Line 369 | 5500 1750 5500 1850 370 | Wire Wire Line 371 | 5500 3950 5500 4050 372 | $Comp 373 | L eeprom-programmer:74LS595 U1 374 | U 1 1 5DEB723F 375 | P 5500 2750 376 | F 0 "U1" H 5500 3531 50 0000 C CNN 377 | F 1 "74LS595" H 5500 3440 50 0000 C CNN 378 | F 2 "eeprom-programmer:DIP254P762X508-16" H 5500 2750 50 0001 C CNN 379 | F 3 "http://www.ti.com/lit/gpn/sn74ls595" H 5500 2750 50 0001 C CNN 380 | 1 5500 2750 381 | 1 0 0 -1 382 | $EndComp 383 | $Comp 384 | L eeprom-programmer:74LS595 U2 385 | U 1 1 5DEB7D2E 386 | P 5500 4950 387 | F 0 "U2" H 5500 5731 50 0000 C CNN 388 | F 1 "74LS595" H 5500 5640 50 0000 C CNN 389 | F 2 "eeprom-programmer:DIP254P762X508-16" H 5500 4950 50 0001 C CNN 390 | F 3 "http://www.ti.com/lit/gpn/sn74ls595" H 5500 4950 50 0001 C CNN 391 | 1 5500 4950 392 | 1 0 0 -1 393 | $EndComp 394 | Text Label 8700 4300 2 50 ~ 0 395 | addr13 396 | Wire Wire Line 397 | 8400 4300 8700 4300 398 | $Comp 399 | L eeprom-programmer:AT28C256-15PU IC1 400 | U 1 1 5DEBE083 401 | P 7300 3000 402 | F 0 "IC1" H 7850 3481 50 0000 C CNN 403 | F 1 "AT28C256-15PU" H 7850 3390 50 0000 C CNN 404 | F 2 "eeprom-programmer:DIP254P1524X482-28" H 6800 4300 50 0001 L CNN 405 | F 3 "https://componentsearchengine.com/Datasheets/1/AT28C64B-15PU.pdf" H 6800 4200 50 0001 L CNN 406 | F 4 "AT28C256-15PU, Parallel EEPROM Memory 256kbit, Parallel, 150ns 4.5 5.5 V, 28-Pin PDIP" H 6800 4100 50 0001 L CNN "Description" 407 | F 5 "4.826" H 6800 4000 50 0001 L CNN "Height" 408 | F 6 "556-AT28C25615PU" H 6800 3900 50 0001 L CNN "Mouser Part Number" 409 | F 7 "https://www.mouser.com/Search/Refine.aspx?Keyword=AT28C256" H 6800 3800 50 0001 L CNN "Mouser Price/Stock" 410 | F 8 "Microchip" H 6800 3700 50 0001 L CNN "Manufacturer_Name" 411 | F 9 "AT28C256-15PU" H 6800 3600 50 0001 L CNN "Manufacturer_Part_Number" 412 | 1 7300 3000 413 | 1 0 0 -1 414 | $EndComp 415 | Text Label 8700 4400 2 50 ~ 0 416 | addr14 417 | Wire Wire Line 418 | 8400 4400 8700 4400 419 | Entry Bus Bus 420 | 8700 4300 8800 4400 421 | Entry Bus Bus 422 | 8700 4400 8800 4500 423 | $Comp 424 | L power:GND #PWR0101 425 | U 1 1 5DEC1A08 426 | P 3300 5100 427 | F 0 "#PWR0101" H 3300 4850 50 0001 C CNN 428 | F 1 "GND" V 3305 4972 50 0000 R CNN 429 | F 2 "" H 3300 5100 50 0001 C CNN 430 | F 3 "" H 3300 5100 50 0001 C CNN 431 | 1 3300 5100 432 | 1 0 0 -1 433 | $EndComp 434 | $Comp 435 | L power:GND #PWR0102 436 | U 1 1 5DEC3279 437 | P 5500 5650 438 | F 0 "#PWR0102" H 5500 5400 50 0001 C CNN 439 | F 1 "GND" V 5505 5522 50 0000 R CNN 440 | F 2 "" H 5500 5650 50 0001 C CNN 441 | F 3 "" H 5500 5650 50 0001 C CNN 442 | 1 5500 5650 443 | 1 0 0 -1 444 | $EndComp 445 | $Comp 446 | L power:GND #PWR0103 447 | U 1 1 5DEC4AEA 448 | P 5500 3450 449 | F 0 "#PWR0103" H 5500 3200 50 0001 C CNN 450 | F 1 "GND" V 5505 3322 50 0000 R CNN 451 | F 2 "" H 5500 3450 50 0001 C CNN 452 | F 3 "" H 5500 3450 50 0001 C CNN 453 | 1 5500 3450 454 | 1 0 0 -1 455 | $EndComp 456 | $Comp 457 | L power:GND #PWR0104 458 | U 1 1 5DEC63E4 459 | P 7850 4700 460 | F 0 "#PWR0104" H 7850 4450 50 0001 C CNN 461 | F 1 "GND" V 7855 4572 50 0000 R CNN 462 | F 2 "" H 7850 4700 50 0001 C CNN 463 | F 3 "" H 7850 4700 50 0001 C CNN 464 | 1 7850 4700 465 | 1 0 0 -1 466 | $EndComp 467 | $Comp 468 | L power:GND #PWR0105 469 | U 1 1 5DEC7D0B 470 | P 5900 5250 471 | F 0 "#PWR0105" H 5900 5000 50 0001 C CNN 472 | F 1 "GND" V 5905 5122 50 0000 R CNN 473 | F 2 "" H 5900 5250 50 0001 C CNN 474 | F 3 "" H 5900 5250 50 0001 C CNN 475 | 1 5900 5250 476 | 0 -1 -1 0 477 | $EndComp 478 | $Comp 479 | L power:GND #PWR0106 480 | U 1 1 5DEC957C 481 | P 5900 5450 482 | F 0 "#PWR0106" H 5900 5200 50 0001 C CNN 483 | F 1 "GND" V 5905 5322 50 0000 R CNN 484 | F 2 "" H 5900 5450 50 0001 C CNN 485 | F 3 "" H 5900 5450 50 0001 C CNN 486 | 1 5900 5450 487 | 0 -1 -1 0 488 | $EndComp 489 | $Comp 490 | L Device:C C1 491 | U 1 1 5E0AC806 492 | P 5650 1850 493 | F 0 "C1" V 5398 1850 50 0000 C CNN 494 | F 1 ".1uf" V 5489 1850 50 0000 C CNN 495 | F 2 "eeprom-programmer:C_Disc_D5.0mm_W2.5mm_P5.00mm" H 5688 1700 50 0001 C CNN 496 | F 3 "~" H 5650 1850 50 0001 C CNN 497 | 1 5650 1850 498 | 0 1 1 0 499 | $EndComp 500 | Connection ~ 5500 1850 501 | Wire Wire Line 502 | 5500 1850 5500 2150 503 | $Comp 504 | L Device:C C2 505 | U 1 1 5E0AD397 506 | P 5650 4050 507 | F 0 "C2" V 5398 4050 50 0000 C CNN 508 | F 1 ".1uf" V 5489 4050 50 0000 C CNN 509 | F 2 "eeprom-programmer:C_Disc_D5.0mm_W2.5mm_P5.00mm" H 5688 3900 50 0001 C CNN 510 | F 3 "~" H 5650 4050 50 0001 C CNN 511 | 1 5650 4050 512 | 0 1 1 0 513 | $EndComp 514 | Connection ~ 5500 4050 515 | Wire Wire Line 516 | 5500 4050 5500 4350 517 | $Comp 518 | L Device:C C3 519 | U 1 1 5E0ADC8B 520 | P 8000 2400 521 | F 0 "C3" V 7748 2400 50 0000 C CNN 522 | F 1 ".1uf" V 7839 2400 50 0000 C CNN 523 | F 2 "eeprom-programmer:C_Disc_D5.0mm_W2.5mm_P5.00mm" H 8038 2250 50 0001 C CNN 524 | F 3 "~" H 8000 2400 50 0001 C CNN 525 | 1 8000 2400 526 | 0 1 1 0 527 | $EndComp 528 | $Comp 529 | L eeprom-programmer:GND #PWR0107 530 | U 1 1 5E0AE377 531 | P 5800 1850 532 | F 0 "#PWR0107" H 5800 1600 50 0001 C CNN 533 | F 1 "GND" V 5805 1722 50 0000 R CNN 534 | F 2 "" H 5800 1850 50 0001 C CNN 535 | F 3 "" H 5800 1850 50 0001 C CNN 536 | 1 5800 1850 537 | 0 -1 -1 0 538 | $EndComp 539 | $Comp 540 | L eeprom-programmer:GND #PWR0108 541 | U 1 1 5E0AED53 542 | P 5800 4050 543 | F 0 "#PWR0108" H 5800 3800 50 0001 C CNN 544 | F 1 "GND" V 5805 3922 50 0000 R CNN 545 | F 2 "" H 5800 4050 50 0001 C CNN 546 | F 3 "" H 5800 4050 50 0001 C CNN 547 | 1 5800 4050 548 | 0 -1 -1 0 549 | $EndComp 550 | Wire Wire Line 551 | 7850 2300 7850 2400 552 | Connection ~ 7850 2400 553 | Wire Wire Line 554 | 7850 2400 7850 2700 555 | $Comp 556 | L eeprom-programmer:GND #PWR0109 557 | U 1 1 5E0B56EB 558 | P 8150 2400 559 | F 0 "#PWR0109" H 8150 2150 50 0001 C CNN 560 | F 1 "GND" V 8155 2272 50 0000 R CNN 561 | F 2 "" H 8150 2400 50 0001 C CNN 562 | F 3 "" H 8150 2400 50 0001 C CNN 563 | 1 8150 2400 564 | 0 -1 -1 0 565 | $EndComp 566 | Wire Bus Line 567 | 6300 5050 6300 5250 568 | Wire Bus Line 569 | 2300 1550 2300 3900 570 | Wire Bus Line 571 | 6900 1550 6900 3600 572 | Wire Bus Line 573 | 6300 2450 6300 5050 574 | Wire Bus Line 575 | 8800 3100 8800 5050 576 | $EndSCHEMATC 577 | --------------------------------------------------------------------------------