|
@@ -24,11 +24,6 @@
|
|
|
//#include "rtos.h"
|
|
|
|
|
|
/* Private defines -----------------------------------------------------------*/
|
|
|
-union u_word {
|
|
|
- uint16_t Word;
|
|
|
- uint8_t Bytes[2];
|
|
|
-};
|
|
|
-
|
|
|
// for 1 msek ticks
|
|
|
#define TIM4_PERIOD (uint8_t)124
|
|
|
|
|
@@ -120,7 +115,7 @@ static uint8_t LedDigits[3] = {0, 0, 0};
|
|
|
static uint8_t LedPoint = 3;
|
|
|
static uint16_t SubSecondBfr = 0;
|
|
|
static uint8_t SubSecondCnt = SUB_SECOND_CNT;
|
|
|
-static u_word ADC_ZeroFix;
|
|
|
+static uint16_t ADC_ZeroFix = 0;
|
|
|
|
|
|
void main(void)
|
|
|
{
|
|
@@ -164,8 +159,8 @@ void main(void)
|
|
|
if((BTN_PORT->IDR & BTN_PINS) == 0){
|
|
|
ADC_CorrectZero();
|
|
|
} else {
|
|
|
- ADC_ZeroFix.Bytes[1] = FLASH_ReadByte(ADC_ZERO_EEADDR);
|
|
|
- ADC_ZeroFix.Bytes[0] = FLASH_ReadByte((ADC_ZERO_EEADDR+1));
|
|
|
+ ADC_ZeroFix = (uint16_t)(FLASH_ReadByte(ADC_ZERO_EEADDR) << 8);
|
|
|
+ ADC_ZeroFix |= FLASH_ReadByte((ADC_ZERO_EEADDR+1));
|
|
|
}
|
|
|
|
|
|
/* Infinite loop */
|
|
@@ -195,11 +190,11 @@ void main(void)
|
|
|
ïîäåëèëè íà ìíîæèòåëü ÎÓ -- 250 ìÂ
|
|
|
è ïîäåëèëè íà ñîïðîòèâëåíèå øóíòà -- 5000 ìÀ
|
|
|
*/
|
|
|
- if(tbuf > ADC_ZeroFix.Word){
|
|
|
- tbuf -= ADC_ZeroFix.Word;
|
|
|
+ if(tbuf > ADC_ZeroFix){
|
|
|
+ tbuf -= ADC_ZeroFix;
|
|
|
|
|
|
tbuf >>= 3; // pre div
|
|
|
- tbuf *= 3300; // Vref = Vcc
|
|
|
+ tbuf *= 3335; // Vref = Vcc
|
|
|
tbuf = (tbuf + 4096) / 8191; // get ADC input voltage in mV
|
|
|
tbuf *= 1000; // -- for OU divider //get voltage in uV
|
|
|
tbuf = (tbuf + 3147) / 6294; // get voltage from shunt
|
|
@@ -235,8 +230,6 @@ void main(void)
|
|
|
|
|
|
/** Êîððåêòèðóåì íàïðÿæåíèå ñìåùåíèÿ íóëÿ ÎÓ íà âõîäå ÀÖÏ */
|
|
|
static void ADC_CorrectZero(void) {
|
|
|
- u_word abuf;
|
|
|
-
|
|
|
/* æä¸ì îêîí÷àíèÿ öèêëà èçìåðåíèé */
|
|
|
do {
|
|
|
} while (BufferIndex < ADC_SMPLS);
|
|
@@ -246,9 +239,8 @@ static void ADC_CorrectZero(void) {
|
|
|
/* Ïîëó÷àåì 16-òè áèòíîå çíà÷åíèå îò ÀÖÏ */
|
|
|
uint8_t i = 0;
|
|
|
for(i=0; i<ADC_SMPLS; i++){
|
|
|
- abuf.Word += ConversionBuffer[i];
|
|
|
+ ADC_ZeroFix += ConversionBuffer[i];
|
|
|
}
|
|
|
- ADC_ZeroFix.Word = abuf.Word;
|
|
|
|
|
|
/* Ñîõðàíÿåì ïîëó÷åííîå çíà÷åíèå â EEPROM */
|
|
|
|
|
@@ -259,9 +251,9 @@ static void ADC_CorrectZero(void) {
|
|
|
FLASH_Unlock(FLASH_MEMTYPE_DATA);
|
|
|
|
|
|
/* MSB */
|
|
|
- FLASH_ProgramByte(ADC_ZERO_EEADDR, abuf.Bytes[1]);
|
|
|
+ FLASH_ProgramByte(ADC_ZERO_EEADDR, (uint8_t)(ADC_ZeroFix>>8));
|
|
|
/* LSB */
|
|
|
- FLASH_ProgramByte((ADC_ZERO_EEADDR+1), abuf.Bytes[0]);
|
|
|
+ FLASH_ProgramByte((ADC_ZERO_EEADDR+1), (uint8_t)(ADC_ZeroFix));
|
|
|
|
|
|
/* Lock Data memory */
|
|
|
FLASH_Lock(FLASH_MEMTYPE_DATA);
|