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

OlegALL

Участник
  • Постов

    67
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о OlegALL

  • Звание
    Участник
    Участник
  1. Шумит АЦП

    Привет Процессор: MSP430F4152 АЦП: 10 разрядный Делаю измерение температур по двум каналам АЦП. АЦП работает в непрерывном режиме. Проблема: АЦП сильно шумит, т.е. значение регистра ADC10MEM "гуляет" примерно от 260 до 270 единиц. Т.е. "гуляют" 4 младших разряда. Это нормально или плохо? Соответсвенно измеренная температура гуляет на +- 1 градус Что делать, где ошибка? Схему не могу выложить, мне запрещено. Но схема измерения как тут: http://avr-start.ru/?p=590 Даташит: https://yadi.sk/i/nGysJKVFibvYc Код: #include "adc.h" float32_t dataArray[32] = {0}; uint16_t ADC10CTL1_mask; void initADC(void) { ADC10AE0 |= 0x03; // P7.4, P7.5 ADC option select //ADC10CTL0 = ADC10ON + ADC10SHT_0 + MSC + REF2_5V + REFON; // Turn on ADC10, set sampling time ADC10CTL0 = ADC10ON + MSC; // Turn on ADC10, set sampling time ADC10CTL1 |= CONSEQ1; ADC10CTL0 |= ENC; // Enable conversions ADC10CTL0 |= ADC10SC; // Start convn - software trigger } void stopADC(void) { ADC10CTL0 = 0; // Start convn - software trigger } float32_t getTemperatureFromChannel(uint8_t channelNum) { initADC(); P2DIR = 0x03; // "1" на выход для датчиков P2OUT = 0x03; __delay_cycles(1000); ADC10CTL1 &= 0xFFF; // очистим биты 12..15 ADC10CTL1 |= channelNum << 12; // установим биты 12..15 float32_t data = ADC10MEM*0.1318-10.6422; dataArray[channelNum] = data; P2OUT = 0; stopADC(); return data; } MSP430_________.pdf
  2. Не срабатывает прерывание RTC. Минуты/секунды идут (убедился в дебаггере). Сейчас как будто 27 июля, 23 часа, 59 мин, 55 сек. Через 5 секунд должно сработать прерывание, но не срабатывает. UPD: вопрос решён, можно удалить ветку #define SECONDS 55 #define MINUTES 59 #define HOUR 23 #define DAY 27 #define MONTH 7 void initRTC() { BTCTL = 0; IE2 |= BTIE; RTCSEC = SECONDS; RTCMIN = MINUTES; RTCHOUR = HOUR; RTCDAY = DAY; RTCMON = MONTH; RTCCTL |= (1<<4)|(1<<5)|(1<<3); RTCCTL |= RTCIE; RTCCTL &= ~RTCHOLD; // çàïóñê RTC } #pragma vector=BASICTIMER_VECTOR __interrupt void BASICTIMER_ISR (void) { int stop = 0; }
  3. Всё работает, неправильно сделал инициализацию. Спасибо ответившим
  4. Скорость 1200 не помогла. При создании тестового проекта, как советовали выше, вообще ничего не получается - не принимает и не передаёт. Вот код с сайта ti. У них же преддедлитель 3: /* --COPYRIGHT--,BSD_EX * Copyright © 2012, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ******************************************************************************* * * MSP430 CODE EXAMPLE DISCLAIMER * * MSP430 code examples are self-contained low-level programs that typically * demonstrate a single peripheral function or device feature in a highly * concise manner. For this the code may rely on the device's power-on default * register values and settings such as the clock configuration and care must * be taken when combining code from several examples to avoid potential side * effects. Also see www.ti.com/grace for a GUI- and www.ti.com/msp430ware * for an API functional library-approach to peripheral configuration. * * --/COPYRIGHT--*/ //****************************************************************************** // MSP430F41x2 Demo - USCI_A0, Ultra-Low Pwr UART 9600 Echo ISR, 32kHz ACLK // // Description: Echo a received character, RX ISR used. Normal mode is LPM3, // USCI_A0 RX interrupt triggers TX Echo. // ACLK = BRCLK = LFXT1 = 32768, MCLK = SMCLK = DCO~1048k // Baud rate divider with 32768hz XTAL @9600 = 32768Hz/9600 = 3.41 (0003h 03h) // //* An external watch crystal is required on XIN XOUT for ACLK *// // // // MSP430F41x2 // ----------------- // /|\| XIN|- // | | | 32kHz // --|RST XOUT|- // | | // | P6.5/UCA0RXD|------------> // | | 9600 - 8N1 // | P6.6/UCA0TXD|<------------ // // P. Thanigai // Texas Instruments Inc. // January 2009 // Built with CCE Version: 3.1 and IAR Embedded Workbench Version: 4.11 //****************************************************************************** #include <msp430.h> int main(void) { volatile unsigned int i; WDTCTL = WDTPW+WDTHOLD; // Stop WDT FLL_CTL0 |= XCAP11PF; // Configure load caps do { IFG1 &= ~OFIFG; // Clear OSCFault flag for (i = 0x47FF; i > 0; i--); // Time for flag to set } while ((IFG1 & OFIFG)); // OSCFault flag still set? P6SEL |= BIT5+BIT6; // P6.5,6 = USCI_A0 RXD/TXD UCA0CTL1 |= UCSSEL_1; // CLK = ACLK UCA0BR0 = 0x03; // 32k/9600 - 3.41 UCA0BR1 = 0x00; // UCA0MCTL = 0x06; // Modulation UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt _BIS_SR(LPM3_bits + GIE); // Enter LPM0, interrupts enabled } // Echo back RXed character, confirm TX buffer is ready first #pragma vector=USCIAB0RX_VECTOR __interrupt void USCIA0RX_ISR (void) { while(!(IFG2&UCA0TXIFG)); UCA0TXBUF = UCA0RXBUF; // TX -> RXed character }
  5. Такое может быть, что просто уарт испортился?
  6. Да 32768. Общается с МК программа верхнего уровня. Раньше работало, но немного подглючивало, в целом работало в общем. 2 байта не принимаются от терминала PCOMM.
  7. Спасибо. Передача-то работает нормально. По поводу кварца - у меня 32 кГц. Что, мало?
  8. Да, загрузил версию, которая работала. Сейчас не работает. 2 байта принимаются через раз
  9. Проблема в теме. Обсуждение здесь: http://caxapa.ru/609239.html Помогите
  10. Очень прошу модераторов удалить эту ветку, я выставил на показ схему, этого делать нельзя, я работаю на режимном предприятии, у меня будут теперь проблемы
  11. Спасибо! Между какими 2-мя точками на схеме мне померять сопротивление, которое не больше 10кОм? Он меня слушать не хочет, говорит прав
  12. Что-то схемотехник поделал с платой и ситуация стала лучше. Например: меряю адекватные 3 вольта на 0-м канале. На 1-м: 2В (должно быть 0), на 2-м и 3-м каналах - 0В. То есть влияние есть только на соседний канал в сторону увеличения. На других каналах всё ок. И посмотрите код - алгоритмически всё правильно?
×
×
  • Создать...