Робот!.. Просыпайся…
24.11.08Äłᐨʢ align=»justify»>
В далеком 1999-м я впервые познакомился с ПК, когда пошел в компьютерный кружок. К лету 2000 года я и сосед обзавелись «четверками», а к осени апгрейднули их до «пеньков». Соседу повезло больше, чем мне — не только в плане тактовой частоты приобретенного «тазика», а еще и тем, что в комплекте шел 4x CD-ROM! И, естественно, несколько компактов с программами — в основном игрового назначения.
Мой Компьютер, №14 (518), 25.08.2008
Для начала проще сделать робот на колесах. Например, использовать платформу (назовем её машинкой) от производительных ребят с надписью «Made in China». Запасаемся таким набором элементов: резисторы, конденсаторы, кварц, микроконтроллер, драйвер двигателей (желательно), светодиоды, кренки (стабилизаторы напряжения), кнопки и провода. Необходима плата, на которой будут располагаться элементы. Травление платы в домашних условиях (весьма вредное занятие) можно оставить для истории, существует множество различных монтажных плат, специально созданных для подобных целей. И собственно паяльник с оловом и припоем. Иногда к подобным наборам дописывают наличие «прямых рук», но с этим каждый разберется сам. Поскольку все перечисленное найти дома не то чтобы трудно, а скорее всего, просто невозможно, идем в магазин радиоэлектроники или на пресловутые рынки, а при отсутствии таковых (или нежелании) идем в интернет-магазин. Если заказать через Интернет с оплатой услуг почтовой доставки, есть возможность заплатить меньше; правда, в подобных магазинах может существовать определенная минимальная сумма заказа.
Далее, чтобы войти в курс дела, можно посетить страничку http://myrobot.ru/stepbystep. Начинающие подкрепят свой пытливый разум, да и другие найдут полезное. На этом сайте, как и на многих других (включая их форумы), встречаются примеры на СИ (а куда пропал язык Ассемблер?). Если заглянуть на русскую версию сайта фирмы-производителя микроконтроллеров, по ссылке http://atmel.ru/Articles/Atmel11.htm прочтем «Справку по Ассемблеру для AVR» — рекомендую. Если кому мало — Гуглим себе на здоровье. Без затруднений можно найти и скачать русскоязычные книги, посвященные этой тематике.
Роботы как они есть
Рис. 1 |
На рис. 1 изображен рабочий робот (с отсоединенной платой). Два усика впереди — это датчики (использовались кнопки, выпаянные из старого факс-модема). Предназначение робота — ехать вперед и при столкновении с препятствием (срабатывание одного из двух датчиков) отъехать в нужную сторону и продолжить движение. Все происходящее сопровождается небольшой иллюминацией, светодиоды то горят, то гаснут в зависимости от действий робота.
На рис. 2 (плата) и рис. 3 (исполнительные механизмы) в виде схем нарисован весь робот.
Главная деталь (самая большая с 28-ю контактами) — микросхема ATmega8-16PU (Мега8), это и есть микроконтроллер (МК), для которого мы напишем программу и при помощи 10-контактного разъема и программатора запрограммируем. Число 8 в маркировке — количество памяти в килобайтах, 16 означает максимальную частоту кварцевого резонатора, который можно использовать (частота есть — значит, можно её увеличить, позаботиться об охлаждении и оверклочить для удовольствия), PU — энергопотребление и вид корпуса.
Мега8 — это представитель большой линейки 8-разрядных высокопроизводительных RISC (Reduced Instruction Set Computers) микроконтроллеров общего назначения, объединенных общей маркой AVR, серийно выпускаемых с 1996 года корпорацией Atmel (atmel.com).
Рис. 2 |
Как у каждой программы есть справка (Help), так и у каждого МК есть свой даташит (Datasheet). Программ много, они все разные, но всегда есть что-то общее; ситуация с МК такая же. Есть МК, у которых более 100 ног ввода/вывода, кучи встроенных таймеров, счетчиков, АЦП и еще много страшных слов; ограничить возможности применения подобных МК можно только собственной фантазией. У нашей Меги8 всего 28 ног, и то, как мы видим, половина не задействована.
Рис. 3 |
Микросхема на рис. 2 поменьше (с 16-ю контактами) — это драйвер двигателей, он будет управлять моторами. Правда, только двумя, чего для нашей цели достаточно. Ножка, подписанная Vss, — это питание микросхемы, а есть Vs, на которую нужно подавать питание, необходимое для двигателей. Просьба не перепутать.
Под микросхемы советую раздобыть «кроватки», чтоб при паянии не испортить ценные детали, и в дальнейшем оставить возможность без больших усилий заменить одну микросхему на другую. И не путайтесь в нумерации! Обычно на микросхемах и на разъемах возле первой ноги присутствует кружочек или треугольник, т.е. обозначения всегда есть — главное знать, как они выглядят.
Рис. 4 |
Трехногая деталь (рис. 4) с маркировкой «78L05» называется кренкой, а по-простому стабилизатор (или ограничитель) напряжения, деталь будет при поступающих 6 В (хотя выдерживает и больше) выдавать ровно 5 В, которые необходимы для питания микросхем. Если повезет и найдутся пятивольтовые двигатели, деталь не нужна, и в этом случае провода, идущие на ножку 1 и 3 соединяем между собой, а который на 2-ю — оставляем в сторонке. Если двигатели потребляют меньше 5 В, также необходимо позаботиться о раздельном питании.
Присутствует такой элемент, как кварц (Cr1), он 8-ми мегагерцовый и используется для более точного тактирования МК. Да, конечно же, существует подобный и внутренний, будем учиться работать с обоими — а научившись, будете использовать нужный в зависимости от поставленных целей.
Остальные детали: резисторы (можно использовать в пределах 200-300 Ом) необходимы для того, чтоб не сгорели светодиоды. Конденсаторы: 1000mF — электролитический конденсатор на 1000 микрофарад, М15 — это керамический на 0.15 микрофарад, и 22 (без каких-либо букв) — конденсатор на 22 пикофарад. Они необходимы из-за сильно шумящих (создающих электрические помехи во всей цепи питания) работающих двигателей, которые при включении «тянут на себя одеяло», т.е. создают нежелательные скачки. Короче, конденсаторы нужны для правильной и безотказной работы. Элементы с двумя стрелками (показывающие в сторону от детали — значит, что-то излучают, в данном случае свет) — это светодиоды, они хоть и лампочки, но плюс с минусом путать не советую (для нахождения +/– попробуйте последовательно соединить две пальчиковые батарейки и смотреть, при каком подключении засветится). Соответственно прямоугольники с черными точками — это разъемы (добросовестно выпаянные с того же факс-модема). Можно обойтись без них, но по собственному опыту могу отметить, что с ними намного удобнее.
На рис. 3 элементы, подписанные М1 и М2. Думаю, вы уже догадались, что это двигатели. Один из них вращает заднюю ось, другой поворачивает, но возможен вариант, при котором каждый двигатель отвечает за свою сторону (как у танков), разница только в логике управления и радиусе разворота. К каждому двигателю подключен конденсатор и не подписан (их туда припаяли до меня), где-то было написано — нужны для того, чтоб движки не искрили (приблизительно 0.15 микрофарад, думаю, будет достаточно). S1 и S2 — кнопки, они же датчики, они же усики, заземлены через резистор минус к отсеку батареек. Батарейки, отмеченные Bat1-Bat4, дают необходимое питание в объеме 6 В. Светодиоды (рис. 3) используются как подобие габаритных огней у автомобилей.
Робот и его программа
На чистом харде и наши компьютеры работать не будут; конечно же, нужен софт, и всегда желательно наличие фриварности и возможности бесплатно скачать.
Я знаю только две программы, которые подходят под такие требования, а именно: WinAVR и AVRStudio. По набору возможностей программы очень похожи, но и различий хватает, у каждой есть свои плюсы и минусы. В обоих писать можно как на С так и на языке Ассемблер. Я объяснять буду на примере AVRStudio, но если вам не понравится, пробуйте с WinAVR.
Открываем свой любимый браузер и скачиваем AVRStudio по ссылке http://atmel.com/dyn/resources/prod_documents/AVRStudio4.13SP2.exe (размер 45 Мб). В Интернете можно найти инструкцию по пользованию программой на русском языке. Желательно в названиях каталогов (папок, директорий) кириллицу не употреблять (во избежание предупреждений и ошибок). Надеюсь, с установкой проблем не возникло — запускаем.
Создаем новый проект, если сразу помощник сам не запустился, жмем меню Project/Project Wizard. В появившемся окне давим кнопку New Project, выбираем тип проекта Atmel AVR Assembler. Вписываем имя проекта, например, Led_on_PD0, выбираем путь (также желательно поближе к корню и на латыни), ставим галочку Create folder, жмем Next>, выбираем среду — отладчик, нам подходит AVR Simulator, в правом списке выбираем ATmega8 и жмем на Finish.
Мы создали новый проект, и в открывшемся файле проекта, который будет называться Led_on_PD0.asm, вводим текст программы на языке Ассемблер. Конечно, можно писать на С, но на Ассемблере вы лучше поймете, как работает микроконтроллер. Основные используемые команды для большинства МК семейства AVR одинаковы, а полный набор поддерживаемых команд содержится в даташите. Используя язык Ассемблер, можно с большой точностью посчитать затрачиваемое время на выполнение любого куска кода. Итак, код программы должен выглядеть следующим образом:
.include «m8def.inc»
;подключение библиотеки на Мегу8
.def temp=r16
.def temp1=r17
.def temp2=r18
;создание констант, по-простому — переопределение имен регистров
.org 0x000 rjmp init
;прерывание происходит при сбрасывании RESET
.org 0x012 rjmp timer_0
;при переполнении счетчика таймера попадаем в подпрограмму обработки
;прерывание по переполнению таймера/счетчика0
timer_0:
push temp
;помещение содержимого регистра в стек
ldi temp,0x00
;остановка счетчика
out TCCR0,temp
SET
;установка флага T в регисте SREG
pop temp
;извлечение из стека в регистр
Reti
;Возврат из прерывания
;инициализация
init:
;настройку портов ввода/вывода — можно сравнить с объявлением необходимых переменных
;настройка порта B на выход
ldi temp,0b11111111
out DDRB,temp
ldi temp,0b00000000
out PORTB,temp
;точно так же для портов C и D
;Настройка стека
ldi temp,0x04
out sph,temp
ldi temp,0x5f
out spl,temp
;настройка таймера/счетчика 0
ldi temp,0b00000001
;Разрешаем прерывание
out TIMSK,temp
;установкой «1» в разряд TOIE0
SEI
;Общее разрешение прерываний
;главная программа
Main:
sbi portd,0
;включили LED1
rcall time_1s
;вызвали подпрограмму, которая создает задержку в 1 с.
rcall led_10
;вызвали подпрограмму, которая моргает светодиодом LED1
cbi portd,0
;выключили LED1
rcall time_1s
rcall led_10
rjmp Main
;так создается бесконечный цикл
Далее необходимо написать подпрограммы, которые мы уже вызывали: timer_1s — задержка работающая при помощи внешнего кварца, led_10 — подпрограмма, в которой мы будем управлять морганием светодиода LED1 и в которой вызывается подпрограмма timer_100 — задержка, работающая от внутреннего тактирования. Полный листинг программы указан ссылкой в конце статьи.
Если писали (набирали) программу вручную, и если вы еще нормальный человек — опечатки неизбежны. Вот тут и пригодится достаточно мощный отладчик, встроенный в программу. Жмем F7 и смотрим, что нам сообщают. Все стандартно: красный кружочек — сообщение об ошибке (таких сообщений по одному на каждую ошибку). Читаем-находим-исправляем. Когда мы увидим зеленый кружочек с текстом «Assembly complete 0 errors. 0 warnings» — все хорошо и необходимый нам hex-файл создан.
Кому интересно, жмем Ctrl+F7, так мы запускаем отладчик, и для начала в пошаговом режиме (F11) наблюдаем за работой написанной нами программы. Чтоб видеть изменения, находим вкладку I/O View и, клацая мышкой по плюсам, открываем I/O ATMEGA8, а там TIMER_COUNTER_0, PORTD и CPU, где есть регистр SREG с флагом T (второй квадратик слева), который используется для определения переполнения внутреннего таймера/счетчика. По ходу вашего нажатия на F11 (или клацанья мышкой по соответствующей кнопке) квадратики (они же собственно биты) будут оставаться пустыми или окрашиваться в черный цвет. Клацать там можно по-разному — и до курсора, и до точки останова, и пропуская циклы. Поначалу будет казаться, что программа зависла, а на самом деле она проходит такт за тактом конкретную подпрограмму и терпеливо подсчитывает пройденные доли секунд. Но если вы умудрились наклацать, или надоело ждать, или не знаете, как выключить (попробуйте Ctrl+Shift+F5), открывайте диспетчер задач и, выделив строку AVRStudio.exe, нажимайте Deletе и затем Enter. Когда вдоволь напрактикуетесь, шагнем дальше.
Железное программирование
Рис. 5 |
Для того, чтоб все крутилось-моргало-жужжало, необходимо запрограммировать МК; как уже писалось выше, нужен программатор (рис. 5).
Самый простой программатор состоит из нескольких резисторов и проводов, с одной стороны подключается разъемом к параллельному LPT-порту, с другой — к десятиконтактному ISP-разъему на плате. Провод лучше делать как можно короче (сантиметров 20), иначе возможно возникновение проблем и ошибок, а со временем можно спаять себе USB-программатор.
Одной из популярных программ по прошивкам является PonyProg (LancOS.com). Интерфейс английский, но есть умельцы, которые перевели на русский, при желании можно найти.
Программа поддерживает работу с большим количеством МК, нам необходимо в первом выпадающем списке выбрать AVR micro, во втором — ATmaga8. Потом выбираем пункт меню Setup/Interface Setup…. В появившемся окне переключаем на параллельный с режимом Avr ISP I/O и соответственно LPT1, жмем на кнопку Probe. Если вы не увидели сообщения об успешном завершении теста, значит, забыли присоединить программатор к LPT, еще возможен вариант с неправильной настройкой порта в BIOS-е, или хорошая защита компьютера не дает программе обращаться к порту.
В BIOS-е посоветую включить стандартные настройки, при них обычно порт включен, прерывания разрешены и LPT работает в нормальном режиме. Если еще «Test ok» не видать, проверяем антивирус (вдруг он пожадничал и заблокировал нам доступ), а также файерволл, можно все лишнее отключить и еще попробовать, иначе открываем Help и вспоминаем (а кто-то изучает) английский.
Если тест пройден успешно, переходим к пункту меню Command/Configuration and Security bits и выставляем нужные биты, это необходимо для правильного тактирования МК (т.е. чтоб секунда была секундой, а не увеличивалась/уменьшалась в десятки раз).
Рис. 6 |
Если кому интересно, нажмите кнопку Read и посмотрите, где стоят флажки. Из тех флажков, которые нам доверяют изменить, включаем только CKSEL3, CKSEL1 и CKSEL0, остальные флажки убираем и жмем на кнопку Write. Далее открываем скомпилированный hex-файл, залезая в меню File/Open Deviсe File…, ищем и открываем файл Led_on_PD0.hex, и в окне видим шестнадцатиразрядные числа. Далее для программирования — меню Command/Write All — и происходящее напоминает запись болванки, только намного быстрее. Все!
Отсоединяем плату от программатора и с улыбкой на лице (не исключен детский восторг) наблюдаем, как моргает светодиод. Поздравляю!
Интересно будет увидеть в Беседке фотографии того, что получилось у вас. У меня получилось так (рис. 6).
И на десерт добавлю: схемы, пример готового проекта Led_on_PD0 для AVR Studio — всё это можно скачать по адресу http://jarcom.at.ua/load/1-1-0-17. Увидите обещанный полный листинг программы (Led_on_PD0.asm). Также, скачав архив, вы найдете там файл Dir_motor.asm; когда он будет зашит в МК, заработают двигатели, и робот начнет реагировать на нажатие кнопок (все те же датчики-усики). Настоятельно рекомендую предусмотреть возможность отключать двигатели на момент программирования, иначе уедет вместе с проводами :-).
JaRcom
Web-droid редактор
вологість:
тиск:
вітер:
Тест ноутбука Acer Swift Go 16 (SFG16-72-7669): полный расклад
Обновлённая модель ноутбука Acer Swift Go 16 получила процессоры Intel Meteor Lake, классную OLED-матрицу большого разрешения и емкий аккумулятор. Все это упаковано в красивый алюминиевый корпус со строгим дизайном. Расскажем о новинке подробнее
Первый коммерческий нейроморфный суперкомпьютер подготовлен SpiNNcloud Systems
искусственный интеллект компьютер процессор разработкаSpiNNaker2 превосходит рамки нейроморфной архитектуры, предлагая гибридное ускорение ИИ для проектирования систем «третьей волны искусственного интеллекта»
Пентагон заблокировал доступ россиянам к Starlink в Украине
война интернет события в УкраинеРоссийским войскам удалось продолжать использовать систему Starlink в течение нескольких месяцев через сторонние веб-сайты черного рынка.