Дата публикации: 11.06.2017
Размер оперативной памяти или частота микроконтроллера не позволяет выполнить быстрые процессы.
Применять более мощные платы типа Arduino DUE экономически не выгодно , да и стрелять по воробьям из пушек не всегда целесообразно.
Есть еще Raspberry или Orange PI , но это еще дороже и круче.
Нам необходимо подобрать микроконтроллер, который отвечал нескольким требованиям:
а) был совместим со средой Arduino
б) память , основная и оперативная больше чем у существующих контроллерах.
в) тактовая частота выше 16 мгц.
Микроконтроллеры STM32 хороши, но вариантов мало, да и с библиотеками не все так однозначно.
Не будем углубляться в проблему, но они не очень подходят.
Рассмотрим линейку AT SAMD21. Есть три варианта микроконтроллера:
AT SAMD21E18A - 32 вывода, 256KB Flash и 32KB SRAM, частота 48 мгц.
AT SAMD21G18A - 48 вывода, 256KB Flash и 32KB SRAM, частота 48 мгц.
AT SAMD21J18A - 64 вывода, 256KB Flash и 32KB SRAM, частота 48 мгц.
Практически это один микроконтроллер с разным количеством выводов.
Переход от одного к другому не потребует замены библиотек (этим страдает STM32, почему мы и не стали рассматривать этот вариант).
А что с совместимостью Ардуино?
Есть как минимум две компании которые разработали модули и библиотеки к ним, совместимые с Ардуино.
"Mattairtech" ( https://www.mattairtech.com) https://www.mattairtech.com/docs/MT-D21E/MT-D21E_User_Guide.pdf
Контроллеры этих фирм содержат загрузчики, совместимые с Ардуино.
Соответсвие выводов микроконтроллера и системы Ардуино.
Схема подключения микроконтроллера AT SAMD21E18A
//Программа тестирования Serial микроконтроллера ATSAMD21E18A, ATSAMD21G18A #include// required before wiring_private.h #include "wiring_private.h" // pinPeripheral() function #define Serial SERIAL_PORT_USBVIRTUAL Uart Serial2 (&sercom2, 3, 4, SERCOM_RX_PAD_1, UART_TX_PAD_0); void SERCOM2_Handler() { Serial2.IrqHandler(); } void setup() { Serial.begin(115200); Serial2.begin(115200); // Assign pins 3 & 4 SERCOM functionality pinPeripheral(3, PIO_SERCOM_ALT); pinPeripheral(4, PIO_SERCOM_ALT); } uint8_t i=0; void loop() { Serial.print(i); Serial2.write(i++); if (Serial2.available()) { Serial.print(" -> 0x"); Serial.print(Serial2.read(), HEX); } Serial.println(); delay(10); }
Название файла | Описание | Скачать |
---|
Назад в раздел