Цитата(VVlad @ Mar 16 2010, 10:11)

Преобразование типов (INT08U)(__ADCResult__ )) выделяет один байт из двухбайтного слова,
но в обработчике прерываний от Timer A происходит 8 сдвигов вправо (UARTBuff=UARTBuff >> 1),
предлагаю организовать передачу слова целиком, без дробления на байты. Например - превратить функцию SendUARTByte(INT08U Data) в дважды вызываемую процедуру SendUARTByte(void), а пересылаемое слово загружать в глобальную переменную UARTBuff = _ADCResult_ перед двухкратным вызовом этой процедуры. Что-то вроде ...
Обязательно попробую, как только переделаю плату в ближайшие пару дней, хотя и сомневаюсь что в этом дело.
Цитата(VVlad @ Mar 16 2010, 10:11)

Кстати, этот фрагмент может стать ещё короче, если его поместить в обработчик прерываний от SD16
Код
#pragma vector=SD16_VECTOR
__interrupt void SD16ISR(void)
{
if (SD16CCTL0 & SD16IFG)
{
UARTBuff = SD16MEM0;
SendUARTByte(void);
SendUARTByte(void);
__bic_SR_register_on_exit(CPUOFF);
}
}
Единственное замечание - следует внимательно проследить, чтобы были разрешены оба типа прерываний (и TA, и SD16). Об их взаимном приоритете не беспокойтесь - он обеспечит правильность обработки.
Ну и в обработчике прерываний SD16ISR думаю надо добавить установку бита GIE, т.е.
Код
#pragma vector=SD16_VECTOR
__interrupt void SD16ISR(void)
{
//в этом месте, если я не ошибаюсь, все прерывания запрещены,
//т.е. бит GIE = 0
if (SD16CCTL0 & SD16IFG)
{
UARTBuff = SD16MEM0;
__enable_interrupt();
...
}
}
Вчера попробовал считывать данные с 5 канала (AVCC / 11) со следующими настройками:
Код
SD16CTL = SD16REFON +SD16SSEL_1; // 1.2V ref, SMCLK
SD16INCTL0 = SD16INCH_5;
SD16CCTL0 = SD16SNGL + SD16IE; // Single conv, interrupt
Все работает превосходно. Получаемый код почти не отличается от расчетных значений
(разница 50-60 единиц думаю вполне приемлема). Напряжение питания от 2.7 до 3.3 В
(на других значения не пробовал).
С настройками:
Код
SD16CTL = SD16SSEL_1 + SD16REFON + SD16DIV_3;
SD16INCTL0 = SD16INCH_5;
SD16CCTL0 = SD16SNGL + SD16UNI + SD16IE;
Все не так гладко. Адекватное значение получаю только при напряжении питания 3 и выше.
В новой схеме (благо это только для тестирования, да и ЛУТ наш лучший друг) выкину все лишнее,
т.е. будет только МК, преобразователь UART/USB, кварц. И на разъемы выведу все каналы АЦП,
которые доступны. Посмотрим, что из этого получиться.