浏览代码

Final fixes.

Vladimir N. Shilov 8 年之前
父节点
当前提交
6d077d24bb
共有 1 个文件被更改,包括 9 次插入17 次删除
  1. 9 17
      src/main.c

+ 9 - 17
src/main.c

@@ -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);