|
|
  |
Первые шаги с AVR, Есть идея и желание, но нет опыта |
|
|
|
Jul 18 2007, 22:07
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(IgorKossak @ Jul 18 2007, 20:43)  Применив 150 линий chip select.  Цитата Если постараться , может хватить 8. Ключевое слово "постараться" ;> Вот вот.. И вся "гибкость" масштабирования летит в тар-тарары. Может GM что-то другое имел в виду.. С интересом жду что он скажет.
|
|
|
|
|
Jul 19 2007, 21:22
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(defunct @ Jul 18 2007, 22:07)  Может GM что-то другое имел в виду.. С интересом жду что он скажет. Ого, сколько понаписали, сегодня целый день в разъездах был, не было возможности ответить. Well to the question. Для начала, например, можно соединить SPI выход первого слейва со входом второго, а его выход с входом третьего, ну и так далее...Очень просто, как говорит мой босс, но проблемо(:-).
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 20 2007, 09:45
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(defunct @ Jul 19 2007, 21:20)  Как всегда очень оригинально ;> но действительно проблемно..  Клок как передавать? CS? И проводов не три а хм.. 150 + 1 (это если клок "расшарить"). Ну, не очень это и оригинально, всё до меня уже сделали и все пользуются, в частности, вы, только не задумываетесь об этом. Грубо говоря, у многих коллег шоры на глазах, находятся в плену, так сказать, имбеддерских предрассудков(:-)... Клок надо передавать всем одновременно, т.е. параллельное подключение. А CS вообще не нужен по большому счёту. И, если только передавать, то нужно всего два провода. Что касается "проблемно" - сможете подключить 150 иис устройств к одной шине? Получите ба-а-а-льшую проблему...
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 20 2007, 11:54
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(=GM= @ Jul 20 2007, 12:45)  И, если только передавать, то нужно всего два провода. Давайте не будем урезать функциональность, ок? Вы ж решили оспорить простоту масштабирования I2C, а значит ваше решение должно быть не хуже по функциональности. Для полноценного обмена вашим методом надо построить кольцо. 1->2->3->4 ..... ->N -> 1 Это накладно как с т.з. железа так и т.з. протокола. Цитата Что касается "проблемно" - сможете подключить 150 иис устройств к одной шине? К I2C 150-нет, а 128 запросто, она для этого и создана. Цитата Получите ба-а-а-льшую проблему... Если добавить еще одну шину и мост - 254 устройства к вашим услугам. Проблем с обменом - никаких. Арбитраж выполняется аппаратно.
|
|
|
|
|
Jul 20 2007, 16:14
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(defunct @ Jul 20 2007, 10:54)  Давайте не будем урезать функциональность, ок? Вы ж решили оспорить простоту масштабирования I2C, а значит ваше решение должно быть не хуже по функциональности. Не то, чтобы очень хотел, просто надо по справедливости. Если вы говорите, что дополнительное I2C-устройство легко подключить к двум проводам, то я говорю, что в этом смысле так же легко подключить дополнительное SPI устройство к 3 проводам. Нету разницы большой в подключении двух проводов или трёх, надеюсь вы с этим согласитесь? В вашем посте мысль о гибкости масштабирования системы, т.е. то, что можно получить с помощью I2C, вы возвели в ранг чего-то недосягаемого для SPI Цитата(defunct @ Jul 20 2007, 10:54)  1) Гибкость масштабирования системы (легко можно добавить новый модуль(и)). А это, по большому счёту, не так. Если уж говорить о гибкости, из SPI модуля МК можно легко соорудить I2C-протокол, а вот наоборот - вряд ли получится! И это будет настоящая гибкость, а не высосанная из пальца. Я уж не говорю про скорость обмена, которая будет в ДЕСЯТЬ раз выше! Цитата(defunct @ Jul 20 2007, 10:54)  Для полноценного обмена вашим методом надо построить кольцо. 1->2->3->4 ..... ->N -> 1 Это накладно как с т.з. железа так и т.з. протокола. Да ну ладно вам. SPI спокойно можно включать звездой, никаких проблем! Снимите наконец розовые очки: SPI - это вещь! Правда, для многих это вещь в себе(:-). Цитата(defunct @ Jul 20 2007, 10:54)  К I2C 150-нет, а 128 запросто, она для этого и создана. Если добавить еще одну шину и мост - 254 устройства к вашим услугам. Проблем с обменом - никаких. Арбитраж выполняется аппаратно. Положим, это уже не так просто осуществить, поскольку нужны дополнительные чипы, и вся гибкость исчезнет. Хотя, справедливости ради, на 100 бодах вполне можно будет обмениваться.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 20 2007, 17:40
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(=GM= @ Jul 20 2007, 19:14)  Да ну ладно вам. SPI спокойно можно включать звездой, никаких проблем! Можно подробнее - как при включении "звездой" без CS раздать нескольким (пусь будет двум для простоты) SPI-слейвам разную информацию. И главное, как при подключении звездой без CS или при соединении их последовательно (ваше первое предложение) получить ответ от всех устройств? Цитата(=GM= @ Jul 20 2007, 19:14)  Снимите наконец розовые очки: SPI - это вещь! С этим никто не спорит, только эта вещь для несколько, гм, другого.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 20 2007, 18:50
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(=GM= @ Jul 20 2007, 19:14)  Не то, чтобы очень хотел, просто надо по справедливости. Вот именно, по справедливости. Ничего не утаивая от читателей этой ветки. А вы утаиваете и проблему синхронизации и сложность подключения клока и сведенную на нет производительность всей системы необходимостью ретрансляции сообщений по кольцу.. Цитата Если вы говорите, что дополнительное I2C-устройство легко подключить к двум проводам, то я говорю, что в этом смысле так же легко подключить дополнительное SPI устройство к 3 проводам. Есть разница. Вы не можете просто так взять и подключить новое устройство к трем проводам без модификации либо схемы либо программы. А в случае с I2C - можете. Цитата Нету разницы большой в подключении двух проводов или трёх, надеюсь вы с этим согласитесь? Абсолютно. Лишь бы эти провода не пришлось разъединять и добавлять новые. Как пример шины PCI/ISA - проводов больше чем у SPI, но тем не менее гибкость масштабирования систем на их основе - выше. Цитата В вашем посте мысль о гибкости масштабирования системы, т.е. то, что можно получить с помощью I2C, вы возвели в ранг чего-то недосягаемого для SPI Да все верно. Вы правильно поняли мою мысль. Для SPI - гибкость подключения устройств на столько же недосягаяема в сравнении с I2C, на сколько для I2C недосягаема возможность получения 8Mbit/s в подключении точка-точка. Цитата А это, по большому счёту, не так. Это ваше мнение. Несомневаюсь, что когда вам понадобится соединить около 100 MK между собой в одну систему - вы выберете SPI. Цитата Если уж говорить о гибкости, из SPI модуля МК можно легко соорудить I2C-протокол, а вот наоборот - вряд ли получится! Я говорил не об I2C модуле и не о SPI модуле, а об абстрактном модуле который выполняет определенную целевую функцию в системе - будь то датчик, клавиатура или LCD экран. Цитата И это будет настоящая гибкость, а не высосанная из пальца. Я уж не говорю про скорость обмена, которая будет в ДЕСЯТЬ раз выше! Особенно в кольце из 150 устройств.. Вы представляете сколько ресурсов уйдет на ретрансляцию сообщений? Цитата SPI - это вещь! Не спорю. Конечно вещь, для соединений "точка-точка".
|
|
|
|
|
Jul 20 2007, 21:53
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Сергей Борщ @ Jul 20 2007, 17:40)  Можно подробнее - как при включении "звездой" без CS раздать нескольким (пусь будет двум для простоты) SPI-слейвам разную информацию. И главное, как при подключении звездой без CS или при соединении их последовательно (ваше первое предложение) получить ответ от всех устройств? 1) Последовательное соединение мастера и двух слейвов. Посылаете два байта, возникают два прерывания в обоих слейвах. Первое игнорируется, по второму забирается информация обоими слейвами и заносится два ответа. Далее варианты такие, либо мастер получает ответ при следующем цикле обмена, либо посылает два пустых байта и забирает ответ. 2) Параллельное соединение мастера и двух слейвов. Посылаете два байта, первый - адрес, второй - данные. Слейв с соответствующим адресом отвечает, другой слейв молчит.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 21 2007, 00:09
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(=GM= @ Jul 21 2007, 00:53)  1) Последовательное соединение мастера и двух слейвов. Посылаете два байта, возникают два прерывания в обоих слейвах. Первое игнорируется, по второму забирается информация обоими слейвами и заносится два ответа. Далее варианты такие, либо мастер получает ответ при следующем цикле обмена, либо посылает два пустых байта и забирает ответ. И где тут масштабируемость?! Придется править код Master'a (и код каждого! слейва) при изменении количества слейвов в системе. Цитата 2) Параллельное соединение мастера и двух слейвов. Посылаете два байта, первый - адрес, второй - данные. Слейв с соответствующим адресом отвечает, другой слейв молчит. Схематически сомнительное решение опять-же. Без буферных элементов объединять два MISO с придавленным CS похорошему счету нельзя.. Итого каждый новый слейв - дополнительный буферный элемент. Масштабируемость просто "рулит".
|
|
|
|
|
Jul 21 2007, 00:38
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
В Вашем споре поддержу GM. Причины просты. Если разобраться, то путаются разные уровни протоколов. I2C более полный протокол. В нём мало мальски вводится понятие адресации устройств. Хотя, если разобраться по существу по I2C можно теоретически подключить тысячи устройств или наоборот никак не получится подключить 128. Объяснюсь. 1) Почему не получится подключить 128. Адресное пространство побито м/у специальными устр-вами. Для примера для памяти как известно 0xa0. Но на самом деле не 0xa0, a 0xa0-0xfe. Таким образом если Вы применяете I2C память, то уже теряете 8 вместо одного устройства. Ну и т.д. 2) Почему у меня получится подключить 256 устройств. Да просто. Я под все устр-ва отведу один адрес. Например 0x20. А адресацию буду осуществлять двумя или тремя байтами субадреса. Что мне помешает?
С SPI разница конечно есть в связи с тем что ответ идёт. Но теоретически GM прав. Действительно софтово можно описать таким образом чтобы SLAVE устр-ва отвечали только после какой-нибудь процедуры. CS и SCK подавать паралельно. При добавлении нового устр-ва не требуется переписывать мастеру ничего. Конечно если все устр-ва будут иметь общий совтовый протокол. Если же подключаем устр-во которое не имеет такого протокола, то заводим на него отдельный CS.
Возможно и прямо подключать, правда для этого придётся применить какие-нибудь аппаратные средства.
Я не говорю, что SPI для этого предназначен, но серьёзных практических проблем не вижу.
К слову RS232 тоже бы не предназначен. Поставили драйвера и ПРИМЕНИЛИ ОПРЕДЕЛЁННЫЙ СОФТ и вот вам rs485 и другие возможности.
|
|
|
|
|
Jul 22 2007, 21:38
|
Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930

|
[quote name='namelos' date='Jul 6 2007, 18:27' post='269612'] И еще небольшой вопрос.A какaя связь между контроллерами является наиболее надежной и стабильной? RS232, I2C, SPI?
Я бы вам порекомендовал выбрать I2C. Тут уже говорили достоинства I2C - простота реализации (потребует только резисторы подтяжки),128 устройств на шине, скорость обмена 400кГц б/с. Скорость можно и повысить, если делать межпроцессорный обмен, до 1Мбит/с. Там в настройках AVR-ки, кажется, есть возможность.
RS-232 с применением микросхем RS-485 применяют, когда линии связи имеют длинну от десятков сантиметров до нескольких десятков метров. Скорости (реальные) могут доходить до 57600 бит/с.
А вот с SPI я бы вам вообще не рекомендовал связываться. Кроме описанных в этом посте недостатков, SPI имеет одно нехорошее (на мой взгляд) свойство - он не различает между собой байты в посылке. Из-за этого является довольно глючным интерфейсом, на линии часто возникают ошибки. У I2C гораздо лучше. Там есть четкое понятие начала обмена, окончание обмена, и самое главное, есть понятие байта внутри посылки.
Для вашего устройства с 40 датчиками DS1820, я думаю, подойдет и 100КГц на I2C. Датчики DS1820 довольно медленные устройства и опросить одно устройство чаще чем раз в 1сек у вас не получится.
Применять много устройств(микроконтроллеров) из-за 40 датчиков я бы вам тоже не советовал. Это будет дороже, чем 1 процессор, да и программа будет сложнее. Все можно сделать на 1 процессоре, датчики все(DS1820) посадть на одну линию и вперед!
|
|
|
|
|
Jul 22 2007, 21:41
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(defunct @ Jul 20 2007, 11:54)  Для полноценного обмена вашим методом надо построить кольцо. 1->2->3->4 ..... ->N -> 1 Это накладно как с т.з. железа так и т.з. протокола Не смешите меня, лишний провод это накладно? Не хотите кольцо, сделайте параллельное подсоединение или смешанное. Цитата(defunct @ Jul 20 2007, 11:54)  К I2C 150-нет, а 128 запросто, она для этого и создана. Если точнее, то для 127, т.к. 0 адрес предназначен для широковещания.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|