Мой первый шилд и волшебный экран

Следующим шагом стало освоение совместной работы нескольких микроконтроллеров. Для обмена данными между ними удобно использовать двухпроводной интерфейс TWI, который позволяет передавать данные со скоростью 400 Кбит/с.

В библиотеке Wire по умолчанию используется скорость 100 Кбит/с, и поэтому для передачи данных с большей скоростью нужно добавить в заголовок скетча следующее определение:

#define TWI_FREQ 400000L

#include <Wire.h>

Сам по себе контроллер интерфейса TWI в микроконтроллерах AVR управляется довольно просто и удобно, но поскольку у него довольно много состояний, то написание собственного кода для работы с ним занимает не один день. Например, код на ассемблере мне так и не удалось отладить, а код на Си, хоть и работает медленнее, когда таки всё же заработал, мне переписывать на ассемблере не захотелось.

Поначалу не оценённая мною по достоинству, идея шилдов (плат, присоединямых к Arduino с помощью штыревых разъёмов), широко применяемая "дуинщиками", мне очень понравилась, и для написания кода для TWI я решил сделать свой первый шилд.

Для своего первого шилда я использовал обрезок макетной платы, оставшийся после изготовления аудио-микшера, который я сделал, осваивая операционные усилители, поскольку мне в определённый момент надоело каждый раз подключать к усилителю то компьютер, то DVD-плеер. И соответственно, взяв парочку операционников, 5 сдвоенных переменных резисторов и некоторое количество резисторов обычных, а также симпатичный корпус для самодельных девайсов, спаял я себе микшер по схеме 4 линейных стерео-пары в 1 линейный стерео-выход с регуляторами громкости. Поэтому плата получилась почти треугольной.

На первом шилде я разместил панельку для второго микроконтроллера, кварц, пару светодиодов, совмещённых с парой кнопок, пару потенциометров. Вывел ICSP, а также организовал возможность соединения микроконтроллеров друг с другом при помощи перемычек-джамперов. И конечно кнопку сброса не забыл продублировать.

По задумке первый микроконтроллер, который установлен на плате Arduino, должен был программироваться через Arduino IDE, а верхний через ICSP. Но в результате из этой затеи ничего не вышло.

В чём дело, я не разбирался, но при установленном втором микроконтроллере, не удавалось запрограммировать первый, а также мне не удалось запрограммировать через ICSP второй микроконтроллер.

Так что с TWI я разбирался уже на другой плате, а из этого шилда использовал только кнопки и потенциометры для того, чтобы написать на Python простейшую программу для рисования.

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

Схема:

Скачать архив с кодом скетча и примеров можно по этой ссылке.

В архиве кроме скетча есть несколько программ на Python:

  • monitor.py - программа-монитор, которая выводит на терминал данные, передаваемые Arduino хосту.

  • draw.py - простейшая программа рисования.

  • drawavg.py - простейшая программа рисования с интерполяцией значений, считываемых с потенциометров. Интерполяция позволяет избавиться от дрожания кисти.

  • drawctrl.py - более "продвинутая" версия программы, в которой можно менять не только цвет и размер кисти, но также задавать форму кисти.

Примеры рисунков:

  • draw.py - квадратная кисть, отчётливо виден шум в цепях АЦП.

  • drawavg.py - благодаря интерполяции, дрожания больше нет.

  • drawctrl.py - квадратная и круглая кисти.