ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
104028 Топик полностью
Алехин Александр (31.10.2007 13:25, просмотров: 122) ответил rezident на ИМХО
Вот текст процедуры измерения.. Насчет битов, которые можно изменять только при ENC=0 - не нашел нигде (SLAU144B - может устарел уже?). Про ENC есть только фраза, что если сбросить его во время измерения - результат будет непредсказуем. Вот исходник процедуры измерения. Уже подправлен под "двойной" сброс регистра. MCLK у меня 12 МГц, так какд делитель 8 и время выборки 8 циклов - то времена (те самые 1.4 мксек) должны выдерживаться (я то-же сразу обратил на них внимание, когда не получилось как надо).
/*--------------------------------------------------------------------------------------------*/
/* Процедура измерения напряжения питания AVDD.                                               */
/* Принимает:   ничего не принимает.                                                          */
/* Возвращает:  измеренное значение напряжения питания в единицах АЦП.                        */
/*--------------------------------------------------------------------------------------------*/
WORD Measure_Power_Level(void)
{
  // Включаем внутреннюю опору 2.5В, даем время на ее установление.
  ADC10CTL0 = REF2_5V + REFON;
  for(register BYTE i = 0; i < 0xff; i++);
  // Включаем АЦП:
  // опора - внутренняя, относительно "земли", время выборки - 8 циклов,
  // выход опорника выключен, однократная выборка,
  // АЦП включено, прерывания запрещены,
  ADC10CTL0 |= SREF0 + ADC10SHT0 + ADC10ON;
  // Измеряем половину питания, источник запуска - ADC10SC,
  // двоичное представление результата, синхронизация - MCLK / 8,
  // режим однократного измерения по одному каналу.
  ADC10CTL1 = 0xb0e0 + ADC10SSEL1;
  ADC10DTC0 = ADC10DTC1 = 0;
  // Запускаем измерение.
  ADC10CTL0 |= (ENC + ADC10SC);
  while((ADC10CTL0 & ADC10IFG) == 0);
  // Выключаем опору и АЦП.
  ADC10CTL0 = 0;  // Сбросим запрос прерывания.
  ADC10CTL0 = 0;  // Выключим все.
  // Возвращаем измеренное значение.
  return ADC10MEM;
}
Кстати - уведомления об ответах так и не пришли на почту.....