Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ob_Dev (USB_hardware)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
RomanRom
1) Зачем в некоторых схемах ставят подтягивающий резистор 1 МОм на питание и D+?
2) Какой разброс могут иметь последовательные резисторы по D+, D- (68-200 Ом или как)? Они должны быть одинаковыми по сопротивлению или могут быть разными?
3) При питании 3,5 В ставят ATmega8L и кварц 12 МГц. Это расчет на технологический запас?
4) В некоторых схемах сигнал INT0 соединяется еще с одной линией контроллера. В некоторых схемах обходятся одним INT0. С программной точки зрения что лучше (быстрее)?
5) При питании 5 В в HID_Keys линии D+, D- почему-то не шунтируют стабилитронами 3,3 В (или у них и так работает)?
defunct
Цитата(RomanRom @ Mar 22 2006, 18:00) *
1) Зачем в некоторых схемах ставят подтягивающий резистор 1 МОм на питание и D+?

IMHO, от избытка лишних деталей.

Цитата
2) Какой разброс могут иметь последовательные резисторы по D+, D- (68-200 Ом или как)? Они должны быть одинаковыми по сопротивлению или могут быть разными?

Скажем так, меньше 68ом не желательно, а больше 68 ом - возможно. Для USB важно наличие уровней, а ток в цепи второстепенен, поэтому значения резисторов могут быть разными.

Цитата
3) При питании 3,5 В ставят ATmega8L и кварц 12 МГц. Это расчет на технологический запас?

Это грубая ошибка, допущенная вероятно случайно.

Цитата
4) В некоторых схемах сигнал INT0 соединяется еще с одной линией контроллера. В некоторых схемах обходятся одним INT0. С программной точки зрения что лучше (быстрее)?

вопрос непонятен.

Цитата
5) При питании 5 В в HID_Keys линии D+, D- почему-то не шунтируют стабилитронами 3,3 В (или у них и так работает)?
И так (без стабилитронов) должно работать.
EWAVR
Цитата(RomanRom @ Mar 22 2006, 20:00) *
1) Зачем в некоторых схемах ставят подтягивающий резистор 1 МОм на питание и D+?
2) Какой разброс могут иметь последовательные резисторы по D+, D- (68-200 Ом или как)? Они должны быть одинаковыми по сопротивлению или могут быть разными?
3) При питании 3,5 В ставят ATmega8L и кварц 12 МГц. Это расчет на технологический запас?
4) В некоторых схемах сигнал INT0 соединяется еще с одной линией контроллера. В некоторых схемах обходятся одним INT0. С программной точки зрения что лучше (быстрее)?
5) При питании 5 В в HID_Keys линии D+, D- почему-то не шунтируют стабилитронами 3,3 В (или у них и так работает)?

1. Чтобы при отключенном шнуре USB не схема не ловила наводки (если она self-powered).
2. ?
3. Это откровенный overclocking.
4. Одинаково.
5. Все работает и так, хотя так неправильно.

Ответы на большинство этих вопросов лежат в виде комментарие в тексте исходников драйвера.
RomanRom
Вопрос 4 более подробно. В схеме HID-Keys линия D+ подходит только к одному выводу контроллера - к выводу 4 INT0. В схеме PowerSwitch линия D+ подходит к выводу INT0 и к выводу PB1. Понятно, что в первом случае вывод INT0 используется как вход прерывания и одновременно как обычный порт. Вопрос - это лучше, хуже или без разницы с точки зрения программиста (например, будет быстрее выполняться программа или меньше код по объему)?

to EWAVR: По вопросу 1 ведь можно контроллер настроить на вход с подтягивающим резистором, тогда внешний 1 МОм не нужен.
defunct
Цитата(RomanRom @ Mar 22 2006, 19:18) *
Вопрос 4 более подробно. В схеме HID-Keys линия D+ подходит только к одному выводу контроллера - к выводу 4 INT0. В схеме PowerSwitch линия D+ подходит к выводу INT0 и к выводу PB1. Понятно, что в первом случае вывод INT0 используется как вход прерывания и одновременно как обычный порт. Вопрос - это лучше, хуже или без разницы с точки зрения программиста (например, будет быстрее выполняться программа или меньше код по объему)?

С точки зрения программы - одинаково, а вот с точки зрения надежности приема - неизвестно, т.к. выделение данных "по уровню" только одной линии может привести к ошибкам приема... Когда используется PB1 - это значит что для приема задействован еще и аналоговый компаратор, который ловит разность между уровнями линий D- и D+.
Хотя авторам драйвера виднее, почему бы не спросить прямо у них?
osnwt
Поскольку мнения разделились - отвечу еще и я :-)

Цитата
1) Зачем в некоторых схемах ставят подтягивающий резистор 1 МОм на питание и D+?

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

Подтянуть его pull-up'ом нельзя. Наличие резистора от D+/D- используется контроллером USB хоста для определения типа USB устройства (low-speed/full speed/disconnected). Наличие pull-up может помешать этому. Начиная с IAR-версии драйвера, введены макро usbDeviceConnect/Disconnect. Имеется в виду, что 1.5 килоома pullup можно включать не на VBUS, а на порт. И тогда подачей туда 1 или переключением в Z состояние можно управлять подключением и отключением устройства по желанию. Предположительно, это должно работать только для 5-вольтового питания, так как цеплять надо на 5 вольт (VBUS), а не на 3.3.

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

Цитата
2) Какой разброс могут иметь последовательные резисторы по D+, D- (68-200 Ом или как)? Они должны быть одинаковыми по сопротивлению или могут быть разными?

Это согласование с шиной. Можно выкинуть при коротком USB шнуре. Про это тоже написано в комментариях, как верно было подмечено. Да и на длинном можно выкинуть, на самом-то деле, для наших скоростей. Но тогда стабилитроны тоже ставить нельзя при 5 вольт питании.

А какой смысл делать разные резисторы?

Цитата
3) При питании 3,5 В ставят ATmega8L и кварц 12 МГц. Это расчет на технологический запас?

Да, в серию ставить не следует.

Цитата
4) В некоторых схемах сигнал INT0 соединяется еще с одной линией контроллера. В некоторых схемах обходятся одним INT0. С программной точки зрения что лучше (быстрее)?

Ответ на этот вопрос я косвенно уже писал на этом форуме.

С программной точки зрения нет никакой разницы. Разница с точки зрения аппаратной. Нам нужен Int0, и нужна нулевая линия порта (принципиально). Хорошо вешать это на один порт и экономить пин. Но на порту с Int0 нулевой бит - это RxD. Потому его стараются не занимать.

Если RxD не нужен, то можно использовать его для D-, и бит2 (Int0) - для D+.

Никаких аналоговых компараторов при анализе сигнала не используется. Более того, использован только один бит вместо проверки противофазных сигналов. Сделать "по правильному" программно невозможно. Но для low-speed устройств это не очень критично. Тем более, что CRC пакетов на приеме тоже не считается smile.gif - надо использовать проверку правильности пакетов на уровне приложения. И это описано в комментариях.

Цитата
5) При питании 5 В в HID_Keys линии D+, D- почему-то не шунтируют стабилитронами 3,3 В (или у них и так работает)?

Вся эта схема в той или иной степени нарушает стандарты USB. В какой - частично документировано. На шине D+/D- должны быть сигналы в 3.3 вольта. Со стороны хоста это, как считается, выдерживается (иначе при трехвольтовом питании на пинах AVR будет больше, чем его питание - опасно для контроллера). Со стороны AVR это выдерживается при питании 3.3 вольта. Стабилитроны с резисторами (это второе назначение последних) обеспечивают ограничение выходных уровней со стороны AVR при 5-вольтовом питании последнего.

С другой стороны, стандарт USB оговаривает, что и хост, и устройства обязаны выдерживать любое замыкание чего угодно на что угодно - на плюс 5, на землю, между собой, и т.п. Потому хост обязан выдержать и 5 вольт, что и использовано в HID_Keys. Правда, большинство дешевых материнок не содержат защиты от коротыша по питанию в USB устройстве. Так что тут еще вопрос, какое отклонение от стандарта более "неправильно".
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.