Инструменты пользователя

Инструменты сайта



// Номенклатура жал T12

Собственно, официальнее некуда:

Размеры, рекомендации по типовому использованию и так далее.

// OpenSource #066

Вышел 66 выпуск электронного приложения к журналу «Системный администратор», а в нем и моя третья статья из цикла «Схемотехника в Linux с помощью gEDA», в которой рассмотрено создание условного обозначения компонент для gschem. Так же сделано небольшое отступление и рассказано о интеграции gschem и pcb при помощи менеджера проектов xgschm2pcb. В общем качаем и читаем: http://osa.samag.ru/get/OpenSource066.zip

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

После этого перешли к ШИМ 7), и опять таки, ничего сложного, по сути, то же дерганье ногой.

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

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

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

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

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

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

Для демонстрационного стенда нарисовал схемку (gschem10)), сделал разводку (pcb11)) и по технологии ЛУТ сделал печатную плату, сделал с таким расчетом, что бы можно однотипные наращивать в каскады без пайки.

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

Теперь можно и собрать гирлянду и управлять сегментными индикаторами, на которые нужно много ног. Но помимо сегментных индикаторов, есть и LCD дисплеи на чипе HD4478012), по сути является стандартом де-факто. Демонстрационный стенд для подключения этого индикатора по 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
  • Справочные листки используемых компонент:

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

7) ШИМ (или PWM) - Широтно Импульсная Модуляция (Pulse Width Modulation)
8) Подробнее - EN/RUS
9) Что такое и с чем едят, а так же варианты другой логики - EN/RU
12) Подробности - EN/RUS

// 0b00100100

Покрутил тут ардуино,точнее прикручивал к нему ЖКИ, для него хоть и есть готовая библиотека, но хотелось разобраться с даташитом и сделать по описанию (задача удалась процентов на 90, т.к. подглядывать в исходники библиотеки пришлось, но, как в итоге оказалось, из-за небольшой ошибки в схемотехнике,так бы моё работать начало).

Но суть не в том, там команды формируются битами и битами же в байте задаются её параметры. По классике жанра делаются примерно такие дефайны в шестнадцатеричном виде:

#define BIT0 0x01
#define BIT1 0x02
#define BIT2 0x04
#define BIT3 0x08
#define BIT4 0x10
#define BIT5 0x20
#define BIT6 0x40
#define BIT7 0x80

или в восьмеричном:

#define BIT0 0001
#define BIT1 0002
#define BIT2 0004
#define BIT3 0010
#define BIT4 0020
#define BIT5 0040
#define BIT6 0100
#define BIT7 0200

тут нетрудно проследить закономерности, разделив биты в группы по 4 (в hex представлении) или по 3 (начиная с нулевого, в oct представлении).

Но голова не резиновая, решил поискать, а не придумали что в C/C++ для непосредственного задания констант в битовом представлении.

Оказалось - придумали, по крайней мере в компиляторах GCC и GCC-AVR можно задавать непосредственно битовое число, используя префикс 0b:

#define BIT0 0b00000001
#define BIT1 0b00000010
#define BIT2 0b00000100
#define BIT3 0b00001000
#define BIT4 0b00010000
#define BIT5 0b00100000
#define BIT6 0b01000000
#define BIT7 0b10000000

или (кому как более наглядно):

#define BIT0 0b1
#define BIT1 0b10
#define BIT2 0b100
#define BIT3 0b1000
#define BIT4 0b10000
#define BIT5 0b100000
#define BIT6 0b1000000
#define BIT7 0b10000000

Не ручаюсь абсолютно на совместимость с другими компиляторами (да и нет её скорее всего), но интересно было бы узнать как там обстоят дела с подобной bin-нотацией констант.

PS да, объединять потом в нужное число или исключать нужные биты:

unsigned char c1 = BIT0 | BIT4 | BIT7; /* включить биты */
unsigned char c2 = c1 ^ BIT4; /*выключить биты */
if(c1 & BIT4) {} /* проверить установку бита */

UPD:
Вот выдержка из документа по GCC, страница 556:

6.56 Binary constants using the ‘0b’ prefix
nteger constants can be written as binary constants, consisting of a sequence of ‘0’ and ‘1’ digits, prefixed by ‘0b’ or ‘0B’. This is particularly useful in environments that operate a lot on the bit-level (like microcontrollers).

Секция 6 этого документа зовется «Extensions to the C Language Family», в начале этой секции говорится:

GNU C provides several language features not found in ISO standard C. (The ‘-pedantic’ option directs GCC to print a warning message if any of these features is used.) To test for the availability of these features in conditional compilation, check for a predefined macro GNUC, which is always defined under GCC.
These extensions are available in C and Objective-C. Most of them are also available in C++. See Chapter 7 [Extensions to the C++ Language], page 547, for extensions that apply only to C++.
Some features that are in ISO C99 but not C89 or C++ are also, as extensions, accepted by GCC in C89 mode and in C++.

сиречь, если захотите публиковать программу, скомпилируйте её с параметром -pedantic, проверьте все предупреждения и… или давайте рекомендации или используйте препроцессорные директивы.

// Микродрель на коленке

Потребовалось сверлить маленькие отверстия в печатной плате. Обычно для таких дел используется микродрель, которая представляет собой моторчик с насаженным цанговым патроном в который уже крепятся сверла.

Посмотрел в Омеге, такая там стоит около 700 рублей, пока соотношение - нужности/цены не в её пользу, но отверстия сверлить нужно. Купил сверла 0.5, 0.7 и 1.0 мм (нужно ещё будет 1.5 мм взять), нашел дома двигатель (мощный движок EG1000 от привода ЭПО), сбил шестеренку…

И тут стал вопрос - а как сверла то крепить? Тут вспомнил, что в наборе «юного химика», у меня должен быть шприц с иглой, снял иглу, ухватил крепко тонкогубцами и стянул пластиковое основание, примерил - туда в аккурат с натягом взалит 1мм сверло, и то хорошо, капнул каплю лактайта, насадил сверло.

На шток двигателя намотал немного изоленты, промазав лактайтом (лучше если усадить термоусадки, но у меня подходяшего диаметра не оказалось).

Cобрал конструкцию, питание подал 12В от старого блока питания, ещё AT. Вращение получилось соосное, попробовал - нормально сверлит дерево, стеклотекстолит в т.ч. с фольгой, так что пока на первое время хватит. Вот только движок сильно греется, так что нужно делать перерывы или сменить на менее мощный.

Конструкция в сборе:
p9280030.jpeg

UPD:
Но в Омеге купил таки микродрель, хотя теперь мало-мало плююсь, вал там из какого-то сверх-мягкого материала, нужно будет отдельно патрон взять на мощный мотор, если что суровое сверлить :)

// Раритеты

Вчера перебирал завалы своей радиоэлектронной элементной базы. Походу копания попались довольно забавные вещички, некоторым место в музее уже :)

Фото смотреть подкатом.

// Интернет радио

Искал, что себе подключить на послушать на работе, в результате ничего подходящего не нашел. Сделал на связке mpd+icecast2 (почитать можно тут и тут).

Адрес: http://hatred.homelinux.net:8000
Добавить в проигрыватель: http://hatred.homelinux.net:8000/radio.ogg

Пару заметок для ArchLinux:

  1. создать директорию: /var/log/icecast и сменить владельца на nobody
  2. прописать в загрузке сначала icecast, потом mpd

Ну и запустил вещание свободной музыки с Magnitune, добавлял при помощи плагина к gmpc - gmpc-magnatune.

ЗЫ сегодня в эфире джаз :)

// Первые игры с Arduino

Купил давно, да вот только руки дошли.

// http//easyelectronics.ru

Да… почитаешь такие сайты и понимаешь, действительно - электроника, это просто :-)

Сайт: http://easyelectronics.ru

Спасибо Дену ака div за ссылку.

// День радио

Ну что, всех радистов, связистов и кто им помогает, с праздником!

ЗЫ а 1 мая открылась навигация маломерных судов…

// Увеличение мощности р/с Midland G7 и Midland GXT-500

Ссылки на материалы по теме:

G7

GXT-500 LPD

Тут информации пока не нашел, видать надеются на штатную мощность. Думается таки стоит брать G-7.

Другое