diff --git a/ard/pins.c b/ard/pins.c index 3773495..bd5a95d 100644 --- a/ard/pins.c +++ b/ard/pins.c @@ -20,7 +20,7 @@ const unsigned char A7 = 0x15; void analog_read_duty_cycle(); unsigned char map_analog_pin(unsigned char); -void pins_init(){ +void pins_init() { sei(); // enable ADC (128 bit ADPS scaling factor 0x07) to read analog values @@ -37,7 +37,7 @@ void pins_init(){ TIMSK2 |= _BV(TOIE2); } -void pin_mode(unsigned char pin, unsigned char mode){ +void pin_mode(unsigned char pin, unsigned char mode) { if(pin > A7){ return; } @@ -75,7 +75,7 @@ void pin_mode(unsigned char pin, unsigned char mode){ } } -int digital_read(unsigned char pin){ +int digital_read(unsigned char pin) { if(pin > A7){ return 0; } @@ -94,7 +94,7 @@ int digital_read(unsigned char pin){ return analog_read(pin) > 512 ? 1 : 0; } -void digital_write(unsigned char pin, unsigned char value){ +void digital_write(unsigned char pin, unsigned char value) { if(pin > A7){ return; } @@ -132,7 +132,7 @@ void digital_write(unsigned char pin, unsigned char value){ } } -unsigned int analog_read(unsigned char pin){ +unsigned int analog_read(unsigned char pin) { pin = map_analog_pin(pin); if(pin > 7){ @@ -151,7 +151,7 @@ unsigned int analog_read(unsigned char pin){ return ADC; } -void analog_write(unsigned char pin, unsigned char value){ +void analog_write(unsigned char pin, unsigned char value) { // write digital if possible if(value == 0){ digital_write(pin, LOW); @@ -206,7 +206,7 @@ void analog_write(unsigned char pin, unsigned char value){ } // maps A0-A7 to 0-7 -unsigned char map_analog_pin(unsigned char pin){ +unsigned char map_analog_pin(unsigned char pin) { if(pin > 7){ return pin-A0; } diff --git a/ard/serial.c b/ard/serial.c index 6f90b0c..1e8617f 100644 --- a/ard/serial.c +++ b/ard/serial.c @@ -1,7 +1,7 @@ #include "serial.h" #include -void serial_init(unsigned int baud){ +void serial_init(unsigned int baud) { unsigned long baud_prescale = ((16000000UL/(baud*16UL)))-1; // enable transmitter and receiver @@ -15,7 +15,7 @@ void serial_init(unsigned int baud){ UBRR0L = baud_prescale; } -void serial_write(char* data, unsigned int n){ +void serial_write(char* data, unsigned int n) { unsigned int i; for(i = 0; i < n; i++){ @@ -27,7 +27,7 @@ void serial_write(char* data, unsigned int n){ } } -void serial_read(char* data, unsigned int n){ +void serial_read(char* data, unsigned int n) { unsigned int i; for(i = 0; i < n; i++){ diff --git a/ard/util.c b/ard/util.c index 75cf876..c3fef79 100644 --- a/ard/util.c +++ b/ard/util.c @@ -1,5 +1,5 @@ #include "util.h" -float map(float value, float fromLow, float fromHigh, float toLow, float toHigh){ +float map(float value, float fromLow, float fromHigh, float toLow, float toHigh) { return fromLow+((toHigh-toLow)/(fromHigh-fromLow))*(value-fromLow); } diff --git a/at28c256/at28c256.c b/at28c256/at28c256.c new file mode 100644 index 0000000..12f7f88 --- /dev/null +++ b/at28c256/at28c256.c @@ -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 +} diff --git a/at28c256/at28c256.h b/at28c256/at28c256.h new file mode 100644 index 0000000..7760faf --- /dev/null +++ b/at28c256/at28c256.h @@ -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 diff --git a/compile.sh b/compile.sh index d8ba68f..3918e3b 100755 --- a/compile.sh +++ b/compile.sh @@ -15,6 +15,7 @@ rm -rf build || true mkdir build # 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/rf24.o -Wall rf24/rf24.c avr-gcc -Os -DF_CPU=16000000UL -mmcu=$MMCU -c -o build/util.o -Wall ard/util.c diff --git a/main.c b/main.c index f14d4f7..e48e872 100644 --- a/main.c +++ b/main.c @@ -2,7 +2,7 @@ #include #include "ard/serial.h" #include "ard/pins.h" -#include "ard/util.h" +#include "at28c256/at28c256.h" void prepare(); void loop(); @@ -18,12 +18,12 @@ int main(){ void prepare(){ pins_init(); serial_init(9600); - pin_mode(13, OUTPUT); + at28c256_init(2, 13); } void loop(){ - digital_write(13, LOW); + at28c256_write(0x0001, 0); + _delay_ms(1000); + at28c256_write(0x8000, 0); _delay_ms(1000); - digital_write(13, HIGH); - _delay_us(1000000); } diff --git a/rf24/rf24.c b/rf24/rf24.c index e3cf8c2..cae4e7b 100644 --- a/rf24/rf24.c +++ b/rf24/rf24.c @@ -1,10 +1,8 @@ +#include #include "rf24.h" #include "nRF24L01.h" #include "../ard/pins.h" -// FIXME for testing, remove later -#include - #define CONFIG_CRC (1<