Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выход компаратора
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
777777
Нет ли среди обычных (не xmega) АВРок такой, у которой выход компаратора выведен наружу?
Rst7
К сожалению нет. А что Вы хотели соорудить?
haker_fox
Цитата(Rst7 @ Aug 26 2009, 03:44) *
К сожалению нет. А что Вы хотели соорудить?

Скорее всего, нужна экономия места на плате rolleyes.gif
dimka76
Цитата(777777 @ Aug 25 2009, 22:04) *
Нет ли среди обычных (не xmega) АВРок такой, у которой выход компаратора выведен наружу?


Как уже сказали - нет. Но ведь можно и программно сделать. По прерыванию дергать ножкой. Правда быстродействие эквивалентного компаратора несколько упадет.
777777
Цитата(haker_fox @ Aug 26 2009, 04:17) *
Скорее всего, нужна экономия места на плате rolleyes.gif

Нет, нужна экономия проводов. Есть мысль соорудить выносное устройство, питающееся по двум проводам и по ним же управляющееся. То есть на фоне питающего напряжения 12 В передавать сигнал UARTа с амплитудой, например, 1 В. В приборе его надо выделить и преобразовать в логический уровень после чего подать на вход UARTа.
Rst7
Сделайте софтовый UART на прием wink.gif
dimka76
Цитата(777777 @ Aug 26 2009, 10:55) *
Нет, нужна экономия проводов. Есть мысль соорудить выносное устройство, питающееся по двум проводам и по ним же управляющееся. То есть на фоне питающего напряжения 12 В передавать сигнал UARTа с амплитудой, например, 1 В. В приборе его надо выделить и преобразовать в логический уровень после чего подать на вход UARTа.


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


Цитата(Rst7 @ Aug 26 2009, 11:03) *
Сделайте софтовый UART на прием wink.gif


Уж лучше софтовый выход компаратора. Меньше вычислительной нагрузки на контроллер.
Rst7
Цитата
Уж лучше софтовый выход компаратора. Меньше вычислительной нагрузки на контроллер.


Вы ошибаетесь.
prottoss
Цитата(777777 @ Aug 26 2009, 14:55) *
Нет, нужна экономия проводов. Есть мысль соорудить выносное устройство, питающееся по двум проводам и по ним же управляющееся. То есть на фоне питающего напряжения 12 В передавать сигнал UARTа с амплитудой, например, 1 В. В приборе его надо выделить и преобразовать в логический уровень после чего подать на вход UARTа.
Сделайте на подобии того, как организовано питание датчиков в 1-ware. Т.е. в отсутствии сигнала у Вас по линии связи идет питающее напряжение. На линию питания надо будет поставить инвертор, он же будет выполнять роль компаратора/преобразователя уровня.
Rst7
Цитата
На линию питания надо будет поставить инвертор, он же будет выполнять роль компаратора/преобразователя уровня.


Зачем? Для аля-1-wire и UART инвертор не нужен. Хватит делителя с + питания на прямо на соответствующий пин проца. Если питание 12В, а проц от 5ти вольт, то два резистора килоом по 10 решат вопрос.
dimka76
Цитата(Rst7 @ Aug 26 2009, 11:09) *
Вы ошибаетесь.


настраиваем прерывание от компаратора на режим Comparator Interrupt on Output Toggle.
в самом прерывании
Код
push  tmp
push  tmp_2

in      tmp,  ACSR
bst    tmp,  ACO
in      tmp_2, PORTx
bld    tmp_2, нужный разряд
out    PORTx, tmp_2

pop   tmp_2
pop   tmp
reti



17 тактов + вход в прерывание, даже SREG сохранять не надо wink.gif
Rst7
Цитата
настраиваем прерывание от компаратора на режим Comparator Interrupt on Output Toggle.
в самом прерывании
...
17 тактов + вход в прерывание, даже SREG сохранять не надо


Ужос. Мало того, что в Вашем коде налицо принципиальные ошибки и дикий оверхед, так такой подход еще и принципиально приведет к дупе, если состояние компаратора (например, от помехи) будет меняться чаще, чем проц обработает прерывание wink.gif
dimka76
Цитата(Rst7 @ Aug 26 2009, 13:07) *
Ужос. Мало того, что в Вашем коде налицо принципиальные ошибки и дикий оверхед, так такой подход еще и принципиально приведет к дупе, если состояние компаратора (например, от помехи) будет меняться чаще, чем проц обработает прерывание wink.gif



Бог с ними, с ошибками, железо бы выявило все ошибки, это эскиз.

Помеху бы и для программного UART надо было бы фильтровать. Поэтому из сранительного анализа можно это исключить.

А раз присутствует дикий оверхед, значит код может быть еще компактнее.

А какой размер получится у программного UART ? Уж не пять строчек это точно.

Исправил ошибку )))
Rst7
Цитата
Помеху бы и для программного UART надо было бы фильтровать. Поэтому из сранительного анализа можно это исключить.


Неверно. Программный UART в простой реализации в независимости от сигнала на компараторе приведет к 1(от компаратора)+8(биты данных от таймера)+1(проверка стоп-бита от таймера) прерываний. А Ваш способ может привести к полной загрузке процессора.

Цитата
А какой размер получится у программного UART ? Уж не пять строчек это точно.


При правильном подходе - немного.
dimka76
Цитата(Rst7 @ Aug 26 2009, 13:29) *
Неверно. Программный UART в простой реализации в независимости от сигнала на компараторе приведет к 1(от компаратора)+8(биты данных от таймера)+1(проверка стоп-бита от таймера) прерываний. А Ваш способ может привести к полной загрузке процессора.


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

Кстати выход компаратора соединяется со входом захвата таймера, а прерывании по захвату приведенный мною выше код. Вот и аппаратная фильтрация входа.
Еще с этого виртуального выхода компаратора заводим через резистор на физический вход компаратора положительную обратную связь, вот и триггер шмитта. Еще одна фильтрация.
Rst7
Цитата
В прерывании от компаратора надо будет...


Повторяю последний раз - Ваш вариант чреват непредсказуемой загрузкой процессора.
dimka76
Цитата(Rst7 @ Aug 26 2009, 13:50) *
Повторяю последний раз - Ваш вариант чреват непредсказуемой загрузкой процессора.


Я и не настаиваю. Просто сравниваю ваш и свой вариант. Окончательное решение всеравно топикстартеру принимать )))
Vlad219i
Цитата(777777 @ Aug 26 2009, 10:55) *
Нет, нужна экономия проводов. Есть мысль соорудить выносное устройство, питающееся по двум проводам и по ним же управляющееся.


А почему именно UART? Я тут на досуге озадачивался цифровым управлением для детской железной дороги - мне идея оч понравилась. Воплотил, есличо. smile.gif Там и про полярность можно не думать, кстати.
В аттаче -краткое описание электрической части стандарта NMRA DCC, для затравки.
Нажмите для просмотра прикрепленного файла
MaslovVG
А не проще поднять уровень сигнала управления до 3 вольт и стабилитроном сдвинуть уровень сигнала в ТТЛ диапазон.
Всего две детали стабилитрон и резистор.
Добавив один транзистор можно не поднимать уровень сигнала.
Rst7
Цитата
А не проще поднять уровень сигнала управления до 3 вольт и стабилитроном сдвинуть уровень сигнала в ТТЛ диапазон.


Уж тогда лучше поднять размах до напряжения питания. Довести до логического конца, так сказать.

Главное, в передаче через UART есть стоповый бит, т.е. на какое-то количество энергии всегда можно расчитывать - в худшем случае можно брать за расчет то, что сопротивление проводов, подводящих питание, будет в 10 раз больше, чем определяется физическим сечением/материалом.
_Pasha
Цитата(dimka76 @ Aug 26 2009, 12:56) *
Я и не настаиваю. Просто сравниваю ваш и свой вариант. Окончательное решение всеравно топикстартеру принимать )))

Поллингом надо, батенька. Поллингом. smile.gif
haker_fox
Цитата(dimka76 @ Aug 26 2009, 18:19) *
Бог с ними, с ошибками, железо бы выявило все ошибки, это эскиз.

Вряд ли. Простые ФНЧ из резистора и конденсатора проблему бы не решили. Фильтры усложнять себе дороже. Проще применить программный UART, а сотояние входной ножки анализировать поллингом. При таком подходе, чтобы там небыло на входе, процессор будет тратить времени ровно столько, сколько Вы захотите.
Если делать по предложенной Вами схеме, то от любого чиха будет вызываться прерывание. Если чихов за единицу времени очень много, то процессор поселиться и будет жить в прерывании rolleyes.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.