8-900-374-94-44
[email protected]
Slide Image
Меню

Arduino cctalk: benolayinka/arduino-cctalk: Arduino Library for ccTalk devices. Written for the ICT SCA1

Содержание

undefined reference to "name": Кое-что о протоколе ccTalk

Используется такой протокол во всевозможных аппаратах, работающих с приёмом/выдачей денег для связи контроллера с устройствами приёма/выдачи денег. Это торговые автоматы, игровые, терминалы оплаты. Это не единственный протокол у них, но один из стандартных. Однако ничто не запрещает использовать его и в других применениях, например для опроса клавиатуры, связи с ЖК-дисплеем и т.д. (такие варианты спецификацией даже предусмотрены).

Позволяет подключать на одну шину много устройств, прост в реализации. Подробные спецификации есть на сайте http://www.cctalk.org/ в 4 pdf-файлах, причём с примерами реализации для популярных устройств (монетоприёмники, купюроприёмники).

В этой записи я расскажу про некоторые основные моменты, которые не становятся понятны с первого прочтения спецификации.

Для передачи используются 2 провода (сигнал и земля). Дальше - обычный UART. Линии приёма и передачи объединены в одну (как в 1-wire и аналогичных однопроводных последовательных асинхронных интерфейсах). Схема преобразователя (из спецификации):

Активное состояние на шине - 0. В отсутствии передачи - 1.
Логические уровни "0" - от 0В то 1В. "1" - от 3.5В до 5В. Хотя некоторые девайсы могут подтягивать шину до своего питания (а это до 24В) и это тоже должно работать.
Скорость стандартно 9600 бод, 8 бит данных, без паритета и управления потоком.

На сетевом уровне лежит простой протокол мастер-слейв. У всех устройств на шине есть свой уникальный адрес. Стандартно адреса заданы в соответствие со спецификацией для каждого типа устройств. Например, монетоприёмники имеют адрес 2. Обычно у всех устройств должна быть настройка для выбора адреса на случай если нужно повесить несколько одинаковых устройств на одну шину (либо через программу на ПК, либо выставлением перемычек). Мастер на шине всегда один и его адрес 1. Устройство (слейв) может отправить данные только в ответ на запрос от мастера т.о. вся сеть контролируется мастером. Так же как в Modbus или USB. В ответ на запрос мастера слейв отвечает либо подтверждением, либо ответной посылкой с данными (если были запрошены данные). Вообще спецификация допускает несколько устройств с одним адресом и различать их по задержкам, но это уже костыли для поддержки примитивных девайсов без смены адреса.

При нормальной работе мастер периодически опрашивает всех слейвов (раз в 100-200мс). Для купюро- монетоприёмников это команда чтения новых событий (вставлена монета, купюра). Пока слейв получает какие-то запросы от мастера (это могут быть и simple poll) он знает что мастер жив и можно принимать монеты/купюры. Как только слейв перестаёт принимать запросы от мастера некоторое время (несколько сек, по разному у всех), то он решает что мастер мёртв и перестаёт принимать монеты/купюры (или для других типов какая-то своя логика, не позволяющая устройству более взаимодействовать с пользователем). Например, купюрники сначала заглатывают купюру, отправляют информацию о ней и ждут в ответ следующей команды: принять или вернуть. Если мастер отвалился после заглатывания купюры и ответ что с ней делать не был получен, то через несколько секунд купюрник её возвращает. Так во всех устройствах реализуется защита от неприятных для пользователя ситуаций, например как эта:

Если есть несколько слейвов и их опрос выполнен в одном цикле, то нужно следить чтобы никто не блокировал этот цикл. Например, если при опросе устройства А возникает задержка более таймаута опросов у устройства Б, то устройство Б решит что мастер умер и нужно будет повторно инициализировать это устройтсво когда мастер дойдёт до опроса Б.

Для типичных устройств ccTalk (монетники, купюрники, хопперы) стандартизированы все команды и весь процесс работы с ними, так что не нужно разбираться с особенностями конкретного производителя. Хотя особенности могут быть, но не значительные так что можно в работающем автомате поменять монетник на другого производителя и всё должно продолжить работу. Особенности инициализации и опроса отдельных типов устройств подробно описаны в спецификации или может попасться в даташите на устройство.

Программные реализации протокола можно встретить готовые, или почти готовые. Впрочем, простота протокола позволяет реализовать его на любом языке довольно быстро. Я использовал Python и за основу взял этот проект: https://bitbucket.org/schryer/cctalk. Пришлось исправить горстку багов и дописать много кода для поддержки всех нужных устройств. Самая досадная ошибка (или по замыслу автора - фича т.к. он использовал USB2UART преобразователь) - это программное управление потоком включено. Из-за него были жуткие глюки, например строго на 16-м сообщении о внесении монеты терялся 1 байт и всё переставало работать. Помогло xonxoff=False при инициализации последовательного порта.

Так же пригодился сниффер: https://github.com/Baldanos/ccTools. Тоже на питоне.

Вот и всё что я хотел бегло рассказать про этот протокол. Оказался он лучше чем я представлял когда только начинал с ним работать. По крайней мере количество проблем оказалось меньше чем ожидалось в начале.

-=update=-
Что-то странное творится с сайтом и загрузкой спецификаций. На всякий случай дублирую спеку версии 4.7: part 1, part 2, part 3, part 4

Уроки Arduino. О платформе | AlexGyver Technologies

О платформе


Что же такое Arduino? Формально это – торговая марка, под которой выпускаются официальные платы и софт. Название Ардуино идёт от одноименного названия рюмочной в Италии, где создатели платформы любили пропустить по рюмочке. Предлагаемая Arduino платформа включает в себя железо (сами платы) и софт (среда разработки).

Семейство Ардуино – несколько моделей так называемых отладочных плат. Отладочная плата представляет собой как ни странно печатную плату, в сердце которой стоит микроконтроллер – та самая штука, которую мы будем программировать. Микроконтроллер это микросхема, содержащая в себе микропроцессор, интерфейсы ввода-вывода, память (оперативную и постоянную), таймеры и другие штуки. Да, микропроцессор – это другое, микропроцессор по сути может только выполнять вычисления (как процессор в компьютере), а микроконтроллер – это практически полноценный компьютер, размещенный в одном кристалле микросхемы. В большинстве плат Arduino используются микроконтроллеры серии ATmega от производителя AVR.

Запомнили сразу важную мысль – Ардуино – не микроконтроллер, не процессор, Ардуино – платформа (и торговая марка конечно же =) ). Плата Ардуино – это отладочная плата с микроконтроллером на борту.

Железо


Помимо микроконтроллера на отладочной плате стоит обвязка, необходимая для его работы: это кварцевый генератор, задающий частоту работы процессора, и “рассыпуха” – конденсаторы и резисторы, выполняющие фильтрующие и подтягивающие функции.

Arduino “на минималках”: кварц, конденсаторы и прочее

Давайте так: что нужно сделать для того, чтобы собрать устройство на микроконтроллере? Нужно подключить к выходам микроконтроллера необходимые устройства (далее – “железо”), загрузить на микроконтроллер прошивку, которая будет управлять этим железом, и обеспечить всё это дело стабильным питанием. Цель разработчиков ардуино была совместить вышеуказанное с простотой и удобством работы и модульностью, тем самым превратив разработку электронных устройств в мощный универсальный конструктор. Эта цель была достигнута так: на плате, вместе с микроконтроллером, разместили “программатор” для загрузки прошивки, usb порт и стабилизатор питания, позволяющий питать плату от широкого диапазона постоянных напряжений: 5-19 вольт. Микроконтроллеру нужно 5 вольт, что стабилизатор ему и обеспечивает.

Загрузка прошивки


USBasp – ISP программатор для AVR (в том числе Arduino)

Что касается так называемого программатора: изначально способом загрузки прошивки в микроконтроллер является загрузка посредством

ISP (in-system programming) программатора, который загружает прошивку напрямую в память микроконтроллера. Это способ хорош и надёжен, но он дороже и не такой универсальный как тот, который используется в Ардуино. Работает это так: вместо ISP программатора на плате стоит USB-TTL преобразователь, который позволяет Ардуино (на её стороне TTL – транзистор-транзистор логика) буквально общаться с компьютером (на его стороне – USB) и обмениваться данными. Но просто общаясь с компьютером загрузить прошивку не получится, поэтому в памяти микроконтроллера “живёт” загрузчик (он же bootloader), который умеет ловить данные, идущие с компьютера и загружать их во Flash память микроконтроллера. При каждом запуске микроконтроллера загрузчик ждёт команду от компьютера, мол желает ли тот загрузить новую прошивку. Если никто ему не отвечает какое-то время, он запускает уже имеющуюся в памяти МК прошивку. Отсюда вытекает несколько минусов:

  • Загрузчик сидит во Flash памяти и занимает место (около 6%, что довольно-таки много)
  • При подаче питания на МК прошивка стартует не сразу, каждый раз загрузчик ждёт команду от компьютера в течение какого-то времени (пару секунд), прежде чем передать управление имеющейся в памяти программе.

Оба этих минуса решаются частично или полностью:

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

Возвращаясь к USB-TTL преобразователю: почему именно такой способ загрузки прошивки выбрали разработчики Arduino? Да всё очень просто: микросхема USB-TTL преобразователя стоит дешевле микросхем, могущих в ISP (роль оных обычно выполняют микроконтроллеры), что прилично удешевляет платформу. Но самое главное – использование USB-TTL преобразователя добавляет нам возможность общаться с платой при помощи компьютера (смартфона, планшета) без использования дополнительного железа, т.е. мы можем как управлять какими-то устройствами (если это заложено в коде прошивки), так и получать от Ардуино данные, например показания с датчиков. Но самое-самое главное – это позволяет отлаживать код, вручную, но все таки отлаживать.

Софт


Что касается программной части, предоставленной Arduino, то это Arduino IDE (Integrated Development Environment – интегрированная среда разработки), включающая в себя редактор кода, компилятор и всё остальное необходимое для загрузки прошивки в плату. Подробнее о ней поговорим в отдельном уроке.

Модели Ардуино


Платы Arduino

Вот мы и добрались до самих плат Ардуино, которых на данный момент появилось великое множество благодаря открытости платформы: все схемы и исходные коды находятся в открытом доступе, и вы можете сделать свою версию платы и продавать её, чем активно занимаются китайцы. Единственный пункт: слово Arduino – зарегистрированная торговая марка, и свою плату вам придется назвать как-то по-другому, отсюда и появились всякие Искры, Бузины и прочие так называемые Arduino совместимые платы.
Разновидностей плат очень много, но используют они одни и те же модели микроконтроллеров. От модели микроконтроллера зависит объем памяти и количество ног, ну и есть некоторые специальные фишки. На большинстве моделей Arduino стоят 8-битные МК от AVR с кварцевым генератором на 16 МГц (либо ниже), то есть по производительности платы на ATmega не отличаются, отличаются только объемом памяти, количеством ног и интерфейсов/таймеров. Модели Ардуино с МК от производителя ARM, например Arduino DUE, в разы мощнее своих собратьев за счёт 32-битного процессора, но это совсем другая история.

Параметр ATtiny85 ATmega328 ATmega32u4 ATmega2560
Кол-во ног 8 32 44 100
Из них доступны 5 23 24 86
Flash память 8 Kb 32 Kb 32 Kb 256 Kb
EEPROM память 512 bytes 1 Kb 1 Kb 4 Kb
SRAM память 512 bytes 2 Kb 2.5 kB 8 Kb
Каналов АЦП 3 (4 с rst) 6 (8 в SMD корпусе) 12 16
Каналов PWM 3 6 7 15
Таймеры 2х 8bit 2х 8bit 2х 8bit 2х 8bit
    1х 16bit 2х 16bit 4х 16bit
Serial интерфейс Нет х1 х1 х4
I2C интерфейс Нет Да Да Да
Прерывания 1 (6 PCINT) 2 (23 PCINT) 5 (44 PCINT) 8 (32 PCINT)
Платы на его основе Digispark, LilyTiny Uno, Nano, Pro Mini, Lilypad, Strong Leonardo, Micro, Pro Micro, BS Micro Mega, Mega Pro

Таким образом вы должны сразу понять, что, например, Ардуино Уно=Нано=Про Мини=Лилипад по своим возможностям и взаимозаменяемости. Или Леонардо=Про Микро. Ссылки на недорогие китайские Ардуины вы можете найти у меня на сайте. Точно там же вы найдёте ссылки на кучу датчиков, модулей и другого железа, которое можно подключить к Arduino. О возможностях ардуино по работе с другими железками поговорим в одном из следующих уроках.

Программирование


Код. Ничего лишнего

Ардуино программируется на языке программирования C/C++ с соответствующим ему синтаксисом. Встроенный сборщик, препроцессор и компилятор (avr-gcc или Win-AVR) прощают большое количество ошибок и делает многое за пользователя автоматически, мы даже об этом не знаем и не задумываемся. Базовые функции для управления выводами и интерфейсами микроконтроллера, математика и некоторые другие функции/макросы взяты из открытого фреймворка для работы с микроконтроллерами под названием Wiring. Именно из него состоит базовый набор инструментов Ардуино. В связи с этим сами разработчики Ардуино называют язык “упрощённым c++”, и даже дали ему отдельное название – Arduino Wiring.

Тут следует отделить мух от котлет: “из коробки” в Arduino IDE нам доступна огромная куча различных функций и инструментов:

  • Все возможности языка C++, которые предоставляет компилятор: типы данных, операторы и вообще весь необъятный синтаксис. Мы программируем на том же C++, на котором можно программировать в любом другом месте.
  • “Ядро” Ардуино – библиотека Arduino.h, которая автоматически подключается в код. В ней содержатся функции для управления пинами, интерфейсами, а также имеется набор всяких полезных функций и инструментов. А ещё оно отвечает за инициализацию и настройку периферии микроконтроллера при запуске. В ядре кстати лежат стандартные библиотеки для Serial, Wire, SPI и EEPROM.
  • В папке с программой лежит набор стандартных библиотек: для LCD дисплея, шаговика, сервопривода и некоторых других железок.
  • С компилятором идёт набор низкоуровневых библиотек для AVR (сон, progmem, watchdog и многие другие).
  • Компилятор позволяет работать с микроконтроллером “напрямую” при помощи регистров и чтения даташита до утра.
  • Также мы можем писать на ассемблере, взяв под контроль каждый такт работы МК.

Если вы научитесь свободно прогать на Ардуино и вдруг перейдете к разработке программ на том же C++ в более взрослых средах разработки, вы будете неприятно удивлены большим количеством дополнительного кода, который придется писать руками. И наоборот, если умеющий в плюсы (си-плюс-плюсы) человек посмотрит на типичный ардуино-код, он скажет “да как это вообще работает то?”. Компилятор в Arduino IDE настроен на максимальную всеядность и прощение ошибок, потому что это обучающая платформа.

Сейчас вернёмся к такому понятию, как библиотека. Жизнь рядового ардуинщика неразрывно связана с библиотеками, потому что огромное комьюнити за годы своего существования сделало огромное количество этих самых библиотек на все случаи жизни и для всех продающихся датчиков и модулей. Библиотека это набор файлов, в которых содержится дополнительный код, которым мы можем пользоваться просто ознакомившись с документацией или посмотрев примеры. Такой подход называется “черным ящиком”, мы можем даже не догадываться, какой ужас и кошмар (в плане сложности кода) содержится в библиотеке, но с лёгкостью пользоваться возможностями, который этот код даёт. Купили модуль – нашли библиотеку – открыли пример – всё, результат достигнут…

Хейтеры платформы


В мире серьезных программистов и разработчиков очень не любят Ардуино. Почему? Рассмотрим несколько популярных негативных комментариев о платформе.

  • В среде Arduino IDE работа с микроконтроллером упрощена настолько, что ардуинщику вообще ничего не нужно знать о его архитектуре и о том, как он вообще программируется и настраивается: все сделано в виде готовых и понятных функций.
    • С каких пор удобство и простота стали плохими? Для новичка это единственный способ познакомиться с миром робототехники без изучения кипы документации и получения соответствующего образования. Также напомню, что Ардуино создана в первую очередь для обучения, и во вторую – для быстрого и удобного создания прототипов электронных устройств, это её фишка.
  • Это всё конечно хорошо, но скрытый за ширмой дружелюбного “Ардуино Вайринга” код ужасает: за безобидными на первый взгляд функциями кроются полотна кода, который что-то проверят, перепроверяет, перенастраивает уже настроенное и делает многие другие на первый взгляд ненужные вещи. Это безобразие работает очень медленно и занимает кучу места!
    • Да, стандартные функции имеют кучу защит от дурака новичка, они тяжёлые и медленные. Но новичку не понадобится писать такой код, где скорость и память будут критичны! А если понадобится, то к этому времени он уже будет в состоянии писать код оптимально и найдёт на моём сайте или в другом месте в Интернете быстрые аналоги Ардуино-функций или напишет их сам. А ещё мы переписали стандартное ядро Ардуино и сделали его быстрым и резким. И ещё один момент: ядро Ардуино устроено так, что обеспечивает совместимость кода и библиотек для всех Ардуино-плат. Начали делать проект на Arduino NANO и памяти/ног стало не хватать? Переносим проект на Arduino MEGA и продолжаем работать. NANO оказалась слишком велика для проекта? Переносим на ATTiny85, даже не открывая документацию: большинство библиотек работают на всех Ардуино-совместимых платах, это очень жирный плюс, хоть и в ущерб производительности и памяти.
  • Стандартные функции из Arduino.h описывают незначительную часть всех возможностей и настроек, которые есть в микроконтроллере.
    • А никто и не обещал вам HAL! Возможности МК раскрываются при использовании библиотек (см. список библиотек), благо сообщество у платформы действительно огромное. Также всегда можно научиться работать с даташитом и регистрами и настраивать всё что угодно и как угодно вручную.
  • Arduino IDE “скрывает” от пользователя важные низкоуровневые настройки.
    • И правильно делает! Одна ошибка – и можно остаться с заблокированным камнем. При желании через Arduino IDE можно и фьюзы прошить, и под другие частоты настроить, об этом мы говорим вот в этом уроке.
  • Ардуино для детей! Серьёзные дяди работают с “голым камнем”.
    • Всё верно, для детей и домохозяек. Плата Ардуино задумана для создания макетов, прототипирования, её можно рассматривать как часть электронного “конструктора” для обучения. На плате есть вся необходимая обвязка, почему не использовать её даже как сердце проекта?
  • Arduino IDE для детей! Серьёзные дяди работают во взрослых средах разработки.
    • Верно, но есть небольшой нюанс: Arduino IDE официально бесплатная, после простой установки (Далее, Далее, Далее, Готово) она сразу готова к работе: достаточно выбрать плату из списка и начать писать код. Взрослые среды разработки требуют взрослого подхода и порог вхождения для работы с ними несоизмеримо высок. Помимо непростой установки и настройки вас ждут расширенные настройки самого микроконтроллера в ручном режиме, чтение документации и даташитов, “взрослый” интерфейс и множество нюансов в самом программировании и настройках компилятора. Времени на изучение этого всего уйдёт немеренно.
  • Ардуинщики ходят по замкнутому кругу, они никогда не разовьются дальше мигания светодиодом.
    • Почему? Платформа ничем не ограничивает разработчика…
  • На Ардуино нельзя создать что-то реально сложное и интересное.
    • Почему же? Arduino IDE ничем не ограничивает разработчика, можно вообще отказаться от Arduino.h и начать кодить с чистого листа при помощи регистров и ассемблерных вставок, т.е. абсолютно так же, как во взрослой среде разработки. “Мощи” не хватит? Почему то её достаточно для создания 3D принтеров и прочих многоосевых ЧПУ станков, прошивка которых состоит из десятков тысяч строк кода.
  • А STM32 лучше! И в разы мощнее! И возможностей у неё больше! И она дешевле!!!
    • Да, да, да. Но не забывайте про порог вхождения и размер сообщества с контентом, библиотеками и примерами “для новичков”, а также о сложности работы с STM в целом. Посмотрите видосы вот на этом канале и сравните происходящее с работой с Arduino. Что касается возможностей и скорости работы – для большинства любительских проектов Arduino (ATmega328/2560) будет более чем достаточно, особенно если уметь писать оптимальный код.
  • Качество кода “из Интернета” просто ужасное.
    • Да, из-за простых, но понятных стандартных примеров аудитория ардуинщиков выросла очень быстро и буквально завалила интернет своими проектами, завлекая тем самым в это хобби других новичков. 99% учебных примеров, примеров работы с библиотеками и модулями написаны простенько и ужасно не оптимально: int переменные для всего подряд, вездесущий delay, блокирующие циклы и прочее, помимо богомерзких ардуино-функций. Люди берут эти примеры как основу и так и продолжают дальше писать. Но эти люди стоят на пороге очень большой двери под названием робототехника. Перешагнув через этот порог, отбросив все кривые примеры и научившись грамотно выстраивать структуру своего кода, они попадают в мир безграничных возможностей для творчества и исследования, мир бесконечно интересных и разнообразных проектов на Arduino. Для этого я и пишу данные уроки.

Что ещё хочется сказать по поводу негатива от “профессионалов” – в большинстве случаев они просто завидуют: в “их время” для создания даже простенького проекта на базе микроконтроллера нужно было потратить огромное количество времени на изучение документации на английском языке на конкретную модель МК, на все остальные железки и микросхемы в проекте, научиться работать в недружелюбной среде разработки, развести и спаять плату, купить дорогой программатор и прочее прочее. А в наше время можно купить плату за 150р, воткнуть её в USB, запустить программу уровня “блокнот с кнопкой Загрузить” и начать кодить с использованием огромного количества готовых библиотек и примеров для практически любых железок на рынке, а на любой вопрос найти ответ в гугле. Реально, у ребят просто пригорает =)

Видео версия


Важные страницы


делаем своими руками компактные часы

На нашем сайте было написано уже много уроков по созданию различных часов на основе Ардуино и микроконтроллеров - и самые недорогие часы, и цифровые часы на ATMega328, и даже самые стильные электронные часы. Сегодня мы сделаем современные, компактные и удобные наручные часы на основе платы Sparkfun Pro Micro и дисплея ST7789.

Шаг 1. Комплектующие

Для того, чтобы сделать компактные наручные часы на основе Ардуино или аналогов нам понадобятся следующий набор комплектующих:

Плата Arduino

На этот раз мы используем плату Sparkfun Pro Micro 3.3 V 8 MHz.

Дисплей

Используем ST7789 1.3" IPS LCD.

Литий-полимерный аккумулятор

Возьмем для часов 301420 LiPo.

Зарядник LiPo

Используем плату для зарядки LiPo 15 х 15 мм.

Чип RTC

На этот раз мы используем DS3231M, это встроенный кварцевый генератор, никаких дополнительных компонентов не требуется.

Батарея RTC

Необязательно, только если вы хотите сохранить время, даже если батарея LiPo разряжена. MS412FE - это крошечная перезаряжаемая батарея емкостью 1 мАч, согласно спецификации RTC, 1 мАч может сохранять время в течение многих дней.

Ремешок для часов

Самый простой и недорогой вариант - заказать ремешок для часов из ткани шириной 20 мм.

Дополнительно

Дополнительно могут пригодиться, например, диод 1N5822, четыре 6 мм винта M2, лента из медной фольги и несколько проводов.

Шаг 2. Фиксируем плату и дисплей

Используйте небольшой кусок прозрачного пластика как на фото выше, чтобы скрепить вместе Pro Micro и дисплей.

Шаг 3. Подключаем землю

Прочитайте технические характеристики ЖК-дисплея, предоставленные вашим поставщиком.

Отрежьте немного ленты из медной фольги, соедините все выводы GND (земля) и отрицательные выводы дисплея и закрепите на пластине FPC. Затем паяем контакты с медной фольгой.

Шаг 4. Питание

Подсоедините выводы GND платы к медной фольге. Подключите контакты Vcc к выводу Vcc дисплея.

Шаг 5. Подключаем выводы дисплея

Вот краткое описание всех соединений:

LCD  -> Arduino
LED+ -> GPIO 10
SDA  -> GPIO 16(MOSI)
SCL  -> GPIO 15(SCLK)
RST  -> GPIO 18(A0)
DC   -> GPIO 19(A1)
CS   -> GPIO 20(A2)

Шаг 6. Удаляем индикатор питания

Индикатор питания всегда включен и потребляет более 1 мА непрерывно, поэтому лучше его убрать. Нужно распаять и аккуратно снять светодиод.

Шаг 7. Подключаем LiPo батарею

Вот краткое описание всех соединений:

Плата зарядки +ve      -> Pro Micro J1 коннектор рядом с USB сокетом (5V)
Плата зарядки -ve      -> Pro Micro GND пин
Плата зарядки Батарея +ve -> LiPo +ve -> 1N5822 диод -> Pro Micro Raw Pin
Плата зарядки Батарея -ve -> LiPo -ve

Большинство плат зарядки LiPo лучше использовать в качестве входа 5В. Тем не менее, плата Pro Micro не обеспечивает вывод USB 5В. К счастью, разъем J1 рядом с USB-разъемом на самом деле подключен к контакту USB 5В. Внимание! Не паяйте 2 разъема вместе.

Шаг 8. Подключаем RTC

DS3231M очень маленький и требует подключения к крошечной батарее, будьте терпеливы и соедините все вместе:

DS3231M pin 2 (Vcc)  -> плата Vcc
DS3231M pin 5 (GND)  -> плата GND, MS412FE RTC батарея -ve
DS3231M pin 6 (VBAT) -> MS412FE RTC батарея +ve
DS3231M pin 7 (SDA)  -> плата GPIO 2 (SDA)
DS3231M pin 8 (SCL)  -> плата GPIO 3 (SCL)

Шаг 9. Подключаем датчик движения

Мы можем использовать 2 датчика вибрации в качестве датчика движения, чтобы активировать "пробуждение" платы. Однако в часах нет места для установки двух 5-миллиметровых датчиков вибрации. Мы пытались заменить на один 3 мм датчик вибрации и тестировали несколько дней. Но это приводит к неверному пробуждению часов и батарея разряжается в течение дня.

Шаг 10. Программируем

Если вы этого еще не сделали - скачайте и установите Arduino IDE.

Добавить поддержку Sparkfun Pro Micro

Следуйте инструкциям по установке, чтобы добавить поддержку плат Sparkfun: https://github.com/sparkfun/Arduino_Boards

После установки поддержки не забудьте выбрать правильную плату в Arduino IDE:

Сервис -> Плата -> SparkFun Pro Micro (Tools -> Board -> SparkFun Pro Micro)

Сервис -> Процессор -> ATmega32U4 (3,3 В, 8 МГц) (Tools -> Processor -> ATmega32U4 (3.3V, 8MHz))

Библиотека Adafruit RTClib

Используйте Arduino IDE Library Manager для установки RTClib: https://www.arduino.cc/en/guide/libraries

Библиотека Arduino GFX

Добавьте библиотеку Arduino_GFX в Arduino IDE: https://github.com/moononournation/Arduino_GFX.git

Если вы никогда этого не делали, то просто добавьте библиотеку из GitHub, - нажмите зеленую кнопку «Клонировать или скачать», а затем «Скачать ZIP». Далее в Arduino IDE выберите меню: Эскиз -> Включить библиотеку -> Добавить библиотеку .ZIP ... -> выберите загруженный файл ZIP (англ.: Sketch -> Include Library -> Add .ZIP Library... -> ZIP).

Библиотека LowPower

Добавьте библиотеку Arduino_GFX в Arduino IDE: https://github.com/rocketscream/Low-Power.git

Установка такая же, как описано выше.

Основной код часов Arduino  - Watch Core

Основной код наших часов Ардуино можно скачать по ссылке: https://github.com/moononournation/ArduinoWatch.git. Также вы можете скачать ZIP-архив часов ниже:

Пожалуйста, используйте Arduino IDE, скомпилируйте и загрузите RTClibSetRTC.ino, чтобы инициализировать время в RTC. А затем скомпилируйте и загрузите Arduino_Watch.ino.

Шаг 11. Печатаем корпус на 3D-принтере

Скачать схему и проект корпуса можно по ссылке: https://www.thingiverse.com/thing:3799868

Шаг 12. Итоговый результат

Теперь вы можете показать то, что вы сделали своим друзьям! Кроме того, вы также можете:

  • запрограммировать и создать свой собственный циферблат;
  • добавить больше датчиков или компонентов, чтобы они стали, например, умными часами;
  • создать свой собственный корпус для часов.

Ардуино симулятор: подборка лучших программ

Симуляторы Ардуино позволяют новичкам и профессиональным проектировщикам учиться программировать и тестировать идеи.

Моделирование событий

Моделирование событий в реальном времени было основой многих отраслей. На протяжении многих лет некоторые крупные процессы симуляции были областью аэронавтики и авиации. Сегодня симуляторы Ардуино позволяют всем новичкам и профессиональным проектировщикам учиться программировать и тестировать идеи, не опасаясь потери  энергии впустую вместе со своими деньгами.

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

Еще одно большое преимущество симуляторов Ардуино заключается в том, что он поддерживает построчную отладку, поэтому пользователь точно знает, где и в какой строке он или она сделал что-то не так. Симуляторы существуют в различных формах и разработаны для совместимости с основными операционными системами - Windows, Linux и Mac OS. Поэтому, чтобы упростить поиск отличного симулятора Arduino, созданного для экосистемы вашего компьютера мы составили список самых популярных программ.

Симулятор Ардуино от PaulWare

Как следует из названия, этот симулятор Arduino был создан разработчиком по имени Пол. Симулятор с открытым исходным кодом и собрал свою собственную долю фанатов, которые одновременно добавляют свои идеи и создают учебники о том, как использовать симулятор. Этот бесплатный продукт был сделан преимущественно для экосистемы Windows и обеспечивает достаточную поддержку для новичков.

Основными компонентами, которые он обеспечивает для поддержки вашего проекта, являются светодиодный кратковременный выключатель, матричная клавиатура 4 на 4, матричная клавиатура 4 на 4 с ЖК-дисплеем, поворотный переключатель и т.д. YouTube видео предоставит вам достаточно информации для начала использования этого симулятора Arduino.

Для него также предусмотрен специальный раздел на форуме производителя Ардуино, на котором вы можете стать участником, чтобы узнать больше об обновлениях и схемах проектирования.

Simduino для iPad

Этот продукт - платный, разработанный для использования на экосистеме смарт-устройств Apple. Это комплексный симулятор, который позволяет вам узнать о программировании и электронике на платформе Arduino. Он обеспечивает достаточную поддержку большинства языков программирования Arduino C и может использоваться для запуска нескольких проектов в соответствии с потребностями пользователя.

Скачать на iTunes

Эта программа имеет отличный рейтинг на iTunes. Хорошая поддержка помогает своим пользователям понять детали и описания, доступные пользователям на официальном сайте. Приблизительно за 2 доллара вы получите отличный Ардуино симулятор, совместимый с вашим iPad.

ArduinoSim

Скачать с sourceforge

Это кросс-платформенный симулятор Arduino, который выполняет то, что он обещает, обеспечивая отличную платформу для обучения программированию и дизайну схем. Хотя программа не имеет открытого исходного кода этот симулятор бесплатный и дает вам возможность работать в операционных системах Windows и Linux. ArduinoSim был создан на Python для интеграции с окружающей средой Arduino.

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

Arduino Simulator для PC

Сайт: virtronics.com.au

Это также один из лучших симуляторов Arduino по нескольким причинам. Эти причины включают в себя его кросс-платформенные функции, эскизные проекты, отладочные эскизы и возможность удобно и легко разрабатывать сложные идеи. Может работать как на Windows так и для Linux. Пользователи также могут выбрать ЖК-дисплей и тип платы Arduino: Mega, Nano и Leonardo.

Важно отметить, что программа не с открытым исходным кодом, и его функции разрабатываются и дополняются его разработчиками. Существует также много вспомогательной документации и примеров проектов. К сожалению, продукт относительно дорогостоящий стоимостью около 20 долларов США. Но с такими большим количеством функций и отличным инструментом отладки, Arduino Simulator для ПК - отличный выбор, если вы готовы инвестировать немного ваших денег.

Emulare Arduino Simulator

Скачать Emulare

Заинтересованы в многозадачности Arduino? Тогда Emulare - ваш лучший выбор. Этот инновационный симулятор предоставляет пользователю возможность одновременного моделирования нескольких проектов Arduino без каких-либо сбоев. Он также объявлен как кросс-платформенный симулятор из-за того, что он поддерживает как операционные системы Linux, так и Windows.

Emulare был создан для, преимущественно, электротехнических проектов и оснащен богатой библиотекой объектов. Emulare сосредотачивается на микроконтроллерах ATMega, которые позволят вам встраивать целые схемы с элементами памяти AVR, кнопками, переключателями, таймерами, светодиодами и другими компонентами. Удивительно, но Emulare со всеми его функциями и компонентами абсолютно бесплатна и обладает достаточной поддержкой, чтобы помочь пользователям понять ее особенности.

Simulator for Arduino

Продукт, разработанный virtronics, является полнофункциональным симулятором, доступным для студентов и начинающих в мире электроники, всех тек, кто ищет отличный симулятор Arduino. Это кросс-платформенный симулятор, который поддерживается как операционными системами Linux, так и Windows.

Особенности этого симулятора и некоторые его преимущества включают: учебное пособие, освещающее основы скетчей Ардуино; тестирование набросков идей, чтобы увидеть рабочие шаблоны, отладить ваши соединения и разработать виртуальные презентации для новых клиентов. Также важно отметить, что Simulator for Arduino - это не приложение с открытым исходным кодом, но оно бесплатно.

Yenka

Скачать Yenka

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

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

AutoCAD 123D

Перейти на сайт Autodesk

Роль Autodesk в разработке электрических схем на протяжении многих лет нельзя переоценить. 123D - это еще одно из предложений компании Autodesk совместимых с Arduino. Во-первых, важно отметить, что 123D - это приложение САПР, которое имеет специальную функцию для проектирования схем. Поэтому при загрузке бесплатного приложения вы получите как приложение САПР, так и симулятор Ардуино.

Как и другие симуляторы, упомянутые выше, 123D - действительно отличный инструмент для изучения основ программирования Arduino и проектирования схем. Приложение работает на Windows и экосистеме Android. Оно также имеет очень большую базу ресурсов и поддержку (как и большинство продуктов Autodesk) для разработки схем или обучения с нуля. Это приложение настоятельно рекомендуется большинству пользователей.

LTSpice Arduino Simulator

Перейти на LTSpice

LTSpice - это бесплатный универсальный и точный симулятор схем с возможностью моделирования программ и проектов, разработанных для экосистемы Arduino. Симулятор поставляется с множеством функций, которые были разработаны, чтобы упростить симуляцию, и включают в себя его атрибуты схем и форм сигналов.

Это один из немногих симуляторов, который поддерживается как платформами Windows, так и Mac OS. Он очень рекомендуется большим количеством онлайн-ресурсов для облегчения процесса обучения. Как было сказано ранее, симулятор абсолютно бесплатный.

PSpice

Скачать PSpice

Каждый студент, занимающийся электротехникой и электроникой, должен был столкнуться с PSpice в течение месяцев, потраченных на изучение основ проектирования схем и программирования. Но для тех кто не знает что такое PSpice - это интуитивный симулятор, который можно использовать для моделирования Arduino из-за множества функций, интегрированных в приложение. PSpice поддерживается операционной системой Windows и Linux и поставляется в разных модулях или типах.

Студенты могут использовать PSpice Lite, который абсолютно свободен, чтобы изучить основы программирования Ардуино, в то время как компании, преподаватели и другие эксперты могут использовать платный PSpice. PSpice в настоящее время используется в различных отраслях промышленности - автомобилестроении, образовании, энергоснабжении и т.д.

Circuit Lab

Перейти на сайт Circuit Lab Arduino Simulator

Circuit Lab Arduino Simulator - простой схематичный и мощный инструмент моделирования. Этот симулятор был разработан после PSpice, и он был построен преимущественно для использования электриками и инженерами электроники. Его функции позволяют пользователю изучить внутреннюю работу Arduino, реализовать отладку проектов и схем проектирования.

Приложение Circuit Lab не является бесплатным, и это может быть ограничивающим фактором для студентов, которые ищут доступный симулятор Arduino для работы. Приложение работает как в операционных системах Windows, так и в Linux. Развитие программы держится на большом сообществе и имеет достаточное количество вспомогательных материалов, тематических исследований и примеров, которые рассказывают о его возможностях и использовании.

Симулятор EasyEDA

Скачать EasyEDA

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

Это связано с ценой, которая может быть препятствием для некоторых. Помимо этого, существует множество учебных материалов, а также онлайн-сообщество, посвященное обсуждению возможностей EasyEDA.

Circuits-cloud Simulator

Перейти на сайт circuits-cloud.com

Среди всех приложений выше не было еще варианта моделирования в браузере. Тогда как Circuits-cloud - отличный симулятор Ардуино, который может быть использован кем-либо для изучения основ. Приложение разработано только с базовыми конструктивными особенностями, чтобы сделать эскиз и симуляцию веселой и легкой для понимания новичками. Приложение также бесплатное!

Systemvision

Перейти на сайт systemvision.com

Systemvision - еще один яркий облачный симулятор, который можно рассмотреть для симуляции схем Arduino. Это бесплатный онлайн-инструмент с функциями, которые вам помогут изучить и создать проекты. Также вы сможете поделиться своими идеями со своими сверстниками или клиентами, чтобы получать мгновенную обратную связь. Приложение вокруг себя собрало большое сообщество и имеет отличную поддержку со стороны создателей.

Proteus от Labcenter

Скачать Proteus Simulator

Это отличный симулятор Ардуино, который сочетает в себе простоту со множеством функций, для легкого моделирования Arduino. Программа совершила прорыв в различных отраслях, в том числе; автомобильной, интернете-вещей (IOT) и образовании. Совместима с Windows и Linux и стоит, конечно, дорого. Вы можете узнать больше о программе, версиях и сообществе на сайте программы labcenter.com.

benolayinka / arduino-cctalk: библиотека Arduino для устройств ccTalk. Написано для ICT SCA1

перейти к содержанию Зарегистрироваться
  • Почему именно GitHub? Особенности →
    • Обзор кода
    • Управление проектами
    • Интеграции
    • Действия
    • Пакеты
    • Безопасность
    • Управление командой
    • Хостинг
    • мобильный
    • Истории клиентов →
    • Безопасность →
  • команда
  • предприятие
  • Проводить исследования
    • Изучите GitHub →
    Учитесь и вносите свой вклад
    • Темы
    • Коллекции
    • В тренде
    • Учебная лаборатория
    • Руководства с открытым исходным кодом
    Общайтесь с другими
    • События
    • Форум сообщества
.

ccTalk учебник

Существовал очень полезный инструмент для сниффинга последовательного порта под названием HHD Serial port monitor, бесплатный с ограниченной функциональностью в более ранних версиях, но все еще подходящий для сниффинга портов. Позже была выпущена только пробная версия, которая позволяла использовать сниффинг портов всего 14 дней. Я использовал старую версию долгое время, пока… Больше учебника ccTalk, бесплатный инструмент для сниффинга последовательного порта

Обмен сообщениями купюроприемника использует тот же буфер из 5 событий плюс счетчик событий.Но есть некоторые отличия. Купюроприемник может использовать механизм условного депонирования: прочтите счет, обратите внимание на его стоимость, затем примите или отклоните счет в соответствии с инструкциями хоста. Как и в случае обмена сообщениями о монетах Результат B = 0 ... Подробнее ccTalk tutorial, ccTalk на Arduino nano, часть 5, пример купюроприемника

Стоимость монеты из предыдущего примера может не применяться в некоторых юрисдикциях. Полную таблицу стоимости монет можно найти в документации ccTalk, часть 3, стр. 13. Как работать с таким большим диапазоном значений? Самый простой и быстрый вариант для быстрого проектирования - пропустить считывание стоимости монеты и… Подробнее учебник ccTalk, ccTalk на Arduino nano, часть 4, подробнее о значениях идентификаторов монет

На этот раз я буду использовать предыдущий код для настройки, запуска монетоприемника и прослушивания вставленных монет и событий.Для настройки оборудования и программного обеспечения см. Последние два сообщения. Ссылку на исходный код можно найти внизу страницы. Отредактируйте позже, переименуйте папку, содержащую… Больше учебника ccTalk, ccTalk на примере монетоприемника Arduino nano, часть 3

Большинство вещей в нашем мире требует многозадачности. Возьмем монетоприемник или монетоприемник с купюроприемником и бункером. Мы можем сделать эту работу без особой многозадачности, например: включить купюроприемник и прослушать вставленные купюры. Если купюра вставлена, возьмите купюру и отключите купюроприемник. Старт… Больше учебника ccTalk, ccTalk на Arduino nano, часть 2

Некоторое время я думал показать пример с платой микроконтроллера, все еще не понимая, какую из них использовать.Следуя за комментарием Джорди, я решил, что Arduino - это самая простая готовая плата для использования, даже если у меня нет большого опыта работы с Arduino, и у нее есть два основных недостатка: у нее нет настоящего… Еще руководство ccTalk, ccTalk на Arduino nano, часть 1

Итак, вы хотите подключить платежное устройство к своей встроенной машине или компьютеру на базе компьютера и не знаете, какое устройство и протокол использовать. Это наиболее распространенные используемые протоколы, я протестировал более или менее все из них: Протокол последовательных импульсов В основном используется в торговых автоматах или детских поездках… Еще учебник ccTalk, руководство по протоколам приемников купюр / монет и монетоприемников

Всех с Новым годом! На этот раз я сделал пример одновременного управления купюроприемником и монетоприемником по одной линии ccTalk, заархивированный исходный код можно найти на моем Google Диске.Вы можете найти объяснения в исходном коде, но там нет обработки ошибок,… Подробнее ccTalk, приемник счетов и монет Хост-программа ccTalk на Visual Basic с исходным кодом

Это очень простой хост, созданный на Visual Basic 2008, я знаю, я старомоден, я все еще использую XP. Как есть, программа использует COM4 для кабеля ccTalk и COM7 для вывода текстовых сообщений для каждого события монеты. Вы можете найти исходный код на моем Google Диске. All… More Учебник ccTalk, простой хост-приемник монет ccTalk с исходным кодом Visual Basic

Я сделал видео, показывающее использование программного обеспечения, опубликованного в предыдущем посте.Вы можете протестировать программное обеспечение хоста cctalk без реального устройства, время не подходит для некоторых заголовков, но все же является хорошим инструментом для начала. В качестве основного программного обеспечения я использовал SeciCCTalk, потому что это единственный… Подробнее учебник ccTalk, использующий программный эмулятор монетоприемника для тестирования вашего программного обеспечения

Что делать, если у вас нет настоящего устройства для занятий? В одном из предыдущих постов я обещал, что, поскольку для устройства ccTalk нет программного эмулятора, я что-то с этим сделаю, так что вот он.Это бета-версия со многими ограничениями и ошибками, но она отвечает на все… Подробнее учебник ccTalk, программный эмулятор монетоприемника

Сначала прошу прощения за долгий перерыв, в последнее время был очень занят на работе. Это последнее испытание такого рода на данный момент. Цель заключалась в том, чтобы просто сломать лед и оживить устройство, не просматривая более 250 страниц документации. Большинство новичков застряли здесь ... Больше учебника ccTalk, тестирование некоторых заголовков с помощью лотка для монет, часть 1

Теперь приступим к работе с монетоприемником.Я должен сказать, что последовательность команд ccTalk может отличаться для монетоприемников от других производителей, кроме Money Controls, а также требуемые данные могут отличаться. Для незашифрованного последовательного компактного бункера от Money Controls последовательность команд следующая: Введите PIN-код… Подробнее учебник ccTalk, тестирование некоторых заголовков с помощью лотка для монет, часть 2

Во-первых, не забудьте использовать двоичный режим для последовательного порта. Обработка сообщений ccTalk немного сложнее с точки зрения подчиненного устройства.Подчиненное устройство должно своевременно отвечать на асинхронные сообщения, фильтровать сообщения для других устройств на шине ccTalk и, в то же время, должно делать то, что… Еще руководство по ccTalk, несколько слов о низкоуровневой обработке сообщений ccTalk, часть 2, подчиненное устройство сторона

Первым шагом к программному обеспечению ccTalk является выполнение такой функции, как отправка команды и получение ответа для ведущей стороны. и полученная команда события и процедура отправки ответа для ведомой стороны Какую бы платформу или язык программирования вы не использовали, наиболее частой ошибкой для новичков в ccTalk является ... Больше учебника ccTalk, несколько слов о низкоуровневой обработке сообщений ccTalk, часть 1, главная сторона

При разработке универсального хоста ccTalk для монетоприемника полезно посмотреть, какие заголовки реализованы в различных монетоприемниках.В таблице ниже вы можете найти заголовки, относящиеся к монетоприемникам для некоторых распространенных продуктов. Рекомендуемая минимально допустимая реализация требует реализации следующих заголовков: Основные команды: 254 Простой опрос 245 Запрос… Подробнее учебник ccTalk - таблица сравнения, заголовки, реализованные в различных монетоприемниках

Итак, теперь мы знаем положение и стоимость каждой монеты. Проверка исправности монетоприемника с заголовком 232 - «Выполнить самопроверку», поле данных не требуется. Отправьте 2 0 1 232 21, принимающий ответит 1 1 2 0 0 252, поле данных равно нулю, что означает отсутствие ошибки.Если нет, проверьте… Больше учебника ccTalk, те же тесты с монетоприемником, часть 2

Теперь проведем те же испытания с монетоприемником. На моем стенде стоит старый SR3 от Moneycontrols. Есть некоторые отличия от купюроприемника, но они работают примерно так же: проверьте, подключен ли монетоприемник Прочтите некоторую информацию об этом Найдите количество и тип ... Больше учебника ccTalk, те же тесты с монетоприемником часть 1

В последнем посте у нас есть идентификатор счета для каждого кода кредита: EU0005A EU0010A EU0020A EU0050A EU0100A EU0200A EU0500A EU0005B EU0010B, и что получатель может обрабатывать 64 разных счета.Теперь давайте запустим наш купюроприемник на работу: проверьте его на наличие ошибок. Установите режим работы купюроприемника. Включите отдельные купюры, которые мы будем… Больше руководства по ccTalk, тестирование еще нескольких полезных заголовков, часть 2 или «Привет ccTalk Bill acceptor»

Итак, теперь мы знаем, что у нас есть исправный кабель и надлежащий купюроприемник, подключенный к нему. Куда пойти отсюда ? Для начала нам нужно знать, какие законопроекты реализованы и где их найти. В купюроприемнике ccTalk счета адресуются по их кредитному коду от 1 до 254.… Еще учебник ccTalk, тестирование еще нескольких полезных заголовков, часть 1

,Учебник по

ccTalk, ccTalk на Arduino nano, часть 2 - учебник ccTalk

Большинство вещей в нашем мире требует многозадачности.

Возьмем монетоприемник или монетоприемник с купюроприемником и бункером. Мы можем сделать эту работу без особой многозадачности, например:

  • Включить купюроприемник и прослушать вставленные купюры
  • Если купюра вставлена, возьмите купюру и отключите купюроприемник
  • Запустите бункер и выдайте жетоны
  • Начать с начала

Обратите внимание, что плата одновременно обменивается данными только с одним устройством.Хотя довольно медленно. Было бы намного быстрее, если бы мы могли вставить вторую купюру, пока бункер выдаёт жетоны.

Что делать, если мы хотим присоединить монетоприемник? Нам нужно, чтобы и монетоприемник, и купюроприемник работали одновременно и прослушивали события от обоих. Если мы хотим запустить бункер и сделать что-то еще, это становится довольно сложно.

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

  • Process_1: проверить события, выполнить короткую обработку, при необходимости изменить состояние
  • Процесс_2: проверить события, выполнить короткую обработку, при необходимости изменить состояние
  • ….
  • Process_n: проверить события, выполнить короткую обработку, при необходимости изменить состояние
  • Петля

Как бы нам ни хотелось, чтобы процессы бункера, монетоприемника и купюроприемника действительно обменивались данными со своими устройствами в одно и то же время, потому что у нас только одна линия связи, поэтому у нас будет общий ресурс - последовательный порт. Также используется тот же протокол, поэтому было бы разумно иметь отдельный процесс связи, который обрабатывает протокол обмена сообщениями cctalk, который является общим для всех устройств, которые мы используем.На этом процессе мы сосредоточимся в этом посте.

Процессное задание - получить ответ на сообщение cctalk. Почему только ответ? Потому что запрос просто помещается в буфер передатчика за один раз для отправки в фоновом режиме с использованием прерываний последовательного порта. Также мы могли бы просто подождать разумное время и прочитать буфер последовательного приема, но это было бы пустой тратой времени, это займет много времени, чтобы пройти через все наши устройства, а для некоторых требуется определенный интервал для объединения.

Вот блок-схема конечного автомата для процесса связи

Состояние следующее:

  • RXidle - линия связи свободна, никакие другие процессы ее не используют
  • RXloop - сообщение отправлено, ожидает байт обратной петли
  • RXansw - петля прошла нормально, получил ответ,
  • RXcomplete - ответ ok в приемном буфере, который должен быть прочитан процессом, создавшим пул.
  • RXflush - процесс ожидает завершения передачи всеми устройствами после ошибки связи.
  • Все остальные - различные состояния ошибки

RXcomplete и error состояния могут быть изменены только другим процессом.

Процесс, который должен связаться со своим устройством, будет ждать, пока процесс RX перейдет в состояние ожидания, отправит пул, изменит состояние RX на Rxloop очищает счетчик битов и ждет, пока состояния RX не изменятся на конечное состояние, RXcomplete или состояние ошибки ,Конечно, во время ожидания он передает управление следующему процессу для выполнения своей работы. Если сообщение было успешным, оно меняет состояние RX на RXidle, а затем делает перерыв перед отправкой следующего сообщения, чтобы другие процессы могли взаимодействовать со своими устройствами. Если ошибок не обнаружено, в протоколе ccTalk разрешена двусторонняя связь, поэтому следующий процесс может сразу же отправить свое сообщение. В случае состояния ошибки, в зависимости от ошибки, он изменяет состояние RX на сброс, если был получен мусор, или на бездействие, если от устройства не было получено ответа.

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

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

Основная функция отправляет простой пул, считывает идентификатор производителя, идентификатор категории оборудования, код продукта и затем тестирует соленоиды.Последняя команда - одна из немногих команд, которые имеют более длительный таймаут ответа, поэтому у нас будет ошибка тайм-аута. Для связи cctalk используется порт AltsoftSerial, а основной последовательный порт используется для отладки с помощью инструмента Serial Monitor в Arduino IDE, см. предыдущий пост по проводке и прочим подробностям.

Пример довольно очевиден, вызывайте основную функцию RX ccTalkReceive () всякий раз, когда вы чего-то ждете:

Используйте функцию ccTalk_comm_init (), чтобы открыть порт и дождаться RX_state = RXidle

Отправьте команду с помощью ccctsend (command_code, slave_address, data_field_length, dataabytes), вы можете использовать до восьми байтов данных.Если вам нужно больше, перед использованием функции cctsend () можно записать старшие байты прямо в массив TX_buffer, начиная с TX_buffer [12].

Дождитесь, пока RX_state больше или равно RXcomplete.

Если RX_state равно RX_complete, то наш правильный ответ ожидает в массиве RX_buffer [] в необработанном формате: место назначения, длина поля данных, источник, ноль, байты данных, если есть, контрольная сумма. Мы должны перевести состояние процесса RX в состояние Idle, если другому процессу нужна строка, но поскольку в этом примере основной процесс - единственный, который использует строку, мы можем пропустить это.

Если RX_state больше RX_complete, то произошла ошибка. Используйте clearrxerror (), чтобы сбросить ошибку, и дождитесь RX_state = RX_idle перед отправкой нового сообщения.

Реализован миллистимерный класс (для замены функции задержки, которая может заблокировать процесс) с двумя методами startt (int tdelay), которые запускают таймер с задержкой в ​​миллисекундах, и логическим isready (), которое возвращает истину по истечении таймера.

Функции printASCIIdata () и printBINdata () предназначены только для целей отладки, они печатают поле данных из массива RX_buffer [] на основном последовательном порту.

Заархивированный пример можно загрузить с моего диска Google в заархивированном виде.

Нравится:

Нравится Загрузка ...

Связанные

.

ccTalk tutorial, ccTalk на примере монетоприемника Arduino nano, часть 3 - ccTalk tutorial

На этот раз я буду использовать предыдущий код для настройки, запуска монетоприемника и прослушивания вставленных монет и событий. Для настройки оборудования и программного обеспечения см. Последние два сообщения. Ссылку на исходный код можно найти внизу страницы. При дальнейшем редактировании переименуйте папку, содержащую исходный код, как «ArduinoccTalk» после распаковки, папка должна иметь то же имя, что и основной файл.

Так как некоторые заголовки реализованы по выбору производителя, мы не будем останавливаться, если на несущественные заголовки не отвечают, просто продолжаем игнорировать ошибку. Один из них, как вы заметите, - это заголовок 228, «изменить статус запрета главного», который дает ошибку тайм-аута для монетоприемника SR3.

Небольшой остаток для использования функций ccTalk от cctcom.h:

  • использовать cctsend (заголовок, место назначения, длина поля данных, данные 0, данные 1 ,..data 7) для отправки сообщения
  • сделайте что-нибудь еще, но вызовите ccTalkReceive () как можно чаще, пока RX_state> = RXcomplete.
  • Полный ответ можно найти в массиве RX_buffer (поле данных начинается с RX_buffer [4])

Нам нужно знать, какие монеты реализованы с использованием заголовка 184 «Request Coin ID» с положением монеты в качестве параметра и где-то хранить их стоимость.

Зацикливая позицию монеты от 1 до 16, вывод на последовательном мониторе выглядит следующим образом:

Очевидно, нам нужно немного очистить вывод перед его использованием.Этот монетоприемник использует простую и наиболее распространенную кодировку данных монет, как CCVVVI, где CC - это двухбуквенный код страны, VVV - стоимость монеты, а I - выпуск монетного двора. «C» и «I» должны быть буквами, а «V» - цифрами. Незапрограммированные каналы должны быть точками или пробелами. Мусор, который у меня есть для 13–16-го канала, есть потому, что я проигнорировал таблицу, в которой указано только 12 монетных каналов для этого устройства, но я хочу, чтобы мой хост Arduino ccTalk работал также с 16-канальным монетоприемником. В моем примере запрограммированные каналы монет являются смежными, но нигде в протоколе не указано, что они должны быть, поэтому мы будем зацикливать каналы до 16, если не произойдет ошибка тайм-аута связи или не будет получен мусор.

Поле значения монеты представляет собой строку ASCII, мы преобразуем ее в более удобный для компьютера тип unsigned int для использования в таймере и сохраним его в массиве coin_value [16]. Данные состоят всего из шести символов, поэтому проверка и преобразование выполняются по очереди, а не строковыми функциями:

Позднее редактирование: Как вы, возможно, заметили на картинке, есть ошибка при проверке полей данных с пробелами или точками, RX_buffer в условии должен быть от 4 до 9, а не только 4 как есть.Ошибка есть и в исходном коде.

Теперь у нас чистый вывод, значения сохраняются в массиве coin_value [] как unsigned int. Обратите внимание, что это не будет работать с токенами или монетоприемниками с функцией обучения, поскольку их значение не сохраняется в информации идентификатора монеты. Вы можете либо жестко закодировать их значение в памяти Arduino, либо использовать программное обеспечение хоста ПК (см. «Программные инструменты») для изменения идентификатора монеты с помощью заголовка 185 «Изменить идентификатор монеты», вы можете сделать это с помощью Realterm, но это проще с хорошим ПК ccTalk. хост.

Теперь вы можете включить монетоприемник и пул для событий. Должны быть включены как отдельные каналы, так и мастер. В этом примере мы просто включим все каналы монет. Я обнаружил, что заголовок 228 «изменить статус запрета главного» не реализован на SR3, мы просто игнорируем ошибку на тот случай, если она понадобится другому монетоприемнику. Для главного запрета мы используем заголовок 228 с одним байтом данных со значением 1, для отдельных каналов заголовок 231 «изменение состояния запрета» - два байта данных 255 255, все каналы включены.Ответ для обоих должен быть ACK, без данных и командный байт RX_buffer [3] = 0.

Наконец, мы можем объединить монетоприемник для событий, используя заголовок 229 «прочитать буферизованный кредит или коды ошибок». Ответ содержит 11 байтов данных: счетчик событий, результат 1A, результат 1B, результат 2A, результат 2B,…., Результат 5A, результат 5B. Возвращаются пять последних событий (в паре байтов), которым предшествует однобайтный счетчик событий. Каждый раз, когда происходит новое событие, пятое событие теряется, результат с 1 по 4 сдвигается на 2-5, новое событие вставляется в первую позицию, а счетчик событий увеличивается.Хост должен отслеживать счетчик событий, чтобы видеть, сколько новых событий находится в буфере. Счетчик событий начинает с 0 при включении питания, но переполняется до 1. Значение данных можно найти в документации ccTalk, часть 2:

Таблица 2 с кодами ошибок находится в части 3 документации ccTalk, в этом примере она нам не нужна.

Переменная используется для отслеживания событий unsigned int coineventcounter , чтобы обойти переполнение счетчика событий, мы добавляем 255 к счетчику событий перед вычитанием coineventcounter, если результат (сохраненный в buffered_events ) будет отрицательным.Конечно, результат не может быть отрицательным, так как мы работаем с беззнаковыми целыми числами, поэтому мы должны сравнить их перед вычитанием. Что делать, если результат больше 5 и какие-то события были проиграны - на ваше усмотрение. Если вы используете быстрый монетоприемник, где действительно существует вероятность потери некоторых событий, вы можете учесть последние 5 событий. В этом примере в случае переполнения я просто проигнорировал все предыдущие события, вы можете сами внести некоторую обработку ошибок.

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

Вывод на серийный монитор должен выглядеть следующим образом:

Были вставлены четыре монеты и пуговица. Первая ошибка - кнопка отброшена, на второй колода открылась. Исходный код можно скачать с моего Google диска. Я знаю, я использовал ужасную инструкцию goto, чтобы разблокировать программу в случае ошибки при объединении событий, извините. При дальнейшем редактировании переименуйте папку, содержащую исходный код, как «ArduinoccTalk» после распаковки, папка должна иметь то же имя, что и основной файл.Позднее редактирование 2: Как вы, возможно, заметили на картинке, показывающей фильтрацию поля данных для «Запросить идентификатор монеты», есть ошибка в проверке поля данных с пробелами или точками, RX_buffer в условии должен быть от 4 до 9, а не только 4, как есть , Ошибка находится в исходном коде.

Также короткое видео:

Нравится:

Нравится Загрузка ...

Связанные

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *