Skip to content
Snippets Groups Projects
Commit 023039f7 authored by Sergi Hernandez's avatar Sergi Hernandez
Browse files

Added the thresholds module to define the activation point for each sensor.

Changed the LED's location to correspond to the associated sensors.
parent 18f8138b
No related branches found
No related tags found
No related merge requests found
......@@ -13,6 +13,7 @@ TARGET_FILES+=src/scheduler.c
TARGET_FILES+=src/stm32f1xx_hal_msp.c
TARGET_FILES+=src/gpio.c
TARGET_FILES+=src/adc_dma.c
TARGET_FILES+=src/thresholds.c
TARGET_PROCESSOR=STM32F103CB
HAL_PATH=$(STM32_HAL_PATH)/f1
......
......@@ -8,6 +8,10 @@
/* ADC registers base address */
#define RAM_ADC_DMA_BASE_ADDRESS ((unsigned short int)0x0020)
/* threshold registers */
#define EEPROM_THRESHOLDS_BASE_ADDRESS1 ((unsigned short int)0x0006)
#define EEPROM_THRESHOLDS_BASE_ADDRESS2 ((unsigned short int)0x0011)
#define EEPROM_NUM_VAR 32
#define DEFAULT_DEVICE_MODEL 0x000c
......@@ -17,4 +21,16 @@
#define DEFAULT_RETURN_DELAY 0x00
#define DEFAULT_RETURN_LEVEL 0x02
#define DEFAULT_DOWN_LEFT_MIDDLE_THRES 0x0C00
#define DEFAULT_DOWN_LEFT_REAR_THRES 0x0C00
#define DEFAULT_DOWN_ANALOG_THRES 0x0C00
#define DEFAULT_DOWN_LEFT_FRONT_THRES 0x0C00
#define DEFAULT_DOWN_RIGHT_REAR_THRES 0x0C00
#define DEFAULT_DOWN_RIGHT_MIDDLE_THRES 0x0C00
#define DEFAULT_DOWN_RIGHT_FRONT_THRES 0x0C00
#define DEFAULT_FRONT_LEFT_THRES 0x0C00
#define DEFAULT_FRONT_RIGHT_THRES 0x0C00
#define DEFAULT_FRONT_ANALOG_THRES 0x0C00
#endif
#ifndef _THRESHOLDS_H
#define _THRESHOLDS_H
#include "stm32f1xx.h"
#include "memory.h"
uint8_t thres_init(TMemory *memory);
void thres_check(void);
#endif
#ifndef _THRESHOLDS_REGISTERS_H
#define _THRESHOLDS_REGISTERS_H
#include "ir_feet_conf.h"
#ifndef EEPROM_THRESHOLDS_BASE_ADDRESS1
#define EEPROM_THRESHOLDS_BASE_ADDRESS1 ((unsigned short int)0x0000)
#endif
#ifndef EEPROM_THRESHOLDS_BASE_ADDRESS2
#define EEPROM_THRESHOLDS_BASE_ADDRESS2 ((unsigned short int)0x0000)
#endif
#define EEPROM_THRESHOLDS_LENGTH1 10
#define EEPROM_THRESHOLDS_LENGTH2 10
#define DOWN_LEFT_MIDDLE_THRES EEPROM_THRESHOLDS_BASE_ADDRESS1
#define DOWN_LEFT_REAR_THRES (EEPROM_THRESHOLDS_BASE_ADDRESS1+2)
#define DOWN_ANALOG_THRES (EEPROM_THRESHOLDS_BASE_ADDRESS1+4)
#define DOWN_LEFT_FRONT_THRES (EEPROM_THRESHOLDS_BASE_ADDRESS1+6)
#define DOWN_RIGHT_REAR_THRES (EEPROM_THRESHOLDS_BASE_ADDRESS1+8)
#define DOWN_RIGHT_MIDDLE_THRES (EEPROM_THRESHOLDS_BASE_ADDRESS2)
#define DOWN_RIGHT_FRONT_THRES (EEPROM_THRESHOLDS_BASE_ADDRESS2+2)
#define FRONT_LEFT_THRES (EEPROM_THRESHOLDS_BASE_ADDRESS2+4)
#define FRONT_RIGHT_THRES (EEPROM_THRESHOLDS_BASE_ADDRESS2+6)
#define FRONT_ANALOG_THRES (EEPROM_THRESHOLDS_BASE_ADDRESS2+8)
#ifndef DEFAULT_DOWN_LEFT_MIDDLE_THRES
#define DEFAULT_DOWN_LEFT_MIDDLE_THRES 0x0000
#endif
#ifndef DEFAULT_DOWN_LEFT_REAR_THRES
#define DEFAULT_DOWN_LEFT_REAR_THRES 0x0000
#endif
#ifndef DEFAULT_DOWN_ANALOG_THRES
#define DEFAULT_DOWN_ANALOG_THRES 0x0000
#endif
#ifndef DEFAULT_DOWN_LEFT_FRONT_THRES
#define DEFAULT_DOWN_LEFT_FRONT_THRES 0x0000
#endif
#ifndef DEFAULT_DOWN_RIGHT_REAR_THRES
#define DEFAULT_DOWN_RIGHT_REAR_THRES 0x0000
#endif
#ifndef DEFAULT_DOWN_RIGHT_MIDDLE_THRES
#define DEFAULT_DOWN_RIGHT_MIDDLE_THRES 0x0000
#endif
#ifndef DEFAULT_DOWN_RIGHT_FRONT_THRES
#define DEFAULT_DOWN_RIGHT_FRONT_THRES 0x0000
#endif
#ifndef DEFAULT_FRONT_LEFT_THRES
#define DEFAULT_FRONT_LEFT_THRES 0x0000
#endif
#ifndef DEFAULT_FRONT_RIGHT_THRES
#define DEFAULT_FRONT_RIGHT_THRES 0x0000
#endif
#ifndef DEFAULT_FRONT_ANALOG_THRES
#define DEFAULT_FRONT_ANALOG_THRES 0x0000
#endif
#endif
#include "gpio.h"
#define DOWN_RIGHT_FRONT_GPIO_CLK __GPIOB_CLK_ENABLE()
#define DOWN_RIGHT_FRONT_PIN GPIO_PIN_8
#define DOWN_RIGHT_FRONT_PIN GPIO_PIN_11
#define DOWN_RIGHT_FRONT_GPIO_PORT GPIOB
#define DOWN_RIGHT_REAR_GPIO_CLK __GPIOB_CLK_ENABLE()
#define DOWN_RIGHT_REAR_PIN GPIO_PIN_9
#define DOWN_RIGHT_REAR_PIN GPIO_PIN_10
#define DOWN_RIGHT_REAR_GPIO_PORT GPIOB
#define DOWN_LEFT_REAR_GPIO_CLK __GPIOB_CLK_ENABLE()
#define DOWN_LEFT_REAR_PIN GPIO_PIN_7
#define DOWN_LEFT_REAR_PIN GPIO_PIN_8
#define DOWN_LEFT_REAR_GPIO_PORT GPIOB
#define DOWN_LEFT_MIDDLE_GPIO_CLK __GPIOB_CLK_ENABLE()
#define DOWN_LEFT_MIDDLE_PIN GPIO_PIN_11
#define DOWN_LEFT_MIDDLE_PIN GPIO_PIN_9
#define DOWN_LEFT_MIDDLE_GPIO_PORT GPIOB
#define DOWN_RIGHT_MIDDLE_GPIO_CLK __GPIOB_CLK_ENABLE()
......@@ -21,20 +21,20 @@
#define DOWN_RIGHT_MIDDLE_GPIO_PORT GPIOB
#define DOWN_LEFT_FRONT_GPIO_CLK __GPIOB_CLK_ENABLE()
#define DOWN_LEFT_FRONT_PIN GPIO_PIN_10
#define DOWN_LEFT_FRONT_PIN GPIO_PIN_7
#define DOWN_LEFT_FRONT_GPIO_PORT GPIOB
#define FRONT_LEFT_GPIO_CLK __GPIOC_CLK_ENABLE()
#define FRONT_LEFT_PIN GPIO_PIN_15
#define FRONT_LEFT_GPIO_PORT GPIOC
#define FRONT_LEFT_GPIO_CLK __GPIOB_CLK_ENABLE()
#define FRONT_LEFT_PIN GPIO_PIN_14
#define FRONT_LEFT_GPIO_PORT GPIOB
#define FRONT_RIGHT_GPIO_CLK __GPIOB_CLK_ENABLE()
#define FRONT_RIGHT_PIN GPIO_PIN_14
#define FRONT_RIGHT_PIN GPIO_PIN_13
#define FRONT_RIGHT_GPIO_PORT GPIOB
#define DOWN_ANALOG_GPIO_CLK __GPIOB_CLK_ENABLE()
#define DOWN_ANALOG_PIN GPIO_PIN_13
#define DOWN_ANALOG_GPIO_PORT GPIOB
#define DOWN_ANALOG_GPIO_CLK __GPIOC_CLK_ENABLE()
#define DOWN_ANALOG_PIN GPIO_PIN_15
#define DOWN_ANALOG_GPIO_PORT GPIOC
#define FRONT_ANALOG_GPIO_CLK __GPIOB_CLK_ENABLE()
#define FRONT_ANALOG_PIN GPIO_PIN_12
......
......@@ -7,6 +7,7 @@
#include "scheduler.h"
#include "gpio.h"
#include "adc_dma.h"
#include "thresholds.h"
TMemory ir_feet_memory;
......@@ -30,6 +31,8 @@ int main(void)
ir_feet_time_init();
// initialize the dynamixel slave interface
ir_feet_dyn_slave_init(&ir_feet_memory);
// initialize the thresholds module
thres_init(&ir_feet_memory);
// initialize the Dynamixel RAM memory space
ram_init(&ir_feet_memory);
......@@ -37,6 +40,7 @@ int main(void)
while(1)/* main function does not return */
{
thres_check();
}
}
#include "thresholds.h"
#include "thresholds_registers.h"
#include "scheduler.h"
#include "adc_dma.h"
#include "gpio.h"
#include "ram.h"
uint16_t thres_eeprom_data[] __attribute__ ((section (".eeprom")))={DEFAULT_DOWN_LEFT_MIDDLE_THRES&0xFF,DOWN_LEFT_MIDDLE_THRES,
(DEFAULT_DOWN_LEFT_MIDDLE_THRES>>8)&0xFF,DOWN_LEFT_MIDDLE_THRES+1,
DEFAULT_DOWN_LEFT_REAR_THRES&0xFF,DOWN_LEFT_REAR_THRES,
(DEFAULT_DOWN_LEFT_REAR_THRES>>8)&0xFF,DOWN_LEFT_REAR_THRES+1,
DEFAULT_DOWN_ANALOG_THRES&0xFF,DOWN_ANALOG_THRES,
(DEFAULT_DOWN_ANALOG_THRES>>8)&0xFF,DOWN_ANALOG_THRES+1,
DEFAULT_DOWN_LEFT_FRONT_THRES&0xFF,DOWN_LEFT_FRONT_THRES,
(DEFAULT_DOWN_LEFT_FRONT_THRES>>8)&0xFF,DOWN_LEFT_FRONT_THRES+1,
DEFAULT_DOWN_RIGHT_REAR_THRES&0xFF,DOWN_RIGHT_REAR_THRES,
(DEFAULT_DOWN_RIGHT_REAR_THRES>>8)&0xFF,DOWN_RIGHT_REAR_THRES+1,
DEFAULT_DOWN_RIGHT_MIDDLE_THRES&0xFF,DOWN_RIGHT_MIDDLE_THRES,
(DEFAULT_DOWN_RIGHT_MIDDLE_THRES>>8)&0xFF,DOWN_RIGHT_MIDDLE_THRES+1,
DEFAULT_DOWN_RIGHT_FRONT_THRES&0xFF,DOWN_RIGHT_FRONT_THRES,
(DEFAULT_DOWN_RIGHT_FRONT_THRES>>8)&0xFF,DOWN_RIGHT_FRONT_THRES+1,
DEFAULT_FRONT_LEFT_THRES&0xFF,FRONT_LEFT_THRES,
(DEFAULT_FRONT_LEFT_THRES>>8)&0xFF,FRONT_LEFT_THRES+1,
DEFAULT_FRONT_RIGHT_THRES&0xFF,FRONT_RIGHT_THRES,
(DEFAULT_FRONT_RIGHT_THRES>>8)&0xFF,FRONT_RIGHT_THRES+1,
DEFAULT_FRONT_ANALOG_THRES&0xFF,FRONT_ANALOG_THRES,
(DEFAULT_FRONT_ANALOG_THRES>>8)&0xFF,FRONT_ANALOG_THRES+1};
/* memory module */
TMemModule thres_mem_module;
uint16_t thresholds[10];
// private functions
void thres_write_cmd(unsigned short int address,unsigned short int length,unsigned char *data)
{
uint8_t *data_ptr;
if(ram_in_window(DOWN_LEFT_MIDDLE_THRES,2,address,length))
{
data_ptr=(uint8_t *)&thresholds[0];
if(ram_in_range(DOWN_LEFT_MIDDLE_THRES,address,length))
{
data_ptr[0]=data[DOWN_LEFT_MIDDLE_THRES-address];
ram_data[DOWN_LEFT_MIDDLE_THRES]=data[DOWN_LEFT_MIDDLE_THRES-address];
}
if(ram_in_range(DOWN_LEFT_MIDDLE_THRES+1,address,length))
{
data_ptr[1]=data[DOWN_LEFT_MIDDLE_THRES+1-address];
ram_data[DOWN_LEFT_MIDDLE_THRES+1]=data[DOWN_LEFT_MIDDLE_THRES+1-address];
}
}
if(ram_in_window(DOWN_LEFT_REAR_THRES,2,address,length))
{
data_ptr=(uint8_t *)&thresholds[1];
if(ram_in_range(DOWN_LEFT_REAR_THRES,address,length))
{
data_ptr[0]=data[DOWN_LEFT_REAR_THRES-address];
ram_data[DOWN_LEFT_REAR_THRES]=data[DOWN_LEFT_REAR_THRES-address];
}
if(ram_in_range(DOWN_LEFT_REAR_THRES+1,address,length))
{
data_ptr[1]=data[DOWN_LEFT_REAR_THRES+1-address];
ram_data[DOWN_LEFT_REAR_THRES+1]=data[DOWN_LEFT_REAR_THRES+1-address];
}
}
if(ram_in_window(DOWN_ANALOG_THRES,2,address,length))
{
data_ptr=(uint8_t *)&thresholds[2];
if(ram_in_range(DOWN_ANALOG_THRES,address,length))
{
data_ptr[0]=data[DOWN_ANALOG_THRES-address];
ram_data[DOWN_ANALOG_THRES]=data[DOWN_ANALOG_THRES-address];
}
if(ram_in_range(DOWN_ANALOG_THRES+1,address,length))
{
data_ptr[1]=data[DOWN_ANALOG_THRES+1-address];
ram_data[DOWN_ANALOG_THRES+1]=data[DOWN_ANALOG_THRES+1-address];
}
}
if(ram_in_window(DOWN_LEFT_FRONT_THRES,2,address,length))
{
data_ptr=(uint8_t *)&thresholds[3];
if(ram_in_range(DOWN_LEFT_FRONT_THRES,address,length))
{
data_ptr[0]=data[DOWN_LEFT_FRONT_THRES-address];
ram_data[DOWN_LEFT_FRONT_THRES]=data[DOWN_LEFT_FRONT_THRES-address];
}
if(ram_in_range(DOWN_LEFT_FRONT_THRES+1,address,length))
{
data_ptr[1]=data[DOWN_LEFT_FRONT_THRES+1-address];
ram_data[DOWN_LEFT_FRONT_THRES+1]=data[DOWN_LEFT_FRONT_THRES+1-address];
}
}
if(ram_in_window(DOWN_RIGHT_REAR_THRES,2,address,length))
{
data_ptr=(uint8_t *)&thresholds[4];
if(ram_in_range(DOWN_RIGHT_REAR_THRES,address,length))
{
data_ptr[0]=data[DOWN_RIGHT_REAR_THRES-address];
ram_data[DOWN_RIGHT_REAR_THRES]=data[DOWN_RIGHT_REAR_THRES-address];
}
if(ram_in_range(DOWN_RIGHT_REAR_THRES+1,address,length))
{
data_ptr[1]=data[DOWN_RIGHT_REAR_THRES+1-address];
ram_data[DOWN_RIGHT_REAR_THRES+1]=data[DOWN_RIGHT_REAR_THRES+1-address];
}
}
if(ram_in_window(DOWN_RIGHT_MIDDLE_THRES,2,address,length))
{
data_ptr=(uint8_t *)&thresholds[5];
if(ram_in_range(DOWN_RIGHT_MIDDLE_THRES,address,length))
{
data_ptr[0]=data[DOWN_RIGHT_MIDDLE_THRES-address];
ram_data[DOWN_RIGHT_MIDDLE_THRES]=data[DOWN_RIGHT_MIDDLE_THRES-address];
}
if(ram_in_range(DOWN_RIGHT_MIDDLE_THRES+1,address,length))
{
data_ptr[1]=data[DOWN_RIGHT_MIDDLE_THRES+1-address];
ram_data[DOWN_RIGHT_MIDDLE_THRES+1]=data[DOWN_RIGHT_MIDDLE_THRES+1-address];
}
}
if(ram_in_window(DOWN_RIGHT_FRONT_THRES,2,address,length))
{
data_ptr=(uint8_t *)&thresholds[6];
if(ram_in_range(DOWN_RIGHT_FRONT_THRES,address,length))
{
data_ptr[0]=data[DOWN_RIGHT_FRONT_THRES-address];
ram_data[DOWN_RIGHT_FRONT_THRES]=data[DOWN_RIGHT_FRONT_THRES-address];
}
if(ram_in_range(DOWN_RIGHT_FRONT_THRES+1,address,length))
{
data_ptr[1]=data[DOWN_RIGHT_FRONT_THRES+1-address];
ram_data[DOWN_RIGHT_FRONT_THRES+1]=data[DOWN_RIGHT_FRONT_THRES+1-address];
}
}
if(ram_in_window(FRONT_LEFT_THRES,2,address,length))
{
data_ptr=(uint8_t *)&thresholds[7];
if(ram_in_range(FRONT_LEFT_THRES,address,length))
{
data_ptr[0]=data[FRONT_LEFT_THRES-address];
ram_data[FRONT_LEFT_THRES]=data[FRONT_LEFT_THRES-address];
}
if(ram_in_range(FRONT_LEFT_THRES+1,address,length))
{
data_ptr[1]=data[FRONT_LEFT_THRES+1-address];
ram_data[FRONT_LEFT_THRES+1]=data[FRONT_LEFT_THRES+1-address];
}
}
if(ram_in_window(FRONT_RIGHT_THRES,2,address,length))
{
data_ptr=(uint8_t *)&thresholds[8];
if(ram_in_range(FRONT_RIGHT_THRES,address,length))
{
data_ptr[0]=data[FRONT_RIGHT_THRES-address];
ram_data[FRONT_RIGHT_THRES]=data[FRONT_RIGHT_THRES-address];
}
if(ram_in_range(FRONT_RIGHT_THRES+1,address,length))
{
data_ptr[1]=data[FRONT_RIGHT_THRES+1-address];
ram_data[FRONT_RIGHT_THRES+1]=data[FRONT_RIGHT_THRES+1-address];
}
}
if(ram_in_window(FRONT_ANALOG_THRES,2,address,length))
{
data_ptr=(uint8_t *)&thresholds[9];
if(ram_in_range(FRONT_ANALOG_THRES,address,length))
{
data_ptr[0]=data[FRONT_ANALOG_THRES-address];
ram_data[FRONT_ANALOG_THRES]=data[FRONT_ANALOG_THRES-address];
}
if(ram_in_range(FRONT_ANALOG_THRES+1,address,length))
{
data_ptr[1]=data[FRONT_ANALOG_THRES+1-address];
ram_data[FRONT_ANALOG_THRES+1]=data[FRONT_ANALOG_THRES+1-address];
}
}
}
void thres_read_cmd(unsigned short int address,unsigned short int length,unsigned char *data)
{
ram_read_table(address,length,data);
}
// public functions
uint8_t thres_init(TMemory *memory)
{
/* initialize memory module */
mem_module_init(&thres_mem_module);
thres_mem_module.write_cmd=thres_write_cmd;
thres_mem_module.read_cmd=thres_read_cmd;
if(!mem_module_add_eeprom_segment(&thres_mem_module,EEPROM_THRESHOLDS_BASE_ADDRESS1,EEPROM_THRESHOLDS_LENGTH1))
return 0x00;
if(!mem_module_add_eeprom_segment(&thres_mem_module,EEPROM_THRESHOLDS_BASE_ADDRESS2,EEPROM_THRESHOLDS_LENGTH2))
return 0x00;
if(!mem_add_module(memory,&thres_mem_module))
return 0x00;
return 0x01;
}
void thres_check(void)
{
uint16_t voltage;
voltage=adc_get_voltage(DOWN_LEFT_MIDDLE_CH);
if(voltage>thresholds[0])
gpio_set_led(DOWN_LEFT_MIDDLE);
else
gpio_clear_led(DOWN_LEFT_MIDDLE);
voltage=adc_get_voltage(DOWN_LEFT_REAR_CH);
if(voltage>thresholds[1])
gpio_set_led(DOWN_LEFT_REAR);
else
gpio_clear_led(DOWN_LEFT_REAR);
voltage=adc_get_voltage(DOWN_ANALOG_CH);
if(voltage>thresholds[2])
gpio_set_led(DOWN_ANALOG);
else
gpio_clear_led(DOWN_ANALOG);
voltage=adc_get_voltage(DOWN_LEFT_FRONT_CH);
if(voltage>thresholds[3])
gpio_set_led(DOWN_LEFT_FRONT);
else
gpio_clear_led(DOWN_LEFT_FRONT);
voltage=adc_get_voltage(DOWN_RIGHT_REAR_CH);
if(voltage>thresholds[4])
gpio_set_led(DOWN_RIGHT_REAR);
else
gpio_clear_led(DOWN_RIGHT_REAR);
voltage=adc_get_voltage(DOWN_RIGHT_MIDDLE_CH);
if(voltage>thresholds[5])
gpio_set_led(DOWN_RIGHT_MIDDLE);
else
gpio_clear_led(DOWN_RIGHT_MIDDLE);
voltage=adc_get_voltage(DOWN_RIGHT_FRONT_CH);
if(voltage>thresholds[6])
gpio_set_led(DOWN_RIGHT_FRONT);
else
gpio_clear_led(DOWN_RIGHT_FRONT);
voltage=adc_get_voltage(FRONT_LEFT_CH);
if(voltage>thresholds[7])
gpio_set_led(FRONT_LEFT);
else
gpio_clear_led(FRONT_LEFT);
voltage=adc_get_voltage(FRONT_RIGHT_CH);
if(voltage>thresholds[8])
gpio_set_led(FRONT_RIGHT);
else
gpio_clear_led(FRONT_RIGHT);
voltage=adc_get_voltage(FRONT_ANALOG_CH);
if(voltage>thresholds[9])
gpio_set_led(FRONT_ANALOG);
else
gpio_clear_led(FRONT_ANALOG);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment