Периферийное устройство для МК-152/161. Конструкция выходного дня

Схема, исходные тексты и прошивки простого устройства на микроконтроллере Atmega16, управляемого через порт RS232 посредством ASCII команд. Команды можно посылать из любой терминальной программы или, к примеру, из программируемых калькуляторов МК-152 и МК-161.

Версия 0.5

Добавлена команда выбора серво-привода для управления. Теперь можно управлять до 8 серво-приводами (не одновременно):

UART controller
ver. 0.5, 2009
Usage: [options]
Options:
-?       Print help
-ar      Read byte from PortA
-bwHH    Write byte [0xHH] to PortB
-adc     Read value from ADC7 channel
-servN   Set servo [N] (1-8) for commands
-swAAA   Write angle [AAA] (0-180) to selected servo
-v       Firmware version
Ok

Каждый сервопривод калибруется независимо в отдельной таблице (пока во время компиляции. Динамическая калибровка сервоприводов в TODO списке):

// Servos calibration data
#define NUM_OF_SERVOS               8

const servo_calibration_data_t KServosData[NUM_OF_SERVOS] = 
{
//   0deg   90deg   180deg  Pin
    {600,   1500,   2450,   0},      // Servo #1
    {600,   1500,   2450,   1},      // Servo #2
    {600,   1500,   2450,   2},      // Servo #3
    {600,   1500,   2450,   3},      // Servo #4
    {600,   1500,   2450,   4},      // Servo #5
    {600,   1500,   2450,   5},      // Servo #6
    {600,   1500,   2450,   6},      // Servo #7
    {600,   1500,   2450,   7}       // Servo #8    
};

Был достан из-под кровати и отряхнут от пыли (у современных детей есть куча других интересов, к сожалению, или не к сожалению) конструктор Meccano. Оказалось удобной штукой для робото-тестирования:

Сборка сервопривода:

Сборка сервопривода

Сборка узла поворота (спасибо горячему клею!):

Сборка узла поворота

Сборка шасси:

Сборка шасси

Шасси с установленной базой поворотной руки:

Сборка шасси #2

Серво #1 примерно в 0 градусов, серво #2 примерно в 180 градусов (после включения):

После включения

Серво #1 в 90 градусов:

-serv1
Selected servo:1
Ok
-sw090
Servo 1
Angle: 90
Value: 1500
Ok

Серво 1 в 90 градусов

Серво #1 в 180 градусов:

-sw180
Servo 1
Angle: 180
Value: 2450
Ok

Серво 1 в 180 градусов

Серво #2 в 0 градусов:

-serv2
Selected servo:2
Ok
-sw000
Servo 2
Angle: 0
Value: 600
Ok

Серво 2 в 0 градусов

Серво #2 в 90 градусов:

-sw090
Servo 2
Angle: 90
Value: 1500
Ok

Серво 2 в 90 градусов

Серво #2 в 180 градусов:

-sw180
Servo 2
Angle: 180
Value: 2450
Ok

Серво 2 в 180 градусов

Файлы проекта WinAVR и исходные тексты, вер.0.5
============ Владельцы МК-1хх, присоединяйтесь к тестам! :) =============

Версия 0.4

Изменения: миграция в open-source пакет WinAVR под Windows. Добавление новой команды управления сервоприводом Hitec HS-322HD:

Сервопривод

(картинка сервопривода взята с сайта Hitec RCD)
Управляющий вывод сервопривода Hitec HS-322HD подключен к выводу PC1 порта С микроконтроллера (выводы 'питание' и 'общий', соответственно, на Vcc и GND платы микроконтроллера). Сервопривод управляется посредством ШИМ-сигналов.
Работа с сервоприводом:

UART controller
(ver. 0.4)

Usage: [options]
Options:
-?     Print help
-ar    Read from PortA
-awhh  Write 0xhh to PortA
-br    Read from PortB
-bwhh  Write 0xhh to PortB
-adc   Read from ADC7 channel
-swnnn Write angle to servo (0-180)
-v     Firmware version
Ok

Cервопривод в 0 градусов:

-sw000
Value: 600
Ok

0 градусов

Cервопривод в 45 градусов:

-sw045
Value: 1050
Ok

45 градусов

Cервопривод в 90 градусов:

-sw090
Value: 1500
Ok

90 градусов

Cервопривод в 135 градусов:

-sw135
Value: 1975
Ok

135 градусов

Cервопривод в 180 градусов:

-sw180
Value: 2450
Ok

180 градусов

Перед началом работы сервопривод необходимо откалибровать в файле uartctrl.h:
// Servo calibration data
#define SERVO_0_DEG 600
#define SERVO_90_DEG 1500
#define SERVO_180_DEG 2450

Файлы проекта Programmer's Notepad из WinAVR и исходные тексты, вер.0.4

Версия 0.3

Добавлена команда чтения значения с порта 7 аналого-цифрового преобразователя (АЦП):
-adc Read from ADC7 channel
АЦП настроен на режим 8 бит.
Для экспериментов с АЦП на вход 7 порта А подсоединен переменный резистор с сопротивлением 10 КОм:

Переменный резистор

Пример работы через терминальную программу:
Сброс микроконтроллера

UART controller
(ver. 0.3)

Usage: [options]
Options:
-?     Print usage
-ar    Read from PortA
-awhh  Write 0xhh to PortA
-br    Read from PortB
-bwhh  Write 0xhh to PortB
-adc   Read from ADC7 channel
-v     Firmware version
Ok

Вход АЦП подключен к напряжению питания

-adc
0xff
Ok

Вход АЦП подключен к 'земле'

-adc
0x0
Ok

Переменный резистор в положении 1

-adc
0x2c
Ok

Переменный резистор в положении 2

-adc
0x80
Ok

Добавлены файлы:

Версия 0.2

В версии 0.2 изменены командные опции:
-ar Read from PortA - чтение байта данных из порта А (выключатели)
-bwhh Write 0xhh to PortB - запись байта данных в порт В (светодиоды)
На выводы 0 и 1 порта А повешены выключатели, при нажатии на которые порт
замыкается "на землю" и на нем устанавливается низкий логический уровень:

Картинка кнопки порта А

Пример работы через терминальную программу:
Сброс микроконтроллера

UART controller
(ver. 0.2)
Usage: [options]
Options:
-?     Print usage
-ar    Read from PortA
-awhh  Write 0xhh to PortA
-br    Read from PortB
-bwhh  Write 0xhh to PortB
-v     Firmware version
Ok
-ar
0xff
Ok

Нажат выключатель S1

-ar
0xfe
Ok

Нажат выключатель S2

-ar
0xf9
Ok

Добавлены файлы:

Версия 0.1

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

Если а) все подключено правильно б) выбраны правильный CОМ-порт и скорость (38400 бод) c) частота микроконтроллера установлена в 8 МГц, то после старта микроконтроллера или его сброса в окне терминальной программы должно появиться:

Запуск

В данной прошивке с версией 0.1 реализованы 3 команды, или опции:

  • -? - вывод подсказки
  • -l'hh' - управление 8 светодиодами порта В микроконтроллера
  • -v - вывод версии прошивки

Подробнее о команде -l'hh'. Биты шестнадцатеричного числа 'hh' определяют, какие из светодиодов LED0 - LED7 должны светиться. Например, команда -l02

Картинка команды -l02

высветит светодиод LED1 (на принципиальной схеме он обозначен как LED2):

Картинка светодиода LED1

Команда -lf1

Картинка команды -lf1

высветит светодиоды LED7-LED4 и LED0:

Картика светодиодов 1,4,5,6,7

Почему выбран микроконтроллер Atmega16. По нескольким причинам. Во-первых, он просто у меня есть под рукой.
Во-вторых, он обладает развитым набором различной "периферии" (Ссылка на магазин):
8-разрядный однокристальный микроконтроллер на базе архитектуры AVR-RISC Atmel, которая обеспечивает очень быстрое выполнение программы. 131 команда, выполняеются за один цикл. Схема имеет 32 линии ввода-вывода и содержит программируемый последовательный универсальный асинхронный приемопередатчик, 10-разрядный 8-канальный АЦП, интерфейс SPI, контрольный таймер и компаратор. Есть также три таймера/счетчика, два 8-разрядных и один 16-разрядный. Все таймеры содержат каналы ШИМ, часы реального времени и внутренний осциллятор. Схема имеет функции сброса при включении питания и может работать в 2 режимах пониженного потребления мощности. Программы хранятся в памяти Flash EPROM и могут перепрограммироваться (ISP)..

Конечно, можно все сделать посредством собственных средств МК-152, но, к примеру, здесь есть аналого-цифровой преборазователь и широтно-импульсный модулятор (удобно управлять DC моторчиками). И всего один rs232 провод от ПМК.

В следующих прошивках я хочу добавить команду для управления ШИМ - есть идея создать игровой макет с электромотором и датчиками. К сожалению, пока нет МК-152, так что буду по старинке - из линуксового терминала GtkTerm.

Компилировалось под Linux-ом, при помощи avr-gcc, binutils и avr-libc. Примеры тут и тут

Под Windows есть полностью настроенный открытый пакет WinAVR

Прикрепленный файлРазмер
Package icon uart_controller_scheme_03.zip17.62 KB
Package icon uart_controller_source_project_ver05.zip10.48 KB

Вот только нет пока терминальной программы для МК-152, для управления всем этим.

А нужна ли терминальная программа? Можно пока просто символы в одну сторону передавать, это можно на МК?

Полезен. Терминал, особенно если он способен отображать приходящее из COM-порта в hex-виде — весьма полезная вещь.

МК 52. Доброе Утро !

А МК 52 там зачем ? Для масштаба ? ;-)

_________________
Dima Masalov
FIDO-NET - 2:461/640.9 AKA 2:461/43.9
E-MAIL - mds at ire dot kharkov dot ua

_________________
Dima Masalov
E-MAIL - mds at ire dot kharkov dot ua

"А какой же ты хакер без ноутбука?"(с) :). Нет, просто в кадр попал - у меня места мало на столе.
И это уже не МК-52, а МК-61(52)-AVR :)

МК-61(52)-AVR. Доброе Утро !

И это уже не МК-52, а МК-61(52)-AVR :)

Мутант.
Я так и не понял : он уже работает на AVR ?

_________________
Dima Masalov
FIDO-NET - 2:461/640.9 AKA 2:461/43.9
E-MAIL - mds at ire dot kharkov dot ua

_________________
Dima Masalov
E-MAIL - mds at ire dot kharkov dot ua

Конкретно этот еще нет - это пустой корпус с (+) подключенным 16х2 ЖКД и клавиатурой. Плата с AVR еще
не готова.
А софт уже многое что может из того, что умел оригинал (пока с одинарной точностью).
И даже больше - например, сохраняет программы во внешнем EEPROM.
Но там еще пилить и пилить в сем проекте.

Доделали своего мутанта? Уже два года прошло. Доделали своего мутанта? Можно глянуть?

Нет, все в за мороженном виде, а в связи с покупкой мк-161 вообще отошло на второй план. Правда, на сайте mk61avr в гуглокоде уже трое человек :) может, кто чего и доделает.

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

. (типа удалил дубль)

10 человек. Ну соберём мы через этот форум, скажем, 10 человек — которые за месяц наскребут по 5 тысяч рублей. И что за эти 50 тысяч сможет «СЕМИКО» разработать-выпустить?

10 - это, наверное, даже много. Человек 5 наберется, наверное.

Ежели говорить о новом кальке, то меня сейчас, после пары месяцев эксплуатации МК-161 в ней устраивает все, кроме размеров :)

Признаюсь, иногда было сложно смотреть на твой извилистый путь к МК-161 — даже сложнее, чем на путь Арбинады. На все эти храбрые попытки создать собственный неповторимый ПМК, разные Нокиа, «Лунолёты» на Питоне… Столько таланта, сил и времени распылялось и пропадало, которые можно было сконцентрировано использовать на благо ЭКВМ и сообщества. Так и хотелось встать и воскрикнуть натренированным голосом пророка: «Бросай заниматься глупостями, Истина ЗДЕСЬ!» :-)))

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

Что же до размера — сама платка ЭКВМ маленькая и пустого места в МК-161 очень много. Наверняка можно подобрать корпус поменьше, при желании. Или спроектировать в Блендере и напечатать его на 3D-принтере…

:) извилистый путь - ну да, есть такое

не-е... 10 человек это не акционерное общество. Это микроклуб какой-то. Нет, так не годится. Надо набрать хотя-бы 1000. Для начала.

Ну ладно, я тут новенький. Иду своим извилистым путем. Начиная с TI-86 и Casio 9950. Когда приду к 161 думаю будет что сказать по-серьезнее)))

Тысяча. Чтобы собрать тысячу, уже нужна реклама.

Конечно нужна. Но это дело техники. У меня подозрения есть, что очень много россиян даже не в курсе что есть 161, а может даже не в курсе что есть вообще какие-то там программируемые калькуляторы.

Сегодня был в магазине и обнаружил, что такие вещи можно купить: http://www.verkkokauppa.com/productimages/orig/99791_01.jpg
http://www.verkkokauppa.com/productimages/orig/97961_02.jpg
http://www.verkkokauppa.com/productimages/orig/92440_02.jpg

Но зато все это через UART не управляется :)