|
|
  |
Посоветуйте в выборе протокола |
|
|
|
Jul 20 2006, 07:03
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
Цитата(pokos @ Jul 20 2006, 10:55)  Цитата(xemul @ Jul 19 2006, 18:51)  Физический уровень - наверное, токовая петля с оптроном.
Именно. А по ней старый добрый манчестерский код. Нестабильность частоты 40% - абсолютно по барабану. Принимал как то манчестерский код с карт. Без кварцевой стабилизации как-то коряво работало. Может что-то не то делал? Хотя с кварцем устройство выпускается серийно.
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
|
Jul 20 2006, 07:16
|
Местный
  
Группа: Участник
Сообщений: 270
Регистрация: 29-06-06
Пользователь №: 18 445

|
Цитата(Семён @ Jul 20 2006, 11:03)  Без кварцевой стабилизации как-то коряво работало. Даже совсем тупой алгоритм с наглухо зашитыми параметрами вполне устойчив к разнице скоростей, поскольку синхрится каждый бит. Есть и более сложные способы, например, синхриться надо не по единственному фронту, а по нескольким усреднённым. Товарищ как-то давно написал читалку с магнитофона для Радио-86РК, так ленту можно было пальцем подтормаживать на ходу, до определённого предела сбоев не было.
|
|
|
|
|
Jul 20 2006, 07:39
|
Местный
  
Группа: Свой
Сообщений: 207
Регистрация: 25-03-05
Из: Рязань
Пользователь №: 3 669

|
Цитата(Семён @ Jul 19 2006, 16:17)  Цитата(yung @ Jul 19 2006, 16:12)  Мне эта мысль тоже нравится. Единственное "но" - использование внутренних генераторов - нестабильность частоты. Эта тема, кстати, обсуждается на форуме. И еще. Лет 10 назад я использовал собственный протокол - передача бит осуществляется положительным импульсом, тактирование - отрицательным. Под командой может подразумеваться завершение передачи байта информации (например, два информационных импульса перед синхроимпульсом), либо байта команды (скажем, три импульса). Линия связи строго говоря потенциальная, но со стороны приемника стоят два оптрона - один для положит. полуволны, другой для отрицательной. Перед ними токоограничительный резистор. Эта реализация хороша тем, что нет жестких временных ограничений - скорость со стороны мастера можно изменять. Дешифрация довольно проста даже с использованием жесткой логики (10 лет, однако). Насколько мне известно, системы с применением этого протокола до сих пор выпускаются. Я в свое время по объектам покатался (бензоколонки, нефтедобыча и пр.) - проблем со сбоями не было.
ИМХО:Идея хорошая, но требует двухполярного источника питания, а это не всегда удобно и всегда дороже. В моем протоколе требуется три состояния линии. Можно использовать 0, 1 и Z-состояние. Схема приемо-передачи может выглядеть следующим образом. При Z-состоянии мастера оба транзистора приемника открыты, а при появлении 1 или 0 один из них закроется.
Эскизы прикрепленных изображений
|
|
|
|
|
Jul 20 2006, 07:45
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
Цитата(pokos @ Jul 20 2006, 11:16)  Цитата(Семён @ Jul 20 2006, 11:03)  Без кварцевой стабилизации как-то коряво работало. Даже совсем тупой алгоритм с наглухо зашитыми параметрами вполне устойчив к разнице скоростей, поскольку синхрится каждый бит. Есть и более сложные способы, например, синхриться надо не по единственному фронту, а по нескольким усреднённым. Товарищ как-то давно написал читалку с магнитофона для Радио-86РК, так ленту можно было пальцем подтормаживать на ходу, до определённого предела сбоев не было. Спорить не буду, так как писал эту вещь более двух лет назад. Просто приведу пример приема 9 единиц. Для справки это прием хендера (начало передачи). ;////////Инициализация///////////// ldi temp,TICK_1d2_T; mov t_c_1d2,temp ldi temp,TICK_1d3_T; mov t_c_1d3,temp ldi temp,8 mov N_start_bit,temp ldi temp,Fd64 mov del_fr64,temp clr StopTimer clr count_N start_9bit: rcall ResetTimer0 clr count ;//////9 Start_Bit///////////////// nach0: sbic PINB,_OUT rjmp nach0 nach1: sbis PINB,_OUT rjmp nach1 wait0: out TCNT0,t_c_1d2 out TCCR0B,del_fr64 t3d4: in temp,TIFR sbrs temp,1 rjmp t3d4 semNew: rcall ClearTimer0 sbic PINB,_OUT rjmp tart_9bit wait1: out TCNT0,t_c_1d3 t1d2: sbic PINB,_OUT rjmp add_count in temp,TIFR sbrs temp,1 rjmp t1d2 sem_tnd: rjmp start_9bit add_count: out TCCR0B,StopTimer in temp_sem,TCNT0 cpi temp_sem,0Xd0 brlo sem_tnd inc count cpse count,N_start_bit rjmp wait0 ;////End 9 Start-Bit//////////// ;--------------------------------- ResetTimer0: ldi temp,0 out TCCR0B,temp in temp,TIFR sbrs temp,1 rjmp timer0_noFull ori temp,2 out TIFR,temp sbrs temp,7 rjmp NoFullT1_2 andi temp,0b11111101; out TIFR,temp NoFullT1_2: timer0_noFull: ret ClearTimer0: in temp,TIFR ori temp,2 out TIFR,temp sbrs temp,7 rjmp NoFullT1_1 andi temp,0b11111101; out TIFR,temp NoFullT1_1: ret Давно хотел переписать данный код. Останавливает лишь то, что с кварцем работает без нареканий. Цитата(yung @ Jul 20 2006, 11:39)  В моем протоколе требуется три состояния линии. Можно использовать 0, 1 и Z-состояние. Схема приемо-передачи может выглядеть следующим образом. При Z-состоянии мастера оба транзистора приемника открыты, а при появлении 1 или 0 один из них закроется. Будет время обязательно попробую
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
|
Jul 20 2006, 18:20
|

Участник

Группа: Участник
Сообщений: 31
Регистрация: 26-05-05
Из: Севастополь
Пользователь №: 5 391

|
Цитата(yung @ Jul 19 2006, 14:12)  И еще. Лет 10 назад я использовал собственный протокол - передача бит осуществляется положительным импульсом, тактирование - отрицательным. Под командой может подразумеваться завершение передачи байта информации (например, два информационных импульса перед синхроимпульсом), либо байта команды (скажем, три импульса). Линия связи строго говоря потенциальная, но со стороны приемника стоят два оптрона - один для положит. полуволны, другой для отрицательной. Перед ними токоограничительный резистор. Эта реализация хороша тем, что нет жестких временных ограничений - скорость со стороны мастера можно изменять. Дешифрация довольно проста даже с использованием жесткой логики (10 лет, однако). Насколько мне известно, системы с применением этого протокола до сих пор выпускаются. Я в свое время по объектам покатался (бензоколонки, нефтедобыча и пр.) - проблем со сбоями не было.[attachment=6344:attachment] Уж очень похоже Ваш метод кодирование на RZ (with Return to Zero)...
|
|
|
|
|
Jul 21 2006, 13:31
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
>>4 кнопки и весовые резисторы порочный путь для промышленного оборудования. Учитывай, что кнопки не идеальны и постепенно окисляются и меняют свое сопротивление, механика разбалтывается тем самым, увеличивая дребезг. То, что хорошо работала на столе через год эксплуатации может начать вести себя не как ты рассчитывал. С кнопками однозначно нужно работать: есть контакт, нет контакта.
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
|
Jul 21 2006, 15:18
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Pyku_He_oTTyda @ Jul 21 2006, 09:08)  Cпасибо за ответы! Пока выбрал для себя три пути: 1. 4 кнопки и весовые резисторы И это все в длинную линию? Глюков будет... Цитата 2. ширина шим 3. собственный протокол на основе вышеизложенного, калиброватся в начале каждой посылки имхо, все-таки стОит попробовать использовать аппаратные ресурсы контроллера (USART:)). Хотя хозяин - барин. Если очень хочется использовать ШИМ, можно толкать в USART на передачу, например, 0xe0/0xfe как 0/1, не обращать внимания при приеме на ошибки и пытаться понять, на что принятое больше похоже - на 0xe0 или на 0xfe. Но с периодической калибровкой слейва, по-моему, проще.
|
|
|
|
|
Jul 24 2006, 07:05
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
Цитата(xemul @ Jul 21 2006, 19:18)  Цитата(Pyku_He_oTTyda @ Jul 21 2006, 09:08)  Cпасибо за ответы! Пока выбрал для себя три пути: 1. 4 кнопки и весовые резисторы
И это все в длинную линию? Глюков будет... Цитата 2. ширина шим 3. собственный протокол на основе вышеизложенного, калиброватся в начале каждой посылки имхо, все-таки стОит попробовать использовать аппаратные ресурсы контроллера (USART:)). Хотя хозяин - барин. Если очень хочется использовать ШИМ, можно толкать в USART на передачу, например, 0xe0/0xfe как 0/1, не обращать внимания при приеме на ошибки и пытаться понять, на что принятое больше похоже - на 0xe0 или на 0xfe. Но с периодической калибровкой слейва, по-моему, проще. Используя ШИМ мы также используем аппаратные возможности: Со стороны мастера просто программируем ШИМ и просим его поработать какое-то время. Со стороны ведомого используем таймер с функцией захвата. На мой взгляд, самая простая реализация.
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
|
Aug 1 2006, 12:57
|

Профессионал
    
Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360

|
Заказчик настаивает на резистивном методе, переубедить пока не удается... у них так было уже сделано взамен проводного пульта ДУ от видеокамеры Панасоник. Утверждают, что проблем и глюков не было. Чтож, прогу написал, макет собрал, в комнате работает без нареканий. Гальванической развязки тоже не получается, не хватает проводов в кабеле  Перед МК поставил ЛМ258, включенную как повторитель, по входу защитил диодами и стабилитроном, между первой и второй половинкой ОУ RC-фильтр. Буду ждать испытаний, что они покажут  Кстати, а как правильно расчитать "ворота" значений АЦП для каждой команды? Пока используются "четверинки". Это выглядит так: к примеру первая команда - 1 вольт, вторая - 2 вольта, третья - 3 вольта. Для второй команды я выделил диапазон напряжений от 1,75 В до 2,25 В. А существуют какие либо правила для расчета значений в моем случае?
--------------------
Андрей Смирнов
|
|
|
|
|
Aug 5 2006, 20:06
|
Участник

Группа: Свой
Сообщений: 55
Регистрация: 29-01-05
Из: Moscow
Пользователь №: 2 291

|
Цитата(Pyku_He_oTTyda @ Aug 1 2006, 16:57)  Заказчик настаивает на резистивном методе, переубедить пока не удается... Гальванической развязки тоже не получается, не хватает проводов в кабеле Консерватизм заказчика понятен: мол, зачем платить за новое решение, когда старое работает. Мне представляется, что ЦАПовое решение неверно по трём причинам. 1. Важные параметры физического уровня - размах логического сигнала, помехозащитность, помехоустойчивость - всё перечёркивается этим решением. И это в то время, когда задача позволяет вместо амплитудной модуляции проводить ЧМ или ФМ(ШИМ). Ведь по быстродействию у вас запаса "вагон и маленькая тележка". Примените хотя бы такое кодирование ЧМ: "0" одной частотой, "1" - отличающейся в несколько раз. А можно и каждой кнопке дать свою частоту. 2. Передавать на 100 метров без гальванической развязки - это не есть хорошо. Решение проблемы - копеечный оптрон на приёмной стороне. 3. Невозможность расширения. На 100 метров и при малой зашумлённости линии я бы не стал связываться с передачей аналогового сигнала, но если иначе, то вот такое видится решение. Сразу скажу - сложная реализация. Итак, вы порождаете синусоидальные сигналы двух частот - для "0" и "1" (или свою для каждой кнопки). Можете использовать для этого AVR и ЦАП, либо воспользоваться отдельными генераторами. На приёмной стороне - распознавание частот. Ну тут есть где развернуться: либо в лоб с помощью триггера Шмитта и далее посчитать наполнение периода входного сигнала своей внутренней частотой, либо фильтры, либо АЦП и алгоритм БПФ. Решать вам, но я бы отказался от ЦАПового варианта: он может преподнести "сюрприз", особенно если вспомнить о дестабилизирующих факторах - отклонении питания и изменении температуры. P.S. Писал по памяти, а теперь только увидел, что выделяют вам в кабеле 1 провод, а это, по-моему, должно означать, что "общий" вы разделяете с кем-то ещё и тогда о гальванической развязке речи нет, т.к. этот кто-то скорее всего обошёлся без неё.
Сообщение отредактировал cyclop - Aug 5 2006, 20:31
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|