Рисование на осциллографе: кастомная графика через R-2R ЦАП на Arduino
Принцип R-2R ЦАП
R-2R лестничный ЦАП — простой 8-битный ЦАП только на резисторах. Нужен резистор R и 2R (два R последовательно). Количество разрядов = число ветвей 2R. Для Arduino Uno: PORTD (8 бит, пины 0-7) и PORTB (6 бит, пины 8-13).
Портовая манипуляция
Прямая запись в регистры портов (DDRD, DDRB, PORTD, PORTB) даёт максимальную скорость. Настройка в setup():
DDRD = B11111111; // PORTD все 8 бит на выход
DDRB = B00111111; // PORTB только 6 бит (0-5)
Сборка на макетке
Две R-2R лестницы: 8-битная на PORTD (X), 6-битная на PORTB (Y). Резисторы 10 кОм (2R = два последовательно). Выходы к входам осциллографа (CH1=X, CH2=Y). Общая земля.
Инструмент рисования (Python + tkinter)
Окно 255x255 пикселей. Клик и перетаскивание — рисование. При закрытии генерирует массивы x_points, y_points и NUM_POINTS в файл.
python drawlog.py > arduino_list.txt
В полученном файле заменяете массивы в скетче.
Режим X-Y осциллографа
Переведите осциллограф в X-Y mode. CH1 = PORTD (8 бит), CH2 = PORTB (6 бит, значения сдвинуты >> 2). Настройте масштаб и позицию.
Оптимизация памяти (PROGMEM)
Для Arduino Uno точек ~400 (SRAM). С PROGMEM — до 15 000 точек (Flash):
const byte x_points[NUM_POINTS] PROGMEM = {...};
const byte y_points[NUM_POINTS] PROGMEM = {...};
// В loop:
PORTD = pgm_read_byte_near(x_points + t);
PORTB = pgm_read_byte_near(y_points + t) >> 2;
Примеры изображений
Сердце, спираль, текст, логотипы — все рисуются в X-Y режиме.
Код Arduino
const byte FIGURE_DELAY = 1;
const int NUM_POINTS = 87;
byte x_points[NUM_POINTS] = {106,106,105,...};
byte y_points[NUM_POINTS] = {78,80,81,...};
void setup() {
DDRD = B11111111;
DDRB = B00111111;
for (byte t=0; t
Схемы R-2R
Производственный процесс
- Резисторы: основы, типы и практические применения
- Построение доступной беспроводной сети датчиков для дома
- Мониторинг домашней температуры с панелью управления на Raspberry Pi
- Лучшие аксессуары для раскрытия полного потенциала Raspberry Pi
- Сборка DIY Google Voice HAT для Raspberry Pi
- Точный тест времени реакции на Arduino UNO
- Принцип динамического торможения в тяжелых поездах
- Полное руководство по выбору правильной ленточной пилы
- Пошаговое руководство по ремонту ручки автомобильной двери
- Быстрый гид по удалению ржавчины на кузове авто: защитите машину от коррозии