Перейти к содержанию
    

Xenia

Модератор FTP
  • Постов

    4 850
  • Зарегистрирован

  • Победитель дней

    3

Весь контент Xenia


  1. На этот вопрос я уже отвечала: Криминала тут нет, поскольку согласно Figure 21-3 даташита, такая схема подключения функционирует вплоть до 3.4 в (ниже уже требуется подключаться напрямую к Ucap). Кроме того, если бы я даже совсем обесточила UVCC, то у меня бы только перестал работать USB-канал, но процессор бы не завис. А у меня ниже 4.4 вольта перестает моргать светодиод на выводе порта, переключаемого из прерывания по таймеру T0. Т.е. у меня даже таймер останавливается! Впечатление такое, что кварц "заело".
  2. Эту табличку я видела. Мои фузы такие (лог программатора Avreal32): Device connected, 90USB647 detected Chip not locked Fuses OSCCAL = 91 CKDIV = 1 CKOUT = 1 SUT = 2 CKSEL = E BLB1 = 3 BLB0 = 3 OCDEN = 1 JTAGEN = 0 WDTON = 1 EESAVE = 1 BOOTSZ = 1 BOOTRST = 1 HWBE = 0 BODLEVEL = 7 Судя по BODLEVEL = 7, я пыталась отключить BOD совсем. Впрочем, не дожидаясь ответа, я перепробовала все BODLEVEL, но лучше от этого не стало. Не подбросит ли кто-нибудь еще идеи, по какой причине AT90USB647 может зависать, при уменьшении питающего напряжения ниже 4.4 вольта?
  3. Заменила кварц 16 МГц на 8 МГц и ... ничего не изменилось. Снова всё та же история - как только напряжение становится ниже 4.4 вольта - МК виснет (обычно он у меня мигает раз в секунду светодиодиком). Может быть у меня какой-нибудь не тот BODLEVEL в фузах прошит? И из-за этого МК на низком напряжении работать не хочет? Подскажите пожалуйста, какие фузы для него надо устанавливать! Только все фузы разом, а не только те, которые понимаете. У меня внешний кварцевый резонатор на 8 МГц, и надо чтобы и МК работал на той же частоте. Хотелось бы, чтобы годилось питание в 4 вольта, а лучше - как можно более низкое.
  4. Вы ничего не путаете, именно так всё и есть. Только к моему большому сожалению, я мало что могу сделать, чтобы мое устройство вписалось в 100 мА. Погрузить в спячку микроконтроллер я не могу - в таком состоянии он неспособен будет общаться по USB. Оба АЦП (ADS1255) на борту питаются через через гальваноразвязки DC/DC (у каждого своя) - именно на них приходится наибольший расход тока, т.к. их КПД низок при данном токе (20% загрузки). Погружала оба АЦП в спячку, но это дало прибавку напряжения только на 0.05 в. Чтобы отключать DC/DC преобразователи на входе нужно было позаботиться заранее, при проектировании устройства. И это бы, несомненно, усложнило и удорожило конструкцию. А главное, что тогда я не могла знать, что у меня будет такой затык с USB-питанием, т.к. никогда раньше я программированием этой части не занималась. Да и про ограничение в 100 мА узнала только тогда, когда с этим непосредственно столкнулась.
  5. Я вроде бы по-русски написала, что сослалась на слова умельца, который чинил сгоревший USB-порт. А для таких придир, как вы, я специально оговорила "за что купила, за то и продаю". Где вы прочли в моем посте, что я на описание ссылаюсь? Если вы сомневаетесь, что там в качестве дискриминатора транзистор стоит, то что вам кажется менее сомнительным? Что там резистор что ли впаяли? Если бы это было так, то при достижении порогового значения наблюдалась бы не отсечка, а линейное уменьшение выдаваемого компьютером напряжения с ростом потребляемого тока на всем диапазоне. Однако такой эффект незамечен. До 100 мА порт исправно выдает свои 5 вольт (у меня 5.05 в) и лишь после преодоления порога ток начинает уменьшаться. Мой ноутбук при нагрузке на мое устройство (эквивалентное сопротивление 25 ом) понижает ток до 153-160 мА. Весьма возможно, что при коротком замыкании ток еще на сколько-то подрастет, но дискриминатор сгореть ноутбуку не даст. Если же вы коряво выразились, и под словом схема имели ввиду не электрическую схему обеспечения напряжением, а логическую схему его блоковой раздачи, то здесь сослаться на описание я могу: Павел Агуров, Интерфейс USB : практика использования и программирования, СПб, БХВ-Петербург, 2006. На странице 60 читаем: Речь шла о случае, когда устройство "завелось", т.е. не только нормально определилось, но и выдает правильный текст на виртуальный COM-порт. Например, у моего ноутбука тока на это хватает (4.5 в, 153-160 мА), а у десктопа не хватает (4.0 в, 140 мА). Меня насторожил тот факт, что напряжение и токопотребление остаются одинаковыми, как в случае, когда устройство определилось (был инсталлирован драйвер), так и в том случае, когда оно не определилось (подключение без драйвера). Такое положение не нормально и свидетельствует о том, что просьба устройства о дополнительном электроснабжении была компьютером проигнорирована. Кроме того, в моем устройстве предусмотрено подключение внешнего напряжения питания, благодаря чему я могу завести свое устройство даже на слаботочном USB-порте, а затем, отключив внешнюю подпитку, замерить, что дает порт. У меня в ноутбуке не один USB-прт, а четыре. А на десктопе и подавно 6 портов. И все они ведут себя одинаково. Что ж, по-вашему они всего горелые? Если так, то отчего же те самые внешние USB-диски у меня на этих портах работают? Это вы к чему? Какое отношение к теме имеют проблемы перепрошивки еепром у Силабса? У меня на AT90USB647 с прошивкой все нормально. Кроме того, я запрашиваю ток 400 мА (MAX_POWER=200). И этот запрос нормально виден на трассировщике USB канала. Ответ на этот вопрос содержится в ответе для SKov.
  6. Таких материнок, которые чтобы ограничить ток измеряют, действительно нет :). Там принцип очень простой - на проходе ставят примитивный усилитель тока - транзистор, в цепи базы которого пускают калиброваный ток. Величина, получаемая умножением базового тока на коэффициент усиления по току для этого танзистора, и есть приблизительно ток отсечки. При достижении такого тока транзистор впадает в насыщение и больше чем эту величину пропустить тока через себя не может. Конечно, это весьма грубый способ регулирования, т.к. внутреннее сопротивление самого транзистора при разных токах трудно учесть, а стало бы и падение напряжения на нем. Но, согласно описанию, дозирование тока производится ступенчато - шагами по 100 мА. А, значит, что там всего 5 ступенек, для которых подобрать резисторы для подходящего тока утечки можно экспериментально. Впрочем, похоже на то, что подбором фирмачи не занимаются, т.к. у меня, например, ограничение по току наступает не при 100 мА, а при 153 мА. Причем, на разных материнках по-разному. Но принцип регулирования тут у всех одинаковый. Об этом я сама узнала случайно, когда у моего знакомого сгорел USB порт на старом ноутбуке из-за того, что он работал с внешним USB-диском, подключая только один USB-разъем. Ремонтровать пришлось у умельца, который все это рассказал. Я же за что купила, за то и продаю :).
  7. Материнские платы действительно ограничивают ток USB. И это скорее всего не от большого ума, а необходимость защиты от внешнего короткого замыкания по USB-питанию. USB-порты компьютеров, которые я испытывала, никак нельзя назвать слабыми, так как на них может работать внешний диск, потребляющий 0.8 А (из двух портов USB). Если бы порты и в самом деле были слабыми, то внешний диск бы не работал. Кроме того, модем (ZyXEL OMNI ADSL USB) тоже потребляет прилично - у него в конфигурации прописано 500 мА. А мое устройство потребляет куда меньше - 195 мА при напряжении 5.0 в. Короче говоря, на чужие USB-устройства порты ток дают, а на мое нет. И вина в том, скорее всего ложится на драйвер. Я пробовала брать типовую прошивку, которую рекомендует Atmel, - "AT90USB128/64 CDC Device Virtual Com Port project". Исправляла в ней ток 100 мА на 500 мА (MAX_POWER = 0xFA) и получала тот же самый результат. И это не удивительно, т.к. все лабают с этого проекта, как и я. В разных местах по этому поводу посылают читать "Refer to USB Feature Specification: Interface Power Management for details", но этого труда нигде достать не удается, хотя ссылок на него тьма тьмущая. В общем-то дело сводится к тому, что устройства USB 2.0 должны просить для себя электричество как-то иначе, чем это обычно делают устройства на USB 1.1. И где мне искать описание этого загадочного "interface_power descriptor"а, если он даже в книге Агурова не упоминается? P.S. С первым вопросом про питание я кажется сама разобралась - ниже 4.4 вольт зависал сам МК, т.к., согласно даташиту, питание при кварце 16 мГц должно быть не ниже 4.5 вольт. А на кварце 8 мГц тот же МК может работать даже начиная с 2.7 вольта. Придется теперь на вдвое медленный кварц переезжать. :(
  8. Два вопроса про питание AT90USB647 от порта 1. USB-коммуникация прекращает работать при понижении Vbus ниже 4.4 вольта. Это норма или патология? Подробно моя проблема в следующем: устройство (АЦП с CDC-USB выходом) питается от Vbus и потребляет ток 200 мА, в то время как USB-порт столько ему не дает (по умолчанию должен давать 100 мА). В результате ограничения по току, напряжение падает до 4-х вольт, а на этом напряжении устройство не определяется компьютером, из-за чего не может попросить больше тока. Это у всех так или я где-то напортачила? Схема соединения примитивная - все напряжения одним пучком Vbus+Uvcc+Avcc+Dvcc (Figure 21-3). Внутренний регулятор у меня включен. По даташиту непонятно, должно ли работать при напряжении ниже 4.4 вольта. С одной стороны питание МК допустимо снижать до 3.4 вольта, а с другой стороны ничего не говорится про Ubus, который в то время отсоединен из пучка. Опять же сказано, что передающие линии D- и D+ имеют потенциал 1.4 вольта (если не в режиме хоста), а если так, то должно хватать. И вообще, как мне быть, если у меня устройству нужно 200 мА, а начальное напряжение USB-порта при таком токе дает только 4 вольта? 2. Почему-то не хочет USB-порт добавлять ток, даже когда я его об этом вежливо прошу. Устанавливаю: #define CONF_ATTRIBUTES USB_CONFIG_BUSPOWERED #define MAX_POWER 200 // 400 mA USB_CONFIG_BUSPOWERED пробовала и 0x80 (как в апликэйшен), и 0x00 (как в книге Агурова), а толку чуть - какой был хилый ток, таким и остался. На разных компьютерах пробовала - результат неутешительный - сколько давал порт тока, столько и дает при любых MAX_POWER. В чем тут может быть дело?
  9. Проблема разрешилась тем способом, каким я и предполагала. INF-файл, взятый из проекта at90usb162-cdc-1_0_1.zip, способен работать под Vista со всеми МК типа AT90USB, а не только AT90USBxx2, как сказано в его заголовке.
  10. Моя оплошность - при перечислении пропустила его, а потом, говоря про второй вариант, подразумевала его. Я согласна, что этот способ самый лучший.
  11. Существуют 2 способа зажигания светодиодов от МК: 1-ый способ, когда МК выдает на порт напряжение, от которого горит светодиод. В этом случае светодиод подключается между выводом МК и землей. 2-ой способ, когда светодиод горит от цифрового питания, а МК закорачивает его своим портом накоротко, чем гасит. В этом случае светодиод подключается между выводом МК и плюсом цифрового питания. Баластный резистор для ограничения тока нужен в любом из этих случаев, как это уже подсказали ранее. Практика показывает, что МК легче выдерживает большой ток при закоротке на землю, чем ток, который ему приходится отдавать вовне. Отсюда предпочтительнее реализовывать 2-ой способ. Т.е. зажечь светодиод, подсоединив его одним концом к цифровой земле, а другим концом через сопротивление 1 ком к шине питания. При этом пин порта МП присоединяется к точке соединения светодиода и сопротивления. Высокий уровнь или Z-состояние не мешают светодиоду светиться, а низкий уровень закорачивает светодиод, пропуская весь ранее протекающий через него ток на землю. Несмотря на то, что в даташите на МК допускаются достаточно высокие токи через порт, там же упоминается ограничение на СУММАРНЫЙ допустимый ток. Поэтому управлять сразу десятком светодиодов достаточно стрёмно. Тогда уж лучше взять какую-нибудь сборку из 8 логических элементов "НЕ" и переключать светодиоды через нее.
  12. На WinXP работает, а на Vista не загружается драйвер. Что делать? В обеих случаях CDC использует фирменный драйвер от Microsoft под названием UsbSer.sys. При стандартной установке системы этот драйвер не ставится, но он имеется в базе driver.cab и оттуда при необходимости ставится в директорию System32\drivers\. Обычно этот драйвер используют многочисленные USB-модемы, для коих целей он и составлялся. Проект at90usb128-demo-cdc-1_0_3.zip тоже базируется на этом драйвере, поэтому для его установки прилагается только inf-файл, который использует стандартный драйвер UsbSer.sys. Но вот беда - под Vista этот inf-файл не срабатывает. Вот здесь - http://forums.microsoft.com/MSDN/showpost....51&siteid=1 - на микрософтовском форуме, народ ругается про то же самое. А кто-то составляет свои версии inf-файла - http://blog.bigreat.org/2007/11/25/at91sam...-windows-vista/ (правда не для AT90USB128, а для AT91SAM7). Вопреки опасениям, UsbSer.sys в системе Vista имеется - его дата 02.11.2006 и он длинее на 2560 байт того, который поставляется с WinXP. Отзовитесь, кому удалось запустить CDC-проект под Vista или помогите советом, где раздобыть подходящий inf-файл для этой цели. =============== P.S.: Кажется в другом проекте at90usb162-cdc-1_0_1.zip есть inf-файл, в заголовке которого поминается Vista: ; Windows 2000, XP & Vista setup File for AT90USBxx2 demo Пока не успела проверить заработает с ним или нет.
  13. Если бы не ваш пост, я бы никогда не полезла искать последнюю ревизию даташита. А самой найти такую ошибку невозможно.
  14. А я действовала по ревизии А (7593A-AVR-02/06) - там было 101. Вашу ревизию D я тоже нашла, и действительно в ней написаное иное - 110. Но ведь ревизия G (7593G-AVR-03/08) - последняя и только что вышла, и согласно ей для AT90USB128 права ревизия А, а для AT90USB64 права ревизия D. Но ведь у вас AT90USB128 и по ревизии D у вас заработало. Выходит, что последнняя ревизия снова вернулась к первоначальному ошибочному утверждению относительно AT90USB128? Да, заработало. Вам огромное спасибо!
  15. А у вас какой МК? Скачала последний даташит с сайта ATMEL: [PDF] AT90USB1286, AT90USB1287, AT90USB646, AT90USB647 (455 pages, revision G, updated 03/08) Действительно, в марте появились изменения. Однако вот что там сказано: External XTAL required for USB operation (MHz) = 16 Clock Division Factor = 8 PLLP2=1, PLLP2=0, PLLP2=1 (1) Note: 1. For AT90USB128x only. Do not use with AT90USB64x. PLLP2=1, PLLP2=1, PLLP2=0 (2) Note: 2. For AT90USB64x only. Do not use with AT90USB128x. У меня AT90USB647, значит я и виновата, что использовала программу для AT90USB1287. Но ведь и в голову не могло придти, что в этом месте может быть расхождение!
  16. Укажите, пожалуйста, где вы это исправили! У меня та же проблема, только я ошибки в упор не вижу. В config.h переопределила на частоту 16 МГц: #define FOSC 16000 В хидере pll_drv.h все написано совершено правильно: #elif (FOSC==16000) #define Pll_start_auto() Start_pll(PLLx03) где PLLx03 определено выше как: #define PLLx03 ( (1<<PLLP2) | (0<<PLLP1) | (1<<PLLP0) ) Так и быть должно согласно даташиту: Табл. 6-13 XTAL=16 MHz Clock Devision Factor=8 PLLP2=1 PLLP1=0 PLLP0=1 Где здесь ошибка?
  17. Между подачей команды чтения UDR0=(RREG | 0x00) и собственно чтением a0=UDR0, согласно даташита, необходимо сделать паузу, как минимум, в 50 (!) циклов ADC-clock. Иначе одни нули прут. Если ваш МК работает на более высокой частоте, чем АЦП, то его тактов потребуется еще больше. Это только когда в регистры пишут задержка не нужна, а когда читают - обязательна. А ваше ожидание - это ожидание отправки байта, этого мало. P.S. Ожидание короче писать не через конструкцию do-while, а просто через while. Вот так: while( (UCSR0A & (1<<UDRE0)) == 0);
×
×
  • Создать...