Дата публикации: 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





Adafruit


           Контроллеры этих фирм содержат загрузчики, совместимые с Ардуино.

Соответсвие выводов микроконтроллера и системы Ардуино.

Соответствие выводов mattairtech SAMD21E


Схема подключения микроконтроллера 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);
 
}
Название файла Описание Скачать


Назад в раздел