+1
Двуногий ходячий робот.
avatar

execom

  • 2 марта 2013, 02:02
0
Странно… Очень странно))) все пошло после записи на плату загрузчика от Nano
avatar

execom

  • 28 января 2013, 10:08
0
1)Собрал Северину на 168-й (16MHz), плата аккуратная (Четкий ЛУТ, Нормальная плата, изменения не вносил кроме разъема питания)
2)Прошил загрузчик через ArduinoIDE (Arduino Diecimila or Duemilanova w/Atmega168)
3)Проверил питание по всем точкам платы
4)Проверил ЭХО
5)Проверил бутлоадер — загружал множество различных скетчей через ICSP — все выводы полностью функциональны
6)Запитал плату через 9v/500mA — источник
7)Сделал следующие настройки
---а)В настройках COM-порта поставил скорость 19200 бот
---б)ArduinoIDE-->сервис-->плата-->Arduino Diecimila or Duemilanova w/Atmega168
---в)ArduinoIDE-->сервис-->Последовательный порт-->COM1(он же единственный в системе)
---г)Загрузил пример Blink (0,5Гц меандр на pin13)

При попытке загрузки скетча ошибка:avrdude: stk500_getsync(): not in sync: resp=0x00
При выполнении на avrdude: avrdude -v -patmega168 -cstk500v2 -PCOM1 -b19200 возвращается следующее:
avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_getsync(): protocol error expect=0x14 resp=0x51


В момент загрузки скетча или чеканья через avrdude на плате сначала срабатывает ресет (т.к. перестает моргать pin13, на плате залит Blink) далее начинают промаргивать RX, TX но не долго и потом все три светодиода молчат в течении 10-12 секунд после чего возникает ошибка и Blink продолжает моргать 13-м пином.

Меры: Неоднократно чистил плату, усиливал толщину дорожек Reset,RX,TX каналов. Менял контроллер прошитый аналогичным образом. Пробовал большую часть комбинаций плат (на основе Atmega168) и на всякий случай всех комбинаций Сервис-Программатор. Проверил полярность и состояние всех электролитов, транзисторов и диодов. Собирать переходник на мах232 не вижу для себя смысла так как в этом случае значительно выгодней было собрать UNO и не знать беды.

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

avatar

execom

  • 28 января 2013, 01:54
+1
Поздравляю всех победителей и участникой.
avatar

execom

  • 2 июня 2012, 14:05
+2
т.е. зимой к данному девайсу можно прилипнуть языком?))ммм… крайне удобная весчь)
avatar

execom

  • 6 февраля 2012, 15:36
0
Прикольно, код в студию))) Передняя левая нога немного косит, плюс на концах не помешают резинки.
avatar

execom

  • 5 января 2012, 19:25
+3
Прочитав этот пост, стало ясно, что в текущем году ваше хобби, наконец-то стало вашей работой, что в общем-то является существенной составляющей счастливой и процветающей жизни. Надеюсь и желаю вам существенного роста популярности в НОВОМ ГОДУ, а так же выполнения заявленный в конце поста установок на следующий год. Так же желаю вашему коллективу и вашим семьям терпения, и сил, так как, в связи с работой магазина времени у вас станет еще меньше.
От себя добавлю, чего хотелось бы увидеть на страницах вашего сайта в НОВОМ ГОДУ, так как на мой взгляд это очень востребовано:
1)Больше статей для начинающих.
2)Хотелось бы видеть обрусение проекта SSC-32 от lynxmotion, либо появления его достойного аналога на страницах вашего портала, в чем и я бы с радостью принял участие.
3)Значительного расширения ассортимента ваших товаров особенно в категориях Датчики, Сервомашинки и Наборы. В частности хотелось бы видеть, какие-нибудь удобные стартовые пакеты для новичков типо таких, широкий спектр сервоприводов различного качества, силы, веса и фирм, датчики движения, расстояния и т.д.

Счастья и удачи вам в новом году!!!
avatar

execom

  • 30 декабря 2011, 23:48
0
Поздравляю с хорошим крафтом)) Я сам с детства не одного девайса не разобрав не выкинул))
avatar

execom

  • 22 декабря 2011, 17:27
0
Существует 2 варианта.
1й Вариант — вы используете 16-ти мегагерцный контроллер например ATMega1280 16AU и на нем установлен кварцевый резонатор 8МГц. В этом случае ваш контроллер будет неверно исчислять временые интервалы с помощью функций delay и delayMicrosecunds (делая паузы в двое более длинные), но при этом аппаратно будет выполнять все действия точно так же, т.е. выдавать значения micros() с дискретностью 4 микросекунды (которые реально будут 8 микросекунд), но количество тактов будет тем же, и множитель будет 16.
2й Вариант — вы используете 8-ми мегагерцный контроллер например ATMega1280 8AU, в этом случае аппаратные делители вычисляющие реальные отрезки времени будут иметь вдвое меньшие значения, что позволит функциям delay и delayMicrosecunds точно вычислять временые интервалы, но при этом для потдержания аппаратной совместивости контролеров функция micros() будет выдавать значения так же с дискретностью 4 микросекнды (реальный а не как в первом случае равным 8-ми), а 4 микросекунды для данного контролера будут соответствовать множителю 8.
avatar

execom

  • 22 декабря 2011, 00:58
0
Отличный мануал. Обязательно прочту, т.б., что с микроконтроллерами работаю всего две недели и это видимо как раз то что мне надо. Кстати объем и качество явно не двух вечеров)))
avatar

execom

  • 18 декабря 2011, 23:21
0
Да побольше бы фоток из разных ракурсов и о электронике хотелось бы услышать… Я бы себе такого завел, да боюсь что у кошки будет инфаркт)
avatar

execom

  • 18 декабря 2011, 13:53
0
Спасибо, большое! Исправил исходник и скрин.
avatar

execom

  • 18 декабря 2011, 13:38
0
ну в общем-то кто хотел тот уже прикрутил ардуино и к PIC-контроллерам и официальный разработчик ардуины выпустил на ARM свою плату DUE Таким образом я не вижу смысла тратить силы на изучение менее удобных платформ, в то время когда лучше изучать и развивать более перспективную ардуину))
avatar

execom

  • 15 декабря 2011, 16:32
0
На мой взгляд если эту платформу «обрастить» нормальными библиотеками, автоматизирующими процесс заполнения этой тучи полей с названиями данными какими-то злыми Си-шниками, то может быть её можно будет пользоваться, а так на фоне ардуины смотрится очень паршиво всякий бред типа:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  GPIO_InitTypeDef gpio;
  GPIO_StructInit(&gpio);
  gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  gpio.GPIO_Pin = BUTTON;
  gpio.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_Init(GPIOA, &gpio);
А вообще я где-то видел платки ARM с ардуино-загрузщиком, поэтому поклонникам этого типа контроллера можно писать с Arduino IDE. Касаемо статьи в целом, очень информативно — респект автору.
avatar

execom

  • 15 декабря 2011, 13:55
0
К несчастью среда разработки не достаточно плотно работает с файловой системой, поэтому создание самораспространяющихся алгоритмов весьма затруднительно, но все же можно например распространять библиотеки ардуино, с модифицированным относительно стандартного кодом, например можно сделать что бы каждый 100-й вызов функции myservo.write(val); заканчивался случайным результатом))) Но это будет далеко не вирус, а скорей злая шутка (hoax). А вообще применяя файловый фаззинг можно попробовать найти код при при открытии которого редактор ардуино будет виснуть (попытка доступа к недоступному для чтения участку памяти) далее необходимо передать адрес смещения на оператор безусловного перехода на код, который отработав (например заразив все имеющиеся исходники и библиотеки), вернет управление редактору кода спозиционировав его на нужный участок исходника начиная с которого нужно загрузить в поле редактора, что бы скрыть тело вируса… Я уверен, что подобным методом можно сделать source-вирус для arduino, но если честно я уже отошел от этих дел.
avatar

execom

  • 15 декабря 2011, 13:22
0
Наверно вы правы, по поводу названия. Переименовал.
По поводу времени выполнения операций, точно можно определить только сосчитав количество операций, открыв hex-код скетча в дизассемблере типа IDA Pro, но можно получить приблизительные значения в самой среде например использую что-то вроде этого:
unsigned long Tik1 = 0;//Счетчик количества тактов 1
unsigned long Tik2 = 0;//Счетчик количества тактов 2
int i1=234;
int i2=567;
int i3=0;
float f1=234.0;
float f2=567.0;
float f3=0;
void setup(){
Serial.begin(9600);
}
void loop(){
  
Tik1 = micros();
i3 = i1 + i2;
Tik2 = micros()- Tik1; 
Serial.print("int plus(tiks):");
Serial.println(Tik2);

Tik1 = micros();
f3 = f1 + f2;
Tik2 = micros()- Tik1; 
Serial.print("float plus(tiks):");
Serial.println(Tik2);

delay(1000);
}
Дискретность метода micros составляет 4 микросекунды поэтому ответы всегда будут округлены до 4-х, но все же оценить реальные трудозатраты контроллера подобный метод позволяет)) у меня выдало:
int plus(tiks): 4
float plus(tiks): 12

следовательно разница довольно существенная))
avatar

execom

  • 15 декабря 2011, 11:36
0
В общем-то я и так оперирую с внутренним счетчиком, просто если делать без delay для организации задержки потребуется выполнять что-то вроде:
int TimeOut = 1000;
unsigned long frequency = 16000000;//Частота кварца
unsigned long I = 0;//Счетчик
.....
void setup(){
.....
I++;
if (I==frequency/1000*TimeOut)
 {
   I = 0;
   //Тут ваши действия
 }
.....
}

А в статье показывается как можно сделать тоже самое но с применение привычного delay.
avatar

execom

  • 15 декабря 2011, 10:56
+1
Спасибо буду стараться повышать качество статей, до этого я писал статьи по компьютерному вирусописанию, поэтому определенный опыт имею:)
avatar

execom

  • 15 декабря 2011, 07:53
0
Вроде бы понял, поправьте меня, если неправильно.

То есть, теоретически, к Uno можно подключить 14 (маломощных) серво, создать для них объекты:
в UNO установлен контроллер ATmega8U2(ATmega328), а в библиотеке Servo имеется код:
// Say which 16 bit timers can be used and in what order
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define _useTimer5
#define _useTimer1 
#define _useTimer3
#define _useTimer4 
typedef enum { _timer5, _timer1, _timer3, _timer4, _Nbr_16timers } timer16_Sequence_t ;

#elif defined(__AVR_ATmega32U4__)  
#define _useTimer3
#define _useTimer1 
typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ;

#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
#define _useTimer3
#define _useTimer1
typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ;

#elif defined(__AVR_ATmega128__) ||defined(__AVR_ATmega1281__)||defined(__AVR_ATmega2561__)
#define _useTimer3
#define _useTimer1
typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ;

#else  // everything else
#define _useTimer1
typedef enum { _timer1, _Nbr_16timers } timer16_Sequence_t ;                  
#endif

Согласно которому распределяется порядок подключения и количество таймеров в зависимости от модели контроллера, в списке IF-ов нет используемого в UNO контроллера, следовательно применяется ELSE, согласно которому будет задействован 1 таймер — №1. Далее по коду можно обнаружить следующий код:
#define SERVOS_PER_TIMER       12     // the maximum number of servos controlled by one timer 
#define MAX_SERVOS   (_Nbr_16timers  * SERVOS_PER_TIMER)

говорящий что максимальное количество сервов определяется как произведения количества возможный таймеров на константу определяющую максимальное число сервоприводов на один таймер, равную 12 по всей видимости, стантартными приемами используя UNO и библиотеку servo можно включить 12 сервоприводов.
avatar

execom

  • 10 декабря 2011, 21:49