Перейти к содержанию
    

внутренний датчик температуры MSP430

Нужноотправлять по UARTу температуру в градусах цельсия раз в секунжу. По UARTу нормально передаёт, только какую то константу, а не температуру

const int ADC_RETURN_TEMPERATURA_32[]={500,500,499,499,499,498,498,498,497,497,496,496,496,495,495,495,494,494,49
4,493,493,492,492,492,491,491,491,490,490,490,489,489,489,
                                       488,488,487,487,487,486,486,486,485,485,485,484,484,484,483,483,483,482,482,481,
481,481,480,480,480,479,479,479,478,478,478,477,477,
                                       477,476,476,476,475,475,475,474,474,474,473,473,473,472,472,472,471,471,471,470,
470,469,469,469,468,468,468,467,467,467,466,466,466,
                                       465,465,465,464,464,464,463,463,463,462,462,462,462,461,461,461,460,460,460,459,
459,459,458,458,458,457,457,457,456,456,456,455,455,
                                       455,454,454,454,453,453,453,452,452,452,451,451,451,451,450,450,450,449,449,449,
448,448,448,447,447,447,446,446,446,446,445,445,445,
                                       444,444,444,443,443,443,442,442,442,441,441,441,441,440,440,440,439,439,439,438,
438,438,437,437,437,437,436,436,436,435,435,435,434,
                                       434,434,434,433,433,433,432,432,432,431,431,431,431,430,430,430,429,429,429,429,
428,428,428,427,427,427,426,426,426,426,425,425,425,
                                       424,424,424,424,423,423,423,422,422,422,422,421,421,421,420,420,420,420,419,419,
419,418,418,418,418,417,417,417,416,416,416,416,415,
                                       415,415,414,414,414,414,413,413,413,413,412,412,412,411,411,411,411,410,410,410,
409,409,409,409,408,408,408,408,407,407,407,406,406,
                                       406,406,405,405,405,405,404,404,404,403,403,403,403,402,402,402,402,401,401,401,
401,400,400,400,399,399,399,399,398,398,398,398,397,
                                       397,397,397,396,396,396,396,395,395,395,395,394,394,394,393,393,393,393,392,392,
392,392,391,391,391,391,390,390,390,390,389,389,389,
                                       389,388,388,388,388,387,387,387,387,386,386,386,386,385,385,385,385,384,384,384,
384,383,383,383,383,382,382,382,382,381,381,381,381,
                                       380,380,380,380,379,379,379,379,378,378,378,378,377,377,377,377,377,376,376,376,
376,375,375,375,375,374,374,374,374,373,373,373,373,
                                       372,372,372,372,371,371,371,371,371,370,370,370,370,369,369,369,369,368,368,368,
368,368,367,367,367,367,366,366,366,366,365,365,365,
                                       365,365,364,364,364,364,363,363,363,363,362,362,362,362,362,361,361,361,361,360,
360,360,360,360,359,359,359,359,358,358,358,358,358,
                                       357,357,357,357,356,356,356,356,356,355,355,355,355,354,354,354,354,354,353,353,
353,353,352,352,352,352,352,351,351,351,351,350,350,
                                       350,350,350,349,349,349,349,349,348,348,348,348,348,347,347,347,347,346,346,346,
346,346,345,345,345,345,345,344,344,344,344,344,343,
                                       343,343,343,343,342,342,342,342,341,341,341,341,341,340,340,340,340,340,339,339,
339,339,339,338,338,338,338,338,337,337,337,337,337,
                                       336,336,336,336,336,335,335,335,335,335,334,334,334,334,334,333,333,333,333,333,
332,332,332,332,332,331,331,331,331,331,330,330,330,
                                       330,330,329,329,329,329,329,328,328,328,328,328,328,327,327,327,327,327,326,326,
326,326,326,325,325,325,325,325,324,324,324,324,324,
                                       324,323,323,323,323,323,322,322,322,322,322,321,321,321,321,321,321,320,320,320,
320,320,319,319,319,319,319,318,318,318,318,318,318,
                                       317,317,317,317,317,316,316,316,316,316,316,315,315,315,315,315,314,314,314,314,
314,314,313,313,313,313,313,313,312,312,312,312,312,
                                       311,311,311,311,311,311,310,310,310,310,310,309,309,309,309,309,309,308,308,308,
308,308,308,307,307,307,307,307,307,306,306,306,306,
                                       306,305,305,305,305,305,305,304,304,304,304,304,304,303,303,303,303,303,303,302,
302,302,302,302,302,301,301,301,301,301,301,300,300,
                                       300,300,300,300,299,299,299,299,299,299,298,298,298,298,298,298,297,297,297,297,
297,297,296,296,296,296,296,296,295,295,295,295,295,
                                       295,294,294,294,294,294,294,294,293,293,293,293,293,293,292,292,292,292,292,292,
291,291,291,291,291,291,290,290,290,290,290,290,290,
                                       289,289,289,289,289,289,288,288,288,288,288,288,287,287,287,287,287,287,287,286,
286,286,286,286,286,285,285,285,285,285,285,285,284,
                                       284,284,284,284,284,283,283,283,283,283,283,283,282,282,282,282,282,282,281,281,
281,281,281,281,281,280,280,280,280,280,280,280,279,
                                       279,279,279,279,279,278,278,278,278,278,278,278,277,277,277,277,277,277,277,276,
276,276,276,276,276,276,275,275,275,275,275,275,275,
                                       274,274,274,274,274,274,274,273,273,273,273,273,273,272,272,272,272,272,272,272,
271,271,271,271,271,271,271,270,270,270,270,270,270,
                                       270,269,269,269,269,269,269,269,269,268,268,268,268,268,268,268,267,267,267,267,
267,267,267,266,266,266,266,266,266,266,265,265,265,
                                       265,265,265,265,264,264,264,264,264,264,264,264,263,263,263,263,263,263,263,262,
262,262,262,262,262,262,261,261,261,261,261,261,261,
                                       261,260,260,260,260,260,260,260,259,259,259,259,259,259,259,259,258,258,258,258,
258,258,258,257,257,257,257,257,257,257,257,256,256,
                                       256,256,256,256,256,255,255,255,255,255,255,255,255,254,254,254,254,254,254,254,
254,253,253,253,253,253,253,253,253,252,252,252,252,
                                       252,252,252,251,251,251,251,251,251,251,251,250,250,250,250,250,250,250,250,249,
249,249,249,249,249,249,249,248,248,248,248,248,248,
                                       248,248,247,247,247,247,247,247,247,247,246,246,246,246,246,246,246,246,245,245,
245,245,245,245,245,245,244,244,244,244,244,244,244,
                                       244,243,243,243,243,243,243,243,243,242,242,242,242,242,242,242,242,241,241,241,
241,241,241,241,241,241,240,240,240,240,240,240,240,
                                       240,239,239,239,239,239,239,239,239,238,238,238,238,238,238,238,238,238,237,237,
237,237,237,237,237,237,236,236,236,236,236,236,236,
                                       236,236,235,235,235,235,235,235,235,235,234,234,234,234,234,234,234,234,234,233,
233,233,233,233,233,233,233,232,232,232,232,232,232,
                                       232,232,232,231,231,231,231,231,231,231,231,231,230,230,230,230,230,230,230,230,
229,229,229,229,229,229,229,229,229,228,228,228,228,
                                       228,228,228,228,228,227,227,227,227,227,227,227,227,227,226,226,226,226,226,226,
226,226,226,225,225,225,225,225,225,225,225,225,224,
                                       224,224,224,224,224,224,224,224,223,223,223,223,223,223,223,223,223,222,222,222,
222,222,222,222,222,222,221,221,221,221,221,221,221,
                                       221,220,220,220,220,220,220,220,220,220,219,219,219,219,219,219,219,219,219,218,
218,218,218,218,218,218,218,218,217,217,217,217,217,
                                       217,217,217,217,217,216,216,216,216,216,216,216,216,216,215,215,215,215,215,215,
215,215,215,214,214,214,214,214,214,214,214,214,214,
                                       213,213,213,213,213,213,213,213,213,212,212,212,212,212,212,212,212,212,212,211,
211,211,211,211,211,211,211,211,210,210,210,210,210,
                                       210,210,210,210,210,209,209,209,209,209,209,209,209,209,208,208,208,208,208,208,
208,208,208,208,207,207,207,207,207,207,207,207,207,
                                       207,206,206,206,206,206,206,206,206,206,206,205,205,205,205,205,205,205,205,205,
204,204,204,204,204,204,204,204,204,204,203,203,203,
                                       203,203,203,203,203,203,203,202,202,202,202,202,202,202,202,202,202,201,201,201,
201,201,201,201,201,201,201,200,200,200,200,200,200,
                                       200,200,200,200,199,199,199,199,199,199,199,199,199,199,198,198,198,198,198,198,
198,198,198,198,197,197,197,197,197,197,197,197,197,
                                       197,196,196,196,196,196,196,196,196,196,196,195,195,195,195,195,195,195,195,195,
195,194,194,194,194,194,194,194,194,194,194,193,193,
                                       193,193,193,193,193,193,193,193,193,192,192,192,192,192,192,192,192,192,192,191,
191,191,191,191,191,191,191,191,191,190,190,190,190,
                                       190,190,190,190,190,190,189,189,189,189,189,189,189,189,189,189,189,188,188,188,
188,188,188,188,188,188,188,187,187,187,187,187,187,
                                       187,187,187,187,187,186,186,186,186,186,186,186,186,186,186,185,185,185,185,185,
185,185,185,185,185,185,184,184,184,184,184,184,184,
                                       184,184,184,183,183,183,183,183,183,183,183,183,183,183,182,182,182,182,182,182,
182,182,182,182,181,181,181,181,181,181,181,181,181,
                                       181,181,180,180,180,180,180,180,180,180,180,180,180,179,179,179,179,179,179,179,
179,179,179,179,178,178,178,178,178,178,178,178,178,
                                       178,177,177,177,177,177,177,177,177,177,177,177,176,176,176,176,176,176,176,176,
176,176,176,175,175,175,175,175,175,175,175,175,175,
                                       175,174,174,174,174,174,174,174,174,174,174,174,173,173,173,173,173,173,173,173,
173,173,173,172,172,172,172,172,172,172,172,172,172,
                                       172,171,171,171,171,171,171,171,171,171,171,171,170,170,170,170,170,170,170,170,
170,170,170,169,169,169,169,169,169,169,169,169,169,
                                       169,168,168,168,168,168,168,168,168,168,168,168,167,167,167,167,167,167,167,167,
167,167,167,166,166,166,166,166,166,166,166,166,166,
                                       166,166,165,165,165,165,165,165,165,165,165,165,165,164,164,164,164,164,164,164,
164,164,164,164,163,163,163,163,163,163,163,163,163,
                                       163,163,163,162,162,162,162,162,162,162,162,162,162,162,161,161,161,161,161,161,
161,161,161,161,161,160,160,160,160,160,160,160,160,
                                       160,160,160,160,159,159,159,159,159,159,159,159,159,159,159,158,158,158,158,158,
158,158,158,158,158,158,158,157,157,157,157,157,157,
                                       157,157,157,157,157,157,156,156,156,156,156,156,156,156,156,156,156,155,155,155,
155,155,155,155,155,155,155,155,155,154,154,154,154,
                                       154,154,154,154,154,154,154,154,153,153,153,153,153,153,153,153,153,153,153,152,
152,152,152,152,152,152,152,152,152,152,152,151,151,
                                       151,151,151,151,151,151,151,151,151,151,150,150,150,150,150,150,150,150,150,150,
150,150,149,149,149,149,149,149,149,149,149,149,149,
                                       149,148,148,148,148,148,148,148,148,148,148,148,148,147,147,147,147,147,147,147,
147,147,147,147,147,146,146,146,146,146,146,146,146,
                                       146,146,146,146,145,145,145,145,145,145,145,145,145,145,145,145,145,144,144,144,
144,144,144,144,144,144,144,144,144,143,143,143,143,
                                       143,143,143,143,143,143,143,143,142,142,142,142,142,142,142,142,142,142,142,142,
142,141,141,141,141,141,141,141,141,141,141,141,141,
                                       140,140,140,140,140,140,140,140,140,140,140,140,140,139,139,139,139,139,139,139,
139,139,139,139,139,139,138,138,138,138,138,138,138,
                                       138,138,138,138,138,137,137,137,137,137,137,137,137,137,137,137,137,137,136,136,
136,136,136,136,136,136,136,136,136,136,136,135,135,
                                       135,135,135,135,135,135,135,135,135,135,135,134,134,134,134,134,134,134,134,134,
134,134,134,134,133,133,133,133,133,133,133,133,133,
                                       133,133,133,133,132,132,132,132,132,132,132,132,132,132,132,132,132,132,131,131,
131,131,131,131,131,131,131,131,131,131,131,130,130,
                                       130,130,130,130,130,130,130,130,130,130,130,130,129,129,129,129,129,129,129,129,
129,129,129,129,129,128,128,128,128,128,128,128,128,
                                       128,128,128,128,128,128,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
126,126,126,126,126,126,126,126,126,126,126,126,126,
                                       126,125,125,125,125,125,125,125,125,125,125,125,125,125,125,124,124,124,124,124,
124,124,124,124,124,124,124,124,124,124,123,123,123,
                                       123,123,123,123,123,123,123,123,123,123,123,122,122,122,122,122,122,122,122,122,
122,122,122,122,122,122,121,121,121,121,121,121,121,
                                       121,121,121,121,121,121,121,121,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,119,119,119,119,119,119,119,119,119,119,
                                       119,119,119,119,119,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,
118,117,117,117,117,117,117,117,117,117,117,117,117,
                                       117,117,117,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,115,
115,115,115,115,115,115,115,115,115,115,115,115,115,
                                       115,115,115,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,
                                       113,113,113,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,
112,111,111,111,111,111,111,111,111,111,111,111,111,
                                       111,111,111,111,111,111,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
110,110,110,110,109,109,109,109,109,109,109,109,109,
                                       109,109,109,109,109,109,109,109,109,109,108,108,108,108,108,108,108,108,108,108,
108,108,108,108,108,108,108,108,108,107,107,107,107,
                                       107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,106,106,106,
106,106,106,106,106,106,106,106,106,106,106,106,106,
                                       106,106,106,106,106,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,
105,105,105,105,105,105,105,104,104,104,104,104,104,
                                       104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,103,103,103,
103,103,103,103,103,103,103,103,103,103,103,103,103,
                                       103,103,103,103,103,103,103,103,102,102,102,102,102,102,102,102,102,102,102,102,
102,102,102,102,102,102,102,102,102,102,102,102,102,
                                       102,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
101,101,101,101,101,101,101,101,101,101,100,100,100,
                                       100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100};
int main( void )
  {
    WDTCTL = WDTPW + WDTHOLD;                      // Stop watchdog timer to prevent time out reset
    _DINT();                                       // Запрещаем прерывания
    InitializationPortIO ();                       // Вызов функции инициализации портов ввода/вывода микроконтроллера 
    InitializationTimersMSP430 ();                 // Вызов функции инициализации внутренних аппаратных таймеров микроконтроллера MSP430F135 
    InitializationUSART ();                        // Вызов функции инициализации модуля USART
    InitializationADC ();                          // Вызов Функции инициализации модуля АЦП микроконтроллера
    _EINT();                                       // Разрещаем прерывания
    
    while (1)
          {
            
            if (Flag_1s == true)
              {
                Temperatura_CPU = ADC_RETURN_TEMPERATURA_32[(ADC12MEM15 - L_ADRES_MASSIV_ADC)];             
                 UART_printf ("\r\n Temperatura=%u",Temperatura_CPU);
              
                 ADC12MEM15 = 0;
          
                 Flag_1s = false;
               }  
           }  
//    return 0;
  }

//********************************************************************************
*********************************************************************************
******************************
//**********************************************************     ОБРАБОТЧИКИ ПРЕРЫВАНИЙ     ********************************************************************************
*********************
#pragma vector = TIMERA0_VECTOR                       // Прерывание от таймера А (срабатывает каждые 50 мс)
__interrupt void isr_TACCR0()
          {
            ProgramCounter_1 ++;
            if (ProgramCounter_1 >= 20)
               {
                 Flag_1s = true;
                 TimeSecond ++;
                 if (TimeSecond > 59)
                    {
                      TimeSecond = 0;
                      TimeMinute ++;     
                    } 
                 if (TimeMinute > 59)
                    {
                      TimeMinute = 0;
                      TimeHour ++;  
                    }
                 if (TimeHour > 250)
                    {
                      TimeHour = 0;   
                    }
                 ProgramCounter_1 = 0;
               }  
          
          }

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#pragma vector = USART0RX_VECTOR         // Прерывание от приёмника UART ()
__interrupt void isr_URXIFG0(void)
                               {
                                 BUFER_UART_RXD [Counter_UART_RXDATA] = U0RXBUF;
                                 if (BUFER_UART_RXD [Counter_UART_RXDATA] == 0x0d)
                                    {
                                      FlagAcceptDataUART = true;
                                    }
                                 
                                 Counter_UART_RXDATA ++;
                                 if (Counter_UART_RXDATA > MAX_BUFER_UART_RXD)
                                    {
                                      Counter_UART_RXDATA = 0; 
                                      FlagOverloadBuferUART = true;
                                    }  
                                 
                               }  

//********************************************************************************
*********************************************************************************
******************************
//*************************************************************     ОПИСАНИЯ ФУНКЦИЙ     ********************************************************************************
************************
void InitializationTimersMSP430 (void)   // Функция инициализации внутренних аппаратных таймеров микроконтроллера MSP430F135
     {
       // Общая инициализвция модуля тактирования микроконтроллера 
       BCSCTL1 = 0x00;                                    // Обнуление управляющего регистра BCSCTL1 
       BCSCTL2 = 0x00;                                    // Обнуление управляющего регистра BCSCTL2
       BCSCTL1 = RSEL0 | RSEL1 | RSEL2;                   // Сопротивление внутреннего резистора -> МАКСИМУМ     
       BCSCTL2 = SELM_2 |                                 // Источник тактирования MCLK -> XT2CLK
                 DIVM_0 |                                 // Делитель MCLK -> 1
                 SELS   |                                 // Источник тактирования SMCLK -> XT2CLK
                 DIVS_0;                                 // Делитель SMCLK -> 1  
       DCOCTL = DCO0 | DCO1 | DCO2 |                      // Частота генератора -> МАКСИМУМ (8000000 Гц)
                MOD0 | MOD1 | MOD2 | MOD3 | MOD4;         // Модулятор тактовой частоты DCO -> МАКСИМУМ
       LPM4;                                              // Генераторы DCO и LFXT1 отключены
       

       // Инициализация таймера А
       TACTL = TASSEL_2 |                                 // Источник тактирования таймера -> сигнал SMCLK
               MC_1 |                                     // Режим работы таймера -> счёт вверх до значения TACCR0
               ID_3;                                      // Предделитель таймера -> 8  
       TACCR0 = 50000;                                    // Счёт до значения -> 50000
       TACCTL0 = CCIE;                                    // Разрешение прерывания по захвату/сравнению
       
       // Инициализация таймера B
     }  

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void InitializationPortIO (void)   // Функция инициализации портов ввода вывода микроконтроллера 
     {
       // Инициализация порта ввода/вывода №1
       
       
       // Инициализация порта ввода/вывода №2
       
       
       // Инициализация порта ввода/вывода №3
       P3SEL |= BIT4 | BIT5;                 // Выводы 4 и 5 порта 3 настроены как выводы альтернативных функций (USART) 
       P3DIR |= BIT4;                        // Вывод 4 порта 3 настраиваем как выход - TXD
       P3DIR &= ~BIT5;                       // Вывод 5 порта 3 настраиваем как вход - RXD0

     }


//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void InitializationUSART (void)   // Функция инициализации модуля USART микроконтроллера
     {
       // Инициализации модуля USART0        
       UTCTL0 = SSEL1 | SSEL0;               // Источник тактирования таймера -> сигнал SMCLK
       UCTL_0 = CHAR;                        // Количество бит во фрейме -> 8
       UBR00 = 0x45;                         // Установка коэффициента предделителя USART для скорости приёма/передачи = 115200 при тактовой частоте 8000000 МГц
       UBR10 = 0x00;                         // ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||||||||||||||
       UMCTL0 = 0xBA;                        // Установка коэффициента модулятора USART для скорости приёма/передачи = 115200 при тактовой частоте 8000000 МГц
       ME1 = UTXE0 |                         // Включаем передатчик UART
             URXE0;                          // Включаем приёмник UART
       IE1 |= URXIE0;                        // Enable USART0 RX interrupt
//      U1CTL &= ~SWRST;                      //reset UART logic
     }  

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void UART_putChar (char c)   // UART1 Transmit Subroutine. Send ony byte via UART. @param c Character to send.
      {
        while ((IFG1 & UTXIFG0) == 0);       // Wait for ready U1TXBUF
        U0TXBUF = c;                         // send data
      }

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
char UART_getCharIsReady (void)   // Check UART's input buffer. @return TRUE: if input buffer contains received data.
     {
       return (IFG1 & URXIFG0) != 0;
     }

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
char UART_getChar (void)   // Receive one byte via UART. This function waits for the input (blocking).@return Received character.
      {
        while (!UART_getCharIsReady ());
        return U0RXBUF;
      }

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void UART_write (const char *buf, int length)   // Write string buffer to UART. @param buf String buffer to send. @param length Length of string buffer.
     {
       int i;
       for (i = 0; i < length; i++)
           {
             UART_putChar (buf[i]);
           }
     }

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void UART_printf (const char *fmt, ...)   // Printf function which uses UART interface to send. @param fmt Printf format string. Example: "Value: %02i\r\n"
     {                                    // UART_printf ("Number: %02i\r\n", number);
       static va_list valist;
       char buf[UART_PRINTF_BUF_SIZE]; 
      
            va_start (valist, fmt);
            vsnprintf (buf, sizeof (buf), fmt, valist);
            va_end (valist);    
            UART_write (buf, strlen (buf));
     }





//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void InitializationADC (void)                          // Функция инициализации модуля АЦП микроконтроллера
     {
       //ПЕРВЫЙ ВАРИАНТ КОДА ДЛЯ РАБОТЫ С АЦП  (повтаряющаяся последовательность каналов)
       
       // Управляющий регистр 0 АЦП12 - ADC12CTL0 
       ADC12CTL0 = ADC12ON |                                  // Включаем модуль АЦП

                  REF2_5V |                                  // Выбираем значение опорного напряжения равным 2,5 В 
                  REFON |                                    // Включаем генератор опорного напряжения 
                   MSC |                                      // Разрешаем режим множественных выборок и преобразований (только для последовательных и повторных режимов преобразования)  
                   SHT0_3 |                                   // Устанавливаем время выборки и хранения для ячеек памяти результатов преобразования с 0 по 7 равным 32 циклам
                   SHT1_3;                                   // Устанавливаем время выборки и хранения для ячеек памяти результатов преобразования с 8 по 15 равным 32 циклам

       
       // Управляющий регистр 1 АЦП12 - ADC12CTL1
       ADC12CTL1 = SHP |                                        // Источник сигнала SAMPCON -> таймер выборки и хранения
                   ADC12SSEL0 | ADC12SSEL1 |                    // Источник тактирования АЦП -> тактовая частота SMCLK
                   CONSEQ_3 |                                   // Режим работы АЦП -> повторяющаяся последовательность каналов 
                   CSTARTADD_0 |                                // Стартовый адрес начала преобразования АЦП -> ADC12MEM0

                   ADC12DIV_2;                                 // Тактовый делитель частоты тактирования = 3  

       // Управляющий регистр памяти преобразований АЦП12 

       ADC12MCTL15 = INCH_11;                // Для ячейки памяти №15 выбираем внутренний источник опрного напряжения, внутренний датчик температуры
   
       // Управляющий регистр разрешения прерываний АЦП - ADC12IE
       ADC12IE = ADC12IV_ADC12IFG15;                          // Разрешаем прерывание от АЦП при заполнении 15 ячейки памяти 

     }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во-первых, у вас АЦП не работает. Для разрешения запуска преобразований нужно установить бит ENC в конце инициализации ADC.

Во-вторых, у вас выбран режим последовательности преобразований последовательности каналов и начинается он с ADC12MEM0 (т.к. CSTARTADD_0). Но для первых 15-и преобразований не заданы параметры: не выбраны номера входных каналов и источники опорного напряжения. Да и конец последовательности преобразования (бит EOS) не задан, следовательно АЦП будет раскладывать результаты преобразований по всем 16-и ADC12MEMx, но только в ADC12MEM15 будет нужный вам результат . Если вы хотите оцифровывать только канал встроенного термодатчика, усредняя результат по нескольким выборкам, то следует инициализировать все регистры ADC12MCTLxx для всех используемых результатов измерения. Кстати, у вас включен REF2.5V, но измерение идет относительно питания AVCC, т.к. опору VREF нужно выбирать битами SREF в регистре ADC12MCTL15.

В-третьих, вы разрешаете прерывание от ADC12, но обработчика прерывания вектора ADC12_VECTOR в вашей программе нет.

В-четвертых, встроенный датчик температуры измеряет температуру кристалла микроконтрооллера. Если вы хотите с помощью него измерять температуру окружающей чип МК среды, то не следует разогревать кристалл бесполезной работой. Используйте режим энергосбережения LPM0. Да и вообще измерение от встроенного термодатчика рекомендуется выполнять при "спящем" ядре, чтобы уменьшить шумы и влияние на рехультат измерения.

Ну и в-пятых, в соответствии с п.3.4 Правилами форума столь объемные исходники следует прикреплять к сообщению в виде вложения, а не вставлять этакую "портянку" в само тело сообщение.

P.S. поскольку исходный вопрос был задан в отношении работы АЦП, то остальную часть программы, касающуюся работы UART я пристально не разбирал и не рассматривал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну и в-пятых, в соответствии с п.3.4 Правилами форума столь объемные исходники следует прикреплять к сообщению в виде вложения, а не вставлять такую "портянку" в само сообщение.

Ну или на худой конец добавить "box" к тегу "code", чтобы свернуть в маленькое окошечко с прокруткой.

 

Добавлю от себя, в порядке старческого брюзжания.

Таблицу температур можно смело подвергнуть децимации. А то и вообще пять-десять точек оставить, а остальные вычислять интерполяцией.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

 

ADC12MCTL15 = INCH_11; // Для ячейки памяти №15 выбираем внутренний источник опрного напряжения, внутренний датчик температуры

 

 

 

Ээээ, а разве INCH_11 это не напряжение питания /2 , температура - это же 10

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстате, приготовьтесь к тому, что внутренний термометр - полное дерьмо. +/- 5 градусов покажет запросто

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстате, приготовьтесь к тому, что внутренний термометр - полное дерьмо. +/- 5 градусов покажет запросто

 

В доках пишут:

"The temperature sensor offset error can be large

and may need to be calibrated for most applications (see the device-specific data sheet for parameters)."

А как его откалибровать ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Калибровочные коэффициенты берутся из TLV.

 

float mref, nref, Temp_C;
struct s_TLV_ADC_Cal_Data * pADCCAL;
unsigned char bADCCAL_bytes;

void CalibrateADC(void)
{
  mref = ((float)(pADCCAL->adc_ref25_85_temp-pADCCAL->adc_ref25_30_temp))/(85-30);
  nref = pADCCAL->adc_ref25_85_temp-mref*85;
}

void GetADC(void)
{
  Temp_C = (RawTemp - nref) / mref; // RawTemp значение температуры с АЦП, Temp_C температура в грудусах Цельсия
}

 

В проект нужно добавить HAL_TLV.c из техасовских библиотек если его нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

судя по даташиту 2553 в TLV нет таких калибровочных значений :(

Datasheet MSP430G2x53, MSP430G2x13 Mixed Signal Microcontroller (Rev. G) страница 15, Table 11. Labels Used by the ADC Calibration Tags, параметры CAL_ADC_15T85 и CAL_ADC_15T30. Конечно при условии, что вы сами еще не успели стереть область INFO_A в вашем кристалле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нашел библиотеку HAL_TLV.c только для F6xxx и F5xxx

как же прочитать калибровочные значения? :( как-то туманно в даташите и в user guide написано...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

прочитал без библиотек по адресу - в поле CAL_ADC_15T85 записан 0.

Как пишут на 43oh

http://forum.43oh.com/topic/2027-how-to-us...libration-data/

The only G series chip that I know has valid temperature calibration is the G2452 - they have tag 0x08.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...