При реализации софтварного USB на AVR возникают вопросы. Как сделать правильно?
Видел варианты:
1. МК питается 5В от шины. D+ и D- напрямую к МК через резисторы ~ 200 Ом. D- подтянута на +5В через резистор ~10кОм.
Проблемы: по спецификации USB макс. допустимый уровень сигнала относительно земли 4.6В (или даже меньше) Смотрим USB2.0 Spec. Figure 7-2. Maximum Input Waveforms for USB Signaling
Можно спалить порт.
2. То же что и 1. , но дополнительно на D+ и D- поставлены стабилитроны на 3.6В (на землю), а вместо резисторов на 200 Ом стоят по 68 Ом.
Проблема: емкость стабилитронов - искажение формы сигнала. И всеравно будут выбросы.
3. МК питается от 3.3-3.6В от шины через стабилизатор или 2 диода. Подтяжка D- 1.5 кОм. На D+ и D- стоят резисторы по 68 Ом или вообще без резисторов.
Проблема: Минимальная необходимая частота 12 Мгц, а при использовании внутреннего генератора 16.5 Мгц. Насколько корректно гонять МК на такихз частотах при таком питании? В даташите как-то туманно про это написано: на титульной странице одно, на графиках другое, и ничего конкретного я так и не нашел.
Лично я использовал вариант 3. МК ATmega8 при кварце 12МГц. Работает.
Интересует заведется ли Tiny25 на 16.5 Мгц при питании 3.5-3.6В ?
Еще: атмел советует не гонять встроенный ацп быстрее 1 МГц (тактирование)
Я запустил при 3х Мгц. Работает. Насколько это корректно? (Полученная точность устраивает)