Jump to content

    
Sign in to follow this  
jjjjjjein

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

Recommended Posts

Нужноотправлять по 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 ячейки памяти 

     }

Share this post


Link to post
Share on other sites

Во-первых, у вас АЦП не работает. Для разрешения запуска преобразований нужно установить бит 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 я пристально не разбирал и не рассматривал.

Share this post


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

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

 

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

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

Share this post


Link to post
Share on other sites

 

 

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

 

 

 

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

Share this post


Link to post
Share on other sites
Кстате, приготовьтесь к тому, что внутренний термометр - полное дерьмо. +/- 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)."

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

Share this post


Link to post
Share on other sites

Калибровочные коэффициенты берутся из 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 из техасовских библиотек если его нет.

Share this post


Link to post
Share on other sites
судя по даташиту 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 в вашем кристалле.

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

прочитал без библиотек по адресу - в поле 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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this