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

=AK=

Свой
  • Постов

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

  • Посещение

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

    5

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


  1. Нет, все-таки что-то не так... :(

     

    Пишу код типа

    process(Reset, CSn,SCLKin,CLK48,bit_cnt,cmd_gate)
    variable pulse5  :std_logic;
    variable shr : unsigned(2 downto 0);
    begin
      if (Reset='1') or (CSn='1') then
        bit_cnt <= "000";
      elsif rising_edge(SCLKin) then
        bit_cnt <= bit_cnt + "001"; -- count SCLK pulses
        if (bit_cnt = "101")  then
          pulse5 := '1';
        else
          pulse5 := '0';
        end if;
      end if;
      if rising_edge(CLK48) then
        shr := shr(1 downto 0) & pulse5;
        RdWr_done <= shr(2) and (not cmd_gate);
      end if;
    end process;

    Проверяю модуль на симуляторе, все чудно работает, диаграмки соответствуют ожидаемым. Компилирую весь проект - полные дрова, не пашет. Начинаю разбираться и вижу, что сигнала RdWr_done на выходе модуля на самом деле нет (он всегда 0), а симулятор, стало быть, врет. Убираю переменную shr, делаю ее сигналом - вуаля, все работает. :blink:

  2. Когда-то я делал высоковольтные импульсные, 50 kV, 2mA. Основные проблемы были такие:

    -- для изоляции транс и выпрямитель надо было заливать, иначе корона все разъест (не знаю про 4kV, может и без заливки будет работать)

    -- для изоляции обмотки приходилось располaгать на разных стержнях П-образного сердечника, из-за этого получалась большая индуктивность рассеяния

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

    -- емкость вторички и индуктивность рассеяния создавали контур, резонирующий на довольно низкой частоте, поэтому приходилось использовать квазирезонансный преобразователь

  3. Отдаваемая мощность считается как площадь под синусоидой напряжения.

    Проще всего наверное сделать табличку или аппроксимировать полиномом.

    Яркость - это не мощность. Чтобы видимая яркость менялась линейно, мощность должна меняться примерно по экспоненте (там еще спектр меняется, но это уж здесь совсем неуместно обсуждать).

     

    Регулировка яркости при линейном изменении угла зажигания симистора весьма плавная и на глаз вполне "линейная" при изменении яркости от 0 до 50%, что при 50 Гц составляет от 9 мс до 5 мс соответственно. Последнюю миллисекунду использовать не удается, там мощность слишком мала, чтобы нить накала засветилась.

     

    А вот участок от 50% до 100% "линеаризовать" хорошо бы, хотя бы путем кусочно-линейной аппроксимации. Хорошо бы, но вовсе не обязательно, особенно для начинающих. Даже при линейном управлении фазой работает удовлетворительно. Кстати, первую 1мс тоже можно выбросить нафиг, т.к. никакой разницы на глаз нет, поджечь симистор сразу же после перехода через ноль, или подождать 1...1.5мс. Так что вполне можно для начала просто сделать добротное линейное управление углом поджига в диапазоне от 1мс до 9мс.

  4. Уважаемый, а он и небудет плавно регулировать. Так, как зависимоть угла открытия тиристора (сисмистора) и получаемое напряжение (а соответственно и мощности и энергии) не линейна. Тут нужен алгоритм, который бы эту зависимость немного линеаризировал.

    Непонятно что автор подразумевал под словом "плавно". Может, не "равномерно", а "монотонно"? Может, у него яркость скачет?

     

    k почему-то меняется от 30 до 3500; скорость этого изменения (при нажатии на кнопку), похоже, велика; функция delay_us(1) дает непонятно какую задержку. При 50 Гц полупериод 10000 мкс, чтобы все работало монотонно delay_us(1) должна обеспечивать задержку не более 10000/3500=2.85 мкс. Если больше, то после минимальной яркости будет прыжок на максимальную.

     

    Если delay_us(1) дает 2.85мкс, то delay_us(30) даст задержку всего в 85.5мкс, и при нажатии на кнопку счетчик k установится в 3500 или отмотает в 30 примерно за 350 мс, считая что полный цикл выполнится примерно за 100мкс. Глазом не успеешь моргнуть.

     

    PS: На самом деле все гораздо хуже, т.к. прерывание не отдает управление сразу же, как должно было бы делать, а "держит" до тех пор пока не зажжет симистор. Поэтому время исполнения основного цикла зависит от угла поджига, чем меньше яркость - тем "инерционнее" становятся кнопки. Лучше бы так не делать.

  5. 1)дело не в том что должно хоть что-то записываться - а в том что в ВХДЛ есть сдвиги типа:

    логический - расширяется нулём

    арифметический - расширяется знаком

    циклический - расширяется значением младшего или старшего бита в зависимости от направления сдвига

    см. спецификацию

    sll- логический

    Логично :)

    2) всё верно, V - обозначение логического ИЛИ знак | применять не стал потому как верилоговский а в ВХДЛ на сколько помню только OR (хотя я давно с ВХДЛ не имел дела)

    | есть общеупотребительный знак для ИЛИ для всех, кто печатает на обычной ПК клаве, и это не связано ни с Верилогом, ни с Це. Бо более адекватного знака для И чем & на этой клаве нет. Иначе знаку V нет подходящего комплемента, ведь ни Л не подходит в качестве И, ни ^. Так что V в качестве ИЛИ только сбивает с толку :)

     

    и хорошо иметь чёткое представление о событиях и чувствительности процесса

    Дело практики, имхо. На то и форум, чтоб спрашивать и получать разумные объяснения, чем долбаться в одиночку. Спасибо. :cheers:

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

     

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

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

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

     

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

  8. Что такое 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

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

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

  10. я чего-то не вижу или у вас там правда состояние неопределённости получается когда регистр не равен 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;

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

  11. Пытаюсь делать тривиальный фильтрик на входе 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;

     

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

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

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

    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).

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

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

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

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

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

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

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

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

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

     

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

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

  17. Спасибо.

     

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

     

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

     

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

     

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

     

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

     

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

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

     

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

     

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

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

     

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

  20. 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.

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

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