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

VladislavS

Свой
  • Постов

    1 241
  • Зарегистрирован

  • Посещение

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

    9

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


  1. Хм.. На схеме тоже предлагаете ставить VT1_body, VT1_pin1, VT1_pin2, VT1_pin3 (к примеру)?

    Причем тут схема вообще? Мы же о топологии и конструкции говорим, а они вообще без схемы могут существовать.

     

    А кто вам мешает всю эту дурь объединить в сборку и вставлять одной моделью?

     

    Вообще, есть стандарт IDF, где черным по белому написано

    Почитал стандарт. Экспортируется только 2D положение компонента на плате плюс верх/низ. Как потом привязываются 3D модели полностью дело программы, которая вставляет 3D-модели. Ну значит примем как давность.

     

    То есть все, что относится к компоненту, ноги, габариты туши в библиотеке и т.п., Вы предлагаете пересчитывать из за того, что у Вас некий STEP в библиотеке, который Вы достали незвестно откуда и спозиционировали его так, чтобы "оно" как-то подошло?

    Вы так говорите, как будто все свои 3D модели сами сделали. Пусть кинет в меня камень тот кто не брал модели у производителя элементной базы или на SolidWorks-ской площадке 3DContentCentral. А там они ориентированы совершенно по разному. Никогда не поверю, что у вас во всех библиотеках все модели вставлены вот так

    post-4140-1418034586.png

    Наверное программисты тоже зря в программу эти параметры ввели?

  2. Потому что в IDF экспортируются не модели, а компоненты. И не получится разделить, к примеру, конденсатор на тушку и 2 ножки.

    Вы мыслите плоско. Кто мешает создать вместо одного компонента несколько по количеству 3D-моделей привязанных к нему?

     

    PS: Вся плата в STEP - это жесть!

    Я уже устал повторять - не надо, проходите мимо!

     

  3. 1. Подтверждаю. Впринципе там дорожка изначально кривая, если ее подправить импорт будет корректным. Но проблема есть, будем изучать ее причины.

    А бывают платы без кривых дорожек? :) Платы делают люди, а не роботы. Подчистить действительно можно, на небольших платах

     

    2. Проверить пока не удалось. В SW 2014 похоже CW работает немного криво, он не сохраняет плату в SW... Если есть возможность выслать мне сборку в формате SW 2014, то готов посмотреть что за слои.

    Завтра попробую что-нибудь придумать. Скорее всего, слои даже в STEP будет видно.

  4. Почему-то я думал, что такие анализы производятся в время конструирования ДО воплощения на плате.

    Когда хочу тогда и моделирую. И до, и во время, и после. Если вам не надо, ну проходите мимо.

     

    Каких моделей? У меня есть компонеты (составные), где по 3-4 STEP модели используются. О какой привязке речь?

    В STEP же вы их как-то экспортируете? Что тут меняется то? Только то что модели не внутри файла, а снаружи и их можно/нужно подменить.

     

    Рисуйте компонеты сразу с началом осей координат в нужной точке. Или дорабатывайте существующие под свои библиотеки.

    Это называется

    kostyli_bolshie_178-200sm.jpg

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

  5. А оно вам надо? Зачем медь в MCAD?

    Если вам не надо, то это не значит что другим не надо. В первом моём примере микрополосковый фильтр. Вот захочу я электродинамический анализ провести, допустим.

     

    Хотите красиво - так натяните картинку на плату!

    Натягивайте что хотите, каким это боком к MCAD относится?

     

    Так все верно. В IDF нет такого - отдельно компонент, отдельно модель...

    Вы правильно заметили, начало оси координат должно совпадать с точкой привязки компонента. Как в плане, так и по высоте! И никаих поворотов. Тогда проблем не будет.

    То есть, вкладку привязки 3D-модели к футпринту можно зачеркнуть? Ну чтобы проблем вдруг не было.

     

    AD никак не сможет учесть, куда и как сдвинута STEP модель в компоненте, хотя бы по причине того, что 3D Body может быть несколько.

    Да легко. Если нет реалистичной 3D-модели на компоненте, то ставим привязку по умолчанию. А если 3D-модель есть, то смещаем привязку с учётом её размещения на футпринте. В STEP же это не вызывает трудностей. Какая разница протащу я модели внутри файла (STEP) или отдельно (MCAD)? Ну и для "эстетов" можно сделать чекбокс при экспорте "Использовать информацию о привязке 3D-моделей".

     

     

  6. Давайте разделим мой месседж на два вопроса.

     

    1. Как медь экспортируется.

     

    Взял первую попавшуюся плату. В архив положил pcb-ку и результат в SolidWorks.

    post-4140-1417723943_thumb.png

    Во-первых, проводник от VD5 пошёл не к переходному отверстию, а куда-то....

    Во-вторых, что за слои меди внутри платы? И проводники не лежат на поверхности платы, а уходят внутрь до своего "серединного слоя".

     

    2. Ориентация компонентов.

     

    Я ещё поэкспериментирую. Похоже, на той плате в футпринтах и правда всё к первой ноге привязано.

     

    Но вот почему 3D-модели "крутит" как угодно не понятно. В Altium и CircuitWorks использованы одни и те же 3D-модели. Если я её повернул при установки на футпринт в альтиуме, то почему информация о повороте не дошла до cолида?

     

    Покрутил ещё модели. Пришёл к следующему умозаключению. CurcuitWorwks привязывает начало координат модели к точке привязки заданной в футпринте. Если в альтиуме при привязке модели к футпринту задаётся смещение/поворот, то оно будет потеряно при передаче. То есть, все 3D-модели должны быть сделаны так чтобы ставиться на футпринт "по нулям". Можно, но возьня дополнительная.

    Primer.zip

  7. Вот и разберитесь, почему после привязки резисторы не развернулись на 90, а триммер и транзистор развернуты на 90 градусов. Привязку может и правильно сделали, только вот исходные модели были развёрнуты по разному или третье.

    Допускаю, что покрутив привязки моделей по осям можно будет сделать правильное положение. А что со смещением делать? Смотрите как красиво легли проекции 3D-моделей на четвёртом рисунке и как всё в итоге получилось.

     

    Убрали материал между слоями и вот вам два слоя меди. Причем с метализацией в отверстиях.

    Вы когда-нибудь печатную плату видели живьём?

     

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

    Нечего торопится и плодить косяки. Ах ну да, софт кривой и причём всегда.

    Покажете мастер-класс?

  8. А чего это триммер и транзистор развернуты на 90 градусов? Что у вас там с привязкой по осям то? Или как получится?

    У меня что-то с привязкой по осям? Первая, третья и четвёртая картинки, конечно же, не показывают, что все модели установлены правильно?

     

    Два слоя и ничего лишнего, а как вы хотели?

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

  9. Поэкспериментировал с MCAD-IDX. Взял простую плату.

    post-4140-1417711679_thumb.png

    Два слоя и ничего лишнего

    post-4140-1417712769_thumb.png

     

    Для контроля делаем экспорт в STEP

    post-4140-1417712858_thumb.png

     

    Экспортируем в IDX и открываем в CircuitWorks. С виду всё чистенько, все детали на своих местах.

    post-4140-1417712998_thumb.png

     

    Привязываем те же 3D-модели деталей, которые были на плате. И получаем вот такое

    post-4140-1417713320_thumb.png

    Детали неправильно ориентированы и точка привязки совмещена с 1-ми контактами всех компонентов, хотя на плате они были к центру привязаны. При том что упрощённые модели были правильно установлены.

     

    Посмотрим внимательней на медь.

    post-4140-1417713876_thumb.png

    Кхммм...

    post-4140-1417714008_thumb.png

    А это что за два слоя внутри платы?

     

    А это с просторов интернета. Дорожки гуляют как хотят на всех платах. Пример выше был вычищен от подобного чтобы не отвлекать от других эффектов.

    post-4140-1417714275_thumb.png

     

    Вот как-то так.

     

  10. Может дело в том, что не там меняете?

     

    Дело в том, что механизма групповой замены этого параметра в редакторе PCB нет.

     

    Для себя проблему решил так, может кому пригодится.

    Procedure SetPcbLib;
    Var
       Board : IPCB_Board;
       Component : IPCB_Component;
       Iterator : IPCB_BoardIterator;
    Begin
       Board := PCBServer.GetCurrentPCBBoard;
       If Board = Nil Then Exit;
    
       Iterator := Board.BoardIterator_Create;
       Iterator.AddFilter_ObjectSet(MkSet(eComponentObject));
       Iterator.AddFilter_LayerSet(AllLayers);
       Iterator.AddFilter_Method(eProcessAll);
    
       Component := Iterator.FirstPCBObject;
       While (Component <> Nil) Do
       Begin
         Component.SetState_SourceFootprintLibrary('RF(MotherBoard).PcbLib');
         Component := Iterator.NextPCBObject;
       End;
    
       Board.BoardIterator_Destroy(Iterator);
    
       ShowMessage('Ok!');
    End;

  11. Да это и не к чему.

    Не скажи. Если руками указать каждому элементу, что он из вновьсгенерированной библиотеки, то устанавливается связь и можно редактировать библиотеку и пользоваться Update from PCB Libraries.

     

    А вот группой так не получается сделать.

     

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

     

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

  12. Похожая проблема. Есть разведённая плата. Схемы и библиотек нет. Делаю Design/Make PCB Library и получаю .PcbLib. Как теперь всем компонентам на плате прописать Library на вновьсозданную? По одному получается, а всем разом?

  13. или найдете еще какую либо ошибку

    Вся схема одна большая ошибка. Начиная с питания и дальше по всем каскадам.

     

    связь между шинным формирователем и компьютером должна осуществляться только одним проводом, тогда как у меня их 4, не пойму как это реализовать

     

    Если эту схему нужно подключить в обычный компьютер, да ещё одним проводом, то наверняка в COM-порт. В описании микроконтроллера читайте про USART. А между микроконтроллером и компьютером поставьте микросхему MAX232.

     

    Можно спросить где сейчас таких "инженеров" готовят?

  14. В intrinsics.h всё одинаково за исключением одной строки к __reverse() не имеющей никакого отношения. Да и вообще__reverse в хидерах не встречается нигде. Зато внутри iccavr.exe встречается. Так что, больше на глюк компилятора смахивает.

     

    А ещё инлайнит за милую душу вот такую функцию в том месте где выдаёт ошибку на обычный __reverse().

    inline uint32_t reverse(uint32_t data) { return __reverse(data); }

  15. Что-то вы проблему на ровном месте придумали. Чтобы встроить функцию в месте вызова она должна быть определена в той же единице компиляции, где происходит вызов. Грубо говоря, в том же c-файле, либо в подключенном h-файле, что для компилятора по сути одно и то же.

  16. Здравствуйте.

     

    Переполз с компилятора EW AVR 5.51 на 6.11 и поймал непонятный глюк cо встроенной функцией __reverse().

    В 5.51 компилировалось без ошибок. 6.11 ругается на w5100_control.SIPR = __reverse(ip); ошибкой Error[Pa108]: no variant of the generic intrinsic function "" available for the type "unsigned long" D:\!Projects\Reverse_test\6.11\main.cpp 19

     

    При этом в функции reverse() та же функция с теми же типами данных проходит. И дальше по коду return __reverse(x); тоже нормально. И если вместо __reverse() в проблемном месте использовать reverse(), то тоже нормально.

     

    #include <ioavr.h>
    #include <stdint.h>
    
    typedef struct
    {
     uint32_t SIPR;   // Source IP Address
    } W5100_CONTROL;
    
    //#pragma location=0x8000
    __no_init volatile W5100_CONTROL w5100_control;
    
    uint32_t reverse(uint32_t data) 
    {  
     return __reverse(data);  //Вот так всё хорошо
    }
    
    class W5100
    {
     public:
    void SetIP(uint32_t ip)
    {
      w5100_control.SIPR = __reverse(ip);  //Тут проблема
    //	  w5100_control.SIPR = reverse(ip);   //А вот тут уже всё нормально
    };
    };
    
    W5100 w5100;
    
    int main()
    {
     w5100.SetIP(0x01020304);
    
     uint32_t x=0xAAAAAAAA;  
     return __reverse(x);  //Вот так всё хорошо
    }

     

    Хелп ми :)

     

    Проекты для 5.51 и 6.11 соответственно в архиве прилагаю.

     

    Reverse_test.rar

  17. Это если надо чтобы линкер какие-нибудь сегменты, кучу например, размещал во внешней памяти. Задача автора читать/писать байт по абсолютному адресу. Для этого либо переменная размещается по абсолютному адресу и используется как переменная

    #pragma location=0x8000
    volatile __no_init unsigned char var;

    Либо можно по указателю доступ делать

    unsigned char *mem = 0x8000;
    *mem = *mem;

     

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