Помогите плиз сделать клон ардуиновского проца с бутлоадером

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

 Извелся уже весь, видимо что-то не так делаю. Объясните или ссылку дайте.

Имеется UNO. Нужно сделать такой-же проц как в моей UNe с загрузчиком.

Собрал по схеме:

Чистый с магазина Проц ATMEGA328P-PU

Кварц 16 мГц с двумя кондерами по 22 ПФ

Резистор 10 кОм

Еще подцепил светодиоды:

// 9: Heartbeat - shows the programmer is running
// 8: Error - Lights up if something goes wrong (use red if that makes sense)
// 7: Programming - In communication with the slave

Далее давлю file/examples/ArduiniISP

Заливаю скетч

Heartbeat заморгал.

Далее давлю

Tools/Board/ArduinoUNO

Tools/Serial Port/COM2

Tools/Programmer/Arduini as ISP

Tools/Burn Bootloader

Она мне подумав и поморгая светодиодом 7 ноги в ответ:

avrdude: stk500_paged_write(): (a) protocol error, expect=0x14, resp=0x64
avrdude: stk500_cmd(): programmer is out of sync

После этого Heartbeat не моргает.

Где моя ошибка?

maksim
Offline
Зарегистрирован: 12.02.2012

Попрбуйте на дуине поставить конденсатор между RESET и GND на 10 мкФ или больше, вот как здесь

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

У меня так через раз шилось. Лучше попробуй через avrdude 

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

А зачем вы так дуину подключили ? Дивный бред.

Цепляйте rt к rx , tx к tx reset к reset , gnd к gnd. 

Питание должно быть на обоих платах.

maksim
Offline
Зарегистрирован: 12.02.2012

nestandart пишет:

А зачем вы так дуину подключили ? Дивный бред.

Цепляйте rt к rx , tx к tx reset к reset , gnd к gnd. 

Питание должно быть на обоих платах.


 А бутлоудер сам волшебным образом прошьется? 

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

 Спасибо за отклик. А что значит через AVRdude?

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

 Спасибо за отклик. Да, пробовал так сделать, результат тот же.

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

pelmen пишет:

 Спасибо за отклик. Да, пробовал так сделать, результат тот же.

Имею ввиду про конденсатор...

leshak
Offline
Зарегистрирован: 29.09.2011

Если еще актуально:

Внимательно читаем по пунктам:

http://arduino.cc/en/Tutorial/ArduinoISP

 Пункт 2 - delay(40) на delay(20) заменили?

Пункт 5 - вообщем-то Максим уже подсказал, но это было сразу написанно в мануале :)

Пункт 6 - после заливки скетча ArduinoISP, но ДО прошивки бутлоадера нужно выбрать в Boards плату аналог которой собран на макетке, а не которой шьете. Вот тут попробуйте выбрать выбрать другую плату на 328-камне. Например ""Arduino Nano w/ ATmega328" все-таки она как-то более похожа на "Голый камень" :) Бутлоадер чуток другой, да и скорость залива пониже.

Ну и 

>Еще подцепил светодиоды:

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

 

 

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

leshak пишет:

Если еще актуально:

Внимательно читаем по пунктам:

http://arduino.cc/en/Tutorial/ArduinoISP

 Пункт 2 - delay(40) на delay(20) заменили?

Пункт 5 - вообщем-то Максим уже подсказал, но это было сразу написанно в мануале :)

Пункт 6 - после заливки скетча ArduinoISP, но ДО прошивки бутлоадера нужно выбрать в Boards плату аналог которой собран на макетке, а не которой шьете. Вот тут попробуйте выбрать выбрать другую плату на 328-камне. Например ""Arduino Nano w/ ATmega328" все-таки она как-то более похожа на "Голый камень" :) Бутлоадер чуток другой, да и скорость залива пониже.

Ну и 

>Еще подцепил светодиоды:

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

 

 

Купил 168 камень. 

после долги мучений прошил, но не через IDE, а напрямую через дудку и с литерой F.

Заработало.

Батник был следующий:

::Writing bootloader (change COM3 to your port)
::Прошиваем bootloader (порт COM3 нужно поменять на Ваш)
avrdude -C avrdude.conf -p m168 -c avrisp -P COM2 -b 19200 -e -U flash:w:ATmegaBOOT_168_diecimila.hex -F
::Writing fuse and lock bits
::Прошиваем fuse и lock биты
avrdude -C avrdude.conf -p m168 -c avrisp -P COM2 -b 19200 -Uefuse:w:0x00:m -Uhfuse:w:0xdd:m -Ulfuse:w:0xff:m -Ulock:w:0x0F:m -F

Какие ключи нужно прошить в 328 камень, что-бы он заработал?

Если скините текст для батника, буду признателен.

 

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

+1 также не знаю как прошить 328 камень только я шью через Bit-Bang программатор
ПОМОГИТЕ!!!!
 

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011
pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

LEVV2006 пишет:

ого вроде нашёл! http://www.codingwithcody.com/2011/04/arduino-default-fuse-settings/ 

Странно. У меня все так и было с ключами. Видимо я этот 328 камень своими эксперементами в угол загнал.

В общем не работает, нужно новый покупать.

А вот следующий вопрос. Лок ключ ( например -Ulock:w:0x0F:m) где по ним разблюдовку взять?

leshak
Offline
Зарегистрирован: 29.09.2011

LEVV2006 пишет:

ого вроде нашёл! http://www.codingwithcody.com/2011/04/arduino-default-fuse-settings/ 

Это, так же, можно подсмотреть в файле

В файлике arduino-1.0\hardware\arduino\boards.txt

 

leshak
Offline
Зарегистрирован: 29.09.2011

 >Батник был следующий:

Попробуйте, все-таки, повыбирать другие платы в ArduinoIDE (как я писал выше), как видите, в вашем батнике используется другой бутлоадер. Не тот который для уны (optiboot_atmega328.hex). И скорость пониже. загляните в boards.txt, там для 328 камня еще, как мнинмум ATmegaBOOT_168_atmega328.hex есть.

>А вот следующий вопрос. Лок ключ ( например -Ulock:w:0x0F:m) где по ним разблюдовку взять?

А в библии (даташите) смотрели? Да и гуглом - куча статей, Online калькуляторов для фузе битов и т.п. - валом.

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

leshak пишет:

LEVV2006 пишет:

ого вроде нашёл! http://www.codingwithcody.com/2011/04/arduino-default-fuse-settings/ 

Это, так же, можно подсмотреть в файле

В файлике arduino-1.0\hardware\arduino\boards.txt 

Оо спасибо. Не знал. Там действительно всё есть!

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

LEVV2006 пишет:

leshak пишет:

LEVV2006 пишет:

ого вроде нашёл! http://www.codingwithcody.com/2011/04/arduino-default-fuse-settings/ 

Это, так же, можно подсмотреть в файле

В файлике arduino-1.0\hardware\arduino\boards.txt 

Оо спасибо. Не знал. Там действительно всё есть!

Во блин. Под носом вся инфа, а я инет весь перерыл. 

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

Хорошо. С этим разобрались.

Далее колдуем с ключами.

Задача. 

Есть два контроллера АТмега. Оба нужно запустить от тактового генератора одного из них.

Другими словами из одного нужно вытащить 16 мГц и засунуть их в другой.

Какие проставлять ключи у ведущего контроллера, что-бы с RB0 засвистело?

Какие ключи нужно поставить у ведомого, что-бы он запустился от внешнего генератора?

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

leshak
Offline
Зарегистрирован: 29.09.2011

 >Какие ключи нужно поставить у ведомого, что-бы он запустился от внешнего генератора?

Ответы уже были выше:

  1. Читаем даташит
  2. Гуглить статьи по Fuse битам
  3. Ищем online калькуляторы
  4. Смотрим boards.txt (или ссылку выше) на предмет уже готовых примеров фьюзов.

Подключить один кварц к двум контроллерам - сомневаюсь что что-то получится.

Затаковать один от другого - 4-ре пункта выше. Но скорее всего без глубокого погружения в пункт 1 уже не обойдетесь. И с тамймерами-делитялеми прийдется разбиратся и фьюзами.

Но... а нафига? Для общения двух контроллеров, с целью "разможить выводы" синхронность уровня "рабоатаем от одного тактового импульса" им абсолютно не нужна. Они вполне могут общатся между собой  (через SPI, UART, I2C)   и работая каждый на своем генераторе. И даже не обязательно на одной частоте. Один может работать от 16-ть внешнего, а другой на 8-мь внутреннего.

leshak
Offline
Зарегистрирован: 29.09.2011

pelmen пишет:

LEVV2006 пишет:

leshak пишет:

LEVV2006 пишет:

ого вроде нашёл! http://www.codingwithcody.com/2011/04/arduino-default-fuse-settings/ 

Это, так же, можно подсмотреть в файле

В файлике arduino-1.0\hardware\arduino\boards.txt 

Оо спасибо. Не знал. Там действительно всё есть!

Во блин. Под носом вся инфа, а я инет весь перерыл. 

Ну не знаю как вы рыли, но только в этом форуме вопрос "как прошить камень" поднимался 10-тки раз. И в 2-х случаях из 3-х в ветке упоминается этот файлик.

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

leshak пишет:

 >Какие ключи нужно поставить у ведомого, что-бы он запустился от внешнего генератора?

Ответы уже были выше:

  1. Читаем даташит
  2. Гуглить статьи по Fuse битам
  3. Ищем online калькуляторы
  4. Смотрим boards.txt (или ссылку выше) на предмет уже готовых примеров фьюзов.

Подключить один кварц к двум контроллерам - сомневаюсь что что-то получится.

Затаковать один от другого - 4-ре пункта выше. Но скорее всего без глубокого погружения в пункт 1 уже не обойдетесь. И с тамймерами-делитялеми прийдется разбиратся и фьюзами.

Но... а нафига? Для общения двух контроллеров, с целью "разможить выводы" синхронность уровня "рабоатаем от одного тактового импульса" им абсолютно не нужна. Они вполне могут общатся между собой  (через SPI, UART, I2C)   и работая каждый на своем генераторе. И даже не обязательно на одной частоте. Один может работать от 16-ть внешнего, а другой на 8-мь внутреннего.

SPI, UART, I2C для меня вещи заоблачные

leshak
Offline
Зарегистрирован: 29.09.2011

 >SPI, UART, I2C для меня вещи заоблачные

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

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

К тому же, что там заоблачного? Для UART - соеденил два проводка (RX,TX) крест-накрест, и пиши себе в Serial.write/read. Для SPI или I2C(TWI) ( два проводка+два резистора) - подобный уровень сложности, ну разве что нужно будет либы подключить (идут в стандартной поставке). OneWrite - один проводк (правда либу уже нужно будет скачать с сайта).

 

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

leshak пишет:

 >SPI, UART, I2C для меня вещи заоблачные

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

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

К тому же, что там заоблачного? Для UART - соеденил два проводка (RX,TX) крест-накрест, и пиши себе в Serial.write/read. Для SPI или I2C(TWI) ( два проводка+два резистора) - подобный уровень сложности, ну разве что нужно будет либы подключить (идут в стандартной поставке). OneWrite - один проводк (правда либу уже нужно будет скачать с сайта).

 

Звучит убедительно. У вас нет случайно простейшего примера скетчей двух процов? Например на одном кнопру надал, на другом светик загорелся.

leshak
Offline
Зарегистрирован: 29.09.2011

 Ну вообщем-то на форуме есть много подобных примеров. Было-бы желание их поискать.

Но и написать не долго:

Отправляющий:

#define BUTTON_PIN 3
void setup(){
  pinMode(BUTTON_PIN,INPUT);
  digitalWrite(BUTTON_PIN,HIGH);// включили подтяжку
  
  Serial.begin(9600);
  
}

void loop(){
  if(!digitalRead(BUTTON_PIN))Serial.print("L"); // так как подтяжка вверх, то инвертируем digitalRead
}

 

Принимающий:

#define LED_PIN 13
void setup(){
  pinMode(LED_PIN,OUTPUT);
  Serial.begin(9600);
}

void loop(){
  if(Serial.available()){ // пришли данный
    if(Serial.read()=='L'){ // проверяем что пришла команда включения
       digitalWrite(LED_PIN,HIGH);
       delay(500);// включаем на пол секунды
    }
  } else        digitalWrite(LED_PIN,HIGH); // выклчюаем если вообще ничего не пришло
  
}

 

 

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

leshak пишет:

 Ну вообщем-то на форуме есть много подобных примеров. Было-бы желание их поискать.

Но и написать не долго:

Отправляющий:

#define BUTTON_PIN 3
void setup(){
  pinMode(BUTTON_PIN,INPUT);
  digitalWrite(BUTTON_PIN,HIGH);// включили подтяжку
  
  Serial.begin(9600);
  
}

void loop(){
  if(!digitalRead(BUTTON_PIN))Serial.print("L"); // так как подтяжка вверх, то инвертируем digitalRead
}

 

Принимающий:

#define LED_PIN 13
void setup(){
  pinMode(LED_PIN,OUTPUT);
  Serial.begin(9600);
}

void loop(){
  if(Serial.available()){ // пришли данный
    if(Serial.read()=='L'){ // проверяем что пришла команда включения
       digitalWrite(LED_PIN,HIGH);
       delay(500);// включаем на пол секунды
    }
  } else        digitalWrite(LED_PIN,HIGH); // выклчюаем если вообще ничего не пришло
  
}

 

 

А это программа под какой интерфейс?

leshak
Offline
Зарегистрирован: 29.09.2011

 

pelmen пишет:

А это программа под какой интерфейс?

leshak пишет:

Для UART - соеденил два проводка (RX,TX) крест-накрест, и пиши себе в Serial.write/read.

На уне, возможно, это слегка не удобно будет при заливке/отладке. Так как у нее всего один Serial (и он же используется для подключение к компу). Так что, если будет мешать, то либо отключать при заливке, либо отказатся от использования аппаратного и заюзать библиотеку SoftwareSerial которая позволяют изобразить UART на любых цифровых пинах, не только D0,D1. Но "ценой вопроса" будет некоторая занятость проца под это дело. В случае "нужно просто по кнопке что-то отсылать" - эту цену можно платить абсолютно спокойно.

С другой стороны, то что к D0,D1 подключен и комп - дает противоположное удобство. Можно отлажитьва платы отдельно. Подключать их к компу "плату с кнопкой" и смотрим что она посылает в Serial Monitor. Потом подключить "ведомую" и руками, через тот же Serial Monitor имитировать посылку управляющих комманд (послыть букву L). И смотреть как плата их отрабатывает (зажигает светик).

После того как отладили обе "по одетельности" - отсоеденям от компа, Соединяем, накрест, пины D0,D1 и смотрим как они общаются между собой (нажимаем кнопку - смотрим на светик).

Либо переходить на другой протокол.

Тот же I2C. Принципы - те же самые. Открываем документацию на либу - читаем как послать какой-то байт в шину, как прочитать. Ну разве что, так как I2C позволяет вешать много устройств на шину - при посылке нужно будет указыть адресс устройства которое должно принять данные, а в принимающем - соответсвенно зарегистрироватся на этот адресс.

 

leshak
Offline
Зарегистрирован: 29.09.2011

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

Для одной команды "включить выключить", достаточно просто соеденить два цифровых пина. На передающей "на выход", на принимающей "на вход".

На передающей в loop сделать

digitalWrite(OUT_DATA_PIN,!digitalRead(BUTTON_PIN));

На принимающей в loop сделать

digitalWrite(LED_PIN,digitalRead(IN_DATA_PIN));

Так что если "включить светик по кнопке" - ваша задача. Можно на интерфейсы забить, если же "что-бы разобратся" - так можете попробовать ее решить всеми возможными вариантами.

  1. Тупо сигнальным проводком 
  2. Через хардварный Serial(он же UART)
  3. Через I2C (он же TWI, он же TwoWire)
  4. Через SPI
  5. Через OneWire

Тогда вас "шины" не будут пугать. В каждой дальнешей задаче будете выбирать какая вам больше нравится/подходит - и вперед.

Да и сдатчиками, в будущем, проблем не будет. Любой цифровой датчик в 90% случаев подключается по одной из шин этого списка. Так что знакомство с ними, хотя-бы поверхностное "карман давить не будет".

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

leshak пишет:

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

Для одной команды "включить выключить", достаточно просто соеденить два цифровых пина. На передающей "на выход", на принимающей "на вход".

На передающей в loop сделать

digitalWrite(OUT_DATA_PIN,!digitalRead(BUTTON_PIN));

На принимающей в loop сделать

digitalWrite(LED_PIN,digitalRead(IN_DATA_PIN));

Так что если "включить светик по кнопке" - ваша задача. Можно на интерфейсы забить, если же "что-бы разобратся" - так можете попробовать ее решить всеми возможными вариантами.

  1. Тупо сигнальным проводком 
  2. Через хардварный Serial(он же UART)
  3. Через I2C (он же TWI, он же TwoWire)
  4. Через SPI
  5. Через OneWire

Тогда вас "шины" не будут пугать. В каждой дальнешей задаче будете выбирать какая вам больше нравится/подходит - и вперед.

Да и сдатчиками, в будущем, проблем не будет. Любой цифровой датчик в 90% случаев подключается по одной из шин этого списка. Так что знакомство с ними, хотя-бы поверхностное "карман давить не будет".

Я понял. Буду вникать, смотреть, изучать. Спасибо

У меня задача не светик включать... Есть библиотека SOFTPWM которая позволяеть пользовать до 20 любых каналов у Дуины в качестве ШИМ. У меня есть алгоритм зажигания и погасания каждого канала. Мне 20 мало. Вот я и хотел засинхронизировать 2 процессора и алгоритм разделить на 2 проца.

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

leshak пишет:

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

Для одной команды "включить выключить", достаточно просто соеденить два цифровых пина. На передающей "на выход", на принимающей "на вход".

На передающей в loop сделать

digitalWrite(OUT_DATA_PIN,!digitalRead(BUTTON_PIN));

На принимающей в loop сделать

digitalWrite(LED_PIN,digitalRead(IN_DATA_PIN));

Так что если "включить светик по кнопке" - ваша задача. Можно на интерфейсы забить, если же "что-бы разобратся" - так можете попробовать ее решить всеми возможными вариантами.

  1. Тупо сигнальным проводком 
  2. Через хардварный Serial(он же UART)
  3. Через I2C (он же TWI, он же TwoWire)
  4. Через SPI
  5. Через OneWire

Тогда вас "шины" не будут пугать. В каждой дальнешей задаче будете выбирать какая вам больше нравится/подходит - и вперед.

Да и сдатчиками, в будущем, проблем не будет. Любой цифровой датчик в 90% случаев подключается по одной из шин этого списка. Так что знакомство с ними, хотя-бы поверхностное "карман давить не будет".

Я понял. Буду вникать, смотреть, изучать. Спасибо

У меня задача не светик включать... Есть библиотека SOFTPWM которая позволяеть пользовать до 20 любых каналов у Дуины в качестве ШИМ. У меня есть алгоритм зажигания и погасания каждого канала. Мне 20 мало. Вот я и хотел засинхронизировать 2 процессора и алгоритм разделить на 2 проца.

leshak
Offline
Зарегистрирован: 29.09.2011

pelmen пишет:

...skip....

Я понял. Буду вникать, смотреть, изучать. Спасибо

У меня задача не светик включать... Есть библиотека SOFTPWM которая позволяеть пользовать до 20 любых каналов у Дуины в качестве ШИМ. У меня есть алгоритм зажигания и погасания каждого канала. Мне 20 мало. Вот я и хотел засинхронизировать 2 процессора и алгоритм разделить на 2 проца.

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

Синхронизации - по возможно желательно избегать. Больно гиморно и глюко-потенциально. Лучше рассматривать общение между камнями как "послали сообщение". А уж когда оно пришло, тогда и пришло. 

То есть "логику" лучше поместить в один скетч, а второму слать  "тупые комманды" типа включи/выключи шим на 5-той ноге. Когда же логика "размазанна" в два места. Ее сопровождать/отлаживать на порядки труднее будет. Второй камень тогда тоже можно "попроще" взять. Либо даже вообще, вместо второго камня, взять специальную микруху типа I2C Port Extender. У TI вроде были такие, которые как раз висят на шине и умеют принимать комманды включения на своих ногах PWM-мов. Не уверен, но вроде нечто подобное есть еще и в виде драйверов для LED-ов. Когда еще и ток большой с этой ноги брать приличный дозволено. Вот только не уверен что достать их просто. Да и по цене может дороже выйти чем ваш вариант "с двумя контроллерами" (нужно сравнивать). 

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

leshak пишет:

pelmen пишет:

...skip....

Я понял. Буду вникать, смотреть, изучать. Спасибо

У меня задача не светик включать... Есть библиотека SOFTPWM которая позволяеть пользовать до 20 любых каналов у Дуины в качестве ШИМ. У меня есть алгоритм зажигания и погасания каждого канала. Мне 20 мало. Вот я и хотел засинхронизировать 2 процессора и алгоритм разделить на 2 проца.

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

Синхронизации - по возможно желательно избегать. Больно гиморно и глюко-потенциально. Лучше рассматривать общение между камнями как "послали сообщение". А уж когда оно пришло, тогда и пришло. 

То есть "логику" лучше поместить в один скетч, а второму слать  "тупые комманды" типа включи/выключи шим на 5-той ноге. Когда же логика "размазанна" в два места. Ее сопровождать/отлаживать на порядки труднее будет. Второй камень тогда тоже можно "попроще" взять. Либо даже вообще, вместо второго камня, взять специальную микруху типа I2C Port Extender. У TI вроде были такие, которые как раз висят на шине и умеют принимать комманды включения на своих ногах PWM-мов. Не уверен, но вроде нечто подобное есть еще и в виде драйверов для LED-ов. Когда еще и ток большой с этой ноги брать приличный дозволено. Вот только не уверен что достать их просто. Да и по цене может дороже выйти чем ваш вариант "с двумя контроллерами" (нужно сравнивать). 

Да, думаю Вы правы. Один проц управляет и исполняет, второй принимает комманды и исполняет. Направление понятно, теперь можно переходить к схемотехнике и программированию. Благодарю

leshak
Offline
Зарегистрирован: 29.09.2011

 Можете еще посмотреть ветку 

http://arduino.ru/forum/programmirovanie/sketchi-dlya-besprovodnogo-vkly...

Там я тоже нечто подобное писал.

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

Потом еще немного усложнилось, что вторая, в ответ, тоже слала первой команды в ответ "включи мотор".

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

leshak
Offline
Зарегистрирован: 29.09.2011

  Если бы делал, то наверное использовал-бы Serial если нужны только два камня (удобней отлаживать по отдельности)

или I2C (он же TWI в терминологии амтел, он же библиотек http://arduino.cc/it/Reference/Wire "по ардуиновски") если есть шанс что "еще больше портов может потребоваться" (на этой шине можно сделать "много" ведомых, просто у каждого будет свой адресс). Так что в будущем можно будет "еще добавлять камни" если вдруг еще порты потребуются.

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

leshak пишет:

  Если бы делал, то наверное использовал-бы Serial если нужны только два камня (удобней отлаживать по отдельности)

или I2C (он же TWI в терминологии амтел, он же библиотек http://arduino.cc/it/Reference/Wire "по ардуиновски") если есть шанс что "еще больше портов может потребоваться" (на этой шине можно сделать "много" ведомых, просто у каждого будет свой адресс). Так что в будущем можно будет "еще добавлять камни" если вдруг еще порты потребуются.

В 99% случаев 40 каналов для меня с головой.

Я занимаюсь наружной и интерьерной рекламой.

Время казино прошло, когда контроллер на 380 каналов, без использования микроконтроллеров, всё на старой доброй логике 555 серии, было как развлекуха на пару недель. А диаграмма работы как карта наступления ВОВ. А выглядело это как 14 чемоданов. И эти чемоданы управляли высоковольтными неоновыми трансформаторами. Были ж времена. 8)

leshak
Offline
Зарегистрирован: 29.09.2011

 >В 99% случаев 40 каналов для меня с головой.

Хр... а откуда взялась цифра в 40-к каналов?

Из описания уны: "Цифровые Входы/Выходы 14 (6 из которых могут использоваться как выходы ШИМ)"

то есть две штуки - 12-ть каналов. Это если "без танцев с бубном".   Плюс часть еще может "откустися" под общение ардуин между собой.

В любом случае может в таком случае просто взять мегу и не мучать себя? http://arduino.ru/Hardware/ArduinoBoardMega

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

leshak пишет:

 >В 99% случаев 40 каналов для меня с головой.

Хр... а откуда взялась цифра в 40-к каналов?

Из описания уны: "Цифровые Входы/Выходы 14 (6 из которых могут использоваться как выходы ШИМ)"

то есть две штуки - 12-ть каналов. Это если "без танцев с бубном".   Плюс часть еще может "откустися" под общение ардуин между собой.

В любом случае может в таком случае просто взять мегу и не мучать себя? http://arduino.ru/Hardware/ArduinoBoardMega

библиотека позволяет использовать все 20

 

leshak
Offline
Зарегистрирован: 29.09.2011

pelmen пишет:

leshak пишет:

 >В 99% случаев 40 каналов для меня с головой.

Хр... а откуда взялась цифра в 40-к каналов?

Из описания уны: "Цифровые Входы/Выходы 14 (6 из которых могут использоваться как выходы ШИМ)"

то есть две штуки - 12-ть каналов. Это если "без танцев с бубном".   Плюс часть еще может "откустися" под общение ардуин между собой.

В любом случае может в таком случае просто взять мегу и не мучать себя? http://arduino.ru/Hardware/ArduinoBoardMega

библиотека позволяет использовать все 20 

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

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

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

leshak пишет:

pelmen пишет:

leshak пишет:

 >В 99% случаев 40 каналов для меня с головой.

Хр... а откуда взялась цифра в 40-к каналов?

Из описания уны: "Цифровые Входы/Выходы 14 (6 из которых могут использоваться как выходы ШИМ)"

то есть две штуки - 12-ть каналов. Это если "без танцев с бубном".   Плюс часть еще может "откустися" под общение ардуин между собой.

В любом случае может в таком случае просто взять мегу и не мучать себя? http://arduino.ru/Hardware/ArduinoBoardMega

библиотека позволяет использовать все 20 

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

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

Description
An Arduino and Wiring Library to produce PWM signals on any arbitrary pin.
It was originally designed for use controlling the brightness of LEDs, but could be modified to control servos and other low frequency PWM controlled devices as well.
It uses a single hardware timer (Timer 2) on the microcontroller to generate up to 20 PWM channels.
Features
• Arbitrary output pins.
• Up to 20 different channels can be created.
• True zero level, i.e. off = off
• Separate fade rates for on and off.
Notes:
This library hasn't been tested with servos, so beware that it may not work as you may expect if used to control servos.
 

leshak
Offline
Зарегистрирован: 29.09.2011

 Ну значит, у них "второй путь" (как я и писал - он более вероятен) - "подкручивание таймеров". И они же говорят что может быть проблема совместимости с другими библиотеками, например с Сервами. Но это далеко не единственная библиотека которая Timer2 может использовать. Степперы, всякие работы с IR, те же SoftwareSerial, SoftwareSPI, управления степперами и т.п.  тоже могут "не подружится" из-за этого.

Но вне зависимости от того "подходит ли эта библиотека к конкретному проекту" или нет, почему не мега? Зачем две платы? С мегой вы, кроме прочего, получаете еще 3 хардварных сериал порта, вместо одного. 

Не если цель "научится" - две платы замечательно, если цель  "в будущем могут потребоваться еще порты" - тоже понятное, если "нужно что-бы часть портов было физически в удаленном месте" - то же понятно. Но если единственная цель - "увеличить количество портов", то IMHO две платы проигрывают решению "одна мега".

 

pelmen
pelmen аватар
Offline
Зарегистрирован: 04.04.2012

leshak пишет:

 Ну значит, у них "второй путь" (как я и писал - он более вероятен) - "подкручивание таймеров". И они же говорят что может быть проблема совместимости с другими библиотеками, например с Сервами. Но это далеко не единственная библиотека которая Timer2 может использовать. Степперы, всякие работы с IR, те же SoftwareSerial, SoftwareSPI, управления степперами и т.п.  тоже могут "не подружится" из-за этого.

Но вне зависимости от того "подходит ли эта библиотека к конкретному проекту" или нет, почему не мега? Зачем две платы? С мегой вы, кроме прочего, получаете еще 3 хардварных сериал порта, вместо одного. 

Не если цель "научится" - две платы замечательно, если цель  "в будущем могут потребоваться еще порты" - тоже понятное, если "нужно что-бы часть портов было физически в удаленном месте" - то же понятно. Но если единственная цель - "увеличить количество портов", то IMHO две платы проигрывают решению "одна мега".

 

Так если эта библиотека не обслуживает более 20 каналов на одном камне, какой тогда смысл в меге?

У УНы их как раз 20... Точнее сказать у 168 или 328 камня...

leshak
Offline
Зарегистрирован: 29.09.2011

pelmen пишет:

Так если эта библиотека не обслуживает более 20 каналов на одном камне, какой тогда смысл в меге?

У УНы их как раз 20... Точнее сказать у 168 или 328 камня...

Обслуживает. Просто "за это приходится платить" возможными проблемами в другом месте.

А смысл в меге ровно в том, что она дает всего больше чем две уны. Если "без библиотеки", то уны дадут 12-ть шимов, а мега 14-ть. Если "с библиотекой", то две уны дадут вам 36-ть каналов (4-ре пина будут заняты под общение), а мега 70-м.

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

 

leshak
Offline
Зарегистрирован: 29.09.2011

 Такое впечатление что я пытаюсь продать вам мегу :)

Не хотите мегу - ради бога. Задача решится и двумя унами.  :) Просто мое IMHO что лучше взять более подходящий камень, чем колхозить что-то более сложное из двух "не подходящих". Без веских на то причин. Я не знаю, может они у вас есть.

Сам я, возможно, тоже делал-бы двумя унами. Но только потому что "мне так интерестней". Потому что для меня ардуина - развлекалка и возможность "освоить что-то новое". То есть "заморочится" для меня было-бы не минусом, а плюсом ;)

И использование библиотеки - я не пытаюсь вас отговорить от ее использования. Есть куча задач где ее "побочные эффекты" - не важны. И ее использование будет целиком оправданным "выжать максимум из имеющегося железа". Просто предупредил, что "побочные эффекты" существуют (возможны), и это нужно учитывать при планировании. Не более того.

idealsoul
Offline
Зарегистрирован: 10.02.2013

Сам делал по инструкции: http://arduino.cc/en/Tutorial/ArduinoISP.

Использовал Arduino Uno в качестве ISP программатора. Заливал загрузчик на ATmega328. Все получилось. С использованием адаптера USB-UART прекрасно заливаются скетчи. Но нужно нажать RESET как только начнется загрузка скетча. Наверняка можно программный RESET реализовать, но не заморачивался.