реклама на сайте
подробности

 
 
> Проблема с АЦП
tvilsa
сообщение Mar 12 2009, 11:02
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 27-01-09
Пользователь №: 43 990



Всем привет.
Вот такая проблема.
Последовательно опрашиваю АЦП канал 0 и канал 1.
А в результате только канал тот который первый в прогамме.
CODE
// Built with IAR Embedded Workbench [Kickstart] Version : 4.11
//******************************************************************************

#include <msp430x12x2.h>

volatile char cmd;
volatile int A0,A1;

read_adc(void)
{

ADC10CTL1=ADC10SSEL_0+INCH_0;
ADC10CTL0 = ADC10SHT_0 + ADC10ON ;
ADC10AE = ADC10AE0; // P2.0 êàê âõîä ÀÖÏ
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
while (ADC10CTL1 & BUSY); // Wait if ADC10 core is active
A0=ADC10MEM;

ADC10CTL1=ADC10SSEL_0+INCH_1;

ADC10CTL0 = ADC10SHT_0 + ADC10ON ;
ADC10AE = ADC10AE1; // P2.1 êàê âõîä ÀÖÏ
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
while (ADC10CTL1 & BUSY); // Wait if ADC10 core is active
A1=ADC10MEM;
}

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT


P1DIR |= BIT0; // Set P1.0 to output direction
P1OUT &=~ BIT0; // Óñòàíîâèòü ïåðâîíà÷àëüíî â 0
P2DIR |= BIT3; // Set P2.3 to output direction
P2OUT &=~ BIT3; // Óñòàíîâèòü ïåðâîíà÷àëüíî â 0

CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 0xFFFF;
TACTL = TASSEL_2 + MC_1; // SMCLK, upmode

P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD íàçíà÷åíèå íîæåê ïîðòà
ME2 |= UTXE0 + URXE0; // âêëþ÷èòü USART
UCTL0 |= CHAR; // 8-áèò â ñèìâîëå
UTCTL0 |= SSEL1; // UCLK = SMCLK âûáîð ÷àñòîòû òàêòèðîâàíèÿ îò DCO
UBR00 = 0x4E; // 750 kHz 9600
UBR10 = 0x00; //
UMCTL0 = 0x10; //
UCTL0 &= ~SWRST; // Initialize USART state machine
IE2 |= URXIE0; // Âêëþ÷èòü ïðåðûâàíèå îò USART

_BIS_SR(GIE);


for (;;)
{
read_adc();

if (cmd=='a') // АЦП0
{
while (!(IFG2 & UTXIFG0));
TXBUF0 = A0>>2;
cmd='0';
};

if (cmd=='b') // АЦП1
{
while (!(IFG2 & UTXIFG0));
TXBUF0 = A1>>2;
cmd='0';
};

}
}



// Timer A0 interrupt service routine
volatile int i;
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{

i=i+1;
if (i==10)
{
i=0;
P1OUT ^= BIT0; // Toggle P1.0
}
}

// USART0
#pragma vector=USART0RX_VECTOR
__interrupt void usart0_rx (void)
{
cmd=RXBUF0; }


Все спасибо.Уже разобрался.
После каждой строки A=ADC10MEM;
надо было сбрасывать ENC строкой ADC10CTL0 &= ~ENC;
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 01:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01408 секунд с 7
ELECTRONIX ©2004-2016