annotate Small_CPU/Src/externalInterface.c @ 706:10b7d271b9c4

Bugfix: only reset menu if a new sub menu is created: In the previous version a short black screen (blink) happend while changing parameters. Root cause was that the menu structure was reset while no submenu was created because the value update happend at the actual menu. This has been fixed by only resetting the menu if it is really needed
author Ideenmodellierer
date Thu, 03 Nov 2022 20:37:06 +0100
parents f1b40364b0af
children 045ff7800501
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
554
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
1 /**
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
2 ******************************************************************************
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
3 * @file externalInterface.c
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
4 * @author heinrichs weikamp gmbh
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
5 * @version V0.0.1
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
6 * @date 07-Nov-2020
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
7 * @brief Interface functionality to proceed external analog signal via i2c connection
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
8 *
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
9 @verbatim
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
10 ==============================================================================
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
11 ##### stm32f4xx_hal_i2c.c modification #####
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
12 ==============================================================================
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
13 The LTC2942 requires an repeated start condition without stop condition
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
14 for data reception.
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
15
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
16 @endverbatim
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
17 ******************************************************************************
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
18 * @attention
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
19 *
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
20 * <h2><center>&copy; COPYRIGHT(c) 2014 heinrichs weikamp</center></h2>
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
21 *
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
22 ******************************************************************************
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
23 */
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
24 /* Includes ------------------------------------------------------------------*/
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
25
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
26 #include <math.h>
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
27 #include "i2c.h"
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
28 #include "externalInterface.h"
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
29 #include "scheduler.h"
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
30 #include "uart.h"
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
31 #include "data_exchange.h"
554
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
32
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
33 extern SGlobal global;
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
34 extern UART_HandleTypeDef huart1;
554
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
35
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
36 #define ADC_ANSWER_LENGTH (5u) /* 3424 will provide addr + 4 data bytes */
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
37 #define ADC_TIMEOUT (10u) /* conversion stuck for unknown reason => restart */
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
38 #define ADC_REF_VOLTAGE_MV (2048.0f) /* reference voltage of MPC3424*/
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
39
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
40 #define ADC_START_CONVERSION (0x80)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
41 #define ADC_GAIN_4 (0x02)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
42 #define ADC_GAIN_4_VALUE (4.0f)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
43 #define ADC_GAIN_8 (0x03)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
44 #define ADC_GAIN_8_VALUE (8.0f)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
45 #define ADC_RESOLUTION_16BIT (0x08)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
46 #define ADC_RESOLUTION_16BIT_VALUE (16u)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
47 #define ADC_RESOLUTION_18BIT (0x0C)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
48 #define ADC_RESOLUTION_18BIT_VALUE (18u)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
49
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
50 #define ANSWER_CONFBYTE_INDEX (4u)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
51
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
52 static uint8_t activeChannel = 0; /* channel which is in request */
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
53 static uint8_t recBuf[ADC_ANSWER_LENGTH];
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
54 static uint8_t timeoutCnt = 0;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
55 static uint8_t externalInterfacePresent = 0;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
56
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
57 float externalChannel_mV[MAX_ADC_CHANNEL];
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
58 static uint8_t externalV33_On = 0;
691
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
59 static uint8_t externalADC_On = 0;
704
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
60 static uint8_t externalUART_Protocol = 0;
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
61 static uint16_t externalCO2Value;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
62 static uint16_t externalCO2SignalStrength;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
63 static uint16_t externalCO2Status = 0;
554
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
64
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
65
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
66 void externalInterface_Init(void)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
67 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
68 activeChannel = 0;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
69 timeoutCnt = 0;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
70 externalInterfacePresent = 0;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
71 if(externalInterface_StartConversion(activeChannel) == HAL_OK)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
72 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
73 externalInterfacePresent = 1;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
74 global.deviceDataSendToMaster.hw_Info.extADC = 1;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
75 }
559
84a4e1200726 Check if HW evaluation was performed:
Ideenmodellierer
parents: 554
diff changeset
76 global.deviceDataSendToMaster.hw_Info.checkADC = 1;
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
77
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
78 /* init data values */
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
79 externalV33_On = 0;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
80 externalCO2Value = 0;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
81 externalCO2SignalStrength = 0;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
82 externalCO2Status = 0;
554
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
83 }
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
84
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
85
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
86 uint8_t externalInterface_StartConversion(uint8_t channel)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
87 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
88 uint8_t retval = 0;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
89 uint8_t confByte = 0;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
90
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
91 if(channel < MAX_ADC_CHANNEL)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
92 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
93 confByte = ADC_START_CONVERSION | ADC_RESOLUTION_16BIT | ADC_GAIN_8;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
94 confByte |= channel << 5;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
95 retval = I2C_Master_Transmit(DEVICE_EXTERNAL_ADC, &confByte, 1);
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
96 }
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
97 return retval;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
98 }
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
99
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
100 /* Check if conversion is done and trigger measurement of next channel */
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
101 uint8_t externalInterface_ReadAndSwitch()
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
102 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
103 uint8_t retval = EXTERNAL_ADC_NO_DATA;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
104
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
105 if(externalInterfacePresent)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
106 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
107 if(I2C_Master_Receive(DEVICE_EXTERNAL_ADC, recBuf, ADC_ANSWER_LENGTH) == HAL_OK)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
108 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
109 if((recBuf[ANSWER_CONFBYTE_INDEX] & ADC_START_CONVERSION) == 0) /* !ready set => received data contains new value */
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
110 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
111 retval = activeChannel; /* return channel number providing new data */
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
112 activeChannel++;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
113 if(activeChannel == MAX_ADC_CHANNEL)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
114 {
704
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
115 if(externalUART_Protocol == (EXT_INTERFACE_UART_O2 >> 8)) /* mixed mode digital and analog o2 sensors => channel 0 is reserved for digital sensor */
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
116 {
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
117 activeChannel = 1;
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
118 }
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
119 else
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
120 {
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
121 activeChannel = 0;
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
122 }
554
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
123 }
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
124 externalInterface_StartConversion(activeChannel);
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
125 timeoutCnt = 0;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
126 }
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
127 else
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
128 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
129 if(timeoutCnt++ >= ADC_TIMEOUT)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
130 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
131 externalInterface_StartConversion(activeChannel);
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
132 timeoutCnt = 0;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
133 }
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
134 }
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
135 }
581
011d8f9f5ddb Added ex Interface measurement restart in case of i2c disturbance:
Ideenmodellierer
parents: 559
diff changeset
136 else /* take also i2c bus disturb into account */
011d8f9f5ddb Added ex Interface measurement restart in case of i2c disturbance:
Ideenmodellierer
parents: 559
diff changeset
137 {
011d8f9f5ddb Added ex Interface measurement restart in case of i2c disturbance:
Ideenmodellierer
parents: 559
diff changeset
138 if(timeoutCnt++ >= ADC_TIMEOUT)
011d8f9f5ddb Added ex Interface measurement restart in case of i2c disturbance:
Ideenmodellierer
parents: 559
diff changeset
139 {
011d8f9f5ddb Added ex Interface measurement restart in case of i2c disturbance:
Ideenmodellierer
parents: 559
diff changeset
140 externalInterface_StartConversion(activeChannel);
011d8f9f5ddb Added ex Interface measurement restart in case of i2c disturbance:
Ideenmodellierer
parents: 559
diff changeset
141 timeoutCnt = 0;
011d8f9f5ddb Added ex Interface measurement restart in case of i2c disturbance:
Ideenmodellierer
parents: 559
diff changeset
142 }
011d8f9f5ddb Added ex Interface measurement restart in case of i2c disturbance:
Ideenmodellierer
parents: 559
diff changeset
143 }
554
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
144 }
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
145 return retval;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
146 }
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
147 float externalInterface_CalculateADCValue(uint8_t channel)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
148 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
149 int32_t rawvalue = 0;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
150 float retValue = 0.0;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
151 if(channel < MAX_ADC_CHANNEL)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
152 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
153
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
154 rawvalue = ((recBuf[0] << 16) | (recBuf[1] << 8) | (recBuf[2]));
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
155
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
156 switch(recBuf[3] & 0x0C) /* confbyte => Resolution bits*/
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
157 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
158 case ADC_RESOLUTION_16BIT: rawvalue = rawvalue >> 8; /* only 2 databytes received shift out confbyte*/
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
159 if(rawvalue & (0x1 << (ADC_RESOLUTION_16BIT_VALUE-1))) /* MSB set => negative number */
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
160 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
161 rawvalue |= 0xFFFF0000; /* set MSB for int32 */
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
162 }
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
163 else
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
164 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
165 rawvalue &= 0x0000FFFF;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
166 }
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
167 externalChannel_mV[channel] = ADC_REF_VOLTAGE_MV * 2.0 / (float) pow(2,ADC_RESOLUTION_16BIT_VALUE); /* calculate bit resolution */
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
168 break;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
169 case ADC_RESOLUTION_18BIT: if(rawvalue & (0x1 << (ADC_RESOLUTION_18BIT_VALUE-1))) /* MSB set => negative number */
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
170 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
171 rawvalue |= 0xFFFE0000; /* set MSB for int32 */
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
172 }
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
173 externalChannel_mV[channel] = ADC_REF_VOLTAGE_MV * 2.0 / (float) pow(2,ADC_RESOLUTION_18BIT_VALUE); /* calculate bit resolution */
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
174 break;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
175 default: rawvalue = 0;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
176 break;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
177 }
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
178 externalChannel_mV[channel] = externalChannel_mV[channel] * rawvalue / ADC_GAIN_8_VALUE;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
179 retValue = externalChannel_mV[channel];
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
180 }
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
181 return retValue;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
182 }
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
183 float getExternalInterfaceChannel(uint8_t channel)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
184 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
185 float retval = 0;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
186
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
187 if(channel < MAX_ADC_CHANNEL)
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
188 {
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
189 retval = externalChannel_mV[channel];
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
190 }
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
191 return retval;
3328189786e7 Added external ADC interface functionality (MCP3424):
Ideenmodellierer
parents:
diff changeset
192 }
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
193
691
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
194 uint8_t setExternalInterfaceChannel(uint8_t channel, float value)
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
195 {
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
196 uint8_t retval = 0;
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
197
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
198 if(channel < MAX_ADC_CHANNEL)
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
199 {
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
200 externalChannel_mV[channel] = value;
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
201 retval = 1;
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
202 }
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
203 return retval;
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
204 }
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
205
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
206 void externalInterface_InitPower33(void)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
207 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
208 GPIO_InitTypeDef GPIO_InitStructure;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
209
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
210 GPIO_InitStructure.Pin = GPIO_PIN_7;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
211 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
212 GPIO_InitStructure.Pull = GPIO_PULLUP;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
213 GPIO_InitStructure.Speed = GPIO_SPEED_LOW;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
214 HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
215 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_SET);
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
216 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
217
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
218
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
219 uint8_t externalInterface_isEnabledPower33()
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
220 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
221 return externalV33_On;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
222 }
691
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
223
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
224 uint8_t externalInterface_isEnabledADC()
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
225 {
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
226 return externalADC_On;
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
227 }
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
228
704
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
229 uint8_t externalInterface_GetUARTProtocol()
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
230 {
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
231 return externalUART_Protocol;
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
232 }
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
233
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
234 void externalInterface_SwitchPower33(uint8_t state)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
235 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
236 if(state != externalV33_On)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
237 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
238 if(state)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
239 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
240 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET);
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
241 externalV33_On = 1;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
242 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
243 else
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
244 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
245 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_SET);
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
246 externalV33_On = 0;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
247 externalInterface_SetCO2Value(0);
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
248 externalInterface_SetCO2SignalStrength(0);
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
249 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
250 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
251 }
691
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
252 void externalInterface_SwitchADC(uint8_t state)
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
253 {
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
254 if((state) && (externalInterfacePresent))
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
255 {
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
256 externalInterface_StartConversion(activeChannel);
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
257 externalADC_On = 1;
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
258 }
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
259 else
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
260 {
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
261 externalADC_On = 0;
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
262 }
52d68cf9994c Improvment external interface usage:
Ideenmodellierer
parents: 662
diff changeset
263 }
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
264
704
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
265 void externalInterface_SwitchUART(uint8_t protocol)
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
266 {
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
267 if(protocol < 0x08)
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
268 {
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
269 externalUART_Protocol = protocol;
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
270 MX_USART1_UART_DeInit();
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
271 if( protocol != 0)
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
272 {
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
273 MX_USART1_UART_Init();
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
274 }
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
275 }
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
276 }
f1b40364b0af Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents: 691
diff changeset
277
662
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
278 void externalInterface_SetCO2Value(uint16_t CO2_ppm)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
279 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
280 externalCO2Value = CO2_ppm;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
281 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
282
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
283 void externalInterface_SetCO2SignalStrength(uint16_t LED_qa)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
284 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
285 externalCO2SignalStrength = LED_qa;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
286 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
287
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
288 uint16_t externalInterface_GetCO2Value(void)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
289 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
290 return externalCO2Value;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
291 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
292
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
293 uint16_t externalInterface_GetCO2SignalStrength(void)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
294 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
295 return externalCO2SignalStrength;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
296 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
297
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
298
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
299 void externalInterface_SetCO2State(uint16_t state)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
300 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
301 externalCO2Status = state;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
302 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
303
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
304 uint16_t externalInterface_GetCO2State(void)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
305 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
306 return externalCO2Status;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
307 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
308
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
309 void externalInterface_ExecuteCmd(uint16_t Cmd)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
310 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
311 char cmdString[10];
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
312 uint8_t cmdLength = 0;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
313
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
314 switch(Cmd & 0x00FF) /* lower byte is reserved for commands */
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
315 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
316 case EXT_INTERFACE_CO2_CALIB: cmdLength = snprintf(cmdString, 10, "G\r\n");
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
317 break;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
318 default:
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
319 break;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
320 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
321 if(cmdLength != 0)
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
322 {
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
323 HAL_UART_Transmit(&huart1,(uint8_t*)cmdString,cmdLength,10);
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
324 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
325 return;
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
326 }
1b995079c045 PSCR Mode
heinrichs weikamp
parents: 581
diff changeset
327