From f9b2cda7f86c756d436e3b41b21c8b9fc1121248 Mon Sep 17 00:00:00 2001 From: mmi Date: Fri, 6 Oct 2017 11:03:45 +0000 Subject: [PATCH] DAC functional git-svn-id: https://svn.vbchaos.nl/svn/hsb/trunk@241 05563f52-14a8-4384-a975-3d1654cca0fa --- .../0 - Code/HAL/inc/MAX5715.h | 38 ++++++------ .../0 - Code/HAL/src/MAX5715.c | 4 +- .../0 - Code/Platform/src/oli_stm32_h107.c | 59 +++++++++++++------ .../0 - Code/hsb-mrts/src/main.c | 12 +++- 4 files changed, 73 insertions(+), 40 deletions(-) diff --git a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/HAL/inc/MAX5715.h b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/HAL/inc/MAX5715.h index 7633436..a627032 100644 --- a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/HAL/inc/MAX5715.h +++ b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/HAL/inc/MAX5715.h @@ -44,7 +44,7 @@ #define MAX5715_SPI_Direction (SPI_Direction_1Line_Tx) #define MAX5715_SPI_Mode (SPI_Mode_Master) #define MAX5715_SPI_DataSize (SPI_DataSize_8b) -#define MAX5715_SPI_CPOL (SPI_CPOL_Low) +#define MAX5715_SPI_CPOL (SPI_CPOL_High) #define MAX5715_SPI_CPHA (SPI_CPHA_1Edge) #define MAX5715_SPI_NSS (SPI_NSS_Soft) #define MAX5715_SPI_NSS_INTERNAL (SPI_NSSInternalSoft_Reset) @@ -83,30 +83,30 @@ #define MAX5715_CMD_CODE_ALL_LOAD_ALL (0x82) -#define MAX5715_writeCODEn(self, DAC, DATA) (MAX5715_sendCommand(self, (MAX5715_CMD_CODEn | (0x0F & DAC)), DATA)) -#define MAX5715_writeLOADn(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_LOADn | (0x0F & DAC)), 0x0000)) -#define MAX5715_writeCODEnLOADALL(self, DAC, DATA) (MAX5715_sendCommand(self, (MAX5715_CMD_CODEn_LOAD_ALL | (0x0F & DAC)), DATA)) -#define MAX5715_writeCODEnLOADn(self, DAC, DATA) (MAX5715_sendCommand(self, (MAX5715_CMD_CODEn_LOADn | (0x0F & DAC)), DATA)) +#define MAX5715_writeCODEn(self, DAC, DATA) (MAX5715_sendCommand(self, (MAX5715_CMD_CODEn | (0x0F & (DAC))), DATA)) +#define MAX5715_writeLOADn(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_LOADn | (0x0F & (DAC))), 0x0000)) +#define MAX5715_writeCODEnLOADALL(self, DAC, DATA) (MAX5715_sendCommand(self, (MAX5715_CMD_CODEn_LOAD_ALL | (0x0F & (DAC))), DATA)) +#define MAX5715_writeCODEnLOADn(self, DAC, DATA) (MAX5715_sendCommand(self, (MAX5715_CMD_CODEn_LOADn | (0x0F & (DAC))), DATA)) -#define MAX5715_writePOWER_NORMAL(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_POWER_NORMAL), (0x00FF & (DAC << 4)))) -#define MAX5715_writePOWER_PD1K(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_POWER_PD1K), (0x00FF & (DAC << 4)))) -#define MAX5715_writePOWER_PD100K(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_POWER_PD100K), (0x00FF & (DAC << 4)))) -#define MAX5715_writePOWER_HIGHZ(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_POWER_HIGHZ), (0x00FF & (DAC << 4)))) +#define MAX5715_writePOWER_NORMAL(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_POWER_NORMAL), (0x00FF & ((DAC) << 4)))) +#define MAX5715_writePOWER_PD1K(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_POWER_PD1K), (0x00FF & ((DAC) << 4)))) +#define MAX5715_writePOWER_PD100K(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_POWER_PD100K), (0x00FF & ((DAC) << 4)))) +#define MAX5715_writePOWER_HIGHZ(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_POWER_HIGHZ), (0x00FF & ((DAC) << 4)))) #define MAX5715_writeSW_CLEAR(self) (MAX5715_sendCommand(self, (MAX5715_CMD_SW_CLEAR), 0x0000)) #define MAX5715_writeSW_RESET(self) (MAX5715_sendCommand(self, (MAX5715_CMD_SW_RESET), 0x0000)) -#define MAX5715_writeCONFIG_LATCH_ON(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_CONFIG_LATCH_ON), (0x00FF & (DAC << 4)))) -#define MAX5715_writeCONFIG_LATCH_OFF(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_CONFIG_LATCH_OFF), (0x00FF & (DAC << 4)))) +#define MAX5715_writeCONFIG_LATCH_ON(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_CONFIG_LATCH_ON), (0x00FF & ((DAC) << 4)))) +#define MAX5715_writeCONFIG_LATCH_OFF(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_CONFIG_LATCH_OFF), (0x00FF & ((DAC) << 4)))) -#define MAX5715_writeREF_DAC_EXT(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_DAC_EXT), (0x00FF & (DAC << 4)))) -#define MAX5715_writeREF_DAC_2V5(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_DAC_2V5), (0x00FF & (DAC << 4)))) -#define MAX5715_writeREF_DAC_2V0(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_DAC_2V0), (0x00FF & (DAC << 4)))) -#define MAX5715_writeREF_DAC_4V0(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_DAC_4V0), (0x00FF & (DAC << 4)))) -#define MAX5715_writeREF_ON_EXT(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_ON_EXT), (0x00FF & (DAC << 4)))) -#define MAX5715_writeREF_ON_2V5(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_ON_2V5), (0x00FF & (DAC << 4)))) -#define MAX5715_writeREF_ON_2V0(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_ON_2V0), (0x00FF & (DAC << 4)))) -#define MAX5715_writeREF_ON_4V0(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_ON_4V0), (0x00FF & (DAC << 4)))) +#define MAX5715_writeREF_DAC_EXT(self) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_DAC_EXT), 0x0000)) +#define MAX5715_writeREF_DAC_2V5(self) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_DAC_2V5), 0x0000)) +#define MAX5715_writeREF_DAC_2V0(self) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_DAC_2V0), 0x0000)) +#define MAX5715_writeREF_DAC_4V0(self) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_DAC_4V0), 0x0000)) +#define MAX5715_writeREF_ON_EXT(self) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_ON_EXT), 0x0000)) +#define MAX5715_writeREF_ON_2V5(self) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_ON_2V5), 0x0000)) +#define MAX5715_writeREF_ON_2V0(self) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_ON_2V0), 0x0000)) +#define MAX5715_writeREF_ON_4V0(self) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_ON_4V0), 0x0000)) #define MAX5715_writeCODE_ALL(self, DATA) (MAX5715_sendCommand(self, (MAX5715_CMD_CODE_ALL), DATA)) #define MAX5715_writeLOAD_ALL(self, DATA) (MAX5715_sendCommand(self, (MAX5715_CMD_LOAD_ALL), 0x0000)) diff --git a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/HAL/src/MAX5715.c b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/HAL/src/MAX5715.c index 1248273..3f0f81b 100644 --- a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/HAL/src/MAX5715.c +++ b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/HAL/src/MAX5715.c @@ -187,10 +187,10 @@ ErrorStatus MAX5715Channel_setValue(struct MAX5715_DAC* self, uint16_t value) ErrorStatus returnValue = SUCCESS; // Send data to CODEn register - MAX5715_writeCODEn(self->parent, MAX5715_SEL_DACB, value); + MAX5715_writeCODEn(self->parent, self->id, value); // Load CODEn register to DAC output - MAX5715_writeLOADn(self->parent, MAX5715_SEL_DACB); + MAX5715_writeLOADn(self->parent, self->id); return returnValue; } diff --git a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/Platform/src/oli_stm32_h107.c b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/Platform/src/oli_stm32_h107.c index 01138b0..a5bc173 100644 --- a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/Platform/src/oli_stm32_h107.c +++ b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/Platform/src/oli_stm32_h107.c @@ -285,9 +285,9 @@ ErrorStatus initPlatform(void) uart3->USART_TypeDef = USART3; Uart_getDefaultParameters(uartTerminalParam); // Adjust to higher baudrate for intensive logging - uartLoggerParam->baudrate = UART_TER_BAUDRATE; + uartTerminalParam->baudrate = UART_TER_BAUDRATE; // Adjust the TX queue size for intensive logging - uartLoggerParam->txQueueSize = UART_TER_TX_QUEUE; + uartTerminalParam->txQueueSize = UART_TER_TX_QUEUE; returnValue = Uart_construct(uart3, uartTerminalParam); /* --------------------------------------------------------------------*/ @@ -504,24 +504,48 @@ static ErrorStatus initIO (void) GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE); /* USART3 initialisation -------------------------------------------------*/ - // Init TX line - gpio.GPIO_Typedef = GPIOB; - gpio.GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; - gpio.GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; - gpio.GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; - uart1->USART_TX = gpio; - GPIO_Init(gpio.GPIO_Typedef, &gpio.GPIO_InitStruct); + // For PCBA 0 (Cathode/MCP) and 2 (Anode), use the common USART3 IO + if ((PCBA_getInstance()->pcba == Anode) || (PCBA_getInstance()->pcba == CathodeMCP)) + { + // Init TX line + gpio.GPIO_Typedef = GPIOB; + gpio.GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; + gpio.GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; + gpio.GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; + uart1->USART_TX = gpio; + GPIO_Init(gpio.GPIO_Typedef, &gpio.GPIO_InitStruct); - // Init RX line - gpio.GPIO_Typedef = GPIOB; - gpio.GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; - gpio.GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11; - uart1->USART_RX = gpio; - GPIO_Init(gpio.GPIO_Typedef, &gpio.GPIO_InitStruct); - GPIO_Init(uart3->USART_RX.GPIO_Typedef, &uart3->USART_RX.GPIO_InitStruct); + // Init RX line + gpio.GPIO_Typedef = GPIOB; + gpio.GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; + gpio.GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11; + uart1->USART_RX = gpio; + GPIO_Init(gpio.GPIO_Typedef, &gpio.GPIO_InitStruct); + GPIO_Init(uart3->USART_RX.GPIO_Typedef, &uart3->USART_RX.GPIO_InitStruct); + } + else if (PCBA_getInstance()->pcba == Tesla) + { + // Init TX line + gpio.GPIO_Typedef = GPIOD; + gpio.GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; + gpio.GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8; + gpio.GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; + uart1->USART_TX = gpio; + GPIO_Init(gpio.GPIO_Typedef, &gpio.GPIO_InitStruct); + // Init RX line + gpio.GPIO_Typedef = GPIOD; + gpio.GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; + gpio.GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; + uart1->USART_RX = gpio; + GPIO_Init(gpio.GPIO_Typedef, &gpio.GPIO_InitStruct); + GPIO_Init(uart3->USART_RX.GPIO_Typedef, &uart3->USART_RX.GPIO_InitStruct); + + GPIO_PinRemapConfig(GPIO_FullRemap_USART3, ENABLE); + } + /* SPI initialisation ----------------------------------------------------*/ // SPI1 CLK _spi1.SPI_CLK.GPIO_Typedef = GPIOA; @@ -531,9 +555,8 @@ static ErrorStatus initIO (void) GPIO_Init(_spi1.SPI_CLK.GPIO_Typedef, &_spi1.SPI_CLK.GPIO_InitStruct); // SPI1 MISO _spi1.SPI_MISO.GPIO_Typedef = GPIOA; - _spi1.SPI_MISO.GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; + _spi1.SPI_MISO.GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; _spi1.SPI_MISO.GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6; - _spi1.SPI_MISO.GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(_spi1.SPI_MISO.GPIO_Typedef, &_spi1.SPI_MISO.GPIO_InitStruct); // SPI1 MOSI _spi1.SPI_MOSI.GPIO_Typedef = GPIOA; diff --git a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/src/main.c b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/src/main.c index ba620e2..d13b626 100644 --- a/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/src/main.c +++ b/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/hsb-mrts/src/main.c @@ -226,9 +226,19 @@ static void initTask(void* parameters) MAX5715_construct(&max5715, &spiDAC->device); - MAX5715_writeREF_ON_2V5(&max5715, MAX5715_SEL_DACA | MAX5715_SEL_DACB | MAX5715_SEL_DACC); + MAX5715_writeREF_ON_2V5(&max5715); + + MAX5715_writePOWER_NORMAL(&max5715, MAX5715_SEL_DACA | MAX5715_SEL_DACB | MAX5715_SEL_DACC); + + MAX5715_writeCONFIG_LATCH_OFF(&max5715, MAX5715_SEL_DACA | MAX5715_SEL_DACB | MAX5715_SEL_DACC); MAX5715Channel_construct(&max5715.dac[0], &max5715, 0); + MAX5715Channel_construct(&max5715.dac[1], &max5715, 1); + MAX5715Channel_construct(&max5715.dac[2], &max5715, 2); + + MAX5715Channel_setValue(&max5715.dac[0], 0x200); + MAX5715Channel_setValue(&max5715.dac[1], 0x800); + MAX5715Channel_setValue(&max5715.dac[2], 0xD00); repairProcess_construct(rp, 3, 1024);