diff --git a/prosjekt.X/defmplabxtrace.log b/prosjekt.X/defmplabxtrace.log new file mode 100644 index 0000000..e69de29 diff --git a/prosjekt.X/defmplabxtrace.log.inx b/prosjekt.X/defmplabxtrace.log.inx new file mode 100644 index 0000000..29197e3 Binary files /dev/null and b/prosjekt.X/defmplabxtrace.log.inx differ diff --git a/prosjekt.X/eeprom.c b/prosjekt.X/eeprom.c new file mode 100644 index 0000000..5dd4616 --- /dev/null +++ b/prosjekt.X/eeprom.c @@ -0,0 +1,99 @@ +#include "eeprom.h" + +// The start address for the controller data +uint8_t EEMEM start_address_controller = 0x00; + +// Where the writing of the fans points start +uint8_t EEMEM start_address_fan1 = 0x30; +uint8_t EEMEM start_address_fan2 = 0x60; + +// The placement for the next datapoint form the fans. +uint8_t EEMEM current_address_fan1 = 0x30; +uint8_t EEMEM current_address_fan2 = 0x60; + +// Checks if the EEPROM memory is ready to be written in. +void check_eeprom_is_ready(){ + while(1){ + if (eeprom_is_ready()){ + break; + }else{ + ; + } + } +} + + +// Takes inn a struct by the form of config_t +// Checks if the eeprom is ready to be written in +// Checks if it has been written information at the address +// If true, the infromation is replaced with the intaken struct +// else the intaken struct is written at the address. +void write_struct_from_EEPROM(config_t write_struct){ + uint8_t struct_size = sizeof(write_struct); + + check_eeprom_is_ready(); + + eeprom_update_block((void*) &write_struct,(void*) &start_address_controller, struct_size); + +} + +// Reads the memory block at the address start_address_controller +// returns a struct in form of config_t +config_t read_struct_from_EEPROM(){ + //is eeprom ready?? + config_t read_struct; + uint8_t struct_size = sizeof(read_struct); + + check_eeprom_is_ready(); + + eeprom_read_block((void *) &read_struct,(void*) &start_address_controller, struct_size); + return read_struct; +} + +// Takes inn a dataPoint and what data set it belongs to +// checks if EEPROM is ready +// If the dataset is 1, the datapoint is written at the address. +// If the dataset is 2 its written at another point. +int write_data_point_in_EEPROM(uint8_t byte, uint8_t fan_num){ + + check_eeprom_is_ready(); + if (fan_num == 1){ + eeprom_update_byte(current_address_fan1, byte); + current_address_fan1++; + return 1; + } else if (fan_num == 2){ + eeprom_update_byte(current_address_fan2, byte); + current_address_fan2++; + return 1; + } else{ + return 0; + } +} + +// Reads all the datapoints to the choosen data. +// it writes the data points in the USART stream. +uint8_t read_data_point_speed_info(uint8_t fan_num, uint8_t *array){ + uint8_t byte = 0; + + if (fan_num == 1){ + uint8_t len = current_address_fan1 - start_address_fan1; + + check_eeprom_is_ready(); + + for (uint8_t i = 0; i +#include +#include +#include +#include +#include + + + +// Struct for information on the controller. +typedef struct { + uint8_t fanSpeed; +} config_t; + +// Check if EEPROM is ready to be written in +void check_eeprom_is_ready(); + +// Writes a struct in EEPROM +void write_struct_from_EEPROM(config_t write_struct); + +// Read data from EEPROM and return it as a controller struct +config_t read_struct_from_EEPROM(); + +// Writes a datapoint in EEPROM +int write_data_point_from_EEPROM(uint8_t byte, uint8_t fan_num); + +// Reads all the dataPoints form EEPROM +uint8_t read_data_point_speed_info(uint8_t fan_num, uint8_t *array); + + +#ifdef __cplusplus +} +#endif + +#endif /* EEPROM_H */ + diff --git a/prosjekt.X/main.c b/prosjekt.X/main.c index b42afa9..8e516c4 100644 --- a/prosjekt.X/main.c +++ b/prosjekt.X/main.c @@ -1,14 +1,15 @@ /* * File: main.c - * Author: Sebastian H. Gabrielli + * Author: Sebastian H. Gabrielli, Helle Augland Grasmo * * Created on March 6, 2024, 12:34 PM */ -#define F_CPU 4E6 +#include "eeprom.h" #include #include +#define F_CPU 4E6 #include "uart.h" #include diff --git a/prosjekt.X/nbproject/configurations.xml b/prosjekt.X/nbproject/configurations.xml index e8e1b9c..8e42839 100644 --- a/prosjekt.X/nbproject/configurations.xml +++ b/prosjekt.X/nbproject/configurations.xml @@ -5,6 +5,7 @@ displayName="Header Files" projectFiles="true"> uart.h + eeprom.h main.c uart.c + eeprom.c + + + @@ -167,6 +172,9 @@ + + +