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

=AK=

Свой
  • Постов

    3 278
  • Зарегистрирован

  • Посещение

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

    5

Сообщения, опубликованные =AK=


  1. Господа, поделитесь опытом кто как калибрует ацп на своих изделиях?

     

    Тестовый стенд, состоящий из ПК, стабильного (но не особо точного) источника калибровочного напряжения и точного цифрового вольтметра, подключенного к ПК по RS232 . Программа на ПК считывает показания калибруемого устр-ва и показания вольтметра, обрабатывает и записывает результаты в EEPROM калибруемого устр-ва.

    Стенд не "специальный калибровочный", а универсальный тестовый стенд выходного контроля. Кроме калибровки он заодно тестирует функциональность, присваивает серийный номер устройству, ведет журнал (базу данных), печатает сертификат, и пр.

  2. Интересно было бы найти объективное сравнение производительности разных 8-битных архитектур. Что-то вроде EEMBC Consumer Benchmark, которая для 32-битниых выглядит так: http://www.ptsc.com/images/performance_density.jpg

     

    Довольно очевидно, что 51-е ядро вряд ли будет даже в первой десятке, так же, впрочем, как PIC16, HC08 и пр. старые архитектуры. Ядро AVR вполне может оказаться среди лидеров, имхо, хотя тоже не все там идеально, поскольку RISC. Кстати, еще интересно где бы оказался Тесей при таком сравнении.

  3. Что такое 1V0?

    Единица или нуль.

    Вот и я подумал, нафиг там 1.0 вольт? :) То есть, в более общепринятой нотации, подразумевалось 1|0

     

    Почему присваивается flt[0]=0 ?

    Потому что flt - переменная(а не сигнал!). И изменяясь в ходе процесса она сразу становится доступной дальнейшим операциям процесса. Поэтому последовательное присвоение flt[0]:=Rxd и дальнейший сдвиг целого flt на один разряд приводят к записи в flt[0] нуля(должно же там чтото появиться :) ),

    Почему 0, а не 1? :)

    В конечном счете все свелось к тому, как на самом деле работает оператор сдвига sll. По моему, совершенно не очевидно, что он вообще должен хоть что-то присваивать младшему разряду, будь то сигнал или переменная.

     

    Тем не менее, мне лучше было бы сдвиговый регистр прописывать одной командой, типа

    flt := flt(3 downto 0) & Rxd;

    Здесь нет возможностей для множественного толкования, как в случае с sll

     

    Что ж касается filtered, то, получается, вполне можно сделать его не сигналом, а локальной переменной. От этого ничего не должно измениться, только сдвиговый регистр shr надо делать так же, как flt

  4. Что ж, если с доставабельностью малошумящих ОУ проблема, можно "тряхнуть стариной" и на россыпи.

    Дык, какие могут быть проблемы? Неужто в Маузере нет ничего подходящего? Помнится, там было полно недорогих звуковых ОУ от NJR

  5. я чего-то не вижу или у вас там правда состояние неопределённости получается когда регистр не равен 111 или 000. где мажеритарное голосование-то?

    Нет мажоритарного голосования, я хотел получить триггер, который взводится по трем 1 и сбрасывается по трем 0.

     

    и на..зачем вам в списке чувствительности что-либо ещё кроме тактового сигнала?

    В списке должны быть все сигналы, изменение которых сказывается на процессе. Детское объяснение: иначе Квартус ругается :)

     

    огрех то только в том что:

    в одном (едином) дельта-цикле переменной flt содержащей на предыдущем цикле ААААА (где А=1V0)

    Что такое 1V0?

     

    присваивается:

    flt[0]=R; <=> flt :=AAAAR;

    затем

    flt[4:1]=flt[3:0], flt[0]=0 <=> flt:=AAAR0;

    Почему присваивается flt[0]=0 ?

     

    то есть всё равно что записывать на каждом клоке

    flt[4:2]=flt[3:1], flt[1:0]=R0;

    Я не понял, почему это должно происходить?

  6. Пытаюсь делать тривиальный фильтрик на входе UART-а, чтобы короткие выбросы не вызывали ложного срабатывания. Фильтр делаю на сдвиговом регистре flt, первые два каскада используются для подавления метастабильности, последние 3 каскада сравниваю на все 0 или все 1 и, соответственно, взвожу или сбрасываю бит результата shr(0), который затем вдвигаю в другой сдвиговый регистр shr

     

     
    process(clk16x,Rxd)
    variable flt  :unsigned(4 downto 0);
    variable shr :unsigned(3 downto 0)l
    begin
      if rising_edge(clk16x) then
        flt(0) := Rxd;
        flt := flt sll 1;
        if flt(4 downto 2) = "000" then
          shr(0) := '0';
        elsif flt(4 downto 2) = "111" then
          shr(0) := '1';
        end if;
        shr := shr sll 1;
      end if;
    end process;

     

    Проверяю на симуляторе - полные дрова, не работает, не фильтрует ни фига. Почему?

     

    Переделал подубовее, ввел внешний сигнал filtered, и во второй регистр вдвигаю уже его

     
    process(clk16x,Rxd, filtered)
    variable flt  :unsigned(4 downto 0);
    variable shr :unsigned(3 downto 0)l
    begin
      if rising_edge(clk16x) then
        flt(0) := Rxd;
        flt := flt sll 1;
        if flt(4 downto 2) = "000" then
          filtered <= '0';
        elsif flt(4 downto 2) = "111" then
          filtered <= '1';
        end if;
        shr(0) := filtered;
        shr := shr sll 1;
      end if;
    end process;

     

    Проверил на симуляторе - все ОК, работает. Это я чего-то не понимаю, или симулятор глючит?

  7. Вообще-то любой подойдет. Лучше использовать таймер и узел Capture Comparator, который выдает заданную частоту аппаратно. Тогда из всего программирования надо только настроить железо. Если такого узла нет, то проще всего выдавать заданную частоту на программных задержках.

  8. Хорошее описание некоторых популярных ИК протоколов

    http://www.xs4all.nl/~sbp/knowledge/ir/ir.htm

     

    По поводу интерфейса все намного сложнее. Надо сначала определиться с логикой обмена:

     

    1. Мастер-слэйв, логическая звезда.

     

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

     

    Достоинства: простая реализация; отсутствие столкновений, легкои надежно делается на RS485

     

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

     

    2. Peer-to-peer

     

    В каждый момент времени в сети есть один координатор. Координатор по очереди срашивает остальные узлы "тебе нужно управление?". Если да, то узел получает от координатора управление (токен) на какое-то время. После этого узел сам передает другим узлам информацию, по окончании обмена рапортует координатору.

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

     

    Достоинства: отсутствие столкновений, легко и надежно делается на RS485; обмен может быть ускорен по сравнению с (1), особенно если надо обмениваться большими пакетами; надежность выше, т.к. обмен не зависит от работоспособности одного узла.

     

    Недостатки: довольно сложно реализовать, много возни; скорости обмена все равно должны быть довольно большими, чтобы координатор мог быстро передать токен.

     

    3. Анархия - мать порядка (CSMA)

     

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

     

    Здесь напридумывано много вариантов, например

     

    3.1. "По фигу, рано или поздно пробьемся"

    Узел тупо передает свое сообщение и ждет подтверждения приема. Если ответа нет, исполняется псевдослучайная задержка, и передача повторяется. Надежда на то, что два столкнувшихся узла сделают разную задержку. Это вариант довольно гнилой, зато относительно простой.

     

    3.2. Обнаружение столкновений (CSMA/CD)

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

     

    3.3. Избегание столкновений (CSMA/CA)

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

     

    Последний вариант - самый интересный. Так (или примерно так) работают CAN, EIB, C-Bus. При этом физическая скорость обмена может быть очень низкой (в C-Bus, например, всего 5 кбит/сек), а реактивность получается очень высокой, особенно если информация передается не одному узлу (как в том же LON в обычном режиме), а сразу всем, широковещательно (как в EIB, C-Bus и в кривовато реализованном широковещательном режиме LON).

  9. Мне пока видится два варианта.

    1)обратноход на 3842/3

    2)пуш-пул на 494

    в обоих случаях старт будет происходить от удвоителя-утроителя, например, на 555 или логике. После старта питание м/с ШИМ - от вспомогательной обмотки/выпрямлением напряжения с "взлетающей" полуобмотки пуш-пула.

    Навороченно как-то получится.

    Если есть бустер для старта, то почему этот бустер не может работать как основной преобразователь, нерегулируемый? Сделать задающий на 555, потом D-триггером поделить частоту и получить симметричные прямой и инверсный сигналы. Далее обычной логикой "вычесть" из них импульсы 555, чтобы получить гарантированную "мертвую зону". Немного разогнать по мощности (той же логикой), и драйвить этим два NPN транзистора, классический пуш-пулл с двумя первичными обмотками. Достаточно широкая "мертвая зона" позволит использовать довольно медленные транзисторы.

  10. Ведь особая стабильность 32кГц не нужна, она влияет только на высоту звука в звуковой индикации, верно? Тогда можно использовать почти любой генератор. Я бы взял какой-нибудь дешевый мелкоконтроллер со встроенным RC-генератором (хотя бы PIC), и сформировал бы частоту при помощи PWM-выхода, если он есть, или даже чисто программно, если узла PWM нет.

  11. Хмм в исе есть симулятор ?? они же сидят на моделсиме :)

    У них два. Есть и свой ISE симулятор, и Моделсим.

     

    Для функциональной симуляции проект достаточно скомпилировать и скормить код симулятору. Для тайминг нежен полный цикл, что и делает квартус. Что бы этого избежать нужно поставить метку о том, что Вы дебажите только функциональность проекта. И квартус не будет разводить проект.

    Надо попробовать пошарить по меню и настройкам... Признаться, я в эту сторону даже не копал, т.к. мне сказали, что в Квартусе функц. симуляция возможна только в платной версии при помощи Моделсима, я и поверил...

  12. Спасибо.

     

    Все-таки я что-то не понимаю. Алтера описывает типичный процесс так, как показано на рисунке 1-1 в документе Q51015-5.1.1 "Quartus II Incremental Compilation" (хотел приклеить рисунок, но че-то форум глючит). Там показано, что Timing Analyser запускается в самом конце компиляции, после фиттера и ассемблера. И действительно, Квартус именно в таком порядке и компилирует проект. Исполнение фиттера у меня сейчас занимает 35 минут.

     

    У Зайлинкса симулятор запускается независимо от компиляции. Выбрал любой исходник в проекте, и просимулировал его. Или встроенным ISE симулятором, или же Зайлинговской версией Моделсима (последний тоже дается к Веб Эдишн). Еще и тестбенч автоматически сгенерировал, нажав один раз на кнопку.

     

    А в Квартусе я что, должен плодить маленькие проектики под каждый модуль, который хочу отладить? Настраивать их, компилировать в какой-нибудь неважно-какой чип, и тогда уж только смогу рассматривать времянку?

     

    Или же, назначая top level на какой-то из файлов текущего проекта, я таким образом как-то (неявно?) даю Квартусу знать, что он не должен исполнять фиттер и ассемблер?

     

    Моделсим в принципе должен был бы позволить делать в Квартусе то же самое что и в ISE. Но Алтера дает Моделсим только в платной версии Квартуса.

     

    Правда, говорят что ISE симулятор не всегда правильно компилирует заданный кусок. Я так понимаю, что у симулятора есть свой "усеченный" компилятор, и он имеет отличия от "основного" компилятора ISE. В этом смысле у Квартуса все "бронебойнее", т.к. используется один и тот же компилятор. Однако до поры мне фиттер и ассемблер нафиг не нужны, как бы их вырубить?

  13. При попытке добавления рисунка появляется такое сообщение:

     

    Произошла ошибка при загрузке файла, в связи с тем, что директория 'uploads' имеет неправильные атрибуты. Если Вы получили эту ошибку, просим Вас обратиться к Администратору форума и сообщить об этой ошибке.

     

    Несколько дней назад все работало ОК.

  14. Если уровень помех действительно очень велик, то входной буфер может из-за них перегружаться, да и активный фильтр тоже. Я бы поставил полосовой LC фильтр на входе, до буфера.

     

    Еще такая мысль: что если в кабель гнать не 32 кГц, а 32768 Гц? Тогда можно было бы попробовать использовать в качестве фильтра часовой кварц, что было бы проще, чем возиться с гираторами.

  15. Full Speed USB Solutions

    http://www.microchip.com/stellent/idcplg?I...USB%20Solutions

     

    Communication Device Class (CDC) firmware

    http://www.microchip.com/stellent/idcplg?I...&param=en022625

    The Communication Device Class firmware is the most direct way or migrating a serial port (legacy) application to USB. In fact this firmware provides direct emulation of a serial port on PC running Windows 2K and Windows XP. As the PIC18F4550 is attached to the PC, a virtual COMx port is created. All PC software using a COM1-4 port will work without modifications with the virtual COM port if only at a much higher speed (approx 1Mbit/s)

     

    Microchip Custom Driver

    http://www.microchip.com/stellent/idcplg?I...&param=en022629

    Microchip Custom Driver is the ultimate solution for the more advance users. It allows full flexibility and configurability to allow the use of all data transfer modes (control, interrupt, bulk, isochronous) defined in the USB 2.0 specs and provides the highest bandwidth. It requires a deeper understanding of the internal workings of the bus as well as the development of custom interfaces (Windows code development) on the PC.

  16. Непонятно, почему "увеличение толщины намотки в 4 раза"? Ленту же можно взять в 4 раза тоньше, чем толщина медного слоя. Tогда в той же толщине будет столько же витков. Геометрия катушки не изменится, и кол-во витков останется как в медной.

  17. Правильно ли я понимаю, что для Квартуса симулятором является Моделсим, который входит только в покупную версию, но исключен из Веб Эдишн? А у Зайлинкса ISE симулятор входит в состав Веб эдишн, и дается бесплатно.

     

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

     

    Возникла нехитрая мысль поставить ISE и отлаживать логику на нем, а готовые куски переносить в Квартус. Кайф в том, что все легально, никакого ворованного софта.

     

    Или есть другие варианты?

  18. Если деталь можно заменить идеальным трансформатором - тогда это настоящий трансформатор.

     

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

  19. Амплитуда импульсов драйвера 15В. На трансформаторе это напряжение будет видно как двойная амплитуда, от пика до пика. Амплитудное напряжение будет зависить от скважности: для короткого полупериода амплитуда больше (зато действует недолго), для длинного меньше. При скважности 2 амплитуда + и - импульсов становится равна. Очевидно, это и будет самым "плохим" режимом для первички трансформатора. То есть, надо считать для двуполярного прямоугольного сигнала амплитудой 7.5В и длительностью + и - импульсов по 50 мкс (частота 10 кГц)

     

    Форма тока в первичной треугольная (если нет насыщения) и тоже двуполярная. в конце + импульса ток достигает максимума i+, в конце - импульса ток достигает максимума i-. Cоответственно, ровно в середине каждого импулса ток равен 0, в этот момент направление тока в первичке меняется на противоположное.

     

    Значит, чтобы посчитать амплитуду тока в первичке, надо посчитать, насколько изменится ток в ее индуктивности L, если к ней в течении 25 мкс (т.е. четверти периода) приложено напряжение 7.5 В (т.е. половина напряжения источника)

  20. Как в такой ситуации понять различие между трансформером и дросселем?

     

    Идеальный трансформатор имеет бесконечно большую индуктивность первичной обмотки. Поэтому ее Z равен бесконечности, ток через нее не течет, никакой энергии в магнитном поле не накапливается. Реальный "обычный" трансформатор имеет конечную индуктивность, но все же она должна быть достаточно велика, чтобы можно было в эквивалентной схеме без большой погрешности заменить его идеальным.

     

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

     

    "Трансформатор" флайбэка - это двухобмоточный дроссель. Заменить этот двухобмоточный дроссель идеальным трансформатором нельзя, флайбэк работать не будет.

×
×
  • Создать...