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

Aolved a bug in the ADC module when writing the data into the RAM.

Removed the fixed baudrate and device id from the dynamixel slave.
parent b1988281
No related branches found
No related tags found
No related merge requests found
......@@ -6,7 +6,7 @@
#define EEPROM_DYN_SLAVE_BASE_ADDRESS2 ((unsigned short int)0x0010)
/* ADC registers base address */
#define RAM_ADC_DMA_BASE_ADDRESS ((unsigned short int)0x004a)
#define RAM_ADC_DMA_BASE_ADDRESS ((unsigned short int)0x0020)
#define EEPROM_NUM_VAR 32
......
#include "adc_dma.h"
#include "adc_dma_registers.h"
#include "scheduler.h"
#include "ram.h"
#define ADC1_CH1 ADC_CHANNEL_0
......@@ -131,32 +132,32 @@ void adc_convert_voltage(adc_dma_ch_t channel_id,uint16_t value)
ram_data[DOWN_LEFT_FRONT_VOLTAGE+1]=ram_value/256;
break;
case DOWN_RIGHT_REAR_CH: adc_voltages[4]=((float)value)*VOLTAGE_DELTA;
ram_value=(uint16_t)adc_voltages[0];
ram_value=(uint16_t)adc_voltages[4];
ram_data[DOWN_RIGHT_REAR_VOLTAGE]=ram_value%256;
ram_data[DOWN_RIGHT_REAR_VOLTAGE+1]=ram_value/256;
break;
case DOWN_RIGHT_MIDDLE_CH: adc_voltages[5]=((float)value)*VOLTAGE_DELTA;
ram_value=(uint16_t)adc_voltages[0];
ram_value=(uint16_t)adc_voltages[5];
ram_data[DOWN_RIGHT_MIDDLE_VOLTAGE]=ram_value%256;
ram_data[DOWN_RIGHT_MIDDLE_VOLTAGE+1]=ram_value/256;
break;
case DOWN_RIGHT_FRONT_CH: adc_voltages[6]=((float)value)*VOLTAGE_DELTA;
ram_value=(uint16_t)adc_voltages[0];
ram_value=(uint16_t)adc_voltages[6];
ram_data[DOWN_RIGHT_FRONT_VOLTAGE]=ram_value%256;
ram_data[DOWN_RIGHT_FRONT_VOLTAGE+1]=ram_value/256;
break;
case FRONT_LEFT_CH: adc_voltages[7]=((float)value)*VOLTAGE_DELTA;
ram_value=(uint16_t)adc_voltages[0];
ram_value=(uint16_t)adc_voltages[7];
ram_data[FRONT_LEFT_VOLTAGE]=ram_value%256;
ram_data[FRONT_LEFT_VOLTAGE+1]=ram_value/256;
break;
case FRONT_RIGHT_CH: adc_voltages[8]=((float)value)*VOLTAGE_DELTA;
ram_value=(uint16_t)adc_voltages[0];
ram_value=(uint16_t)adc_voltages[8];
ram_data[FRONT_RIGHT_VOLTAGE]=ram_value%256;
ram_data[FRONT_RIGHT_VOLTAGE+1]=ram_value/256;
break;
case FRONT_ANALOG_CH: adc_voltages[9]=((float)value)*VOLTAGE_DELTA;
ram_value=(uint16_t)adc_voltages[0];
ram_value=(uint16_t)adc_voltages[9];
ram_data[FRONT_ANALOG_VOLTAGE]=ram_value%256;
ram_data[FRONT_ANALOG_VOLTAGE+1]=ram_value/256;
break;
......@@ -173,6 +174,12 @@ void adc_read_cmd(unsigned short int address,unsigned short int length,unsigned
ram_read_table(address,length,data);
}
void adc_start_conv(void)
{
HAL_ADC_Start(&hadc2);
HAL_ADCEx_MultiModeStart_DMA(&hadc1,adc_data,6);
}
/* interrupt handlers */
void ADC_DMA_IRQHandler(void)
{
......@@ -185,6 +192,7 @@ void ADC_DMA_IRQHandler(void)
if(__HAL_DMA_GET_FLAG(&hdma_adc1, __HAL_DMA_GET_TC_FLAG_INDEX(&hdma_adc1)) != RESET)
if(__HAL_DMA_GET_IT_SOURCE(&hdma_adc1, DMA_IT_TC) != RESET)
{
__HAL_DMA_CLEAR_FLAG(&hdma_adc1, __HAL_DMA_GET_TC_FLAG_INDEX(&hdma_adc1));
HAL_ADC_Stop(&hadc2);
adc_convert_voltage(DOWN_LEFT_MIDDLE_CH,adc_data[0]&0x0000FFFF);
adc_convert_voltage(DOWN_LEFT_REAR_CH,(adc_data[0]>>16)&0x0000FFFF);
......@@ -365,13 +373,11 @@ uint8_t adc_init(TMemory *memory)
if(!mem_add_module(memory,&adc_mem_module))
return 0x00;
return 0x01;
}
/* assigna a scheduler channel */
scheduler_set_channel(SCHED_CH1,adc_start_conv,10);
scheduler_enable_channel(SCHED_CH1);
void adc_start_conversion(void)
{
HAL_ADC_Start(&hadc2);
HAL_ADCEx_MultiModeStart_DMA(&hadc1,adc_data,6);
return 0x01;
}
float adc_get_voltage(adc_dma_ch_t channel_id)
......
......@@ -68,12 +68,12 @@ void ir_feet_dyn_slave_write_cmd(unsigned short int address,unsigned short int l
{
if(ram_in_range(DEVICE_ID,address,length))
{
dyn_slave_set_address(&ir_feet_dyn_slave,0x01/*data[DEVICE_ID-address]*/);
dyn_slave_set_address(&ir_feet_dyn_slave,data[DEVICE_ID-address]);
ram_data[DEVICE_ID]=data[DEVICE_ID-address];
}
if(ram_in_range(BAUDRATE,address,length))
{
ir_feet_comm_init.BaudRate=115200;//2000000/(data[BAUDRATE-address]+1);
ir_feet_comm_init.BaudRate=2000000/(data[BAUDRATE-address]+1);
usart1_config(&ir_feet_dyn_slave_comm,&ir_feet_comm_init);
ram_data[BAUDRATE]=data[BAUDRATE-address];
}
......@@ -125,7 +125,7 @@ uint8_t ir_feet_dyn_slave_init(TMemory *memory)
/* initialize the comm object */
comm_init(&ir_feet_dyn_slave_comm,0x01,&ir_feet_dyn_slave_timer);
ir_feet_comm_init.BaudRate = 115200;//2000000/(DEFAULT_BAUDRATE+1);
ir_feet_comm_init.BaudRate = 2000000/(DEFAULT_BAUDRATE+1);
ir_feet_comm_init.WordLength = UART_WORDLENGTH_8B;
ir_feet_comm_init.StopBits = UART_STOPBITS_1;
ir_feet_comm_init.Parity = UART_PARITY_NONE;
......@@ -141,7 +141,7 @@ uint8_t ir_feet_dyn_slave_init(TMemory *memory)
priorities.dma_tx_subpriority=0;
usart1_init(&ir_feet_dyn_slave_comm,&ir_feet_comm_init,&priorities);
dyn_slave_init(&ir_feet_dyn_slave,&ir_feet_dyn_slave_comm,1/*DEFAULT_DEVICE_ID*/,DYN_VER1);
dyn_slave_init(&ir_feet_dyn_slave,&ir_feet_dyn_slave_comm,DEFAULT_DEVICE_ID,DYN_VER1);
ir_feet_dyn_slave.on_read=ir_feet_on_read;
ir_feet_dyn_slave.on_write=ir_feet_on_write;
ir_feet_dyn_slave.on_ping=ir_feet_on_ping;
......
......@@ -37,10 +37,6 @@ int main(void)
while(1)/* main function does not return */
{
gpio_set_led(DOWN_LEFT_FRONT);
HAL_Delay(1000);
gpio_clear_led(DOWN_LEFT_FRONT);
HAL_Delay(1000);
}
}
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