|
|
  |
Непонятки со 128 мегой |
|
|
|
Jan 27 2011, 22:03
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 19-11-08
Пользователь №: 41 782

|
Цитата(AlexTech @ Jan 27 2011, 22:43)  выключаю питание, меряю сопротивление между ногами - 3к и оно плавно увеличивается, минут за 5 ток куда-то/откуда-то стекает и опыт можно повторить :/ Это не "ток куда-то/откуда-то стекает" , а кристалл остывает после такой экзекуции  , без резисторов светодиоды ниЗЗя включать.
|
|
|
|
|
Jan 28 2011, 06:07
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
Значить так, Во первых: светодиоды включены естественно через резисторы - 470ом, цепочка: ножка - резистор - лед - земля. Во вторых: светодиоды smd 0805 и токи минимальные. В третьих: конкретная модель: Мега 128 16MOU 64 вывода, корпус не TQFP 14мм, а еще меньше, сторона 9мм, ножки почти под себя, на треть мм торчат только, но не загнутые, а плоские. В четвертых: "2) main() никогда не должна кончаться (выходить на return); В ней должен быть организован бесконечный цикл, внутри которого должна вертеться программа." - мега 8505, 16, 32 и тинка 26 прекрасно работают без while(1) - зажигают, гасят и стоят тупят, не перезапускают main(). Более того, дописал while(1), светодиод погас, это хорошо, но! вызов любой процедуры изнутри while вызывает перезапуск. В пятых: всю жизнь гасил биты именно так PORTA &= !_BV(PA2), никаких проблем, ни на каких контроллерах.
Какие еще предложения? ))))) Я бузусловно не специалист, но это далеко не первая моя поделка на МК ) просто со 128 не работал ни разу Да, уточню что платка CRUMB128, на штырьках вставлена в мою плату
Сообщение отредактировал AlexTech - Jan 28 2011, 06:43
|
|
|
|
|
Jan 28 2011, 08:29
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата В пятых: всю жизнь гасил биты именно так PORTA &= !_BV(PA2), никаких проблем, ни на каких контроллерах. - Шурупы заворачивают отверткой - Всю жизнь забивал их молотком, никаких проблем ни при каких молотках и шурупах! Цитата В ней должен быть организован бесконечный цикл, внутри которого должна вертеться программа." - мега 8505, 16, 32 и тинка 26 прекрасно работают без while(1) - зажигают, гасят и стоят тупят, не перезапускают main(). Автомобиль на стоянке надо снимать с передачи и ставить на парковочный тормоз. Но если у вас перед автомобилем крепкая железобетонная стена - то можно этого не делать, никуда дальше этой стены он не денется! Цитата Какие еще предложения? Включить голову. Программирование - это не набор заклинаний из области черной магии. Оно поддается логическому объяснению. Цитата Я бузусловно не специалист, но это далеко не первая моя поделка на МК Вам их не жалко? Мне жалко PS. Watchdog выключен?
|
|
|
|
|
Jan 28 2011, 08:50
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
Цитата(XVR @ Jan 28 2011, 11:29)  - Шурупы заворачивают отверткой - Всю жизнь забивал их молотком, никаких проблем ни при каких молотках и шурупах! Такс... идем изучать двоичную логику и срр, быренько на вскидку, что нам дает and от not??? Цитата(XVR @ Jan 28 2011, 11:29)  Автомобиль на стоянке надо снимать с передачи и ставить на парковочный тормоз. Но если у вас перед автомобилем крепкая железобетонная стена - то можно этого не делать, никуда дальше этой стены он не денется! Я могу попытаться написать конечный автомат только на прерываниях, без цикла, и это блин должно работать Цитата(XVR @ Jan 28 2011, 11:29)  Включить голову. Программирование - это не набор заклинаний из области черной магии. Оно поддается логическому объяснению. Спасибо, я в курсе. Я свободно пишу на c++, c#, delphi, sh, perl и php, второй головы простите нет, пока одной хватает Цитата(XVR @ Jan 28 2011, 11:29)  Вам их не жалко? Мне жалко  А мне жалко тех, кто не может ничего посоветовать, а только критикует )) Цитата(XVR @ Jan 28 2011, 11:29)  PS. Watchdog выключен? оф кос Я никого не хочу обидеть, и срач в топике мне не нужен, а помощь действительно требуется, просто подбешивает то, что местные мегагуру всех обращающихся с вопросами сразу записывают в полные идиоты )
Сообщение отредактировал AlexTech - Jan 28 2011, 09:07
|
|
|
|
|
Jan 28 2011, 09:48
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
Цитата(Палыч @ Jan 28 2011, 12:38)  У Вас в голове перемешались "логическое отрицание (!)" и "поразрядное дополнение (~)" - эти операции дают разный результ и в Вашем варианте выражения, увы!, не тот, что нужен для правильной работы программы... Может я конечно действительно неправильно применяю то что знаю, именно к микроконтроллерам, но в "Вашем варианте выражения", дает инверсию бита и поскольку он был включен, то соответственно он выключается... нет? В любом случае это не дает ответа на основные вопросы топика (
Сообщение отредактировал AlexTech - Jan 28 2011, 09:52
|
|
|
|
|
Jan 28 2011, 10:01
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(AlexTech @ Jan 28 2011, 11:50)  Такс... идем изучать двоичную логику и срр, быренько на вскидку, что нам дает and от not??? Разницу между операциями '!' и '~' представляете? Цитата Я могу попытаться написать конечный автомат только на прерываниях, без цикла, и это блин должно работать А вы в курсе, что произойдет, когда завершится main()? Цитата просто подбешивает то, что местные мегагуру всех обращающихся с вопросами сразу записывают в полные идиоты ) Не тех, кто задает вопросы, а тех, кто игнорирует ответы с указаниями на банальнейшие и очевидные ошибки с аргументацией - 'всегда так пишу и у меня всегда это работает'. И это сильно подрывает веру в заявления типа 'Я свободно пишу на c++, c#, delphi, sh, perl и php' (а в совокупности с фразой 'Может я конечно действительно неправильно применяю то что знаю, именно к микроконтроллерам,' применительно к разнице между '!' и '~' вообще вызывает сомнения в профпригодности это написавшего как программиста, если он конечно не Индус и пишет не на Java)
|
|
|
|
|
Jan 28 2011, 10:18
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
Цитата(XVR @ Jan 28 2011, 13:01)  Разницу между операциями '!' и '~' представляете? Делая Y &= !(1<<x) вы сбрасываете в 0 все биты Y вне зависимости от значения x Понимаю, именно поэтому написано не != а &= !_BV В конце концов он делает именно то что нужно - ВЫКЛЮЧАЕТ, а все биты или нет не важно, ибо больше ничего полезного на этом порту не висит Лан, с этим проехали, я попробовал так как "положено" делать, ничего не изменилось Цитата(XVR @ Jan 28 2011, 13:01)  А вы в курсе, что произойдет, когда завершится main()? Нет, не в курсе, с МК я действительно не очень близок, но выше уже писал, что если есть while(1) то перезапуск при любом вызове изнутри него Цитата(XVR @ Jan 28 2011, 13:01)  Не тех, кто задает вопросы, а тех, кто игнорирует ответы с указаниями на банальнейшие и очевидные ошибки с аргументацией - 'всегда так пишу и у меня всегда это работает'. Я попробовал ваши советы, прежде чем отрицать, положительного результата нет к сожалению Цитата(XVR @ Jan 28 2011, 13:01)  И это сильно подрывает веру в заявления типа 'Я свободно пишу на c++, c#, delphi, sh, perl и php' (а в совокупности с фразой 'Может я конечно действительно неправильно применяю то что знаю, именно к микроконтроллерам,' применительно к разнице между '!' и '~' вообще вызывает сомнения в профпригодности это написавшего как программиста, если он конечно не Индус и пишет не на Java) А я и не говорил что я профессиональный программист, я вообще нач.тех. отдела и работаю в основном с людьми и с бумажками, но пишу на каждом из этих языков уже лет 7 как минимум, но это тоже в общем не решает проблему (((
|
|
|
|
|
Jan 28 2011, 11:14
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
Цитата(zltigo @ Jan 28 2011, 13:56)  Вы тогда видимо еще и "свободно пишите" на нескольких десятках языков народов мира, только это "не решает проблему" того, что Вас никто при этом не понимает  . Придется Вам начинать с азов. Еще один учитель выискался, дорогуша, персонально для вас повторяю, я попробовал все те варианты и советы которые мне уже дали на форуме. Проблема осталась. Лично ваши глубокомысленные каменты можете оставить при себе, а в топик только по существу пожалуйста. У меня все в порядке с головой и с программирование, я не хочу выпендриваться, но это я первый человек в снг и второй в мире который в 2000 лохматом году хакнул все ресурсные файлы от HMM IV и дал возможность писать моды. Конструктив пожалуйста, куда ткнуть, что замерить, какой код для теста попробовать.
Сообщение отредактировал AlexTech - Jan 28 2011, 11:21
|
|
|
|
|
Jan 28 2011, 11:39
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(Палыч @ Jan 28 2011, 13:17)  Интересно: что по Вашему мнению произойдёт? Неизвестно что. Целиком зависит от примененного компилятора и библиотек (точнее от стартапа). Стандарта на это нет, так что и полагаться на это нельзя. Цитата Во всех известных мне трансляторов с языка Си: после выхода из main выполняется бесконечный цикл. Бывают и другие. Могут зациклить main, могут сбросить процессор, могут позвать какой нибудь trap. Вот прямо сейчас смотрю на newlib для ARM - зовет Angel монитор (аппаратный), или выполняет swi (Software Interrupt) Цитата(AlexTech @ Jan 27 2011, 21:43)  Мега 128 16MOU, между ногами РА2(AD2) и PA3(AD3) и минусом подключены светодиоды, делаю так: DDRA |= _BV(PA2); PORTA |= _BV(PA2); зажигается один светодиод, потом в течении секунд примерно 15 плавно разгорается второй, сбросом и выключением питания не лечится - горят оба. А что стоит в 3м бите DDRA ? Он случайно не на ввод запрограммирован?
|
|
|
|
|
Jan 28 2011, 11:53
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
Цитата(zltigo @ Jan 28 2011, 14:34)  Без наличия головы на плечах даже "первому человеку в снг" не поможет  . Тут думать И ХОТЬ ЧЕГО-ТО ЗНАТЬ надо, а не бездумно битики подбирать. Я пытаюсь, читаю и спрашиваю совета(кстати) Цитата(Палыч @ Jan 28 2011, 14:36)  Ну, так вроде, - "мяч на вашей стороне". Или предлагаете заняться телепатией? Попробую "протелепатировать": напряжение на AVCC не забыли подвести? Не забыл )) и AREF через конденсатор не забыл на минус посадить Цитата(XVR @ Jan 28 2011, 14:39)  А что стоит в 3м бите DDRA ? Он случайно не на ввод запрограммирован? Ну во всяком случае я его не программировал, вот весь код который сейчас есть, ну куда проще то (( Соответственно три состояния: 1. while(1) нету - лед мигает, видимо перезапуск main() 2. while(1) есть, но пустой, лед гаснет, все ок 3. while(1) есть, но в нем вызавается любая процедура - лед мигает, перезапуск или МК или main() #include <avr/io.h> #include <util/delay.h> int main(void) { DDRA |= _BV(PA2); _delay_ms(2000); PORTA |= _BV(PA2); _delay_ms(2000); PORTA &= ~_BV(PA2); поставил тильду как сказали //while(1){ asm volatile ("NOP" :  ; } return 0; } В случае когда разгорается второй лед он еще проще, выключение выкинуто
Сообщение отредактировал AlexTech - Jan 28 2011, 11:58
|
|
|
|
|
Jan 28 2011, 12:31
|

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

|
QUOTE (AlexTech @ Jan 28 2011, 13:53)  1. while(1) нету - лед мигает, видимо перезапуск main() Вероятно по собаке. QUOTE (AlexTech @ Jan 28 2011, 13:53)  3. while(1) есть, но в нем вызавается любая процедура - лед мигает, перезапуск или МК или main() Фуз M103C - ОЗУ расположено по другим адресам, стек в него не попадает, со стека читается мусор. QUOTE (AlexTech @ Jan 28 2011, 12:18)  В конце концов он делает именно то что нужно - ВЫКЛЮЧАЕТ, а все биты или нет не важно, ибо больше ничего полезного на этом порту не висит А второй светодиод?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 28 2011, 13:10
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
Цитата(Сергей Борщ @ Jan 28 2011, 15:31)  А второй светодиод? Да фиг с ним, с одним бы разобраться, кстати надо заметить что моя неправильная "&= !_BV" не мешает управлять силовиками на другой плате абсолютно раздельно, так что нифига не 0 туда пишется, напутали что то знайки, правда там тинка26 Цитата(Палыч @ Jan 28 2011, 15:42)  От fuse M103C изменяется распределение памяти (memory map, см. рис. 9 в DS). Компилятор распределяет стек в несуществующую память - поэтому без бесконечного цикла (при выходе из процедуры main) идёт перезапуск (стека то - нет реально: выбирется адрес возврата со значением = единицы во всех разрядах и после выполнения команды по этому адресу - следующая команда = 0 - переполнение указателя команд); то же происходит и при вызове процедуры из while(1){} (точнее при возврате из процедуры). Да я прочитал что это за фьюэ, спасибо, надо обязательно проверить, но вечером... вот схемка если что...
Сообщение отредактировал AlexTech - Jan 28 2011, 13:14
Эскизы прикрепленных изображений
|
|
|
|
|
Jan 28 2011, 13:22
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата Ну во всяком случае я его не программировал, А надо бы. По DS там при старте все 0, т.е. пин3 у вас запрограмирован на ввод, и на нем висит LED. Так что там может потечь что угодно. Цитата кстати надо заметить что моя неправильная "&= !_BV" не мешает управлять силовиками на другой плате абсолютно раздельно, так что нифига не 0х00 туда пишется, напутали что то знайки, Блажен, кто верует
|
|
|
|
|
Jan 28 2011, 13:31
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
Цитата(Палыч @ Jan 28 2011, 16:22)  Сверьтесь с каким-нибудь учебником (лучше - со стандартом) или проверьте на "железе" - будете удивлены... Дык, "кстати надо заметить что моя неправильная "&= !_BV" не мешает управлять силовиками на другой плате абсолютно раздельно" Цитата(XVR @ Jan 28 2011, 16:22)  А надо бы. По DS там при старте все 0, т.е. пин3 у вас запрограмирован на ввод, и на нем висит LED. Так что там может потечь что угодно. Блажен, кто верует  Ну я пробовал же по разному, DDRA |= _BV(PA3); естественно добавлял )) Ну правда, не идиот я )))) И да верую, могу прислать схему и код )) Можете, как написал Палыч - проверьте на "железе" - будете удивлены ))) И да, протеус тоже кушает такой код правильно, выключает таки один бит ))))
Сообщение отредактировал AlexTech - Jan 28 2011, 13:40
|
|
|
|
|
Jan 28 2011, 13:47
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
Цитата(Палыч @ Jan 28 2011, 16:44)  Возможно, что правильная "&= ~_BV" улучшила бы управление... По настоятельным советам обязательно поменяю, раз так правильнее )
|
|
|
|
|
Jan 28 2011, 14:00
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
Цитата(Сергей Борщ @ Jan 28 2011, 16:53)  Не меняйте. Знайкам интересно наблюдать, как вы получаете по лбу граблями, которые сами же любовно полируете. Да бросьте юродствовать, мы не в детском садике. Мне не нужна неработающая поделка, а те платки которые и так работают не грех переделать правильно если так считают специалисты, хотя проблем с ними я и не вижу ) Цитата(Палыч @ Jan 28 2011, 16:56)  Вы чуть меня не убедили, что я сошел с ума. Пришлось ещё раз убедиться, что при "&= !_BV" обнуляется весь порт. Проверил на "железе". Протеусом я не пользуюсь, но попросил товарища проверить Ваше утверждение: "кушает такой код правильно, выключает таки один бит". Вы - неправы, протеус в данном случае с "железом" не расходится. Ну теперь вы меня убедили что с ума сошел я ))))), вечером приеду и буду разбираться почему у меня работает как мне надо и железо и протеус. Хотя код у меня с собой, никаких тильд там нет :/
|
|
|
|
|
Jan 28 2011, 16:06
|

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

|
QUOTE (AlexTech @ Jan 28 2011, 16:00)  Да бросьте юродствовать, мы не в детском садике. Какое юродство, три человека вам разложили это выражение на элементарные действия и показали, что результатом по всем законам двоичной математики будет ноль во всем порту. QUOTE На улицах слякоть, И дождик, И град. - Наденьте галоши, - Ему говорят.
- Неправда, - Не верит Фома, - Это ложь... - И прямо по лужам Идет без галош.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 28 2011, 16:14
|
Участник

Группа: Участник
Сообщений: 60
Регистрация: 16-06-05
Пользователь №: 6 074

|
! - Логическая операция~ - Побитовое отрицание (или побитовое НЕ, или дополнение) — это унарная операция, действие которой эквивалентно применению логического отрицания к каждому биту двоичного представления операнда. Другими словами, на той позиции, где в двоичном представлении операнда был 0, в результате будет 1, и, наоборот, где была 1, там будет 0. Проверьте, должно мигать Код #include <avr/io.h> #include <util/delay.h>
int main (void) { DDRA = (1<<2) | (1<<3); while(1) { PORTA |= (1<<2) | (1<<3); _delay_ms(500); PORTA &= ~((1<<2) | (1<<3)); _delay_ms(500); } return 0; }
Сообщение отредактировал Vetal-Soft - Jan 28 2011, 16:45
|
|
|
|
|
Jan 28 2011, 16:50
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
это унарная операция, действие которой эквивалентно применению логического отрицания к каждому биту двоичного представления операнда. Другими словами, на той позиции, где в двоичном представлении операнда был 0, в результате будет 1, и, наоборот, где была 1, там будет 0.
Вот это правильное объяснение... я и считал что это инверсия, но - в общем посыпаю голову пеплом, в данном случае был не прав, не каюсь, но за спор приношу извинения, проверил все у себя - логика работы упоминаемой платки не подразумевает отдельное отключение битов, только отдельное включение, поэтому выглядело все абсолютно работоспособно даже в протеусе Палычу отдельное спасибо за конструктивные предложения без поучений и за фьюз М103С, все заработало )
Теперь мегавопрос для дальнейших споров )))) Возможно ли написание некоего протокола с использованием i2c позволяющего динамически раздавать адреса слейв устройствам или хотя бы как-то позволить работать нескольким устройствам с одинаковым адресом на одной шине?
Сообщение отредактировал AlexTech - Jan 28 2011, 17:07
|
|
|
|
|
Jan 28 2011, 17:42
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата Возможно ли написание некоего протокола с использованием i2c позволяющего динамически раздавать адреса слейв устройствам Да, в стандарте SMBUS2.0 такой протокол описан. Но он требует специального железа на I2C слейве  Если есть какое то априорное знание об устройствах на шине, то наверное можно придумать что то и без специального железа Цитата хотя бы как-то позволить работать нескольким устройствам с одинаковым адресом на одной шине? Нет. Но можно разделить шины. Есть разные мультиплексоры, репитеры, екстендеры и пр (см например на I2C от NXP )
|
|
|
|
|
Jan 28 2011, 18:15
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
Про мультиплексоры я знаю, да, к сожалению это решение не подходит (( Априорным же знанием про усстройства является то, что это некие исполнительные девайсы построенные на тинке26 выступающей в роли слейва для i2c. Соответственно адрес можно задать любой. Первым приходит в голову нечто типа такого: в каждом девайсе рандомная задержка при старте, потом проверка какого то адреса, если он не занят берем себе, если занят проверяем следующий. Ну и в финале мастер после бОльшей задерки сканит шину на наличие устройств и вычисления действующих адресов
|
|
|
|
|
Jan 29 2011, 06:15
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата потом проверка какого то адреса, Для этого слейв на тинке должен стать мастером и быть готовым к колизиям на I2C шине Цитата Априорным же знанием про усстройства является то, что это некие исполнительные девайсы построенные на тинке26 выступающей в роли слейва для i2c. А поподробнее - Сколько их предполагается? Можно ли в них зашить какой нибудь уникальный идентификатор (например длинное рандомное число)? Какова физическая конфигурация подключений I2C слейвов (в частности можно ли сделать изолирование отдельных I2C слейвов или сегментов на время конфигурации)? Цитата в каждом девайсе рандомная задержка при старте В тинке нет аппаратного генератора рандомных значений, а так как все тинки включаются одновременно, то их 'рандомные' задержки будут почти одинаковыми
|
|
|
|
|
Jan 29 2011, 09:35
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 2-12-05
Пользователь №: 11 688

|
Ну вот смотрите, если подробнее все описывать.. Делаю аквариумный копмьютер, в центральном блоке стоит 128мега, часики, память разных типов, usb, несколько разъемов с i2c и пару входов для градусников. Исполнительными устройствами(все построены на тинке26) и имеющими два i2c разъема(ну что бы от центрального блока все не тянуть) на данный момент являются: 1. силовые блоки(220в) на тиристорах(из за ограничения размера самих розеточных блоков получилось по 4 силовых выхода, а этого мало) 2. силовые блоки на транзисторах(до 50в) + шим 3. маленькие платки устанавливаемые в автокормушки взамен штатных и умеющие крутить моторчик для поворота кормушки 4. устройство отображения и ввода, два вида - с жк со знакогенератором и с жк графическим, ну и плюс кнопки 5. устройство на сведотиодах для имитации лунных циклов(шим) 6. устройство ввода(16 дискретных входов) во второй версии переедет в центральный блок 7. устройство управления потоками воды(сервомашинка+клапан) 8. в любой момент можно сделать еще что нибудь )))
вот... я могу все для себя сделать, каждому блоку дать уникальный адрес и не париться, но если понадобится подключить еще один блок(например розетки) то придется вспоминать какой адрес свободный, а если их 10?, а если сосед попросит ему еще один блок сделать... в общем хотелось бы автоматизировать этот процесс
Сообщение отредактировал AlexTech - Jan 29 2011, 09:44
|
|
|
|
|
Jan 29 2011, 18:24
|
Местный
  
Группа: Участник
Сообщений: 256
Регистрация: 5-04-09
Из: Москва
Пользователь №: 47 180

|
Цитата(AlexTech @ Jan 29 2011, 18:40)  485 это типо из пушки по воробьям )))... А i2c на 5 метров, это "типо" из рогатки по танкам  . Вам правильно говорят, здесь RS485 - то,что нужно
|
|
|
|
|
Jan 29 2011, 19:51
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(AlexTech @ Jan 29 2011, 22:40)  ну он как бы уже работает, может и по танкам, но без сбоев )) вы упускаете из виду кол-во передач, я подсчитал - примерно одна из 4 байт в 15 минут, о какой скорости обмена может вообще речь идти )))) А про скорость не идет, идет про надежность. Дифференциальный сигнал на метры передавать гораздо помехоустойчивее, чем 2 провода типа 'открытый коллектор' с резисторной подтяжкой Цитата Не только последовательно, поскольку на мастере несколько разъемов то таки звезда будет Ну я вам собственно это и предлагал - Цитата На хосте надо предусмотреть независимые I2C концы (через те же мультиплексоры) Цитата А городить огород на мультиплексорах i2c как бы во первых накладно, 1 штука это накладно? Цитата во вторых я их в Питере в розницу вообще не нашел (( Закажите сэмплы у NXP
|
|
|
|
|
Jan 29 2011, 20:07
|
Местный
  
Группа: Участник
Сообщений: 256
Регистрация: 5-04-09
Из: Москва
Пользователь №: 47 180

|
Цитата(AlexTech @ Jan 29 2011, 22:40)  ...но без сбоев... Для ухи хватит всего одного сбоя  . i2c (Inter-Integrated Circuit) не предназначен для связи на таких расстояниях.
|
|
|
|
|
Jan 29 2011, 21:35
|
Местный
  
Группа: Участник
Сообщений: 256
Регистрация: 5-04-09
Из: Москва
Пользователь №: 47 180

|
Цитата(AlexTech @ Jan 29 2011, 23:19)  ...просто в спецификации же не указана длина соединений... Дубль 2 : i2c (Inter-Integrated Circuit) Цитата(AlexTech @ Jan 29 2011, 23:19)  ...народ вон на 50 метров пуляет без проблем... Народ и шурупы молотком  .
|
|
|
|
|
Jan 29 2011, 21:55
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(AlexTech @ Jan 29 2011, 12:35)  вот... я могу все для себя сделать, каждому блоку дать уникальный адрес и не париться, но если понадобится подключить еще один блок(например розетки) то придется вспоминать какой адрес свободный, а если их 10?, а если сосед попросит ему еще один блок сделать... в общем хотелось бы автоматизировать этот процесс Предлагаю принять такое правило - выделяете пул адресов для каждого типа исполнительного устройства, подразумевая некоторое макс. кол-во, в пределах разумного, и внутри блока уникальные идентификатора не нужны - нужны только однозначные соответствия адресов - такой-то адрес==блок, отвечающий за моторчик, находящийся в таком-то месте.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|