Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC2378 АЦП, ткните носом, что делаю не так
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Mik174
LPC2378, встроенный АЦП, ткните носом, что делаю не так

Хочу включить BURST режим, чтобы автоматически молотилось измерение по очереди несколько
аналоговых входов и получать из регистров AD0DR0 ... AD0DR3 последние измеренные напряжения
на входах АЦП по состоянию на момент чтения из регистра.

Но получаю данные только с канала AD0.0, по всем остальным - нули, независимо от приложенного к
входам напряжения...

Ниже фрагмент кода, относящийся к АЦП:

CODE

void InitADC( void )
{
PCONP |= (1 << 12);
PINSEL1 =0;
PINSEL1 |= 0x154000;

AD0CR = 0x3f |
( ( Fpclk / 1000000 - 1 ) << 8 ) | // CLKDIV = Fpclk / 1000000 - 1
( 1 << 16 ) | // BURST = 1
( 0 << 17 ) | // CLKS = 000
( 1 << 21 ) | // PDN = 1
( 0 << 22 ) | // TEST1:0 = 00
( 0 << 24 ) | // START = 000
( 0 << 27 ); // EDGE = 0
return;
}


int main(void)
{
IODIR0 =0x80000000 | (1<<29) | (1<<30) | (1<<17) | (1<<14) | (1<<31);
PINSEL1=0x14000;

InitUART ();
InitADC();

install_irq( UART0_INT, (void *)Uart0Interrupt, HIGHEST_PRIORITY );

init_timer( 0, TIME_INTERVAL_100us );

enable_timer(0);

AD0CR |= 0x01000000;

IOSET0 = (1<<17); // CS_RES_X7=1
IOSET0 = (1<<14); // CS_PLL_X10=1

while(1)
{
IntRegOut[0]= 0x3ff & (AD0DR0 >> 6);
IntRegOut[1]= 0x3ff & (AD0DR1 >> 6);

sprintf(qtext,"AD0.0=%d ", IntRegOut[0]);
UARTTextOut(qtext);

sprintf(qtext,"AD0.1=%d ", IntRegOut[1]);
UARTTextOut(qtext);

sprintf(qtext,"\n", IntRegOut[1]);
UARTTextOut(qtext);

delayMs(1,1000);
}
} // main

KRS
Цитата
Important: START bits must be 000 when BURST=1 or conversions will not start.
Mik174
"Important: START bits must be 000 when BURST=1 or conversions will not start."

Так у меня они и есть в состоянии 000.
Проблема не в том, что преобразования не начинаются, а в том, что они идут только для канала AD0.0,
при чтении из всех остальных регистров считываются нули.
KRS
Цитата(Mik174 @ Mar 16 2010, 19:12) *
Так у меня они и есть в состоянии 000.

AD0CR |= 0x01000000;

насколько я помню - надо первы раз записать
AD0CR без BURST
а потом сделать
AD0CR |= 1<<16; // установить BURST mode
вместо старта.
Mik174
Цитата(KRS @ Mar 16 2010, 22:00) *
AD0CR |= 0x01000000;

насколько я помню - надо первы раз записать
AD0CR без BURST
а потом сделать
AD0CR |= 1<<16; // установить BURST mode
вместо старта.


Увы, не помогло - все осталось также как и было...
qwerty
Что то не вижу иниц регистра прерываний для ADINTEN? Есть флаги DONE и Overrun по хорошему надо результат получать после их установки.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.