Хочу представить свой "универсальный контроллер" (не хватило фантазии обозвать по-другому). Данный проект образовался спонтанно и развивался в течении нескольких месяцев, так-что получился достаточно объемным. Описать его полностью я не смогу, так-как некоторый функции подзабылись
Контроллер позволяет с помощью ПК управлять различными устройствами, и на момент написания статьи это:
- восьми битный порт ввода-вывода;
- восьми канальный 10бит АЦП;
- 2 ШИМ контроллера;
- 2 двигателя постоянного тока;
- 6 сервомашинок;
- шина I2C;
Управление осуществляется по COM-порту, подачей специальных команд. За разбор команд отвечает простейший интерпретатор.
Немного о формате команд. Воспринимаются только заглавные символы. Все слова обязательно должны быть разделены пробелами с обоих сторон !(на данный момент пробелами считаются: $0D, $0A, ' ', ','). Количество пробелов подряд не ограничено. Команды могут иметь неограниченное число параметров. Окончанием команды считается символ ';'.
Собственно список доступных команд и их описание.
USART - команда для настройки соединения с ПК. В качестве параметра задается скорость соединения. Пример: USART 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.
Хватит команд, есть еще несколько, но они менее полезны.
Контроллер основан на МК ATMega16, работающим на частоте 7.3728MHz.
После прошивки контроллер выглядит так:
Собственно прошивка
Прошивка протестирована на боте управляемого с ПК, но буковку 'b' я пока не убираю