Часть сообщений перенесена из темы Переходим на xmega. Вопросы и решения.
Дешевле взять STM32. Правда под него на прогу баскоме не напишешь, но зато 32 битный ARM на основе ядра Cortex-M3...
На днях получил платку из Китая с МК STM32F103C8T6 (32 битный ARM на основе ядра Cortex-M3).

Цена около 2 доллара, т. е. примерно как у Arduino с ATmega328. А вот возможности гораздо шире. Некоторые их них.
Частота ядра 72 МГц. Эффективность 1.25 DMIPS/MHz.
64 КБ флеш памяти и 20 КБ ОЗУ
Тактирование от внутреннего RC генератора (8 МГц) или внешнего кварца 4 - 16 МГц. С возможностью выбора частоты ядра и периферийных блоков, путем управления множителями и делителями частоты (сриншот).
Встроенные часы с возможностью. подключения внешнего кварца на 32768 Гц. У часов есть вывод питания от батарейки.
Два 12-ти битных АПЦ, по 16 каналов в каждом. Плюс датчик температуры (подключен к АЦП).
Два I2C и SPI, модуля.
Две сторожевых собаки.
Три модуля USART.
Три 16-ти битных таймера.
Системный 24 битный таймер.
Один USB и CAN модуль.
Семи-канальный контроллер DMA (прямой доступ к памяти без участия процессора), который может работать с АЦП, SPI, I2C и USART.
Теперь что касается программирования этих МК. Сразу скажу, с бейсиками напряг. Есть mikroBasic, но он "жадный"...
Но как оказалось, эти МК несложно программировать даже на Си. В отличие от AVR где в Си приходилось непосредственно работать с регистрами и их битами (а их имена не очень запоминающиеся), для ARM разработчики предусмотрели библиотеку функций, которую использовать можно почти на интуитивном уровне. Например вот настройка порта на выход.
GPIO_InitTypeDef gp; // Создание экземпляра структуры. gp.Pin = GPIO_PIN_13; // Настраивать будем вывод с номером 13 (на плате к нему подключен светодиод) gp.Mode = GPIO_MODE_OUTPUT_PP; // Это выход и на нем может быть как положительный, так и отрицательный потенциал. gp.Pull = GPIO_NOPULL; // Подтягивающие резисторы не нужны. gp.Speed = GPIO_SPEED_HIGH; // Скорость порта. HAL_GPIO_Init(GPIOC, &gp); // Инициализация порта C. HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // Установка лог 1 на выводе GPIOC.13.
Когда "мигать светодиодом" надоело, сделал USB HID устройство. Получилось относительно просто. Большую часть кода сгенерировал конструктор (скриншот выше). Осталось написать код HID_Report и приема данных по USB. Все это сделал с учетом того что начал знакомство с ARM пару дней назад и даже даташит на МК еще не прочитал...
Мне же осталось добавить пару строк (настройка порта на выход, HID_Report и анализ данных, принятых по USB и изменение лог. уровня на выходе к которому подключен светодиод)...



