Класс-родитель для устройств на базе SPI, или веселый и удобный C++ для AVR

Мне всегда нравилась идея объектно-ориентированного программирования. Это очень удобно и легко, особенно, когда программа раздувается до больших размеров, или есть несколько очень похожих элементов, но с разными настройками. И меня всегда интересовали нестандартные, красивые решения и новинки языка — шаблоны, лямбда-функции, тернарные операторы… К сожалению, я все никак не мог к ним подобраться — то времени не было, то мозг был не готов. В общих чертах знал, что это, но сам никогда не пробовал. Но вдруг в одной из программ для AVR я увидел интересное использование шаблона, которое очень сильно облегчало работу. Мне стало интересно — и время нашлось, и желание… И вот родилась идея этой статьи. Результат — родительский класс для легкой работы с устройствами на базе SPI (сдвиговые регистры, трансиверы, Ethernet etc), в Hardware и Software реализации. Интересно — просьба под кат.

tl;dr — в конце все ссылки из статьи, в том числе готовый код и примеры.

WARNING 1: под катом много букв и о ужас ни одной картинки, а также огромная куча низкокачественного лапшеобразного замечательного кода.
WARNING 2: автор не крут в шаблонах, поэтому извиняется, если что-то реализовано ужасно.
WARNING 3: пока что — только Master, Slave-версия будет через год некоторое время.
WARNING 4: автор обожает варнинги и тег s неправда!!


( Читать дальше )

Работа с EEPROM в AVR-GCC

Перевод очень хорошей статьи от Dean Camera на русский язык. В ней содержатся пояснения о самой EEPROM, работа с встроенной библиотекой eeprom.h, приведены примеры для записи\чтения byte, word и block, работа с EEMEM. В статье рассматривается компилятор AVR-GCC. Это больше адаптация, нежели перевод. Часть текста я выкинул, посчитав лишним, где-то добавил от себя. Статья рассчитана на тех, кто не работал с EEPROM и хочет на простых примерах научиться с ним работать.



( Читать дальше )

WeatherStation. Часть 2: Ethernet модуль

Часть 0: Описание и концепция
Часть 1: Основной модуль

Ethernet модуль — далеко не последняя по важности деталь в проекте WeatherStation (кто не в курсе — погодная станция, отображающая дату, время, погоду\влажность за окном и прогноз погоды на утро, день, вечер и ночь). В этой статье я опишу, как и с каких ресурсов я беру время и погоду, в каком формате читаю, как обрабатываю и как передаю основному модулю.



( Читать дальше )

WeatherStation. Часть 1: Основной модуль

Часть 0: Описание и концепция
Часть 2: Ethernet модуль

В прошлой статье я рассказал основную идею проекта WeatherStation. Вкратце — это погодная станция, показывающая время, дату, температуру и влажность за окном, прогноз погоды на утро, день, вечер и ночь (температура и состояние погоды — ясно, облачно, дождь, снег), и обновляющая все это через Интернет. В этой статье я подробнее остановлюсь на основном модуле проекта — будет описание схемотехнических решений и алгоритмов, схемы печатных плат, фотографии и видео. Вообще, надо сказать, что это один из первых моих более-менее объемных проектов. Идеи появлялись уже в процессе работы, поэтому некоторые вещи приходилось реализовывать «на лету», имея уже готовые платы.

Основной модуль
Основная задача этого модуля — сбор информации с датчиков \ модуля Ethernet и отображение ее в удобном виде. Для достижения этих целей пришлось использовать довольно интересные (на мой взгляд) решения.


( Читать дальше )

WeatherStation. Часть 0: Описание и концепция

Часть 1: Основной модуль
Часть 2: Ethernet модуль

Наверное, все начинающие AVR-программисты пробуют сделать часы. Я не исключение: ATmega8, часовой кварц, двухстрочный экран, BlueTooth — вот и получились беспроводные часы с возможностью брать время с компа. Даже яркость\контрастность можно было настраивать =).

Но в какой-то момент я понял — мне этого мало. И появилась идея проекта WeatherStation.

Итак, что это? Это станция, которая показывает время, дату, температуру и влажность за окном и прогноз погоды на утро, день вечер и ночь в пределах следующих 24 часов. Прогноз погоды обновляется по Интернет. Время тикает от RTC модуля на DS1307 (или M41T56) и также может обновляться по Сети для корректировки.


( Читать дальше )