jjjjjjein 0 8 февраля, 2012 Опубликовано 8 февраля, 2012 · Жалоба Нужноотправлять по 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 ячейки памяти } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 8 февраля, 2012 Опубликовано 8 февраля, 2012 · Жалоба Во-первых, у вас АЦП не работает. Для разрешения запуска преобразований нужно установить бит 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 я пристально не разбирал и не рассматривал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 8 февраля, 2012 Опубликовано 8 февраля, 2012 · Жалоба Ну и в-пятых, в соответствии с п.3.4 Правилами форума столь объемные исходники следует прикреплять к сообщению в виде вложения, а не вставлять такую "портянку" в само сообщение. Ну или на худой конец добавить "box" к тегу "code", чтобы свернуть в маленькое окошечко с прокруткой. Добавлю от себя, в порядке старческого брюзжания. Таблицу температур можно смело подвергнуть децимации. А то и вообще пять-десять точек оставить, а остальные вычислять интерполяцией. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
янетот 0 24 июня, 2012 Опубликовано 24 июня, 2012 · Жалоба ADC12MCTL15 = INCH_11; // Для ячейки памяти №15 выбираем внутренний источник опрного напряжения, внутренний датчик температуры Ээээ, а разве INCH_11 это не напряжение питания /2 , температура - это же 10 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vasta 0 22 августа, 2012 Опубликовано 22 августа, 2012 · Жалоба Кстате, приготовьтесь к тому, что внутренний термометр - полное дерьмо. +/- 5 градусов покажет запросто Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megabuks 0 5 сентября, 2012 Опубликовано 5 сентября, 2012 · Жалоба Кстате, приготовьтесь к тому, что внутренний термометр - полное дерьмо. +/- 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)." А как его откалибровать ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hutch84 0 6 сентября, 2012 Опубликовано 6 сентября, 2012 · Жалоба Калибровочные коэффициенты берутся из 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 из техасовских библиотек если его нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bloom 0 14 сентября, 2012 Опубликовано 14 сентября, 2012 · Жалоба судя по даташиту 2553 в TLV нет таких калибровочных значений :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 14 сентября, 2012 Опубликовано 14 сентября, 2012 · Жалоба судя по даташиту 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 в вашем кристалле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bloom 0 14 сентября, 2012 Опубликовано 14 сентября, 2012 · Жалоба да, проглядел :-[ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bloom 0 30 декабря, 2012 Опубликовано 30 декабря, 2012 · Жалоба нашел библиотеку HAL_TLV.c только для F6xxx и F5xxx как же прочитать калибровочные значения? :( как-то туманно в даташите и в user guide написано... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bloom 0 31 декабря, 2012 Опубликовано 31 декабря, 2012 · Жалоба прочитал без библиотек по адресу - в поле 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться