Мой первый шилд и волшебный экран
Следующим шагом стало освоение совместной работы нескольких микроконтроллеров. Для обмена данными между ними удобно использовать двухпроводной интерфейс 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 - квадратная и круглая кисти.
Мой первый шилд и волшебный экран