Программирование Arduino даёт не только огромный простор для фантазии и возможностей, но, как и любой фреймворк, одновременно навязывает свой стиль и ограничивает возможности.
Поэтому, если чувствуется, что Arduino становится тесноват — можно не только перейти на 32-битные контроллеры (например, STM32), но и попробовать более низкоуровневое программирование контроллеров.
Уходя ближе «к железу» — программировать придётся на более близком к железу уровне — и если это не ассемблер, то уж язык программирования Си — точно.
Пример подобного программирования уже приводился в статье Arduino/CraftDuino и WinAVR — программируем на чистом С.
У такого стандартного программирования микроконтроллеров есть существенное преимущество перед использованием Arduino-вских скетчей.
Однако, за низкоуровневый полный контроль и возможность использовать все ресурсы микроконтроллера, приходится расплачиваться долгим и внимательным изучением документации (datasheet-а) на микроконтроллер.
Т.е., если у вас ещё не было опыта работы с конкретным микроконтроллером — то вместо быстренького набрасывания скетча для решения своей задачи — вам придётся потратить дополнительное время на изучение мат. части.
Разумеется, не всегда это может быть оправдано и если задачу нужно и можно быстро решить при помощи Arduino — то почему бы и нет?
Однако, если решение задачи на Arduino невозможно, то придётся потратить время на получение ценных опыта и знаний, которые помогут открыть все возможности, которые под силу микроконтроллеру.
Для примера, возьмём меленький, простой и дешёвый контроллер ATtiny13.
Сегодня я хотел бы написать о своей проге на Питоне, как ни странно, я не люблю Ардуино, не знаю почему, но меня, как ценителя GCC — псевдо С бесит. Я написал свою IDE для удобной работы с AVR. Дело в том, что я не оч люблю Виндовс, а использую GNU/Linux Ubuntu и прочие дистрибутивы и мне после перехода с Windows стало трудно программировать AVR, не хотелось использовать готовые IDE под всеобщее использование типа CodeBlock или eclipse, так как мне всего то нужно собрать проект и прошить.
Я решил сначала писать на С++, но оказался слишком жирным для моих целей. Потом я решил взять Питон, потому что давно хотел поднять свой скилл в нем. Использовал я библиотеку pyQt для интерфейса программы, написал парсер makefile, парсер для поиска файлов проекта (*.c/*.h) и библиотеку для работы с avr-gcc.
Перевод очень хорошей статьи от Dean Camera на русский язык. В ней содержатся пояснения о самой EEPROM, работа с встроенной библиотекой eeprom.h, приведены примеры для записи\чтения byte, word и block, работа с EEMEM. В статье рассматривается компилятор AVR-GCC. Это больше адаптация, нежели перевод. Часть текста я выкинул, посчитав лишним, где-то добавил от себя. Статья рассчитана на тех, кто не работал с EEPROM и хочет на простых примерах научиться с ним работать.
Мне всегда нравилась идея объектно-ориентированного программирования. Это очень удобно и легко, особенно, когда программа раздувается до больших размеров, или есть несколько очень похожих элементов, но с разными настройками. И меня всегда интересовали нестандартные, красивые решения и новинки языка — шаблоны, лямбда-функции, тернарные операторы… К сожалению, я все никак не мог к ним подобраться — то времени не было, то мозг был не готов. В общих чертах знал, что это, но сам никогда не пробовал. Но вдруг в одной из программ для AVR я увидел интересное использование шаблона, которое очень сильно облегчало работу. Мне стало интересно — и время нашлось, и желание… И вот родилась идея этой статьи. Результат — родительский класс для легкой работы с устройствами на базе SPI (сдвиговые регистры, трансиверы, Ethernet etc), в Hardware и Software реализации. Интересно — просьба под кат.
tl;dr — в конце все ссылки из статьи, в том числе готовый код и примеры.
WARNING 1: под катом много букв и о ужас ни одной картинки, а также огромная куча низкокачественноголапшеобразного замечательного кода. WARNING 2: автор не крут в шаблонах, поэтому извиняется, если что-то реализовано ужасно. WARNING 3: пока что — только Master, Slave-версия будет через год некоторое время. WARNING 4: автор обожает варнинги и тег s неправда!!
Ethernet модуль — далеко не последняя по важности деталь в проекте WeatherStation (кто не в курсе — погодная станция, отображающая дату, время, погоду\влажность за окном и прогноз погоды на утро, день, вечер и ночь). В этой статье я опишу, как и с каких ресурсов я беру время и погоду, в каком формате читаю, как обрабатываю и как передаю основному модулю.