Started implementing EEPROM writer/reader for AT28C256.

This commit is contained in:
2022-07-29 14:53:43 +02:00
parent ac69187b5f
commit 7a476f3180
8 changed files with 77 additions and 36 deletions

34
at28c256/at28c256.c Normal file
View File

@@ -0,0 +1,34 @@
#include "at28c256.h"
#include "../ard/pins.h"
unsigned char _addrck, _addr;
void at28c256_init(unsigned char addrck, unsigned char addr) {
pin_mode(addrck, OUTPUT);
digital_write(addrck, LOW); // disable
pin_mode(addr, OUTPUT);
digital_write(addr, LOW); // disable
_addrck = addrck;
_addr = addr;
}
void at28c256_write(unsigned short addr, unsigned char data) {
// set the address
unsigned int i;
for(i = 0; i < 16; i++) {
if(addr & (1 << (15-i))) {
digital_write(_addr, HIGH);
} else {
digital_write(_addr, LOW);
}
digital_write(_addrck, HIGH);
digital_write(_addrck, LOW);
}
digital_write(_addr, LOW);
// TODO write data
}

8
at28c256/at28c256.h Normal file
View File

@@ -0,0 +1,8 @@
#ifndef AT28C256_H_
#define AT28C256_H_
void at28c256_init(unsigned char, unsigned char);
void at28c256_write(unsigned short, unsigned char);
//unsigned char at28c256_read(unsigned short); TODO
#endif

View File

@@ -15,6 +15,7 @@ rm -rf build || true
mkdir build mkdir build
# compile files # compile files
avr-gcc -Os -DF_CPU=16000000UL -mmcu=$MMCU -c -o build/at28c256.o -Wall at28c256/at28c256.c
avr-gcc -Os -DF_CPU=16000000UL -mmcu=$MMCU -c -o build/servo.o -Wall servo/servo.c avr-gcc -Os -DF_CPU=16000000UL -mmcu=$MMCU -c -o build/servo.o -Wall servo/servo.c
avr-gcc -Os -DF_CPU=16000000UL -mmcu=$MMCU -c -o build/rf24.o -Wall rf24/rf24.c avr-gcc -Os -DF_CPU=16000000UL -mmcu=$MMCU -c -o build/rf24.o -Wall rf24/rf24.c
avr-gcc -Os -DF_CPU=16000000UL -mmcu=$MMCU -c -o build/util.o -Wall ard/util.c avr-gcc -Os -DF_CPU=16000000UL -mmcu=$MMCU -c -o build/util.o -Wall ard/util.c

10
main.c
View File

@@ -2,7 +2,7 @@
#include <stdio.h> #include <stdio.h>
#include "ard/serial.h" #include "ard/serial.h"
#include "ard/pins.h" #include "ard/pins.h"
#include "ard/util.h" #include "at28c256/at28c256.h"
void prepare(); void prepare();
void loop(); void loop();
@@ -18,12 +18,12 @@ int main(){
void prepare(){ void prepare(){
pins_init(); pins_init();
serial_init(9600); serial_init(9600);
pin_mode(13, OUTPUT); at28c256_init(2, 13);
} }
void loop(){ void loop(){
digital_write(13, LOW); at28c256_write(0x0001, 0);
_delay_ms(1000);
at28c256_write(0x8000, 0);
_delay_ms(1000); _delay_ms(1000);
digital_write(13, HIGH);
_delay_us(1000000);
} }

View File

@@ -1,10 +1,8 @@
#include <util/delay.h>
#include "rf24.h" #include "rf24.h"
#include "nRF24L01.h" #include "nRF24L01.h"
#include "../ard/pins.h" #include "../ard/pins.h"
// FIXME for testing, remove later
#include <util/delay.h>
#define CONFIG_CRC (1<<EN_CRC)|(0<<CRCO) #define CONFIG_CRC (1<<EN_CRC)|(0<<CRCO)
unsigned char _ce, _csn, _sck, _mo, _mi, _irq, _payload_len; unsigned char _ce, _csn, _sck, _mo, _mi, _irq, _payload_len;