1

(2 ответов, оставленных в Организационные вопросы)

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

Anwi пишет:

А Motor-Shiled в виде кита будет? Когда ожидать Prototyping shield?

M-Shield Kit выложил. Насчет Prototyping shield число не назову, но будем стараться пошустрее выложить.

Судя по обратной связи часы реального времени действительно применяют многие, но в силу относительной простоты схемы, я так понимаю, успешно прицепляют возможно и без разводки плат.
Вот сегодня сайт обновил - расширился ассортимент Motor-Shiled'ом и Freeduino Nano, а дальше по плану X-Bee и Prototyping shield. Потом можно будет думать про другие модули. Кстати, было сообщение про совмещение на одном модуле таких-же часов, EEPROM и 1-Wire интерфейса (http://freeduino.ru/forum/viewtopic.php?pid=180#p180).

MShield'ы уже в производстве - скоро выкладываем, затем очень быстро выкладываем Prototyping shield, после чего следующим по плану идет XBee - надеемся, что в январе уже будет.

Anwi пишет:

В виде конструкторов модули будут?

Будут обязательно. Все модули с штыревым монтажом будут доступны в Kit вариантах.

To Gewisser: Насчет датчиков температуры DS18x20 по 1-wire на pobot.ru все должно быть нормально написано - для Arduino это типовая задача, и на офф. сайте тоже все описано и библиотека есть: http://www.arduino.cc/playground/Learning/OneWire.
Сам я пробовал на проводе метров в 15 и на паре датчиков - работает, но вообще, для стабильной работы на длинных проводах и с большим числом устройств рекомендуют использовать драйвер шины, например DS2480B.
Ув. Anwi уже писал нам на e-mail свои весьма интересные предложения различных довесков к Freeduino, частично пересекающиеся с нашими планами, там как раз было предложение насчет модуля для шины 1-wire. Будем работать.

To Anwi: Нас склонять не надо - мы сами склонны к общению и новым железкам :). Просто не все успеваем. Сейчас запускаем Motor Shield, Prototyping board. Как эти железки получаются, сразу беремся за XBee и начинаем выдумывать свои модули - в первую очередь 1-Wire.
Еще была мысль силовой модуль выдумать - с опторазвязкой и какими-нибудь симисторами. Либо даже под симисторы оставить клемники, все-таки мощности бывают сильно разные.
Чтобы конечному человеку было проще соорудить нечто ароде такого: http://arduino-ru.blogspot.com/2009/02/220.html (автор, кстати тоже участник форума)
Тут тоже немного надо подумать, а то лично мне сразу захотелось фазового управления.

alexvv69 пишет:

Можно ли ожидать (и если да, то когда) появления в продаже аналогов motor shield?

Аналог именно такого модуля мы сейчас готовим. Планируем к концу месяца выложить.

P.S. А с Вами я уже работал, freeduino работает как часики, спасибо :-)

Спасибо за хороший отзыв.

Пока в ближайших планах подобных модулей нет - больно специфическая железка, хотя и интересная. Вообще, если вести речь не о переделывании старых сотовых аппаратов, то в данный момент на рынке представлено жуткое количество производителей со своими GSM/GPRS модулями с кучей интерфейсов и сильно различающимися возможностями и ценой. Многие наверняка без особых сложностей можно подключить к Freeduino. К сожалению не могу посоветовать конкретную железку. Может кто-то другой предложит?

9

(15 ответов, оставленных в Технические вопросы)

rusmax пишет:

Как можно заставить группу из 4-х входов работать как двоичные? (акромя операторов If и Case )

Если я правильно понял, нужно за один раз считать 4 бита данных, и сложить их в некую переменную, например.
Есть такая возможность, рекомендую почитать тут: http://www.arduino.cc/en/Reference/PortManipulation
Если кратко, то все выводы ATmega168 представлены тремя портами, имеющими имена B, C, D
Цифровые выводы 0-7 принадлежат порту D.
Соответственно можно за один раз прочесть все 8 цифровых выводов 0-7.
Сначала определяем, что выводы будут использоваться на вход:
DDRD = B00000000
Потом можно читать значения
char MyInputs;
MyInputs = PIND;
Функции pinMode, digitalWrite, digitalRead - это просто хитрые обертки вокруг манипуляций с портами.
Может посмотреть в их исходники ...\arduino-0017\hardware\cores\arduino\wiring_digital.c

Возможно ли подключить (и как програмировать FD) индикатор HDSP-2503.

Судя по вытянутой из интернета документации (http://www.farnell.com/datasheets/461139.pdf) этот индикатор требует занять огромное количество выводов. Видимо поэтому готовой библиотеки для Arduino на него я не нашел. Поэтому за 5 минут такую задачу не решить - нужно читать .pdf, и реализовывать протокол обмена данными. Для экономии выводов можно подцеплять какие-то сдвиговые регистры.

Такой же вопрос по AT24C01A-10SI. Тоже самое.

Подключение i2c (как и SPI) EEPROM - достаточно типовая задача, и в интернете есть примеры. И библиотека есть. Для i2c (он же TWI) я вот сразу вот такой нашел: http://www.ghettohax.com/2009/02/i2c-ee … duino.html

...ответы поступают не сразу, поскольку людей на форуме пока мало, а админ не всегда успевает :(

10

(15 ответов, оставленных в Технические вопросы)

rusmax пишет:

А вот что каждый раз получаю я... Строку в библиотеке удалил. Не работает что с первой что со второй версией, как ни крути.

...skipped...

Прошу прощения, победил.

...skipped...

Не работает(как надо) смешанная версия в плане вывода на динамик и светодиод.

...skipped...

Короче покопался еще раз во второй версии библиотеки. Или мне показалось, или там в коментах написано "мол я отказался чтоб 13 нога дергалась в такт телеграфу". Значит это умышленно отключено?

Так и не понял - решились проблемы, или нет.
Вы правы - v0.2 не умеет выводить на светодиод.
А с версией 0.1 все нормально. Нужно только из файла Morse.h удалить строчку (как я выше писал).
Вот собственно пример, на котором я проверял: http://freeduino.ru/images_forum/MorseTest.zip Для него библиотека не нужна - все нужные файлы сложены в одну папку с самой программой - это вполне "законный" способ, только .h файлы тогда нужно подключать через #include не в треугольных скобках, а в двойных кавычках.

11

(15 ответов, оставленных в Технические вопросы)

rusmax пишет:

Все бы ничего, но ни один из них у меня не работает ((( Начал с библиотечного. Прописал все как надо (читай "скопировал") Проверил, оболочка ее видит. При заливке даже простого примера "Всему миру, прием" Фиг. Ошибок вылазит столько, что глаза ломаются.

Попробовал. Действительно сходу не заводится.
Выяснилось следующее:
ссылка на страничке на http://files.shaunoneil.com/arduino/mor … se-0.2.zip - это уже измененная библиотека - чтобы не светодиодом моргать, а динамиком пиликать.
В ней инициализация делается примерно так:

Morse morse(13, 10, 400, 3);

13 - нога светодиода, 10 - частота символов, 400 частота пиликалки, 3 - нога с пиликалкой
Светодиодная версия: http://files.shaunoneil.com/arduino/mor … e-0.1.zip.
Пример на страничке для светодиодной версии.
Кроме того, из файла Morse.h нужно удалить строчку

#include "WConstants.h"

Светодиодную версию попробовал - вроде завелась.
...не всегда авторы пишут грамотные библиотеки и нормально их описывают :(

12

(15 ответов, оставленных в Технические вопросы)

rusmax пишет:

Из этого примера следует, что все выходы шим уйдут с нормального режима работы.

Не все, а только висящие на таймере1 - это выходы 9 и 10.

Тогда лерейдем ко второй задаче:как заставить передавать код Морзе. Например, значение аналлог\входа в данный код который после  на цифровую ногу. Хотел сделать это кодирование с помощью массива, но знаки имеют разную длину.

Если речь идет именно о коде Морзе, то с учетом того, что памяти программ у нас значительно больше, чем ОЗУ, да и еще с учетом переменной длины кода, проще сделать через оператор switch.
Именно так сделано в этих 2-х проектах:
http://www.flatline.net/journal/2008/04 … orse-code/
http://blog.shaunoneil.com/2008/07/26/a … e-library/
в последнем даже целая библиотека имеется.

...а почему именно код Морзе? Принимать сигнал уже человек будет?

13

(1 ответов, оставленных в Технические вопросы)

Подобные симптомы наблюдались по одной из 3-х причин.
1 - неправильно выбран COM-порт в настройках среды Arduino
2 - неправильно выбран тип контроллера в настройках среды Arduino
   (в вашем случае должен быть Duemelanove with ATmega168)
3 - какой-то аппаратный сбой

Если по пп 1,2 все сделано верно, то остается п.3.
Несмотря на то, что перед отправкой все платы проверяются, в них зашивается тестовая прошивка, и проверяются
все выводы микроконтроллера, с платой что-то могло произойти в пути. Просим связаться с нами по e-mail - будем решать проблему заочно, либо осуществлять замену.

14

(15 ответов, оставленных в Технические вопросы)

rusmax пишет:

Я так понял, что из всего выше подсказанного ЭТО более менее подходящее. Но как понимаю самое высокое что можно "выжать" из платы - это 31кГц... Хм... маловато.

Если не сильно менять режим работы таймеров, то да, 31кГц. (timer0 лучше вообще не трогать - от него тактуются ф-ии delay() и  millis()).
Хорошая табличка с частотами и способом изменения есть тут:
http://www.arduino.cc/playground/Main/T … Cheatsheet
Но в принципе, можно сделать ШИМ не 8-битным, а например 1-битным, и тогда получить на выходе 8МГц - вот это уже предел для 16Мгц микроконтроллера.
Нарисовал тут примерчик:

void setup() {
  //Как это работает:
  //Заводим таймер1 на самый быстрый ШИМ режим без делителя чатсоты. Тикать будет на 16МГц.
  //Обнуление таймера при достижени ICR1, при этом ноги 9 и 10 выставляются в 1
  //при достижении таймера OCR1A нога 9 переключается на 0
  //при достижении таймера OCR1B нога 10 переключается на 0
  //Максимально можно получить 8МГц - установив ICR1 = 1, а OCR1A = 0
  //тогда таймер будет считать   0 1 0 1 0 1 0 1 0 1 ...
  //а нога 9 будет перключаться  1 0 1 0 1 0 1 0 1 0 ...
  //Ближайшая к 3.5МГц - это 16Мгц/5=3.2МГц. Нужно сделать ICR1 = 4, а OCR1A = 2
  //тогда таймер будет считать   0 1 2 3 4 0 1 2 3 4 0 1 2 3 4
  //а нога 9 будет перключаться  1 1 1 0 0 1 1 1 0 0 1 1 1 0 0
  //...аналогично по ноге 10 - нужно использовать OCR1B
  
  TCCR1A = B11110010;  //Собственно настройка таймера
  TCCR1B = B00011001;  //Собственно настройка таймера
  ICR1 = 1;            //Выставляем
  OCR1A = 0;           //           на 8МГц
  pinMode (9, OUTPUT);
}

void loop()
{
  ICR1 = 1;            //Выставляем
  OCR1A = 0;           //           на 8МГц
  delay(4000);         //пауза 4 сек.
  ICR1 = 4;            //Выставляем
  OCR1A = 2;           //           на 3.2МГц
  delay(4000);         //пауза 4 сек.
}

И еще вопрос, а куда этот код прописать то? Чтоб получить эффект, попробовать так сказать.

...как видете, вызывать можно где угодно
Подобные трюки конечно немного отклоняются от идеологии "очень простого в работе микроконтроллера", но зато и позволяют "выжать" из него больше.
Очень детальное описание всего функционала микроконтроллера ATmega168 можно взять на сайте Atmel, например тут: http://www.atmel.com/dyn/resources/prod … oc2545.pdf
Это очень серьезная документация, охватывающая все что он умеет, и занимает порядка 400 страниц.
...мне все-таки кажется, что лучше иметь отдельный модулятор для радиосигнала, хотя для каких-то задач может можно и так - "набортными средствами"

15

(15 ответов, оставленных в Технические вопросы)

rusmax пишет:

Неужели никто не знает как это сделать???

Знают наверное, но почему-то не отвечают.
Задачу можно решить разными путями. Самый простой (если больше ничем микроконтроллер заниматься не будет) - это выставлять ногу в 1, делать паузу, выставлять в 0, делать еще паузу. И все это в цикле.
Более правильных путей решения проблемы несколько.
В микроконтроллере ATmega168 есть 3 таймера, и ШИМ на нагаз 3, 5, 6, 9, 10, 11 управляются ими.
По умолчанию на ногах 5 и 6 частота около 1кГц, а на остальных - около 500Гц.
Выставив например через analogWrite(11, 128); значение 128 на 11й ноге - мы получим 50% меандр на частоте
около 500Гц.
Перепрограммируя таймеры можно менять частоту и разрешение таймеров.
Несколько полезных ссылок на английском:
http://softsolder.wordpress.com/2009/02 … frequency/
http://www.arduino.cc/cgi-bin/yabb2/YaB … 764073/all
http://www.cs.mun.ca/~rod/Winter2007/47 … imer0.html
http://www.arduino.cc/cgi-bin/yabb2/YaB … 1195922336
http://usethearduino.blogspot.com/2008/ … duino.html

Если Вы напишете какую частоту нужно получить, я нарисую соответствующий кусочек кода.

16

(2 ответов, оставленных в Технические вопросы)

User пишет:

Хотелось бы посмотреть таблицу соответствия пинов на плате freeduino и портов в ATmega168. Или какую-нибудь библиотеку для их замены в avr-gcc.

Все соответствие видно из принципиальных схем, доступных на сайте. Например http://freeduino.ru/arduino/files/freed … scheme.gif.
Также можно посмотреть тут: http://www.arduino.cc/en/Reference/PortManipulation - здесь в том числе указывается соответствие ног и портов ATmega
Не совсем понятно что имеется в виду под библиотекой.
Строго говоря, программная часть проекта Arduino - это и есть набор библиотек-оберток, а компилируется все все-равно с помощью avr-gcc.

17

(4 ответов, оставленных в Выставка достижений)

Я не нашел похожих с вашими проектов на указаном сайте,

Arduino учебный курс для начинающих - целиком скопированный наш раздел
Программатор из Arduino - урезанный наш текст, частично наши картинки

Мы не шибко напрягаемся по этому поводу. В конце концов, для того мы эту информацию и выкладывали, чтобы она распространялась. Но robocraft.ru, например, всегда дает ссылки на использованные материалы, и в наших глазах они выглядят как-то солиднее.

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

Мы подобные инициативы всегда приветствуем, и поэтому ресурс к посещению рекомендовали. :)

18

(4 ответов, оставленных в Выставка достижений)

Mutant пишет:

Вот нашел интересные проекты  на Carduino

Если честно, то в данном разделе хотелось бы видеть сообщения об успешных реализациях каких-то проектов на базе Arduino-совместимых устройств, написанные самими авторами. В расчете на то, что кто-то другой сможет задать вопросы автору и получить на них компетентные ответы.
Ну а поскольку пока особого наплыва желающих не видно (только Сергей Деменков выложил весьма полное описание), мы рады и просто ссылкам :)

А касательно указанного форума, с одной стороны, наиболее активные его участники смело копируют чужие статьи, в том числе и наши, и даже не указывают авторства. С другой, там же и некоторые интересные задачи решают. Так что все-равно рекомендую к посещению.

Сергей Деменков пишет:

Все выложил. см. в исходном сообщении.

Интересный проект. Я правильно понимаю, что наработки по этой теме уже были? А то больно много для работы на 2 дня. :)

20

(2 ответов, оставленных в Технические вопросы)

sadmi пишет:

Кто нибудь прошивал девайс с помощью AVR Studio или какого-то другого софта?
Дело в том, что например в AVR Studio можно делать отладку и уже отлаженный код загружать в контроллер.

Полученный в AVR Studio .hex файл вполне можно лить в Arduino / Freeduino с помощью AVR-DUDE из комплекта софта Arduino через командную строку. Выглядит это примерно так:

C:\arduino-0016\hardware\tools\avr\bin\avrdude -CC:\arduino-0016\hardware\tools\avr\etc\avrdude.conf -q -pm168 -cstk500v1 -P\\.\COM1 -b19200 -D "-Uflash:w:C:\AVR-Studio\Test\default\Test.hex:i"

Наличие эмулятора/отладчика несомненно является огромным плюсом AVR Studio, но нужно заметить, что если захочется запускать код, написанный для Arduino, придется его править/изменять, т.к. среда AVR Studio без дополнительных телодвижений с Arduino не совместима.

21

(4 ответов, оставленных в Технические вопросы)

realist пишет:

Как прочитать строку, отправленную модулю с компа?

Смотря как Вы ее отправляете. В общем случае все-равно посимвольно, но вопрос стоит в том, что будет являться признаком конца строки. Либо какой-то особый символ (вроде 0, как в C/C++ принято, или "\r\n" как вариант), либо посылать всегда только фиксированное число символов. Можно выдумать такой вариант, что по прошествии time-out'а строка считается прочитанной. Вариантов много.
Может немного подробнее задачу опишите? Я тогда могу какой-нибудь пример кода привести.

22

(22 ответов, оставленных в Технические вопросы)

Athlocatle пишет:

В итоге включил паяльник и просто пропаял наиболее вероятный элемент - кварц, после чего всё заработало.
Внимание, вопросы.
Как вы объясните сей факт?
Какой флюс вы применяете для пайки?

При ручной пайке используем припой и флюсы InterFlux - серьезная компания - на нее грешить вроде не приходится.
Наверное есть какая-то вероятность некачественного кварца.
Как я уже писал, перед отправкой на плату заливается bootloader через разъем ICSP, затем проверяется работа чипа FTDI, и заливается тестовая прошивка уже через USB, после чего проверяется нормальная работа всех выводов.
Если Вас не затруднит, то просим направить плату нам на "разбор полетов", взамен можем выслать такую-же, либо вернуть деньги. Если согласны, пишите на e-mail - обсудим организацию этого процесса.
..."много других вопросов" тоже задавайте

Bobeg пишет:

А причем здесь задержка между отправкой символов на компорт? :)

Ну, символов там выплевывается много - у меня мысль сперва тоже в эту сторону пошла :)

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

Верно мыслите.
Итак, Вы описали 8 массивов по 100 элементов типа int. int в Arduino - 2 байта, итого 8*100*2=1600 байт.
Несмотря на то, что сложится это при компиляции в память программ, чтобы работать с этими данными их нужно будет перекинуть в ОЗУ. ОЗУ у нас 1024 байта. Компилятор умный (оптимизирующий! :)), и перекидывает только то, что нужно. В данном случае, когда используется 4 символа, памяти хватает. Когда используете 5й, памяти начинает не хватать, и такое ощущение, что она начинает пересекаться с буфером последовательного порта.
Из-за этого и лезет непонятный мусор в порт.
Кстати, у меня на версии ПО 0016 проблемы начинаются уже с 4-го символа.
Если в данной конкретной программе заменить int на char для хранения символов, то мы в 2 раза умерим аппетит, и она заработает, но предел в 8-9 символов - это все-таки не то, что нам нужно.
Путь к нормальному решению проблемы - хранить один столбец символа не в 10 байтах, а в 2х (используя каждый бит),
либо перейти на 8-строковые знаки - тогда хватит 1 байта.
Программа конечно усложнится.
Посмотрите тут: http://www.arduino.cc/cgi-bin/yabb2/YaB … 1223449559
Там как раз реализована аналогичная идея, только есть еще одна хитрость - светодиоды (8 штук) подключены не к произвольным выводам, а на так называемый порт PORTD (это выводы с 0 по 7).
И одной записью числа в PORTD выставляется правильное состояние всех 8 светодиодов (подробнее тут: http://www.arduino.cc/en/Reference/PortManipulation).
...на выводах 0 и 1 разведен COM-порт, поэтому связь по последовательному порту будет невозможна.

24

(16 ответов, оставленных в Технические вопросы)

Gnork пишет:

Значит что-то из вот этого ассортиментаhttp://chipdip.ru/search.aspx?mode=simp … amp;show=1 Эту бы информацию на сайте выложить. Как раз там, где "технические характеристики".

Да, именно такие разъемы прекрасно подходят для соединений с freeduino. Шаг 2.54 мм.
Постараемся подробнее отразить это на сайте. Спасибо за комментарии.

25

(22 ответов, оставленных в Технические вопросы)

pashay пишет:

Все просто.

Ничего себе "просто"! :) Я таких хитростей не наблюдал, и повторить не смог.

Виртуальный com-порт ,указанный нами при инсталляции, появляется в списке оборудования ТОЛЬКО после подключения платы к USB (если он не занят другим устройством в данный момент. В этом случае его надо освободить.) Если сначала загрузить среду разработки (IDE), то она подхватит УЖЕ имеющийся COM-порт. Таковым у меня например был порт мышки и будет работать с ним даже после подключения последующего платы.

Все имеющиеся у меня в наличии USB-мышки представляются в системе как HID-устройства, и COM-портов не создают.
Можете написать модель мышки? А также версию операционной системы.

Это хорошо видно по моргающим светодиодам на плате при прокрутке мыши.

Удивительная какая-то ситуация!
Наблюдал подобное лет 10 назад, когда посадил одному человеку на одно прерывание ISA'шный модем и COM-порт (с мышью). Тогда было принято что COM1 и COM3 имеют одно прерывание, и COM2 с COM4 другое. Он мне звонит и сообщает, что "интернет работает только если мышью быстро двигать, а если мышью не двигать, то и странички не грузятся. Чем быстрее двигаешь мышью - тем быстрее интернет".
Я сначала не поверил - думал розыгрыш какой-то.
...может пришлете скриншот с диспетчером устройств нам на e-mail?