Hatred's Log Place

DON'T PANIC!

Oct 20, 2009 - 5 minute read - programming

Arduino: небольшой отчет по мастер-классу

Итак, в субботу случилось данное событие, всех и себя поздравляю :)

Все исходники по семинару (презентация, схемы, разводка, листинги программ) приложены в конце статьи.

Количество пришедшего народу несколько порадовало, хотя очень расстроило, что не было никого из политена (народное название ДВГТУ), кто сейчас там учится или преподает, особенно электрические машины, ведь, по сути, я продемонстрировал готовый вариант ШИМ управления двигателем, и применить подобную наработку в какой нибудь курсовой или дипломной работе - милое дело.

Вот новых лиц было малова-то: с Русланом Остапенко (учитель информатики из села Раздольного) приехали 4 школьника, надеюсь им было интересно и информация хоть частично осядет в их головах, и было 2 студента из ДВГУ— увидели объявление, заинтересовались.

В общем, главное, что был интерес.

Начал свой рассказ с небольшой демонстрашки, топорной, но да не суть, можно будет после переделать.

В общих чертах рассказал что собой представляет плата Arduino, какие внешние интерфейсы предоставляет.

После беглого знакомства, перешли к демонстрации, того, что я сказал словами.

Первый пример, был типичным из оперы “Hello, world!”, я назвал его - “Hello, Arduino!”, представляет собой простейшую программку, которая дрыгает 13м цифровым выходом, устанавливая там поочередно высокий и низкий уровень. Сердобольные разработчики подумали о начинающих, что бы они смогли сделать быстро свой первый проект: на 13ю ногу посадили светодиод. Так что, дрыгая ногой, мы заставляем мигать его, получается простейший маячок :)

Далее, усложнили этот пример, оставил программу той же, но на 13 ногу посадили простейший генератор прямоугольных импульсов, и, дабы не нагружать ногу коммутацией, а только управлением, добавил простейший ключик на транзисторе. Схемка прилагается.

Результат - тот же маячок, только звуковой.

Есть у нас генератор звука, управляемый автоматически микроконтроллером, что дальше? А дальше первое, что приходит на ум - автоматический генератор азбуки морзе.

Сказано - сделано, теперь уже не меняется схема, а меняется программа, которая стала выбивать морзянкой “Hello, world”, так что, первый полноценный пример хеловорлда.

Далее, думаем, а ведь дергая ногой мы тоже формируем прямоугольные импульсы, а следовательно… А следовательно, что бы издавать звук морзянки, нам даже не нужна никакая внешняя схема!

В качестве примера генерации звука, я ограничился только бип-бип, дальше - полет фантазии.

После этого перешли к ШИМ ((Широтно-импульсная_модуляция|ШИМ (или PWM) - Широтно Импульсная Модуляция (Pulse Width Modulation) )), и опять таки, ничего сложного, по сути, то же дерганье ногой.

Демонстрационный стенд представлял собой ключ на мощном полевом транзисторе, для коммутации силовой цепи, кулер на 12В от старого компьютерного блока питания и сам блок питания стандарта АТ.

Программная часть была реализована с помощью программного ШИМ (без задержек) и с помощью ШИМ на таймере (используя только стандартную библиотеку Arduino ((Подробнее - EN/ RUS))). Там же было реализовано базовое взаимодействие с пользователем через терминальную программу (в демонстрации использовал screen /dev/ttyUSB0 9600).

К этому времени, мы уже задергались ногами, пора уже что-то и вводить. Для этих целей применил обычную PS/2 клавиатуру, но стандартная AT или даже XT вполне тоже подойдут для этих целей, программа только читает скан-коды, все остальное можно почерпнуть в интернет, в частности таблицу этих самых скан-кодов.

Затем перешли к вопросу: а можно сделать гирлянду на новый год? Можно, вот только 14ти светодиодов будет явно маловато, в случае индивидуального управления. Как быть? А так же, как быть, если для управления не хватает 14 цифровых выходов? Ответ находим листая даташиты (по русски - спроврочные листки) на микросхемы логики 74й серии (можно и любую другу, главное фантазия и предоставляемые возможности), находим там чудный образец 74HC595 - сдвиговый регистр ((Что такое и с чем едят, а так же варианты другой логики - Shift_register /Регистр_(цифровая_техника) )).

Из всего умного: при помощи трех интерфейсных проводков (стробирование, клок и данные), накачиваем побитово байт в микруху, после чего переключаем состояние строба с высокого на низкий уровень, и заданные байтом биты становятся активными на выходах микросхемы. В итоге имеем преобразование - 3 выхода в 8. Но и это не все! Есть чудный выход 7’, туда начинает вылазить, что не поместилось в 8 бит, а следовательно, мы можем их цеплять последовательно, получая на тех же самых 3х выходах 8-16-24 и т.д., главное, что бы быстродействия хватило :)

Подробнее популярно про сдвиговый регистр можно прочитать на сайте http://easyelectronics.ru, там же есть хак, как можно управлять регистром по 2м и даже 1 проводу (встречу в производстве - убью, такая фраза про это решение :))

Для демонстрационного стенда нарисовал схемку (gschem(( http://www.gpleda.org/index.html))), сделал разводку (pcb(( http://pcb.gpleda.org))) и по технологии Лазерно-утюжная_технология|ЛУТ сделал печатную плату, сделал с таким расчетом, что бы можно однотипные наращивать в каскады без пайки.

Программная часть представила собой 1 функцию для вывода байта в сдвиговый регистр и вывод цифр от 0 до 255 (от 0b00000000 до 0b11111111 в бинарном виде), индикация - светодиодами.

Теперь можно и собрать гирлянду и управлять сегментными индикаторами, на которые нужно много ног. Но помимо сегментных индикаторов, есть и LCD дисплеи на чипе HD44780((Подробности - EN/ RUS)), по сути является стандартом де-факто. Демонстрационный стенд для подключения этого индикатора по 8битной и 4битной шине был следующим после сдвигового регистра. Программная часть была сделана на собственных функциях (полностью своя реализация работы с дисплеем, используя только справочный листок) и на библиотеки LiquidCrystal, идущий вместе с ПО Arduino.

Уже после семинара, я подключил данный индикатор через сдвиговый регистр, сделав так, что теперь на индикатор тратится 4 вывода, 3 из которых управляют сдвиговым регистром, а 1 заведен на Enable вывод LCD (без этого работа получалась не стабильной, где-то слетали тайминги и индикатор начинал сходить с ума).

На этом мои демонстрационные примеры закончились, и сделали небольшой экспромт: Руслан Остапенко, привез свой модуль Arduino с подключенным цифровым температурным датчиком DS18B20 с выводом строки с температурой на последовательный порт. Соединили RX/TX выходы Arduino, на моем модуле, настроил прием строки и вывод её на дисплей. Монстрообразно, нннно :)

На этом закончили и разошлись, не успел сделать демонстрацию работы по шине i2c, для чего прикупил часы реального времени PCF8583, но, думаю, не последний раз собираемся.

В общем, Arduino хороший способ окунуться в мир микроконтроллеров, без опасности утонуть :)

PS Фото предвидятся.:

Материалы по мастер-классу

  • arduino_seminar_files.tar.bz2 - презентация, схемы, разводка печатных плат, исходные коды для Arduino, схема модуля Arduino 2009 + бонусом мои компоненты для schem и pcb
  • Справочные листки используемых компонент:

Полезные ссылки

Tags: arduino avr programming радио электроника

EeePC: 2.6.31.4 + wifi NetworkManager

comments powered by Disqus