Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Atsamd11 проблема с компаратором
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Aal6
Добрый день!
Помогите победить компаратор в ATSAMd11d14am.
Не могу вывести на выходные пин сигнал выхода сравнения компаратора.
Основа проекта, пример работы с компаратором из AFS(Atmel Studio7).
Изменены режимы
ac_chan_conf.sample_mode = AC_CHAN_MODE_CONTINUOUS;
ac_chan_conf.output_mode = AC_CHAN_OUTPUT_ASYNCRONOUS;
Все транслируется на биты в установке компаратора(картинка вложена).

PORTIO->WRCONFIG.reg = PORT_WRCONFIG_PMUXEN | ((PORT_PMUX_PMUXE_B_Val)<< PORT_WRCONFIG_PMUX_Pos)|PORT_WRCONFIG_WRPMUX| PORT_WRCONFIG_WRPINCFG| (1<<PIN_PA10) ;//(1<<PIN_PA14);.
В установках пина Pin_PA10 PORT_PMUX_PMUXE_B_Val и PORT_PINCFG_PMUXEN выставляются(в дебагере видно), хотя ASF это программно не поддерживает.

На выводе постоянный 0. (осцилограф)

При программной трансляции статуса компаратора на произвольный выход - все нормально работает(осцилограф), выходной пин повторяет вход.
if(AC->STATUSA.bit.STATE0)
PORTIO->OUTCLR.reg = 1<<PIN_PA17;
else
PORTIO->OUTSET.reg = 1<<PIN_PA17;
Т.е. проблема в районе железной трансляции выхода компаратора на пин. Не могу понять в чем дело. Помогите, кто сталкивался, второй день пляшу с бубном. Видимо, бубен держу не в той руке.

С уважением, Алексей.
ataradov
Действительно, не работает. При переключении PMUX на CMPx выход просто висит в третьем состоянии.

Это похоже на баг в документации (таблица PMUX), я попробую выяснить. Но скорее всего придется подождать пару дней пока я смогу найти людей, которые могут проверить куда именно подключен выход.

Я ткнул пальцем в небо и по аналогии с D21 попробовал PMUX_G и выход заработал.

Так что это ошибка в документации. Я сообщу куда нужно.

Вот полный код
CODE
//-----------------------------------------------------------------------------
HAL_GPIO_PIN(AC,       A, 4);
HAL_GPIO_PIN(CMP,      A, 10);
HAL_GPIO_PIN(LED,      A, 16)

//-----------------------------------------------------------------------------
static void ac_init(void)
{
  HAL_GPIO_AC_in();
  HAL_GPIO_AC_pmuxen(HAL_GPIO_PMUX_B);

  HAL_GPIO_CMP_out();
  HAL_GPIO_CMP_clr();
  HAL_GPIO_CMP_pmuxen(HAL_GPIO_PMUX_G);

  PM->APBCMASK.reg |= PM_APBCMASK_AC;

  GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID(AC_GCLK_ID_ANA) |
      GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN(0);

  GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID(AC_GCLK_ID_DIG) |
      GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN(0);

  AC->COMPCTRL[0].reg = AC_COMPCTRL_ENABLE | AC_COMPCTRL_SPEED_HIGH |
      AC_COMPCTRL_INTSEL_RISING | AC_COMPCTRL_OUT_ASYNC |
      AC_COMPCTRL_MUXNEG_VSCALE | AC_COMPCTRL_MUXPOS_PIN0;

  AC->SCALER[0].reg = 32;

  AC->CTRLA.reg |= AC_CTRLA_ENABLE;
}

//-----------------------------------------------------------------------------
int main(void)
{
  SYSCTRL->OSC8M.bit.PRESC = 0;

  ac_init();

  HAL_GPIO_LED_out();
  HAL_GPIO_LED_clr();

  while (1)
  {
    HAL_GPIO_LED_write(AC->STATUSA.bit.STATE0);
  }

  return 0;
}
Aal6
Все оказалось просто.
В даташите в таблице PORT Function Multiplexing указано, что AC CMP[0]-CMP[1] относится к Peripheral function B, а по факту к Peripheral function G.
Раскопал в define на чип.
Относится к samd10-samd11 семейству. В обоих даташитах имеется определение CMP[0]-CMP[1] в группе B.
Блин...


Спасибо за ответ! Так все и оказалось.
Жаль ответ прочитал позже, чем нашел сам.
ataradov
Если будут подобные проблемы в будущем - обращайтесь без копания днями. Если что-то не работает, что очевидно должно, то обычно решение известно или можно быстро найти.
Aal6
Цитата(ataradov @ Apr 1 2018, 21:39) *
Если будут подобные проблемы в будущем - обращайтесь без копания днями. Если что-то не работает, что очевидно должно, то обычно решение известно или можно быстро найти.


Обычно сперва думаешь, что сам ошибся. Особенно, когда чип не знаком.

Вопросы которые мне бы немного помогли:
Работает ли PullUp/Down при определении периферийной функции на входах?
Достаточно ли стабильности внутреннего генератора для работы с UART? (Стоит ли ставить внешний кварц)

С уважением, Алексей.
ataradov
QUOTE (Aal6 @ Apr 1 2018, 13:14) *
Работает ли PullUp/Down при определении периферийной функции на входах?
Для разной периферии по-разному, но в общем случае нет. В GPIO pull-up/pull-down контролируется теми-же сигналами, что и установка 1 и 0. Так что pull-up/pull-down не будут работать для периферии, которая использует пины на выход, хотя бы часть времени (I2C, например). Но для EIC они будут работать как нужно.

QUOTE (Aal6 @ Apr 1 2018, 13:14) *
Достаточно ли стабильности внутреннего генератора для работы с UART? (Стоит ли ставить внешний кварц)
Более чем достаточно для большинства применений.
Aal6
Цитата(ataradov @ Apr 1 2018, 23:21) *
Для разной периферии по-разному, но в общем случае нет. В GPIO pull-up/pull-down контролируется теми-же сигналами, что и установка 1 и 0. Так что pull-up/pull-down не будут работать для периферии, которая использует пины на выход, хотя бы часть времени (I2C, например). Но для EIC они будут работать как нужно.

Более чем достаточно для большинства применений.


Интересует pullup для UART RX. В общем-то все равно проверю, ошибка на плате будет себе дороже. Хотя доп резистор ставить не хочу.

Для I2C там пулапы прописаны в стандарте функции. Странно, что в даташите в таблице мультиплексора функций указано в графе type только 4 пина с типом I2c. При том, что в чипе 3 SerCom модуля.
ataradov
QUOTE (Aal6 @ Apr 1 2018, 13:30) *
Интересует pullup для UART RX. В общем-то все равно проверю, ошибка на плате будет себе дороже. Хотя доп резистор ставить не хочу.
Я точно не знаю - не проверял. Но внешний резистор я бы поставил.

QUOTE (Aal6 @ Apr 1 2018, 13:30) *
Для I2C там пулапы прописаны в стандарте функции.
В смысле? Внутренних pull-up там нет совсем.

QUOTE (Aal6 @ Apr 1 2018, 13:30) *
Странно, что в даташите в таблице мультиплексора функций указано в графе type только 4 пина с типом I2c. При том, что в чипе 3 SerCom модуля.
Пины помеченные как I2C обладают повышенной нагрузочной способностью, но в остальном любые пины, на которые можно назначить PAD[0] и PAD[1] могут работать как I2C. По крайней мере в не-fast режиме.
Aal6
Добрый день!

Нет ли у кого бутлоадера под SAMD10/11, которым не жалко поделится?

Из примеров ASF уж очень большой компилится(4.5k без шифрования под i2c), задача влезть в 4к из 16 на борту c шифрованием под Uart или i2c.

И хорошо бы файл для линкера, который переносит компиляцию основной задачи на 4к выше.

С уважением, Алексей.

Aal6
Добрый день!

Подскажите, где взять файлы к Secure UART Bootloader for SAM D10?

http://www.microchip.com/wwwappnotes/appno...ppnote=en603279

Не могу понять. Буду благодарен за ссылку или сами файлы.


С уважением, Алексей.
Aal6
Получил с Микрочипа.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.