usb-адаптер передатчика - альтернативная open-source прошивка

Psw

А я погряз в отладке/полировке прицепленного к 18 пику 44780 отладочного LCD.
Ну уже практически всё сделал, что хотелось, теперь прицепил аппаратно/обдумываю план проги обмена пакетами для dp1205 на том же 18 пике.
Новую Прошиву Шнурка видел, скачивал, но на симе за енто время ни разу не летал. Сегодня первый раз на верте-сооснике повисячил за месяц с лишним. Однако вину осознаю, и в компенсацию пойду пыльцу с фотика сдувать - заснять свою “печатную плату” с “разъёмом внутрисхемного программирования” :

Имелось ввиду исправление с варианта от 20/07
// Capture port settings
#define ICP_PORT_DD DDRD // timer input capture ports
#define ICP_PORT_IN PIND
#define ICP_PORT_OUT PORTD
#define ICP_BIT 6 // timer input capture pin

на вариант от 20/08 ?
// Capture port settings
#define ICP_PORT_DD DDRB // timer input capture ports
#define ICP_PORT_IN PINB
#define ICP_PORT_OUT PORTB
#define ICP_BIT 0 // timer input capture pin

Одним словом, только что заливал ради интереса в шнурок обе по очереди - с виду работают одинаково ХОРОШО.
По сравнению с первой от 13/07 случайно реверс элеронов не поменялся ?
Потому как я на сохранённом профиле джоя в AFPD не смог взлететь, перенастраивать не стал - только дрыготню глядел.
Расходов не хватает - но енто уже точно по причине не сделанной мною калибровки в AFPD и винде.
Дрыганье теперь однозначно меньше чем у прошивки Вада, хотя справедливости ради надо всё-таки откалибровать в винде и AFPD как положено.
Периодические Редкие но амплитудные дрыги прошивки 13/07 отсутствуют вовсе, так же как и жёсткая дрыготня всех каналов при ручках в минимуме.
Теперь при высота/элерон в минимуме происходит смещение полосок на пиксел, не более. А при центральном положении - полоски в AFPD вообще стоят как влитые. Так что - прогресс явно на лицо, высказанные идеи не пропали даром.
98 СЕ винду пока не грузил - она на ентом компе, с которого я мессагу набивал. Да и так почти 2 часа провозился - где уж мне за 5 минут всё протестить - я только пульт со шнурком с полки 5 минут доставал …
Кстати, между присвоением значения таймеру в прерывании и его свободным бегом есть компромисс - Увеличение таймера (в прерывании по переполнению ентого таймера) на требуемую коррекцию - применял в своём прошлом учебном проектике - тоже работает.
Ну и прилагаю фотку ЛСД 20х4, над которым корпел.
Производительность чуть более 1000 строк/секунду что по 4 что по 8 битам. Ну и в каждой строке по паре 16 бит БЦД преобразований делается при ентом выводе. 10 МИПСов - трать/не хочу. Однако с прогой фонового обмена буферами через радиоканал посредством 1205 - ну туго пока что, сложно всё чего-то, пока только общие черты обдумал. Однако - кто знает, быть может и состряпаю.

DrClover
osnwt:

Нормально работала версия от 13.07.06 с простым PPM декодером.
Версия от 20.07.06, в которой полностью переписан PPM декодер с целью вообще исключить какие-либо дерганья, работать на меге8 не могла в принципе, поскольку там вместо бита порта D6 (ICP1 на ATmega8) стоял B0 (ICP1 на ATmega32).

Вчера выгадал полчасика попробывал залить прошивки
Версия от 20.07.06 у меня не заработала ! 😦 (в винде шнурок определился но на РРМ не реагировал) Проверял на FUTABA 9CHP +XPSP2

Последняя - без проблем!!! работает четко без подергиваний 😃
Честь и хвала автору !!! 😃
ЗЫ Единственное, что еще хотелось быувидеть в данной версии - продублировать пару каналов кнопками, как это было во 2 й и 3ей оригинальных прошивках

osnwt

Версия от 11.08.2006.
rcu_20060811.rar
По отношению к предыдущей сделаны следующие изменения:

  • Изменена версия компилятора. Теперь компилировать следует IAR 4.20. Из особенностей компилятора использовано новое ключевое слово __nested для глобального разрешения прерываний сразу по входу в процедуру обработки прерывания. Это более корректно, чем sei после сохранения регистров.
    • Обновлена версия USB драйвера до 2006-07-18. Новые возможности, например, динамические дескрипторы, в проекте пока не использованы, но они в принципе дают возможность сделать универсальную прошивку под разные виды интерфейсов.
    • Добавлен опциональный режим серво-тестера. Идея в том, чтобы при входном PPM сигнале выдать один из каналов на отдельный выход контроллера. Использовать его можно для проверки серв или регуляторов двигателей. Естественно, что питать их надо не от USB. Я использовал этот режим для отладки контроллера бесколлекторного двигателя. Опция работает только при выборе драйвера in_ppm_adv, поскольку добавлялась как побочный эффект, а не самоцель.
  • Добавлен альтернативный выходной драйвер out_joystick_btn, аналогичный обычному out_joystick, но дублирующий 8 аналоговых каналов на 8 дискретных (кнопки). Если входной канальный импульс <1.5мс, то соответствующая кнопка не нажата, и наоборот. Минусом этого варианта является снижение в 2 раза периода опроса USB джойстика (ограничение программного USB как low-speed device). Плюсом же - пример того, как можно делать USB HID дескрипторы, состоящие из более чем одного репорта. Несмотря на кажущуюся избыточность кода, IAR крайне эффективно сливает его в один фрагмент, так что ручная оптимизация была принесена в жертву очевидности кода.
  • Многие аппаратные опции перенесены из *.c файлов в options.h, что, надеюсь, снизит вероятность подсунуть в очередной раз неработающую прошивку из за того, что какой-то из портов не был исправлен.
  • В архиве лежат две скомпилированные версии - с кнопками и без оных. Обе поддерживают режим серво-тестера, выводя на вывод PB1 (OC1A) сигнал 3-го канала передатчика (не проверено на ATmega8).
  • Обе версии проверены на оригинальном железе и выглядят работоспособными.
Psw:

Одним словом, только что заливал ради интереса в шнурок обе по очереди - с виду работают одинаково ХОРОШО.

Это случайно. Первая формально работать не должна (CMOS - не TTL).

По сравнению с первой от 13/07 случайно реверс элеронов не поменялся ?

Логика не менялась, так что не должен был.

Расходов не хватает - но енто уже точно по причине не сделанной мною калибровки в AFPD и винде.

Расходы сделаны с запасом на разную аппаратуру. Калибровать крайне рекомендуется или в Windows, или в симуляторе. Желающие могут поправить коэффициенты в исходнике и лучше использовать разряды байтовых переменных. Еще оптимальнее было бы переписать out_joystick_btn так, чтобы передавать не 8-ми, а 10-ти битные значения каналов. Тогда полное использование разрядов не имело бы такого смысла. Но при этом из за усложнения упаковки данных пропала бы наглядность. Кто идею понял - сам сможет переписать эту часть.

Кстати, между присвоением значения таймеру в прерывании и его свободным бегом есть компромисс - Увеличение таймера (в прерывании по переполнению ентого таймера) на требуемую коррекцию - применял в своём прошлом учебном проектике - тоже работает.

Это работает, если прерывание гарантированно вызвалось. А если случился захват при запрещенном прерывании, которое позже разрешили, то таймер убежит на непредсказуемую величину. В случае USB драйвера это работать не будет, поскольку драйвер может запрещать прерывания на время до 100 мкс и даже более, что внесет существенную погрешность в измерение PPM сигнала (порядка 10%, что и наблюдалось в версии с in_ppm декодером).

DrClover:

Единственное, что еще хотелось быувидеть в данной версии - продублировать пару каналов кнопками, как это было во 2 й и 3ей оригинальных прошивках

Как было в оригинальных - не знаю, так как их не смотрел. Но опционально сделал вариант с продублированными всеми 8-ю каналами в виде кнопок. Оба варианта прошивок есть в архиве.

graham
osnwt:

Версия от 11.08.2006.

Только что проверил эту версию, без кнопок (предыдущие версии не проверял ни одной), на передатчике Sanwa RD8000 и схеме на mega8. Стабильность в работе замечена была, в симуляторе пока проверить не успел, т.к. каналы на джойстике все попутаны получились 😦 В оригинальной проге написаной на асме, без проблем все поменял, тут не смог по причине отсутствия IAR 4.20, есть пока только 4.12, если получится найти новый крякнутый IAR и где настройки каналов, попробую перекомпилить, пока Вам огромное спасибо и удачи. Как только начнете работу регульятора для бесколлекторника на PWM3, сообщите, плиз, в личку.

graham

Полетал в симуляторе, вроде все нормально. Выкачал IAR 4.20 полистал код, не нашел определения поледовательности каналов, видимо они выдаются в компьютер в такой же последовательности, в которой приходят. У меня получаются некоторые каналы перепутаные на компьютере 😦. Т.к. в С и СРР я не силен, свободного времени еще меньше чем знаний, подскажите как поменять каналы.

osnwt
graham:

каналы на джойстике все попутаны получились

Да, это особенность прошивки. Я не старался тут сохранять совместимость с оригиналом, поскольку не увидел в этом большого смысла.

Как только начнете работу регульятора для бесколлекторника на PWM3, сообщите, плиз, в личку.

Работа над ним уже идет, и довольно успешно. Но проект будет закрытым.

подскажите как поменять каналы.

Варианта 3:

  1. (рекомендуемый): в любом известном мне симуляторе назначение каналов может программироваться внутри самого симулятора. В том числе, это относится к FMS, Aerofly Pro Deluxe, RealFlight G3 и Reflex XTR. Там же есть калибровка расходов каналов. Потому я не увидел смысла менять что-то в прошивке и не знаю точно, зачем это сделано в оригинале (вероятно, для общности или совместимости по умолчанию с неким конкретным симулятором).

  2. (частичное решение не для всех симуляторов): назначение каналов задается в USB дескрипторе строками:

PROGMEM char usbHidReportDescriptor[USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH] =
{
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x09, 0x04, // USAGE (Joystick)
0xa1, 0x01, // COLLECTION (Application)
0x09, 0x01, // USAGE (Pointer)
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x82, // INPUT (Data,Var,Abs,Vol)
0xc0, // END_COLLECTION
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0x32, // USAGE (Z)
0x09, 0x33, // USAGE (Rx)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x82, // INPUT (Data,Var,Abs,Vol)
0xc0, // END_COLLECTION
0x09, 0x34, // USAGE (Ry)
0x09, 0x35, // USAGE (Rz)
0x09, 0x36, // USAGE (Slider)
0x09, 0x37, // USAGE (Dial)
0x95, 0x04, // REPORT_COUNT (4)
0x81, 0x82, // INPUT (Data,Var,Abs,Vol)
0xc0 // END_COLLECTION
};

В таком порядке видятся с 1-го по 8-й каналы компьютеру. Назначение их применительно к джойстику очевидно из названий (оси X,Y,Z, вращение по осям Rx, Ry, Rz, ползунок, колесико). Для симулятора эти назначения могут приниматься или не приниматься в расчет (зависит от решения автора симулятора). Можно без особых проблем переставить местами эти обозначения, сохранив их места. Но это будет иметь значение только для джойстика и симуляторов, где стандартные назначения берутся в расчет (думаю, что нигде 😃).

  1. (реальная перестановка, но решение надо писать самому): нужно вводить таблицу перекодировки или просто переписать формирование последовательности каналов в функции usbBuildReport(). В каком порядке будут положены значения из channelData[] в usbReport[] - в таком и будут видны каналы в симуляторе.

Однако, это не написано в моей прошивке, поскольку любой из названных симуляторов позволяет произвольно назначить назначения каналов. Так как едва ли кто-то будет постоянно использовать две прошивки (я бы использовал ту, что больше подходит или нравится), то я не увидел такой проблемы и, соответственно, не поддержал такой возможности.

А с каким симулятором реально проблема?

dmitryu
osnwt:

А с каким симулятором реально проблема?

С любым не RC. ИЛ-2, например.

osnwt
dmitryu:

С любым не RC. ИЛ-2, например.

Сам этот симулятор не видел, но предполагаю, что описанный выше вариант 2 будет работать для симуляторов, изначально рассчитанных на работу с джойстиком.

Предположим, что канал руля высоты поступает с пульта по счету 3. Его симулятор хочет увидеть как ось Y стандартного джойстика. Тогда нужно поставить в дескрипторе 0x09, 0x31, // USAGE (Y) на 3-е место, считая сверху (в данном случае - вместо 0x09, 0x32, // USAGE (Z)), а последнее - соответственно, на второе. И эти два канала поменяются местами.

Иначе говоря, следует понять, в какой последовательности идут каналы с передатчика (например, 1 - газ, соответствующий в симуляторе оси Z, 2 - элероны, соответствующие в симуляторе оси X, 3 - руль высоты, соответствующий в симуляторе оси Y, и так далее). И поменять последовательность в дескрипторе в этом порядке, то есть

0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x82, // INPUT (Data,Var,Abs,Vol)
0xc0, // END_COLLECTION
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0x32, // USAGE (Z)

поменять на

0x09, 0x32, // USAGE (Z) - 1 канал передатчика
0x09, 0x30, // USAGE (X) - 2 канал передатчика
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x82, // INPUT (Data,Var,Abs,Vol)
0xc0, // END_COLLECTION
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0x31, // USAGE (Y) - 3 канал передатчика

Способ не вполне очевидный, но я не рассчитывал на подобные применения. Однако, любые изменения с точки зрения HID джойстика можно сделать, правильно сформировав этот дескриптор. В принципе, можно сформировать некий набор настроек прошивки, чтобы делать это более удобно. Пусть будет ToDo для очередной версии прошивки, если таковая когда-либо появится. Если нет, то можно переписать ее под себя, сделав указанные выше изменения.

graham
osnwt:

Работа над ним уже идет, и довольно успешно. Но проект будет закрытым.

Жаль. А на сколько закрытый? Полностью или можно как-нить стать тестером? Собирался в ближайшее время заняться сам, но всвязи с загрузкой на работе и предстоящей длительной командировкой, видимо не получится.

osnwt:

Варианта 3:

Первым я на данный момент и воспользовался. Если приспичит, попробую 3-ий.

osnwt:

А с каким симулятором реально проблема?

Пока проверил в FMS, к риалфлайту компакт не мог найти после переезда, вещи разгребу все, - найдется.

osnwt
graham:

Первым я на данный момент и воспользовался. Если приспичит, попробую 3-ий.

Если первого достаточно, то зачем тогда остальные? 😃

FMS->Control->Analog control->Joystic interface->Mapping/Calibration - и там все есть.

Пока проверил в FMS, к риалфлайту компакт не мог найти после переезда, вещи разгребу все, - найдется.

Там тоже все есть.

Жаль. А на сколько закрытый? Полностью или можно как-нить стать тестером?

Пока полностью. А дальше время покажет. Сроков никаких нет, поскольку проект, как некоммерческий, идет по остаточному принципу, а времени на все не хватает.

Николай-К

Как и обещал попробовал все прошивки и вот мои результаты:
Пробовал на Win XP Pro SP2, RC - Graupner 314

  1. 2006.07.13 - работает но почти все каналы дергаются
  2. 2006.07.20 - не работает (и в игровых устройствах ее нет)
  3. 2006.08.09 - работает очень хорошо
  4. 2006.08.11 - работает очень хорошо (разницы с предыдущей не увидел)
    И еще попутно вопрос, а что биты конфигурации все должны быть в Off,
    там только SUT0 - сам ставится в On, а то ведь в прошивках которые были выложены
    здесь раньше было - CKOPT-On и SPIEN-On?
    Кабель у меня собран на Atmega8-16PI который питается от 3.3 вольт.
    Для полного результата нужно еще проверить на разных версиях винды и разных
    передатчиках, эта возможность у меня есть но нужно некоторое время.
osnwt
Николай-К:
  1. 2006.07.13 - работает но почти все каналы дергаются

By design. Это уже обсуждали. Хотя у некоторых работает без дрыгов, но это просто удачный USB хост. Причина выявлена. Считать прошивку устаревшей.

  1. 2006.07.20 - не работает (и в игровых устройствах ее нет)

То, что нет в устройствах - странно. Должно просто не работать (у большинства) чтение PPM сигнала. Считать прошивку нерабочей.

  1. 2006.08.09 - работает очень хорошо

Рабочая прошивка с тем же набором опций, что и предыдущая (которая не работает). Считать прошивку баг-фиксом предыдущей.

  1. 2006.08.11 - работает очень хорошо (разницы с предыдущей не увидел)

Разницы и нет в смысле подергивания. Разница только в дополнительном дублировании одного канала на выход контроллера и альтернативный вариант джойстика с дублирующими кнопками (и в этом варианте частота передачи данных на компьютер в 2 раза ниже, чем без кнопок - теоретически 50 и 100 раз в секунду, соответственно. Практически не проверялось).

И еще попутно вопрос, а что биты конфигурации все должны быть в Off,
там только SUT0 - сам ставится в On, а то ведь в прошивках которые были выложены
здесь раньше было - CKOPT-On и SPIEN-On?

Судя по часто появляющемуся тут вопросу о битах конфигурации: я вообще не указывал того, какие биты должны быть прошиты. Должны быть прошиты точно те же самые биты, что и для оригинальной прошивки, поскольку аппаратно устройства идентичны. И отсутствие прошитого бита SPIEN вообще сделает контроллер неперешивающимся по SPI. Поскольку прошивка задумывалась, как drop-in replacement для оригинальной (бросил на место оригинальной и забыл), то акцента на установке битов не делалось.

Кабель у меня собран на Atmega8-16PI который питается от 3.3 вольт.

Если оно работает с оригиналом, то будет работать и с альтернативной версией. Спор по поводу питания от 3.3 вольт кристаллов, работающих на 12 MHz, уже был в соответствующей ветке. Как правило, все работает. Я предпочел питать контроллер от 5 вольт, но выбор этот более-менее произвольный.

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

Самое интересное - проверить на 98 и ME. 98-я, по имеющейся информации, иначе работает с HID джойстиками. Она требует положительных значений передаваемых данных (это условие у меня соблюдается изначально) и не использует USB interrupt для опроса устройства (у меня реализовано оба варианта: как система запросит - так мы ей и ответим).

В любом случае спасибо за информацию всем ответившим. По крайней мере понятно, что хоть у кого-то оно заработало. Хотелось бы еще в том же ряду увидеть сравнение с оригинальной версией, чтобы для себя уяснить, а имело ли смысл все это мероприятие? Я писал для себя, но спустя полгода что-то стукнуло выложить сюда. Может, и зря. Но раз выложил, то хотелось хотя бы понять, имело ли все это смысл…

Николай-К

Попробовал снова прошивки но уже с включенными битами - CKOPT и SPIEN:
2006.08.09 - работать совсем отказалась
2006.08.11 - работает как и прежде отлично
2006.08.11(btn) - тоже работает без проблемм

DrClover
osnwt:

В любом случае спасибо за информацию всем ответившим. По крайней мере понятно, что хоть у кого-то оно заработало. Хотелось бы еще в том же ряду увидеть сравнение с оригинальной версией, чтобы для себя уяснить, а имело ли смысл все это мероприятие? Я писал для себя, но спустя полгода что-то стукнуло выложить сюда. Может, и зря. Но раз выложил, то хотелось хотя бы понять, имело ли все это смысл…

На мой взгляд- Имело !!! и даже не надо сомневаться в этом.
повторюсь - Честь и хвала автору 😃 😃 😃

ЗЫ у меня оригинальная работала нормально тока с SANWA RD6000, c Futaba 9CHP каналы были перетусованы и небыло кнопок (смею предположить что изза инверсии PPM, транзистор на входе стоит)
С Вашей все ОК.ОВ.

graham
DrClover:

ЗЫ у меня оригинальная работала нормально тока с SANWA RD6000, c Futaba 9CHP каналы были перетусованы и небыло кнопок (смею предположить что изза инверсии PPM, транзистор на входе стоит)
С Вашей все ОК.ОВ.

Странно… у меня оригинальная работала на санвах, хайтеках и даже футабах в том числе и 9ти канальная футаба, точно какая не знаю… все это пошло по знакомым.

DrClover
graham:

Странно… у меня оригинальная работала на санвах, хайтеках и даже футабах в том числе и 9ти канальная футаба, точно какая не знаю… все это пошло по знакомым.

С футаба 9 она работала - но без кнопок, с санвой нормально с кнопками
Возможно это из за транзистора на входе(РРМ позитив негатив) делал несколько штук себе и друзьям
по полной схеме со стабилизатором 3.3в и транзистором на входе у всех окей, у меня без кнопок 😦
Вэтом проекте как я понял нет разницы в РРМ позитив или негатив
удобно для не сильно рубящих правильно собрал схему- залил прошивку -счастье ! 😃
да и дерганий каналов поменьше.

toxa
DrClover:

ЗЫ у меня оригинальная работала нормально тока с SANWA RD6000, c Futaba 9CHP каналы были перетусованы и небыло кнопок (смею предположить что изза инверсии PPM, транзистор на входе стоит)

У sanwa и futaba разный порядок следования каналов. У futaba 1-элерон 2-руль высоты а у sanwa - 1-руль высоты 2-элероны.

boroda_de

Заинтриговали меня посты тут: скачал, прошил последнюю версию с кнопками (ничего не менял, т.к. компайлера нет а ссылка в доку на демо качает полную версию).
Как уже замечено каналы по сравнению с оригинальной прошивкой расположены по-другому…
Дрожания ручек не заметно, зато имеется небольшое скакание при минимальной длине импульса на двух каналах (из шести)
Передатчик Graupner/JR X412 совсем новый (т.е. резюки в порядке)
Позже протестую с Graupner MX12/JR 2610
Спасибо автору и успехов

osnwt
boroda_de:

компайлера нет а ссылка в доку на демо качает полную версию.

Это не совсем демо - это на самом деле полная eva*luation версия, отличающаяся от retail только отсутствием исходников библиотек. Если ее скачивать через сайт после регистрации (ни к чему не обязывающей), то на указанный email присылают 30-дневную лицензию, позволяющую протестировать пакет без каких-либо ограничений. Если скачать ее по прямой ссылке, то без лицензии запустить продукт не получится, но в определенном смысле эта проблема решаема. Например, путем покупки лицензии. Ну, или поиска в интернете, или т.п.

Buranov_P

Проверил последние прошивки на Win ME и 98. Передатчик - Hitec Focus Heli 5. Работают без проблем FMS и AFPD. Оригинальная прошивка v1.1 не позволяет откалибровать джойстик в этих симуляторах под МЕ и 98.

Теперь замечания/просьба. Дело в том, что без хотя бы одной кнопки откалибровать джойстик в “Игровых устройствах” (в МЕ и 98) не удается. (Или я не знаю как. Кто знает - научите. Только не надо ссылаться на Win XP - там это сделать можно!)) Кнопки, совмещенные с ручками передатчика еще более запутывают ситуацию. Крайне желательно было бы, чтобы хотя бы одна кнопка эмулировалась с клавиатуры или с замыкания ножки микропроцессора на землю.

IMHO: Нужна прошивка, где кнопки эмулируются с клавиатуры или с ножек микропроцессора (что, по моему, совсем уж не сложно сделать), а лучше - обе прошивки. Кнопки с ручек передатчика, на мой взгляд, только создают неудобства.

В любом случае большая благодарность автору. Я, например, давно уже собирался сделать адаптер - наконец сделал. (Хотя реальной нужды вроде бы и нет - есть фирменнные RF G2 и Reflex. Пульт RF G2 перекрывает все потребности.) Просто любопытно было поковыряться.

Кстати, если кому интересно. Столкнувшись с проблемой “Неизвестное USB устройство” стал с ней бороться. Были перепробованы все рекомендованные (в соответствующей ветке форума) способы: Питание 5в - 3.6в, конденсаторы на D+ и D-, провод длинный - короткий и тд. Все это давало мизерные результаты. (Хотя и давало. Например, иногда все таки устройство опознавалось). В конце концов подпаял конденсатор 500пф на ножку резонатора (все равно какую) - все заработало как часы! В любых комбинациях - 5в, 3,6в, с конденсаторами на D+ и D-. и без с длинным кабелем и коротким, с любыми прошивками (даже с “неустойчивами” , про заведомо нерабочие я не говорю)… . Померял частоту на резонаторе.Без подпаянного конденсатора 12.06 мгц. С конденсатором на выводе XTAL2 - 12.00, с конденсатором на XTAL1 - 11,93. За точность цифр не ручаюсь - мерялось китайским мультиметром, хотя думаю кварц там заведомо точнее, чем керамический резонатор. Но тенденцию проследить можно… . Кстати, рекомендация включить FUSE bit CKPOT (в оригинальной статье, написано - включить все FUSE… ) как раз и подключает внутренние конденсаторы к резонатору, понижая частоту (в моем случае - недостаточно!). В общем, возникло предположение - а не связаны ли все проблемы у людей с разбросом частот резонатора? У кого чуть ниже - и никаких проблем, а у кого чуть выше… . Впрочем, это каждый может проверить сам. Если не заест лень - попробую поставить внешнюю RC цепочку, и посмотреть, насколько точно нужно подбирать частоту. (В оригинальной статье написано: ± 1%, но в моем случае +1% оказался фатальным!)
В данный момент схема выглядит так: два диода с +5 на питание процессора, конденсатор 0,1 мкф керамический по питанию процессора, никаких резисторов, конденсаторов, стабилитронов на D+ и D- (кстати, резистор с D- должен быть подключен к +5, а не к 3,3в ? по описанию шины, хотя это, наверное, непринципиально. Сигнал с передатчика - через резистор. Итого:
Два конденсатора 0,1мкф (питание проца) и 510 пф (на резонатор)
Два резистора 1,5ком (с D- на +5в) и 10ком (на передатчик)
Два диода КД522 снижают напряжение до 3,6в. (Я все-таки тоже сторонник, чтобы все было по правилам)
ATMEGA8-16PI
Резонатор ZTT 12мГц

Итого 8 элементов. Без проблем работает с удлиннительным USB кабелем 1,6 метра, на раных компах.

9 days later