Перейти к содержанию
    

Atsamd11 проблема с компаратором

Добрый день!

Помогите победить компаратор в 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;

Т.е. проблема в районе железной трансляции выхода компаратора на пин. Не могу понять в чем дело. Помогите, кто сталкивался, второй день пляшу с бубном. Видимо, бубен держу не в той руке.

image.jpg

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

 

Вот полный код

//-----------------------------------------------------------------------------
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;
}

Изменено пользователем ataradov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все оказалось просто.

В даташите в таблице PORT Function Multiplexing указано, что AC CMP[0]-CMP[1] относится к Peripheral function B, а по факту к Peripheral function G.

Раскопал в define на чип.

Относится к samd10-samd11 семейству. В обоих даташитах имеется определение CMP[0]-CMP[1] в группе B.

Блин...

 

 

Спасибо за ответ! Так все и оказалось.

Жаль ответ прочитал позже, чем нашел сам.

Изменено пользователем Aal6

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если будут подобные проблемы в будущем - обращайтесь без копания днями. Если что-то не работает, что очевидно должно, то обычно решение известно или можно быстро найти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если будут подобные проблемы в будущем - обращайтесь без копания днями. Если что-то не работает, что очевидно должно, то обычно решение известно или можно быстро найти.

 

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

 

Вопросы которые мне бы немного помогли:

Работает ли PullUp/Down при определении периферийной функции на входах?

Достаточно ли стабильности внутреннего генератора для работы с UART? (Стоит ли ставить внешний кварц)

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Достаточно ли стабильности внутреннего генератора для работы с UART? (Стоит ли ставить внешний кварц)
Более чем достаточно для большинства применений.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для разной периферии по-разному, но в общем случае нет. В GPIO pull-up/pull-down контролируется теми-же сигналами, что и установка 1 и 0. Так что pull-up/pull-down не будут работать для периферии, которая использует пины на выход, хотя бы часть времени (I2C, например). Но для EIC они будут работать как нужно.

 

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

 

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

 

Для I2C там пулапы прописаны в стандарте функции. Странно, что в даташите в таблице мультиплексора функций указано в графе type только 4 пина с типом I2c. При том, что в чипе 3 SerCom модуля.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Для I2C там пулапы прописаны в стандарте функции.
В смысле? Внутренних pull-up там нет совсем.

 

Странно, что в даташите в таблице мультиплексора функций указано в графе type только 4 пина с типом I2c. При том, что в чипе 3 SerCom модуля.
Пины помеченные как I2C обладают повышенной нагрузочной способностью, но в остальном любые пины, на которые можно назначить PAD[0] и PAD[1] могут работать как I2C. По крайней мере в не-fast режиме.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день!

 

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

 

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

 

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

 

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день!

 

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

 

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

 

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

 

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...