From 157fb199b7055332bb62c0ee7f68c7b988a38fdd Mon Sep 17 00:00:00 2001 From: Marvin Blum Date: Fri, 29 Jul 2022 19:47:32 +0200 Subject: [PATCH] Write data to EEPROM. --- README.md | 8 ++++++++ at28c256/at28c256.c | 45 +++++++++++++++++++++++++++++++++++++-------- at28c256/at28c256.h | 2 +- main.c | 15 ++++++++------- 4 files changed, 54 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 740bc1d..d3d329c 100644 --- a/README.md +++ b/README.md @@ -17,3 +17,11 @@ sudo ./compile.sh /dev/ttyUSB0 ``` The port can be found by looking inside `/dev`, the system file `ll /sys/class/tty/ttyUSB*`, or by running `lsusb`. + +## Monitoring the serial port + +``` +sudo screen /dev/ttyUSB0 9600 +``` + +To close the program, press `Ctrl + A` and type in `:quit` and hit enter. diff --git a/at28c256/at28c256.c b/at28c256/at28c256.c index 12f7f88..a350ae2 100644 --- a/at28c256/at28c256.c +++ b/at28c256/at28c256.c @@ -1,19 +1,37 @@ +#include #include "at28c256.h" #include "../ard/pins.h" -unsigned char _addrck, _addr; +unsigned char _ck, _addr, _oe, _we, _io0, _io1, _io2, _io3, _io4, _io5, _io6, _io7; -void at28c256_init(unsigned char addrck, unsigned char addr) { - pin_mode(addrck, OUTPUT); - digital_write(addrck, LOW); // disable +void at28c256_init(unsigned char ck, unsigned char addr, unsigned char oe, unsigned char we, unsigned char io0, unsigned char io1, unsigned char io2, unsigned char io3, unsigned char io4, unsigned char io5, unsigned char io6, unsigned char io7) { + pin_mode(ck, OUTPUT); + digital_write(ck, LOW); // disable pin_mode(addr, OUTPUT); digital_write(addr, LOW); // disable + pin_mode(oe, OUTPUT); + digital_write(oe, HIGH); // disable + pin_mode(we, OUTPUT); + digital_write(we, HIGH); // disable - _addrck = addrck; + _ck = ck; _addr = addr; + _oe = oe; + _we = we; + _io0 = io0; + _io1 = io1; + _io2 = io2; + _io3 = io3; + _io4 = io4; + _io5 = io5; + _io6 = io6; + _io7 = io7; } void at28c256_write(unsigned short addr, unsigned char data) { + // just to be safe, disable output + digital_write(_oe, HIGH); + // set the address unsigned int i; @@ -24,11 +42,22 @@ void at28c256_write(unsigned short addr, unsigned char data) { digital_write(_addr, LOW); } - digital_write(_addrck, HIGH); - digital_write(_addrck, LOW); + digital_write(_ck, HIGH); + digital_write(_ck, LOW); } digital_write(_addr, LOW); - // TODO write data + // write data + digital_write(_io0, data & 1); + digital_write(_io1, data & 1<<1); + digital_write(_io2, data & 1<<2); + digital_write(_io3, data & 1<<3); + digital_write(_io4, data & 1<<4); + digital_write(_io5, data & 1<<5); + digital_write(_io6, data & 1<<6); + digital_write(_io7, data & 1<<7); + digital_write(_we, data); + _delay_us(1); // min 100ns + digital_write(_we, HIGH); } diff --git a/at28c256/at28c256.h b/at28c256/at28c256.h index 7760faf..fd3939e 100644 --- a/at28c256/at28c256.h +++ b/at28c256/at28c256.h @@ -1,7 +1,7 @@ #ifndef AT28C256_H_ #define AT28C256_H_ -void at28c256_init(unsigned char, unsigned char); +void at28c256_init(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char); void at28c256_write(unsigned short, unsigned char); //unsigned char at28c256_read(unsigned short); TODO diff --git a/main.c b/main.c index e48e872..1e1f652 100644 --- a/main.c +++ b/main.c @@ -7,7 +7,7 @@ void prepare(); void loop(); -int main(){ +int main() { prepare(); while(1){ @@ -15,15 +15,16 @@ int main(){ } } -void prepare(){ +void prepare() { pins_init(); serial_init(9600); - at28c256_init(2, 13); + at28c256_init(2, 13, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12); + + at28c256_write(0x0000, 0x7B); // 123 + at28c256_write(0x0001, 0x2A); // 42 } -void loop(){ - at28c256_write(0x0001, 0); - _delay_ms(1000); - at28c256_write(0x8000, 0); +void loop() { + serial_write("Test\n\r", 6); _delay_ms(1000); }