«Новый год» это мандарины, оливье, выходные и конечно же подарки.
Как вы, уже наверняка догадались я неожиданно стал обладателем микроконтроллера CANNY 3 Tiny. Правда я особо DIY электроникой не увлекаюсь и последний раз сам пытался что-то подключить к контроллеру почти семь лет назад, когда делал подсветку для петрушки с помощью клона Arduino. Но не пропадать же добру? Надо-таки посмотреть, что же это за зверь такой.
Итак, если верить сайту разработчиков – их продукция широко применяется и даже устанавливается в КАМАЗы, участвующие в ралли «Дакар». При этом основная особенность их контроллеров в том, что для программирования не придется написать ни одной строчки кода. Вся программа разрабатывается в виде блок схемы. Как человек далекий от мира DIY я был весьма заинтригован.
И всё бы хорошо, но есть одна загвоздка. Я в прошлом году честно хотел прикупить себе пару «Дакаровских» КАМАЗов, но не успел взять их со скидкой в «Черную пятницу». Так что нам придется как-то просто и элегантно выкручиваться из этой ситуации.
В данной статье мы подключим к контроллеру кнопку и красный светодиод «пиранья», после чего запрограммируем их так, чтобы светодиод включался и отключался по нажатию на кнопку.
Хотите присоединится к моему безудержному новогоднему веселью? Тогда милости прошу под кат.
Кстати, на «Хабре» уже была статья про контроллеры CANNY, но во-первых там был другой контроллер, а во вторых ПО для разработки программ с того момента устарело. В итоге, чтобы просто разобраться как поморгать встроенным в контроллер зеленым светодиодом у меня ушел примерно час. Отчасти именно поэтому я решил поделиться с вами моими попытками «обуздать» контроллер. А еще отчасти просто потому, что я люблю писать на «Хабр», когда есть свободное время.
Прежде чем мы пойдем дальше, считаю своим долгом предупредить читателей. Несмотря на то, что эта статья представлена как «туториал», я не являюсь экспертом ни в микроэлектронике, ни в программировании. Просто поделюсь тем, в чем сам успел разобраться, чтобы сэкономить вам время.
Вот о чем пойдет в статье речь:
Часть I: Распаковка и знакомство
Часть II: Подключение схемы
Часть III: Программирование
Часть IV: Заключение
Для начала, необходимо сказать хотя бы пару слов о нашем герое статьи. Контроллер CANNY 3 tiny является самым бюджетным в семействе контроллеров CANNY. Старшие братья CANNY 3 tiny – контроллеры серий CANNY 7 и CANNY 5 умеют работать с шиной CAN автомобиля. Наш младший брат, также как и мой старенький автомобиль марки «Жигули», знать не знает ничего о шине CAN и спокойно себе живет.
Более подробно информация о контроллере представлена в соответствующем разделе Wiki. Еще у разработчиков есть раздел на форуме, благодаря которому я в итоге разобрался, как настраивать регистры контроллера на вход и выход.
Но к вопросам программирования мы вернемся, позже. Давайте наконец, посмотрим, на нежданный подарок.
Открыв коробку, я испытал короткое чувство умиления. Контроллер реально маленький. Да простят мне фанаты неуместное сравнение, но он — почти как «малыш Йода».
Если верить интернет-магазинам у контроллера есть два варианта комплектации: без клеммной колодки и жгута, а также с ними. Учитывая мою криворукость в плане «припаять что-нибудь» я очень рад тому, что мне досталась версия с клеммной колодкой и жгутом.
Еще несколько фотографий контроллера и жгута спрячу под спойлером.
Как я уже сказал, мы будем подключать к контроллеру светодиод (в нашем случае «пиранью»), но можно любой (просто у меня не было другого). Управлять светодиодом мы будем при помощи кнопки. Алгоритм работы такой: один раз нажал на кнопку и светодиод – горит, еще раз нажал – не горит.
Давайте кратко опишем особенности контроллера важные дня нашего случая:
Я постарался, сделать, так чтобы вам была понятна, моя простенькая задумка и даже поставил KiCad, чтобы начертить хоть какую-то схемку.
Если честно я не силен в таких вопросах, да и KiCad вижу первый (или второй) раз в жизни, поэтому если найдете ошибки, обязательно скажите, чтобы я смог поправить.
Как вы надеюсь поняли из схем, в нашем проекте мы будем использовать: сам контроллер, макетную плату, токоограничивающий резистор на 80 Ом, кнопку похожую на KLS7-TS6601-5.0-180 и светодиод похожий на BL-FL7600UEC, но на самом деле вы можете их заменить на то, что будет у вас под рукой.
Логика подключения такая:
Чтобы запрограммировать контроллер нам понадобится среда разработки CannyLab, скачать её можно с сайта разработчика. На момент написания статьи актуальная версия была 1.41. Среда разработки не требует установки, надо просто распаковать архив в какую-нибудь папку.
Прежде чем писать код для нашей схемы, давайте убедимся, что у нас все работает.
В моем случае перво-наперво надо было записать системное ПО в контроллер.
Подключаем контроллер через microUSB кабель к компьютеру. В моем случае на Windows 10 никаких драйверов вроде отдельно ставить не пришлось.
Убеждаемся, что контроллер подключен, если нет жмем на кнопку «Подключить» (выглядит как два звена цепочки)
Далее надо вызвать диалог по адресу «Устройство -> Системное ПО -> Записать» и выбрать подходящий файл (в моем случае «c3tinyv00108.ccx»). На всякий случай ниже оставлю скриншот.
Теперь можно формировать программу.
Программа формируется путем перетаскивания элементов слева на белое поле рабочего пространства и последующего соединения элементов между собой.
Для того, чтобы поморгать встроенным светодиодом в режиме ШИМ нам понадобится 3 константы, блок генератор сигнала ШИМ и регистр записи.
Соединяем все как на картинке.
Значения константам и регистрам можно задать если сделать по ним двойной клик ЛКМ.
Что же это за загадочные значения констант?
Чтобы долго не искать нужное значение регистра введите в окошке «Фильтр», строку «светодиод»
Запишем программу в память контроллера.
Далее отсоединим контроллер от компьютера и переключим провод в USB зарядку.
Зеленый огонек моргает с периодом в три секунды, значит все работает как мы и хотели.
Еще пара слов про среду разработки, во-первых она проводит проверку ошибок в диаграмме перед её заливкой в контроллер, а значит есть некоторая «защита от дурака». Во-вторых если нажать на кнопку в виде «жука», то откроется эмулятор работы диаграммы, но об этом как-нибудь в другой раз.
Перейдем к программе для схемы.
Соберите диаграмму как на картинке.
Чтобы не искать долго названия регистров и констант пользуйтесь фильтром по аналогии со скриншотом.
Кратко объясню блоки.
Настраивает нам выход 2 на подачу +5В, аналогично и для четвёртого канала
Поскольку канал 2 фактически используется как «+ 5 В» мы просто запишем в него константу «1» (думаю можно любое число больше нуля).
Примечание: Напряжение на выходах контроллера зависит от питающего напряжения и может измениться в зависимости от того, как вы его запитаете
А вот канал 4 у нас то дает +5В, то не дает, в зависимости от нажатия на кнопку.
Канал 1 по умолчанию настроен на вход и ничего не надо настраивать отдельно, берем его входное значение с помощью блока:
И передаем на блок логического отрицания («Не»).
Блок «Не» нужен для того, чтобы по умолчанию при включении схемы наш светодиод сразу светился. Если этот блок убрать и соединить регистр 1 канала напрямую с детектором переднего фронта, то светодиод по умолчанию будет отключен.
Детектор переднего фронта срабатывает, когда мы нажимаем кнопку и не будет подавать больше сигналов до тех пор, пока мы снова не решим на неё нажать.
Для сохранения текущего состояния используются «Т» триггер. Если ему на вход «Т» подать единицу, а на вход «С» подавать единичный импульс с выхода детектора, то наш триггер будет на выходе чередовать состояние «0» и состояние «1». Как раз именно то, что нам нужно.
Далее сигнал с выхода триггера идет на регистр выхода канала 4, который в свою очередь питает светодиод.
Обе диаграммы можно скачать с GitHub.
На снимках ниже видно, что все работает (и еще видно мой палец).
Вначале статьи я упоминал про жгут, но мне было лень его зачищать и лудить, поэтому я пока использовал отдельные провода, которые у меня остались еще от опытов с Craftduino.
«А что у нас с кроссплатформенностью?» – спросите вы. Я попробовал записать код в контроллер запустив среду разработки в Linux через Wine. В итоге среда разработки запустилась, но компьютер сам контроллер не видит (возможно нужно «поколдовать» с Wine). Так, что пока нельзя говорить о кроссплатформенности решения «из коробки».
Еще одним из минусов контроллера можно назвать высокую стоимость по сравнению с некоторыми «Китайскими» подделками под Arduino, однако это отчасти компенсируется качеством. Контроллер приятно держать в руках, да и упаковано все в коробочке было очень аккуратно. Контроллер у меня даже один раз упал, но пока все работает.
Правда в оценках контроллера я, наверное, слегка субъективен. Просто мне приятно, что изделие отечественное и что разработчики пусть хоть чуть-чуть, но причастны к победам КАМАЗов на ралли «Дакар».
В целом подарком я остался доволен, визуальный стиль программирования для меня очень непривычен, но при этом у него есть свои достоинства. Думаю, больше всего он понравиться людям, учившим электронную технику и информатику еще по советским учебникам и знающим, что такое регистры, триггеры, мультиплексоры и т.д.
UPD: Друзья, я немного отстал от жизни и слегка нарушил правила «Хабра», поэтому я удалил прямые ссылки на сайт разработчиков контроллера, чтобы статья не выглядела рекламной и соответствовала правилам. Я думаю, что ссылку на скачивание среды разработки CannyLab, и «пруфы» про КАМАЗ вы легко найдете самостоятельно.
UPD2:
Похоже, что у меня получился небольшой цикл статей, поэтому для вашего удобства я оставлю ссылки на другие статьи по теме:
Как вы, уже наверняка догадались я неожиданно стал обладателем микроконтроллера CANNY 3 Tiny. Правда я особо DIY электроникой не увлекаюсь и последний раз сам пытался что-то подключить к контроллеру почти семь лет назад, когда делал подсветку для петрушки с помощью клона Arduino. Но не пропадать же добру? Надо-таки посмотреть, что же это за зверь такой.
Итак, если верить сайту разработчиков – их продукция широко применяется и даже устанавливается в КАМАЗы, участвующие в ралли «Дакар». При этом основная особенность их контроллеров в том, что для программирования не придется написать ни одной строчки кода. Вся программа разрабатывается в виде блок схемы. Как человек далекий от мира DIY я был весьма заинтригован.
И всё бы хорошо, но есть одна загвоздка. Я в прошлом году честно хотел прикупить себе пару «Дакаровских» КАМАЗов, но не успел взять их со скидкой в «Черную пятницу». Так что нам придется как-то просто и элегантно выкручиваться из этой ситуации.
В данной статье мы подключим к контроллеру кнопку и красный светодиод «пиранья», после чего запрограммируем их так, чтобы светодиод включался и отключался по нажатию на кнопку.
Хотите присоединится к моему безудержному новогоднему веселью? Тогда милости прошу под кат.
Кстати, на «Хабре» уже была статья про контроллеры CANNY, но во-первых там был другой контроллер, а во вторых ПО для разработки программ с того момента устарело. В итоге, чтобы просто разобраться как поморгать встроенным в контроллер зеленым светодиодом у меня ушел примерно час. Отчасти именно поэтому я решил поделиться с вами моими попытками «обуздать» контроллер. А еще отчасти просто потому, что я люблю писать на «Хабр», когда есть свободное время.
Прежде чем мы пойдем дальше, считаю своим долгом предупредить читателей. Несмотря на то, что эта статья представлена как «туториал», я не являюсь экспертом ни в микроэлектронике, ни в программировании. Просто поделюсь тем, в чем сам успел разобраться, чтобы сэкономить вам время.
Вот о чем пойдет в статье речь:
Часть I: Распаковка и знакомство
Часть II: Подключение схемы
Часть III: Программирование
Часть IV: Заключение
Часть I: Распаковка и знакомство
Для начала, необходимо сказать хотя бы пару слов о нашем герое статьи. Контроллер CANNY 3 tiny является самым бюджетным в семействе контроллеров CANNY. Старшие братья CANNY 3 tiny – контроллеры серий CANNY 7 и CANNY 5 умеют работать с шиной CAN автомобиля. Наш младший брат, также как и мой старенький автомобиль марки «Жигули», знать не знает ничего о шине CAN и спокойно себе живет.
Более подробно информация о контроллере представлена в соответствующем разделе Wiki. Еще у разработчиков есть раздел на форуме, благодаря которому я в итоге разобрался, как настраивать регистры контроллера на вход и выход.
Но к вопросам программирования мы вернемся, позже. Давайте наконец, посмотрим, на нежданный подарок.
Открыв коробку, я испытал короткое чувство умиления. Контроллер реально маленький. Да простят мне фанаты неуместное сравнение, но он — почти как «малыш Йода».
Если верить интернет-магазинам у контроллера есть два варианта комплектации: без клеммной колодки и жгута, а также с ними. Учитывая мою криворукость в плане «припаять что-нибудь» я очень рад тому, что мне досталась версия с клеммной колодкой и жгутом.
Еще несколько фотографий контроллера и жгута спрячу под спойлером.
Больше фотографий
Часть II: Подключение схемы
Как я уже сказал, мы будем подключать к контроллеру светодиод (в нашем случае «пиранью»), но можно любой (просто у меня не было другого). Управлять светодиодом мы будем при помощи кнопки. Алгоритм работы такой: один раз нажал на кнопку и светодиод – горит, еще раз нажал – не горит.
Давайте кратко опишем особенности контроллера важные дня нашего случая:
- Питать контроллер будем от microUSB зарядника (в моем случае 5В, 1 А);
- У контроллера есть 6 программируемых выводов, а также выводы «+» и «-»;
- Программируемые выводы могут быть настроены как в качестве «входа», так и в качестве выхода;
- Максимальный ток на выходе управляемых выводов – 100 мА;
- У выводов есть разные режимы, включая ШИМ, но мы сегодня так глубоко вдаваться не будем.
Я постарался, сделать, так чтобы вам была понятна, моя простенькая задумка и даже поставил KiCad, чтобы начертить хоть какую-то схемку.
Если честно я не силен в таких вопросах, да и KiCad вижу первый (или второй) раз в жизни, поэтому если найдете ошибки, обязательно скажите, чтобы я смог поправить.
Как вы надеюсь поняли из схем, в нашем проекте мы будем использовать: сам контроллер, макетную плату, токоограничивающий резистор на 80 Ом, кнопку похожую на KLS7-TS6601-5.0-180 и светодиод похожий на BL-FL7600UEC, но на самом деле вы можете их заменить на то, что будет у вас под рукой.
Логика подключения такая:
- Выход «-» контроллера соединяем с шиной минус;
- Выход «2» будет служить нам «плюсом», подключим его к соответствующей шине на макетной плате;
- Вывод «1» Будет работать на вход и получать сигнал в случае, если кнопка замкнет цепь (при нажатии);
- Выход «4» будет питать наш светодиод, для удобства я его подключил к другой шине «+» на макетной плате, но это делать не обязательно.
- Ёлочка является атрибутом нового года и всячески оправдывает название данной статьи.
Часть III: Программирование
Чтобы запрограммировать контроллер нам понадобится среда разработки CannyLab, скачать её можно с сайта разработчика. На момент написания статьи актуальная версия была 1.41. Среда разработки не требует установки, надо просто распаковать архив в какую-нибудь папку.
Прежде чем писать код для нашей схемы, давайте убедимся, что у нас все работает.
В моем случае перво-наперво надо было записать системное ПО в контроллер.
Подключаем контроллер через microUSB кабель к компьютеру. В моем случае на Windows 10 никаких драйверов вроде отдельно ставить не пришлось.
Убеждаемся, что контроллер подключен, если нет жмем на кнопку «Подключить» (выглядит как два звена цепочки)
Далее надо вызвать диалог по адресу «Устройство -> Системное ПО -> Записать» и выбрать подходящий файл (в моем случае «c3tinyv00108.ccx»). На всякий случай ниже оставлю скриншот.
Теперь можно формировать программу.
Программа формируется путем перетаскивания элементов слева на белое поле рабочего пространства и последующего соединения элементов между собой.
Для того, чтобы поморгать встроенным светодиодом в режиме ШИМ нам понадобится 3 константы, блок генератор сигнала ШИМ и регистр записи.
Соединяем все как на картинке.
Значения константам и регистрам можно задать если сделать по ним двойной клик ЛКМ.
Что же это за загадочные значения констант?
- «3000» – период в 3 секунды;
- «1500» – говорит нам что наш светодиод из трех секунд будет светиться лишь полторы;
- «1» – просто запускает генератор.
Чтобы долго не искать нужное значение регистра введите в окошке «Фильтр», строку «светодиод»
Запишем программу в память контроллера.
Далее отсоединим контроллер от компьютера и переключим провод в USB зарядку.
Зеленый огонек моргает с периодом в три секунды, значит все работает как мы и хотели.
Еще пара слов про среду разработки, во-первых она проводит проверку ошибок в диаграмме перед её заливкой в контроллер, а значит есть некоторая «защита от дурака». Во-вторых если нажать на кнопку в виде «жука», то откроется эмулятор работы диаграммы, но об этом как-нибудь в другой раз.
Перейдем к программе для схемы.
Соберите диаграмму как на картинке.
Чтобы не искать долго названия регистров и констант пользуйтесь фильтром по аналогии со скриншотом.
Кратко объясню блоки.
«Плюс / подтянут к минусу» - Рег конфиг. вых. потенциалов канал 2»
Настраивает нам выход 2 на подачу +5В, аналогично и для четвёртого канала
Поскольку канал 2 фактически используется как «+ 5 В» мы просто запишем в него константу «1» (думаю можно любое число больше нуля).
Примечание: Напряжение на выходах контроллера зависит от питающего напряжения и может измениться в зависимости от того, как вы его запитаете
А вот канал 4 у нас то дает +5В, то не дает, в зависимости от нажатия на кнопку.
Канал 1 по умолчанию настроен на вход и ничего не надо настраивать отдельно, берем его входное значение с помощью блока:
«Рег вх. знач. канал 1»
И передаем на блок логического отрицания («Не»).
Блок «Не» нужен для того, чтобы по умолчанию при включении схемы наш светодиод сразу светился. Если этот блок убрать и соединить регистр 1 канала напрямую с детектором переднего фронта, то светодиод по умолчанию будет отключен.
Детектор переднего фронта срабатывает, когда мы нажимаем кнопку и не будет подавать больше сигналов до тех пор, пока мы снова не решим на неё нажать.
Для сохранения текущего состояния используются «Т» триггер. Если ему на вход «Т» подать единицу, а на вход «С» подавать единичный импульс с выхода детектора, то наш триггер будет на выходе чередовать состояние «0» и состояние «1». Как раз именно то, что нам нужно.
Далее сигнал с выхода триггера идет на регистр выхода канала 4, который в свою очередь питает светодиод.
Обе диаграммы можно скачать с GitHub.
Часть IV: Заключение
На снимках ниже видно, что все работает (и еще видно мой палец).
Вначале статьи я упоминал про жгут, но мне было лень его зачищать и лудить, поэтому я пока использовал отдельные провода, которые у меня остались еще от опытов с Craftduino.
«А что у нас с кроссплатформенностью?» – спросите вы. Я попробовал записать код в контроллер запустив среду разработки в Linux через Wine. В итоге среда разработки запустилась, но компьютер сам контроллер не видит (возможно нужно «поколдовать» с Wine). Так, что пока нельзя говорить о кроссплатформенности решения «из коробки».
Еще одним из минусов контроллера можно назвать высокую стоимость по сравнению с некоторыми «Китайскими» подделками под Arduino, однако это отчасти компенсируется качеством. Контроллер приятно держать в руках, да и упаковано все в коробочке было очень аккуратно. Контроллер у меня даже один раз упал, но пока все работает.
Правда в оценках контроллера я, наверное, слегка субъективен. Просто мне приятно, что изделие отечественное и что разработчики пусть хоть чуть-чуть, но причастны к победам КАМАЗов на ралли «Дакар».
В целом подарком я остался доволен, визуальный стиль программирования для меня очень непривычен, но при этом у него есть свои достоинства. Думаю, больше всего он понравиться людям, учившим электронную технику и информатику еще по советским учебникам и знающим, что такое регистры, триггеры, мультиплексоры и т.д.
UPD: Друзья, я немного отстал от жизни и слегка нарушил правила «Хабра», поэтому я удалил прямые ссылки на сайт разработчиков контроллера, чтобы статья не выглядела рекламной и соответствовала правилам. Я думаю, что ссылку на скачивание среды разработки CannyLab, и «пруфы» про КАМАЗ вы легко найдете самостоятельно.
UPD2:
Похоже, что у меня получился небольшой цикл статей, поэтому для вашего удобства я оставлю ссылки на другие статьи по теме:
- «У Предназначения масса обличий...» или автоматизируем управление автолампой с помощью CANNY 3 tiny и фоторезистора.
- «Как зеницу ока...» или делаем простенькую охранную систему на базе микроконтроллера (CANNY или Arduino) и Raspberry PI.
- «Каких Марин?» или управляем контроллером через bluetooth с помощью мобильного приложения на Xamarin (Android).