Часть 2: Прерывания по изменению состояния на ЛЮБОМ пине (Pin Change Interrupts)

No Picture

Все знают про стандартные прерывания attachInterrupt() на пинах 2 и 3 (INT0 и INT1). Но что, если нужно обрабатывать 5 энкодеров, 10 кнопок или считывать 6 датчиков вибрации одновременно? На помощь приходят Pin Change Interrupts (PCINT) — они работают на всех пинах, кроме 2…

Читать далее »

Хак №3: Идеальный ШИМ на максимальной скорости

No Picture

Самый быстрый способ менять ШИМ для RGB-светодиода на пинах 9, 10, 11 (PORTB): void setup() {DDRB = 0xFF; // Все пины PORTB как выходы} void loop() {// Меняем состояния за 1 такт без задержек!PORTB = 0b00101000; // PB3…

Читать далее »

Хак №2: Меняем только конкретные пины, не трогая остальные

No Picture

Если вы не хотите трогать другие пины порта, используйте побитовые операции: // Включаем только 13-й пин (PB5), не трогая PB0-PB4PORTB |= (1 << PB5); // Устанавливаем бит 5 в 1 (HIGH) // Выключаем 13-й пинPORTB &= ~(1 << PB5);…

Читать далее »

Хак №1: Устанавливаем 8 пинов за 1 такт!

No Picture

Допустим, у нас на PORTD сидят светодиоды на пинах 0–7. Чтобы зажечь их все одновременно, мы пишем: // Старый, медленный способ (8 вызовов digitalWrite) for (int i = 0; i < 8; i++) { digitalWrite(i, HIGH); // Это…

Читать далее »

Часть 1: Прямое управление портами (Регистры PORTB, PORTC, PORTD)

No Picture

Добро пожаловать в мир регистров портов и Pin Change Interrupts — это джедайские техники, которые сделают ваш код быстрее в сотни раз и позволят обрабатывать события так, как не снилось обычным digitalRead(). Почему digitalWrite() — это зло? Когда вы пишете digitalWrite(13, HIGH), Arduino IDE…

Читать далее »

Заключение: Свобода начинается здесь

No Picture

Расширение возможностей Arduino — это не про покупку дорогих шилдов. Это про глубокое понимание схемотехники и архитектуры AVR. Научившись управлять таймерами, использовать сдвиговые регистры и усыплять контроллер, вы перестанете быть просто «кодером», который копирует скетчи. Вы станете настоящим хардкорным хакером,…

Читать далее »

Программируем «голый» чип (Без платы)

No Picture

Когда вы натренируетесь на Uno, вы поймете, что покупать целую плату ради одного датчика — дорого. ATmega328P в отдельном корпусе стоит 1.5 доллара. Как захачить бюджет: В результате вы получаете полноценный компьютер размером с ноготь, который можно зашить…

Читать далее »

Используем встроенный компаратор вместо АЦП

No Picture

Мало кто знает, но внутри ATmega328P есть отдельный аналоговый компаратор, который работает независимо от АЦП. Он подключен к пинам A0 (плюс) и A1 (минус). Хак-применение:

Читать далее »

Режим глубокого сна (Deep Sleep): Проекты на одной батарейке

Если ваш проект автономен (метеостанция в лесу), нельзя позволять Arduino жрать 50 мА тока постоянно. Внутренний хак:В ATmega328P есть режимы сна. С помощью библиотеки <avr/sleep.h> вы можете: В режиме Power-Down плата потребляет всего 0.1 мкА (это в 500 раз меньше, чем обычно!)….

Читать далее »

Поднимаем частоту: Разгон Arduino (Overclocking)

Да, это возможно! ATmega328P официально работает на 16 МГц, но может стабильно работать на 20 МГц, если заменить кварцевый резонатор. Зачем это нужно? Как сделать:

Читать далее »