jjjjjjein 0 10 февраля, 2012 Опубликовано 10 февраля, 2012 · Жалоба АЦП работает в режиме "повторяющаяся последовательность каналов"(ниже написан код). Хочу перейти на режим "повторяющийся одноканальный". Какие регистры изменить и что добавить для работы АЦП в "повторяющемся одноканальном" режиме, чтобы брать из ячейки памяти №15 данные о температуре с внутреннего температурного датчика? void InitializationADC (void) // Функция инициализации модуля АЦП микроконтроллера { // Управляющий регистр 0 АЦП12 - ADC12CTL0 ADC12CTL0 = ADC12ON | // Включаем модуль АЦП MSC | // Разрешаем режим множественных выборок и преобразований (только для последовательных и повторных режимов преобразования) SHT1_4; // Устанавливаем время выборки и хранения для ячеек памяти результатов преобразования с 8 по 15 равным 32 циклам // ENC | // Разрешаем преобразование // ADC12SC; // Запускаем преобразование // Управляющий регистр 1 АЦП12 - ADC12CTL1 ADC12CTL1 = SHP | // Источник сигнала SAMPCON -> таймер выборки и хранения ADC12SSEL0 | ADC12SSEL1 | // Источник тактирования АЦП -> тактовая частота SMCLK CONSEQ_3 | // Режим работы АЦП -> повторяющаяся последовательность каналов // CONSEQ_2 | // Режим работы АЦП -> повторяющийся одноканальный CSTARTADD_15 | // Стартовый адрес начала преобразования АЦП -> ADC12MEM15 ADC12DIV_3; // Тактовый делитель частоты тактирования = 4 // Управляющий регистр памяти преобразований АЦП12 ADC12MCTL15 = INCH_10; // Для ячейки памяти №15 включаем внутренний датчик температуры // Управляющий регистр разрешения прерываний АЦП - ADC12IE ADC12IE = ADC12IV_ADC12IFG15; // Разрешаем прерывание от АЦП при заполнении 15 ячейки памяти } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
usercod 0 10 февраля, 2012 Опубликовано 10 февраля, 2012 · Жалоба Хочу перейти на режим "повторяющийся одноканальный". Какие регистры изменить В регистре ADC12CTL1 биты ADC12CONSEQx. Вообще, посмотрите на пример для MSP: //****************************************************************************** // MSP430F552x Demo - ADC12, Sample A10 Temp and Convert to oC and oF // // Description: A single sample is made on A10 with reference to internal // 1.5V Vref. Software sets ADC12SC to start sample and conversion - ADC12SC // automatically cleared at EOC. ADC12 internal oscillator times sample // and conversion. In Mainloop MSP430 waits in LPM4 to save power until // ADC10 conversion complete, ADC12_ISR will force exit from any LPMx in // Mainloop on reti. // ACLK = n/a, MCLK = SMCLK = default DCO ~ 1.045MHz, ADC12CLK = ADC12OSC // // Uncalibrated temperature measured from device to devive will vary do to // slope and offset variance from device to device - please see datasheet. // // NOTE:REFMSTR bit in REFCTL0 regsiter is reset to allow the ADC12_A reference // control regsiters handle the reference setting. Upon resetting the REFMSTR // bit, all the settings in REFCTL are 'dont care' and the legacy ADC12 // control bits (ADC12REFON, ADC12REF2_5, ADC12TCOFF and ADC12REFOUT) control // the reference system. // // MSP430F552x // ----------------- // /|\| XIN|- // | | | // --|RST XOUT|- // | | // |A10 | // // Bhargavi Nisarga / W. Goh // Texas Instruments Inc. // November 2010 // Built with CCSv4 and IAR Embedded Workbench Version: 4.21 //****************************************************************************** #include <msp430f5529.h> long temp; volatile long IntDegF; volatile long IntDegC; void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT REFCTL0 &= ~REFMSTR; // Reset REFMSTR to hand over control to // ADC12_A ref control registers ADC12CTL0 = ADC12SHT0_8 + ADC12REFON + ADC12ON; // Internal ref = 1.5V ADC12CTL1 = ADC12SHP; // enable sample timer ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_10; // ADC i/p ch A10 = temp sense i/p ADC12IE = 0x001; // ADC_IFG upon conv result-ADCMEMO __delay_cycles(75); // 75us delay to allow Ref to settle ADC12CTL0 |= ADC12ENC; while(1) { ADC12CTL0 |= ADC12SC; // Sampling and conversion start __bis_SR_register(LPM4_bits + GIE); // LPM0 with interrupts enabled __no_operation(); // Temperature in Celsius // ((A10/4096*1500mV) - 680mV)*(1/2.25mV) = (A10/4096*667) - 302 // = (A10 - 1855) * (667 / 4096) IntDegC = ((temp - 1855) * 667) / 4096; // Temperature in Fahrenheit // ((A10/4096*1500mV) - 640mV)*(1/1.25mV) = (A10/4096*1200) - 512 // = (A10 - 1748) * (1200 / 4096) IntDegF = ((temp - 1748) * 1200) / 4096; __no_operation(); // SET BREAKPOINT HERE } } #pragma vector=ADC12_VECTOR __interrupt void ADC12ISR (void) { switch(__even_in_range(ADC12IV,34)) { case 0: break; // Vector 0: No interrupt case 2: break; // Vector 2: ADC overflow case 4: break; // Vector 4: ADC timing overflow case 6: // Vector 6: ADC12IFG0 temp = ADC12MEM0; // Move results, IFG is cleared __bic_SR_register_on_exit(LPM4_bits); // Exit active CPU break; case 8: break; // Vector 8: ADC12IFG1 case 10: break; // Vector 10: ADC12IFG2 case 12: break; // Vector 12: ADC12IFG3 case 14: break; // Vector 14: ADC12IFG4 case 16: break; // Vector 16: ADC12IFG5 case 18: break; // Vector 18: ADC12IFG6 case 20: break; // Vector 20: ADC12IFG7 case 22: break; // Vector 22: ADC12IFG8 case 24: break; // Vector 24: ADC12IFG9 case 26: break; // Vector 26: ADC12IFG10 case 28: break; // Vector 28: ADC12IFG11 case 30: break; // Vector 30: ADC12IFG12 case 32: break; // Vector 32: ADC12IFG13 case 34: break; // Vector 34: ADC12IFG14 default: break; } } Если хотите могу дать примеры от TI где рассматриваются различные конфигурации АЦП. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jjjjjjein 0 13 февраля, 2012 Опубликовано 13 февраля, 2012 · Жалоба Эти то биты, это понятно. Они сам режим изменяют. А кроме них, что изменить. Я переделала код, но АЦП не работает. ADC12CTL1 = SHP | // Источник сигнала SAMPCON -> таймер выборки и хранения ADC12SSEL0 | ADC12SSEL1 | // Источник тактирования АЦП -> тактовая частота SMCLK CONSEQ_2 | // Режим работы АЦП -> повторяющийся одноканальный CSTARTADD_15 | // Стартовый адрес начала преобразования АЦП -> ADC12MEM15 ADC12DIV_3; Спасибо за пример. Если ещё примеры скинете, то буду рада) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
usercod 0 14 февраля, 2012 Опубликовано 14 февраля, 2012 · Жалоба Спасибо за пример. Если ещё примеры скинете, то буду рада) Пожалуйста. Вот примеры:C.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 14 февраля, 2012 Опубликовано 14 февраля, 2012 · Жалоба Пожалуйста. Вот примеры:C.rar Зачем здесь выкладывать чужие (не свои) исходники, если все они есть на сайте производителя фирмы TI? Не проще ли дать ссылку? http://www.ti.com/lsds/ti/microcontroller/...re_landing.page Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
usercod 0 15 февраля, 2012 Опубликовано 15 февраля, 2012 (изменено) · Жалоба Зачем здесь выкладывать чужие (не свои) исходники, если все они есть на сайте производителя фирмы TI? Потому что ссылку на эти же исходники уже выкладывали ранее в другой теме (UART) этого автора, но почему то такой способ автора не удовлетворил. Изменено 15 февраля, 2012 пользователем usercod Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться