Робот!.. Просыпайся…
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 редактор
Не пропустите интересное!
Підписывайтесь на наши каналы и читайте анонсы хай-тек новостей, тестов и обзоров в удобном формате!
Представлены смартфоны Samsung Galaxy S25, S25 Plus, S25 Ultra. Живые фото и впечатления
Samsung официально представила серию флагманских смартфонов Galaxy S25, включающую три модели: базовую S25, S25+ и S25 Ultra. Традиционно основное внимание уделено улучшению производительности, качеству дисплеев, камерам и функциям на базе искусственного интеллекта
Киевстар установила за год 197 тысяч аккумуляторов и 2700 генераторов для базовых станций Киевстар события в Украине телеком
Киевстар продолжает активно развивать инфраструктуру для стабильной работы своей телекоммуникационной сети, несмотря на энергетические кризисы
Смартфоны Samsung Galaxy S25 покажут на Unpacked 2025 уже сегодня Samsung события в мире
Мероприятие Samsung Galaxy Unpacked 2025 года состоится уже сегодня. 22 января в Сан-Хосе, Калифорния, в 20:00 часов по Киеву. Главной темой презентации станет анонс новых смартфонов, флагманской линейки Galaxy S25.