|
6 | 6 | #include "../registers/memory/dma.h" |
7 | 7 | #include "../registers/system/pin_manager.h" |
8 | 8 | #include "../registers/timers/tmr5.h" |
| 9 | +#include "multimeter.h" |
9 | 10 |
|
10 | 11 | #define CHARGE 0 |
11 | 12 | #define DISCHARGE 1 |
@@ -70,6 +71,30 @@ void GetCapacitance_ConfigADC_CTMU_TMR5() { |
70 | 71 | TMR5_WaitForInterruptEvent(); |
71 | 72 | } |
72 | 73 |
|
| 74 | +uint16_t GetVoltage_Summed(uint8_t channel) { |
| 75 | + |
| 76 | + ADC1_SetOperationMode(ADC1_12BIT_AVERAGING_MODE, channel, 0); |
| 77 | + |
| 78 | + ADC1_Enable(); |
| 79 | + DELAY_us(20); |
| 80 | + ADC1_AutomaticSamplingEnable(); |
| 81 | + |
| 82 | + ADC1_WaitForInterruptEvent(); |
| 83 | + |
| 84 | + while (!ADC1_IsConversionComplete()); |
| 85 | + |
| 86 | + ADC1_AutomaticSamplingDisable(); |
| 87 | + ADC1_Disable(); |
| 88 | + |
| 89 | + uint16_t voltage_sum = |
| 90 | + (ADC1BUF0) + (ADC1BUF1) + (ADC1BUF2) + (ADC1BUF3) + |
| 91 | + (ADC1BUF4) + (ADC1BUF5) + (ADC1BUF6) + (ADC1BUF7) + |
| 92 | + (ADC1BUF8) + (ADC1BUF9) + (ADC1BUFA) + (ADC1BUFB) + |
| 93 | + (ADC1BUFC) + (ADC1BUFD) + (ADC1BUFE) + (ADC1BUFF); |
| 94 | + |
| 95 | + return voltage_sum; |
| 96 | +} |
| 97 | + |
73 | 98 | response_t MULTIMETER_GetVoltage(void) { |
74 | 99 |
|
75 | 100 | uint8_t channel = UART1_Read(); |
@@ -113,26 +138,8 @@ response_t MULTIMETER_GetVoltage(void) { |
113 | 138 | response_t MULTIMETER_GetVoltageSummed(void) { |
114 | 139 |
|
115 | 140 | uint8_t channel = UART1_Read(); |
116 | | - |
117 | | - ADC1_SetOperationMode(ADC1_12BIT_AVERAGING_MODE, channel, 0); |
118 | | - |
119 | | - ADC1_Enable(); |
120 | | - DELAY_us(20); |
121 | | - ADC1_AutomaticSamplingEnable(); |
122 | | - |
123 | | - ADC1_WaitForInterruptEvent(); |
124 | | - |
125 | | - while (!ADC1_IsConversionComplete()); |
126 | | - |
127 | | - ADC1_AutomaticSamplingDisable(); |
128 | | - ADC1_Disable(); |
129 | | - |
130 | | - uint16_t voltage_sum = |
131 | | - (ADC1BUF0) + (ADC1BUF1) + (ADC1BUF2) + (ADC1BUF3) + |
132 | | - (ADC1BUF4) + (ADC1BUF5) + (ADC1BUF6) + (ADC1BUF7) + |
133 | | - (ADC1BUF8) + (ADC1BUF9) + (ADC1BUFA) + (ADC1BUFB) + |
134 | | - (ADC1BUFC) + (ADC1BUFD) + (ADC1BUFE) + (ADC1BUFF); |
135 | | - |
| 141 | + |
| 142 | + uint16_t voltage_sum = GetVoltage_Summed(channel); |
136 | 143 | UART1_WriteInt(voltage_sum); |
137 | 144 |
|
138 | 145 | return SUCCESS; |
@@ -185,3 +192,32 @@ response_t MULTIMETER_GetCapacitance(void) { |
185 | 192 |
|
186 | 193 | return SUCCESS; |
187 | 194 | } |
| 195 | + |
| 196 | +response_t MULTIMETER_GetCTMUVolts(void) { |
| 197 | + |
| 198 | + uint8_t config = UART1_Read(); |
| 199 | + |
| 200 | + CTMU_Initialize(); |
| 201 | + // Edge delay generation |
| 202 | + CTMUCON1bits.TGEN = (config >> 7) & 0x1; |
| 203 | + // Current source output |
| 204 | + CTMUICONbits.IRNG = (config >> 5) & 0x3; |
| 205 | + |
| 206 | + // Internal temperature |
| 207 | + if ((config & 0x1F) == 30) CTMU_EnableEdge2(); |
| 208 | + |
| 209 | + CTMU_Enable(); |
| 210 | + DELAY_us(1000); |
| 211 | + CTMU_DrainOutput(); |
| 212 | + DELAY_us(1500); |
| 213 | + CTMU_FloatOutput(); |
| 214 | + CTMU_EnableEdge1(); |
| 215 | + |
| 216 | + uint16_t result = GetVoltage_Summed(config & 0x1F); |
| 217 | + |
| 218 | + CTMU_DisableModule(); |
| 219 | + |
| 220 | + UART1_WriteInt(result); |
| 221 | + |
| 222 | + return SUCCESS; |
| 223 | +} |
0 commit comments