Якщо хто-небудь використовував linux-драйвер шини 1-Wire на основі GPIO, то напевно помічав, що в момент виконання обміну даними завантаження SY% підскакує мало не до ста 100% (що цілком логічно для bitbang-реалізації). Звичайно, можна поставити спеціалізований контролер шини 1-Wire з підключенням через I2C DS28E17 або UART, але… Все-таки використовувати linux для додатків реального часу не найкраща ідея. Нехай контролер на ньому займається високорівневої логікою, а весь реалтайм можна винести на окремий процесор. Тим більше, що завдань для цього окремого процесора в моєму проекті більш ніж достатньо.

Читати далі →

Межа мінімального Hello Word на AVR становить 0 біт

2 року назад я побачив запис «Межа мінімального Hello Word на AVR становить 2 байти» на Habrahabr'е користувача swap_map з подначиванием в кінці:
Хто-небудь напише програму миготіння світлодіодом ще коротше?

Тоді я вирішив, що це просто неможливо, але зараз я зміг це зробити.



Читати далі →

Рядка в кодовій пам'яті AVR

У нашій компанії ми пишемо програми для контролерів серії AVR. У цій статті я опишу як ми в нашій компанії створюємо рядки, розташовані в кодовій пам'яті.

Нам потрібно, щоб наступний код не видавав помилок, а в результаті ми отримали набагато більш потужний інструмент, ніж припускали.

const char *pStr = PSTR("Привіт"); // У цьому місці помилка.
// error: statement-expressions are not allowed outside functions nor in template-argument lists

int main() {...}

Читати далі →

Віддалений оповіщувач про критичні температури і вологості на основі МК AVR і датчика DHT22

Після поспіль 2х поломок кондиціонера в серверній і подальшого перегріву приміщення протягом декількох діб, постало питання про стеженні за температурою в ній. Можна було б щодня(щогодини/щохвилини) дивитися температуру з вбудованих в сервера датчиків температури використовуючи інтерфейс управління IPMI. Але в цьому випадку присутній людський фактор на який, в даному випадку, має своє негативне усвідомлення того, що можна було б автоматизувати все набагато краще. Так сталося, що я як раз не так давно захопився такий вкрай цікавою штукою як мікроконтролери, тому завдання автоматизації з використанням МК була новою та цікавою можливістю реалізувати накопичені знання в корисному для світу проекті.
Читати далі →

ТВ-таймер зворотного відліку на мікроконтролері AVR

Перший результат

Одного разу один мій друг запитав, на чому б я зробив таймер зворотного відліку, щоб на телевізорі показував великі цифри. Зрозуміло, що можна підключити ноутбук / iPad / Android і написати додаток, тільки ноутбук — громіздко, а написанням мобільних додатків ні один, ні я ніколи не займалися.

І тут я згадав, що бачив в мережі проекти тв-терміналів на мікроконтролері AVR. У голові відразу з'явилася ідея об'єднати маленькі символи у великі і ми вирішили спробувати. Якось само собою вийшло, що основну роботу довелося робити мені.

Читати далі →

Зробимо GCC C++ для AVR і Arduino краще?



Привіт хабраплюсплюсовцам!

Хочу розібрати проблему компілятора avr-g++, з-за якої в різних дискусіях про AVR і Arduino звучить «С++ — це не для мікроконтролерів, C++ жере пам'ять, C++ генерує роздутий код — пишіть на голому C, а краще на ASM».

Для початку давайте розберемося, в чому ж перевага C++ перед C. Концепцій, які додає C++ багато, але найбільш значуща й найбільш експлуатована — це підтримка ООП. Що таке ООП?
  • Інкапсуляція
  • Спадкування
  • Поліморфізм


Використання перших двох пунктів в C++ «безкоштовно». Ніякої переваги програма на чистому C перед програмою на C++ з инкапсуляцией і спадкуванням не має. Картина міняється, коли ми підключаємо до дійства поліморфізм. Поліморфізм буває різним: compile-time, link-time, run-time. Я кажу про класичному run-time, тобто про віртуальні функції. Як тільки в своїх класах ви починаєте додавати віртуальні методи, чудесним чином зростає споживання як Flash-пам'яті, так і SRAM.

Чому так відбувається і що з цим можна було б зробити, розповім під катом.

Читати далі →

Автоматичний регулятор температури газової колонки

Хочу розповісти про створення нескладного пристрою, що сильно полегшило життя домашнім мешканцям — автоматичний регулятор температури газової колонки. Подібні пристрої вже створювалися і описувалися тут на хабре, хотілося зробити трохи більш просунутий девайс і детально описати весь процес створення від задумки і вимірювання до реалізації, без використання готових модулів типу Arduino. Пристрій зібрано на макетної платі, мова програмування — C. Це моя перша розробка закінченого (і працює!) пристрою.

Читати далі →

Створення саморобних аксесуарів для Dendy

Спочатку я і не думав писати статтю на цю тему, але схоже, що це вже частина цілого циклу статей на Денді-тематику. І так, на цей раз мова в першу чергу саме про вітчизняну Денді, а не про оригінальні консолі — Famicom або NES. Просто я робив пристрій в подарунок одній людині, який знімає дуже цікаві відеоролики про Денді, і орієнтувався на сумісність саме з цим клоном.

Справа в тому, що і для Famicom, і для NES виходили різні аксесуари: окуляри 3D, клавіатури, роботи, зчитувачі штрих-кодів, всякі ігрові контролери і дуже багато інше. До нас дійшов тільки світловий пістолет. Переді мною стояло завдання зібрати пристрій, яке поєднувало б у собі розгалужувач на чотири гравця (так, були такі ігри) і Arkanoid-контролер.



Читати далі →

Управління GSM модулем з AVR

Ідея проекту: спроектувати пристрій на базі мікроконтролера AVR для управління готовим GSM модулем (я вибрав модуль TC35 від SIEMENS, але можна використовувати будь-який інший, якщо використовується зв'язок через послідовний порт RS232). Пристрій повинен бути компактним, мінімально простим і надійним.

Відправка заздалегідь записаного в пам'ять повідомлення на вказаний номер, повинна виконуватися після натискання кнопки. Всього потрібно було 6 кнопок для відправки на 6 різних номерів. Для індикації процесів були обрані 3 світлодіода (Ready, Send, Error), але в наслідку був доданий алфавітно цифровий LCD 16x2 (скоріше, для налагодження пристрою, ніж для звичайного використання).

Проектувалося все справа на платі Pinboard II (Rev 2) зі стандартним процесорним модулем на ATmega16. На готовому пристрої схема була трохи іншою (і мікроконтролер використовувався ATmega8). Програма писалася в AVR Studio 4.19. У проекті були використані різні відмінності файли (#include) для перемикання між Pinboard і готовим пристроєм.

Загальна схема системи:

image

Читати далі →

Історія створення ще одного робота. Частина друга, «it's alive!»

Продовжую серію публікацій про створення простого колісного робота на мікроконтролері ATmega16A.
Під другий частини моєї публікації я опишу процес створення та складання свого робота. Почнемо з виготовлення друкованої плати і закінчимо відео перших кроків (правильніше сказати — прокручування коліс) нашого пристрою. Також приділю увагу першого досвіду програмування під PC в Qt, а саме створення програми управління і обміну даними з пк по Bluetooth.
Якщо хочете, можете ознайомитися з першою публікацією і дізнатися з чого все почалося, ну а всіх інших прошу під кат.

Читати далі →