Форум программистов, компьютерный форум, киберфорум
Робототехника и умный дом
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/367: Рейтинг темы: голосов - 367, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 36

Универсальный контроллер

28.06.2013, 13:39. Показов 67177. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу представить свой "универсальный контроллер" (не хватило фантазии обозвать по-другому). Динный проект образовался спонтанно и развивался в течении нескольких месяцев, так-что получился достаточно объемным. Описать его полностью я не смогу, так-как некоторый функции подзабылись :crazy:
Контроллер позволяет с помощью ПК управлять различными устройствами, и на момент написания статьи это:
- восьми битный порт ввода-вывода;
- восьми канальный 10бит АЦП;
- 2 ШИМ контроллера;
- 2 двигателя постоянного тока;
- 6 сервомашинок;
- шина I2C;
Управление осуществляется по COM-порту, подачей специальных команд. За разбор команд отвечает простейший интерпретатор.
Немного о формате команд. Воспринимаются только заглавные символы. Все слова обязательно должны быть разделены пробелами с обоих сторон !(на данный момент пробелами считаются: $0D, $0A, , ,). Количество пробелов подряд не ограничено. Команды могут иметь неограниченное число параметров. Окончанием команды считается символ ;.
Собственно список доступных команд и их описание.
USORT - команда для настройки соединения с ПК. В качестве параметра задается скорость соединения. Пример: USORT BR_9600 ; установит скорость обмена 9600 бит;
PORT - команда для работы с восьмибитным портом. Параметры: "число", DDR, OR, AND, RD. Пример: PORT 255 ; выведет в порт 255. PORT DDR $FF $AA RD установит все выводы на выход, выведет $AA, и произведет чтение вернув число (в данном случае 170).
ADC - команда для работы с АЦП. Параметры: "число", AREF, IREF. Пример: ADC IREF 0 1 2 3 ; - установит внутренний ИОН, и выведет 4 результата преобразования с каналов 0, 1, 2, 3 соответственно.
PWM - команда для работы с ШИМ. Параметры: "число", А, В, ENABLE, DISABLE. Пример: PWM ENABLE A 10 B 93 ; - разрешает работу ШИМ и установит для канала А 10% заполнение, для канала В 93% заполнение.
MOTOR - команда для работы с двигателями постоянного тока (с поддержкой НЧ программного 8уровневого ШИМ). Параметры: "число", MR, ML, ENABLE, DISABLE. Пример: MOTOR ENABLE MR -8 ML 4 ; разрешает работу двигателей, установит для правого максимальную мощность "назад", для левого половину мощности "вперед".
SERVO - команда для работы с сервомашинками. Параметры: "число", ENABLE, DISABLE. Пример: SERVO ENABLE 0 50 1 90 2 30 ; разрешает работу сервомашинок, установит для 0, 1, 2 угол 50, 90, 30 градусов соответственно.
I2C - команда для работы с шиной I2C. Принцип работы будет понятен на примере работы с микросхемой at24c16 (адрес на шине $A0). I2C SWWWWWWWP $A0 $00 $05 1 2 3 4 ; запишет в микросхему 4 байта ($01,$02,$03,$04) начиная с адреса $0005. I2C SWWWSWRRRRP $A0 $00 $05 $A1 ; выведет 4 байта прочитанные с адреса $0005.
Хватит команд, есть еще несколько, но они менее полезны.
Контроллер основан на МК ATMiko16, работающим на частоте 7.3728MHz.
После прошивки контроллер выглядит так:
[4.94 Кб]

Прошивка протестирована на боте управляемого с ПК, но буковку b я пока не убираю :crazy:
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.06.2013, 13:39
Ответы с готовыми решениями:

Универсальный адаптер
Здравствуйте! Вот собственно добрался я до своего zif адаптера, который мне помогал разработать форум и вот я до него дошел... и собрал....

универсальный Arduino
Доброго времени суток, уважаемые форумчане! Имеется у меня платка Arduino Duemilanove (meago328) Пользуюсь я ей с единственной целью...

Универсальный фильтр
Добрый день! Необходимо найти АЧХ и ФЧХ, но при симуляции ничего не происходит. Помогите пожалуйста найти ошибку.

47
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
28.06.2013, 14:21
Цитата Сообщение от Sphymx55
Описать его полностью я не смогу, так-как некоторый функции подзабылись
Не пишете комментарии в собственных программах, на память надеетесь? А постепеноо всё забывается...

Цитата Сообщение от Sphymx55
I2C - команда для работы с шиной I2C. Принцип работы будет понятен на примере работы с микросхемой at24c16 ...
А SPI-интерфейсом пожертвовали в пользу восьмибитного порта? SPI-ной периферии не меньше, чем для I2C, а некоторые вещи (SD-card, DataFtosh, nRF24L01, ...) только через SPI. Я бы просто совместил SPI с пинами порта, выбор джампером или конфигурацией в AVR EEPROM (с добавлением соответствующей команды).

Цитата Сообщение от Sphymx55
Контроллер основан на МК ATMiko16, работающим на частоте 7.3728MHz.
Почему не выбрали 14.74560MHz ? Производительность была бы вдвое выше.
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
28.06.2013, 14:36
Цитата Сообщение от Sphymx55
. Все слова обязательно должны быть разделены пробелами с обоих сторон !(на данный момент пробелами считаются: $0D, $0A, , ,). Количество пробелов подряд не ограничено. Команды могут иметь неограниченное число параметров. Окончанием команды считается символ ;.
Ещё немного и получится Форт:) (Ваш язык и задача реализуется очень просто в рамках Форт системы для MK, например для AVR amForth)
Есть ещё командный интерпритируемый язык близкий к вашему варианту Tcl т.к. описанных команд не достаточно для создания автономного устройства и в чём
тогда универсальность? (т.е. самостоятельно, применить контроллер уже не получится?)
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
28.06.2013, 14:47
Похоже на контроллер с самопальным "монитором", с чем совместим непонятно.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
28.06.2013, 14:48
Цитата Сообщение от Sphymx55
. Все слова обязательно должны быть разделены пробелами с обоих сторон !(на данный момент пробелами считаются: $0D, $0A, , ,). Количество пробелов подряд не ограничено.
Кстати, об этих "пробелах". Называйте уж их как принято: разделители (delimiters). Нормальный термин. А то неудобно всякий раз объяснять, что "пробел" - это не только ценный мехсобственно пробел, но и ещё три других символа :-)
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 36
28.06.2013, 14:51
Добавить команды для работы с SPI дело пары часов, просто мне этот интерфейс не требовался.
Джамперы прошлый век :) - текущая прошивка умеет конфигуриться из еепромки.
По умолчанию интерпретатор отъедает 1/16 времени мк, и этого хватает для работы на скорости 115200. Меньше кварц - меньше энергопотребление.
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 36
28.06.2013, 15:13
Цитата Сообщение от KPK
Цитата Сообщение от Sphymx55
. Все слова обязательно должны быть разделены пробелами с обоих сторон !(на данный момент пробелами считаются: $0D, $0A, , ,). Количество пробелов подряд не ограничено. Команды могут иметь неограниченное число параметров. Окончанием команды считается символ ;.
Ещё немного и получится Форт:) (Ваш язык и задача реализуется очень просто в рамках Форт системы для MK, например для AVR amForth)
Есть ещё командный интерпритируемый язык близкий к вашему варианту Tcl т.к. описанных команд не достаточно для создания автономного устройства и в чём
тогда универсальность? (т.е. самостоятельно, применить контроллер уже не получится?)

Автономность и не планировалась. Управляющая программа находится на ПК (телефоне) - контроллер лишь исполнитель.
Купил я к примеру акселерометр - что да как непонятно. Цепляю его по I2C, запускаю гипертерминал (или аналог), шлю команды читая даташит и "вживую" вижу как он работает и что выдает :).
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
28.06.2013, 15:14
Цитата Сообщение от Sphymx55
Добавить команды для работы с SPI дело пары часов, просто мне этот интерфейс не требовался.
Дык прошивка сейчас меньше половины памяти занимает. Тут не только SPI, а много чего можно добавить. Но SPI быдо бы хорошо imho.

Цитата Сообщение от Sphymx55
этого хватает для работы на скорости 115200
А как же следующий baudrate, 230400 - не заработает? В прошивку-то он заложен, я даже мысленно сказал "вау" :-)

Цитата Сообщение от Sphymx55
Меньше кварц - меньше энергопотребление.
Эх, староват процессор :-( В новых давно уже есть программируемый делитель системной частоты CKPR, с его помощью можно варьировать быстродействие и экономичность. То есть с кварцем на 14МГц можно "кушать" как на 100кГц, при желании.

I2C-то хоть аппаратный (TWI)? Какой максимальный битрейт обеспечивает?
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 36
28.06.2013, 15:23
Аппаратный I2C оказался очень капризным (несоблюдение последовательности операций на шине приводило к его "зависаниям") поэтому используется программный 100kHz.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
28.06.2013, 15:27
Цитата Сообщение от Sphymx55
Управляющая программа находится на ПК (телефоне) - контроллер лишь исполнитель.
Купил я к примеру акселерометр - что да как непонятно. Цепляю его по I2C, запускаю гипертерминал (или аналог), шлю команды читая даташит и "вживую" вижу как он работает и что выдает :).
То есть используется как интерактивный преобразователь интерфейсов. Штука полезная, но... через одиночные терминальные команды! 8-0
Недели две назад была такая тема, в ней тоже показывали интерактивный преобразователь интерфейсов (есть сайт) - так это сказка! В хорошем смысле этого слова.
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 36
28.06.2013, 15:39
Цитата Сообщение от OtyxPM
Цитата Сообщение от Sphymx55
Управляющая программа находится на ПК (телефоне) - контроллер лишь исполнитель.
Купил я к примеру акселерометр - что да как непонятно. Цепляю его по I2C, запускаю гипертерминал (или аналог), шлю команды читая даташит и "вживую" вижу как он работает и что выдает :).
То есть используется как интерактивный преобразователь интерфейсов. Штука полезная, но... через одиночные терминальные команды! 8-0
Недели две назад была такая тема, в ней тоже показывали интерактивный преобразователь интерфейсов (есть сайт) - так это сказка! В хорошем смысле этого слова.

Интерактивный преобразователь интерфейсов - это лишь одна из фишек :).
С помощью моего девайса можно управлять ботом с ПК (6 сервомашинок и 2 движка ).
Так-же я собирал на нем напряжометр и частотомер.
В прошивке уже сидит генератор сигналов, но оболочку на ПК я еще не делал.
0
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
28.06.2013, 15:40
Цитата Сообщение от Sphymx55
Аппаратный I2C оказался очень капризным (несоблюдение последовательности операций на шине приводило к его "зависаниям") поэтому используется программный 100kHz.
В Proteus проверялась работа прошивки?
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 36
28.06.2013, 15:50
Цитата Сообщение от KPK
Цитата Сообщение от Sphymx55
Аппаратный I2C оказался очень капризным (несоблюдение последовательности операций на шине приводило к его "зависаниям") поэтому используется программный 100kHz.
В Proteus проверялась работа прошивки?

Тестировал на at24c16. Если задать неправильную последовательность операций на шине, то аппаратный I2C "теряет" эту микруху и всегда выдает NACK.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
28.06.2013, 16:11
Цитата Сообщение от Sphymx55
Если задать неправильную последовательность операций на шине, то аппаратный I2C "теряет" эту микруху и всегда выдает NACK.
Это проблема прошивки. Зачем позволять юзеру задавать "неправильную последовательность операций на шине"? Защита от дурака должна быть. А то будет: "тут играть, тут не играть, после этой буквы эту цифру не вводить".
Да и от зависшего состояния TWI избавиться легко. Imho прошивка робота обязана уметь выходить из любых зависаний. Не знаетет кАк - делайте soft-risit.
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 36
28.06.2013, 16:19
Цитата Сообщение от OtyxPM
Цитата Сообщение от Sphymx55
Если задать неправильную последовательность операций на шине, то аппаратный I2C "теряет" эту микруху и всегда выдает NACK.
Это проблема прошивки. Зачем позволять юзеру задавать "неправильную последовательность операций на шине"? Защита от дурака должна быть. А то будет: "тут играть, тут не играть, после этой буквы эту цифру не вводить".
Да и от зависшего состояния TWI избавиться легко. Imho прошивка робота обязана уметь выходить из любых зависаний. Не знаетет кАк - делайте soft-risit.

Зависает не прошивка, а аппаратный I2C. Если дурак изобретательный, то никакая защита не поможет :).
Я использую программный I2C - он НЕ зависает.
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
28.06.2013, 17:37
Назовите хотя бы одно преимущество перед Ардуиной, кроме той что поделка ни с чем ни совместима. Может цена настолько копеечная? Где фото кстати?
P.S. Если контроллер универсальный, какому API соответствуют его команды?
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 36
28.06.2013, 18:26
Цитата Сообщение от omokost
Назовите хотя бы одно преимущество перед Ардуиной, кроме той что поделка ни с чем ни совместима. Может цена настолько копеечная? Где фото кстати?
P.S. Если контроллер универсальный, какому API соответствуют его команды?
А какие API для дистанционного управления МК вы знаете ? Мне знаком только JTAG, но он не имеет человеческого интерфейса.
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
28.06.2013, 18:44
Цитата Сообщение от Sphymx55
...
А какие API для дистанционного управления МК вы знаете ? Мне знаком только JTAG...
Странно упоминание JTAG в качестве API для дистанционного управления.
Для бытовой техники таким API являются RC-5, DMX512. Для робототехники Quik API, SmartCOM, Otfo Dyrist, Alor COM, Plaza2. Наверняка что то не упомянул. Но это какие никакие стандарты.
0
0 / 0 / 0
Регистрация: 25.06.2013
Сообщений: 36
28.06.2013, 19:03
Цитата Сообщение от omokost
Цитата Сообщение от Sphymx55
...
А какие API для дистанционного управления МК вы знаете ? Мне знаком только JTAG...
Странно упоминание JTAG в качестве API для дистанционного управления.
Для бытовой техники таким API являются RC-5, DMX512. Для робототехники Quik API, SmartCOM, Otfo Dyrist, Alor COM, Plaza2. Наверняка что то не упомянул. Но это какие никакие стандарты.

Моя ваша не понимать. Объясните как с помощью RC-5, DMX512, Quik API, SmartCOM, Otfo Dyrist, Alor COM, Plaza2 покрутить двигатель, подрыгать пином или подергать серву через терминал ?
Будет ли это проще чем, к примеру, послать команду "PORT $FF ;" ?
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
28.06.2013, 19:22
Цитата Сообщение от Sphymx55
...
Будет ли это проще чем, к примеру, послать команду "PORT $FF ;" ?
Если вы проектируете что то уникальное, то вам никто не указ, но и команду "PORT $FF ;" можно послать по разному. Можно в текстовом виде, можно в виде команды стандартного протокола.
Преимущество стандартных протоколов в том, что соответствующее оборудование выпускают десятки фирм по всему миру (и главное в Китае). Набрав в поиске AliExpress строку RC5 coder/decoder вы получите кучу ссылок на копеечное оборудование. И не совсем копеечное, и даже совсем не копеечное.
P.S. Я не часто заглядываю в раздел "Робототехника", но и здесь на первом месте топик "Создаем ROBO_API".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.06.2013, 19:22
Помогаю со студенческими работами здесь

Универсальный таймер
Здравствуйте. Подскажите,пожалуйста,какими способами можно уменьшить на выходе таймера nе555 шумы,нестабильность по напряжению?прикреплена...

Универсальный AmbiLight
Подскажите, имеет ли право на жизнь нижеописанная схема? Загорелся желанием сделать на свой ТВ аналог филипсовской подсветки (к тому...

Универсальный программатор
Здравствуйте! Мне очень часто необходим универсальный программатор для прошивки BIOS на компьютерах. Но так как я в этом деле новичок...

Универсальный терминал на AVR
Решил сделать универсальный терминал на экране МЭЛТ 128х64 точки. Терминал будет принимать данные по всем интерфейсам, которые есть в МК....

Универсальный JTAG отладчик
Принесли тут пару роутеров-кирпичей. Решил поиграться с ними, оживить их. Но похоже нужен jtag. Прицениваюсь к СoLinkEX-Clone. Смущает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru