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

=AK=

Свой
  • Постов

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

  • Посещение

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

    7

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


  1. 20 hours ago, Mysteo said:

    Здравствуйте! Сделал макетные платы будущего устройства. В девайсе микроконтроллер STM32L100 , ESP12F (ESP8266), УНЧ микрофона и УНЧ D класса для динамика. Все функционирует как надо. Но вот при включении и работе Wi-FI по всем линиям питания помехи. 
    До этого я никогда не разводил платы.  Хотелось бы устранить их в будущем. Я сначала подумал что это из-за того что я УНЧ динамика запитал от того же стабилизатора, что и Wi-Fi модуль. Потом переделал, но щелчки никуда не ушли.

    Непонятно почему вы решили что проблема в разводке. Я на вашей плате не вижу ни одного электролита, вообще. А ESP8266 в момент передачи потребляет по 0.5 А короткими импульсами. Может, у вас просто питание просаживается.

    Рядом с выводами питания ESP-12 должен стоять электролит, как минимум 470 мкФ. Поскольку у вас звуковое устройство, я бы этот электролит поставил побольше, 2200 мкФ, и вообще наставил бы электролитов в питании по всей плате.

    9 hours ago, AlexandrY said:

    Без шансов. Частота 2,4 ГГц - эт не шутка.
    Без плэйна (сплошного и без разрывов слоя) земли у вас нет шансов подавить детектирование частоты 2.4  ГГц  аудио микросхемами и микрофоном. 

    Я без малейших проблем работаю на 2-слойных платах с ESP-12. Правда, микрофона нет, зато есть 12-битный АЦП.

  2. On 6/8/2019 at 11:30 PM, mantech said:

    Поздравляем их!  Вот объясните, зачем каждый чих все устройства для внутреннего пользования, выставляют в интернет? Ну вот зачем? Это первый раз удивило, когда все СМИ трубили о взломе симатиков в Иране, на АЭС - это просто сюр какой-то... 

    На сколь видно по описанию - это УАРТ-ориентированный протокол, т.е. под проводные интерфейсы. С радио несколько иные режимы обмена нужны...

    Почему обязательно интернет или RF? Достаточно заселиться в гостиницу под видом обычного клиента - и вы получаете доступ к проводке. У вас в номере будет несколько выключателей, снимаете любой - и все, есть доступ к интерфейсу.

  3. 1 hour ago, vladec said:

    Но это будут антенны только на высокие частоты, а не нашинкованные -- и на высокие и на низкие,

    Из ваших слов следует, что простое разрезание проводника на две части каким-то волшебным образом меняет его свойства? Более длинный проводник будет антенной  "и на высокие и на низкие" частоты, а более короткий - "только на высокие частоты". И при какой же длине проводника происходит такое качественное превращение? Назовите конкретную цифру. Это, очевидно, некая новая мировая константа, вроде скорости света. На нобелевку потянет...

     

    1 hour ago, vladec said:

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

    А это здесь причем? Я спросил чем плох вариант рис.8 из статьи. Про VIA  ни слова ни полслова не сказано, каким образом вы их сюда приплели, где связь?

  4. On 5/15/2019 at 10:15 PM, Myron said:

     Рис. 8 - плохой вариант - как минимум, там хорошаяя антенна из земли вокруг МК "острова".

    Любой кусок металла, в том числе любой проводник на печатной плате, является антенной. Чаще всего -  является "хорошей антенной", т.е. хорошо принимающей определенные сигналы из всего спектра частот. Но совсем непонятно, что в этом плохого.  Что прикажете делать с этим обыденным фактом?

     

    Шинковать проводники как капусту? Увы, не поможет, маленькие кусочки проводников все равно останутся "хорошими антеннами", но настроенными на более высокие частоты. Вместо хороших проводников использовать что-то плохо проводящее? Делать ground plane из резистивного материала? Пардон, это был бы просто бред.

     

    Так что же плохого в том, что земля вокруг МК "острова" является некой антенной, как и любой другой кусок провода? В чем проблема-то?

  5. On 7/9/2019 at 4:47 PM, jenya7 said:

    хм. UART + трансивер CAN это интересно. но кто будет разруливать колизии на шине? тут нужен строгий мастер слейв.

    Мастер-слэйв для разруливания коллизий не нужен. То же CAN прекрасно разруливает безо всяких мастер-слэйвов.  И KNX разруливает, и C-Bus, и HBus. У всех четырех парадигма "производитель-потребитель", мастер им не нужен, все узлы равны.

     

     

  6. 16 hours ago, AHTOXA said:

    Подскажите, для чего в протоколе введён такой вариант:

    
    0x1B-0x09 - insert 0x1B, 0x1B into data flow

    ? Для экономии трафика?

    Чтобы много памяти под буфера не отводить. Ну и трафик тоже. Хоть и далается вставка/удаление байтстаффинга "на лету", все же иногда приходится держать в буфере пакет с байтстаффингом.

  7. 2 hours ago, one_eight_seven said:

    На выходе получается очередное ущербное угробище. Приходилось несколько раз работать с таким. Перед началом работ с подобными приборами производитель говорит: "У нас CAN, всё работает". Начинаешь работать, и никакого CAN и в помине нет. А сроки уже обозначены, деньги получены. Приходится заниматься не работой, каким-то непотребством.

    Угробище получается не из-за использованных составных частей, а из-за дырок в головах разработчиков. На такое и на "генетически чистом CAN" можно напороться. "Хождение по камушкам" (т.е. привязка к накатанным шаблонам) никак не гарантирует наличие мозгов.

  8. Just now, mantech said:

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

    Никто не запрещает использовать "мастер-слэйв" связке (UART + трансивер CAN). В приведенном выше примере шина работает в двух режимах; "мастер-слэйв" при конфигурировании узлов и "производитель-потребитель"  в рабочем режиме. Одно другому не мешает.

  9. 23 hours ago, mantech said:

    Здесь нет смысла впиндюривать КАН. Самое удачное - RS-485. Очень дешево и сердито, уарт есть в каждом МК сегодня...

    UART - это правильно. Но непонятно зачем к нему приделывать такое допотопное угробище, как RS485 трансивер. Никто не мешает использовать совместно с UART трансивер CAN. Со всеми полагающимися при этом плюшками: отсутствием мастера, парадигмой "производитель-потребитель", избеганием столкновений (CSMA-CA) или в крайнем случае обнаружением столкновений (CSMA-CD), и т.п.

     

    А вот контроллер CAN и протокол CAN, действительно, обычно и нафиг не нужны. Я думаю, что их используют в основном в силу косности мышления, "чтобы не думать". Равно как RS485 трансивер с UART используют ровно по той же причине.

     

    Пример интерфейса на связке UART + трансивер CAN, без протокола CAN и без контроллеров CAN,  можно посмотреть здесь. Все делается на самой дешевой Ардуинке. 

  10. On 5/15/2019 at 4:45 PM, jenya7 said:

    В продолжение темы с уважаемым xvr.

     

    Мне нужно исполнять скрипт.

    Пользователь передает его в микроконтролер, скрипт сохраняется (в FLASH) и исполняется. в основном это проверка входных условий (переменных) и если условия выполнились - изменение выходных условий (переменных).

    Самоя сложное выражение (пока) это к примеру такое

    Выражений может быть до .... ну не знаю пока 40.

    в IF все AND - поэтому если хоть одно условие не выполниться THEN не исполняется.

     

      Reveal hidden contents
    
    
    char *ToLowerCase(char *str)
    {
      int i;
      for(i = 0; i < strlen(str); i++)
      {
          if(str[i]>='A' && str[i]<='Z')
           str[i]=str[i]+32;
      }
      //*str++ = '\0';
      return str;
    }
    
    uint32_t IsAlphaNumeric(char c)
    {
        return ( ( c > 64 && c < 91 ) || (c > 96 && c < 123) || (c > 47 && c < 58) );
    }
    
    uint32_t IsLetter(char c)
    {
        return (( c > 64 && c < 91 ) || (c > 96 && c < 123));
    }
    
    uint32_t IsDigit(char c)
    {
        return (c > 47 && c < 58);
    }
    
    uint32_t IsNum(char c)
    {
        return ((c > 47 && c < 58) || c == '.' /*|| c == '-'*/);
    }
    
    uint32_t IsCompare(char c)
    {
       return ((c == '>') || (c == '<') || (c == '=') || (c == '!'));
    }
    
    uint32_t IsMath(char c)
    {
       return ((c == '+') || (c == '-') || (c == '*') || (c == '/') || (c == '='));
    }
    
    uint32_t IsBitLogic(char c)
    {
       return ((c == '|') || (c == '&'));
    }
    
    uint32_t IsGroup (char c)
    {
       return ((c == '(') || (c == ')'));
    }
    
    uint32_t IsEnd(char c)
    {
        return (c == ';');
    }
    
    uint32_t IsEndOfLine(char c)
    {
       return ((c == '\n') || (c == '\r'));
    }
    
    uint32_t IsLogic(char *str)
    {  
        char *l_str = ToLower(str); 
        return ( (strcmp(l_str,"or")==0) || (strcmp(l_str,"and")==0) || (strcmp(l_str,"||")==0) || (strcmp(l_str,"&&")==0));
    }
    
    uint32_t IsIn(char *str)
    {  
        char *l_str = ToLower(str); 
        return ( (strcmp(l_str,"in")==0));
    }
    
    uint32_t IsOut(char *str)
    {  
        char *l_str = ToLower(str); 
        return ( (strcmp(l_str,"out")==0));
    }
    
    uint32_t IsIf(char *str)
    {  
        char *l_str = ToLower(str); 
        return ( (strcmp(l_str,"if")==0));
    }
    
    uint32_t IsThen(char *str)
    {  
        char *l_str = ToLower(str); 
        return ( (strcmp(l_str,"then")==0));
    }
    
    uint32_t LEXER_GetToken(char *expr, TOKEN *token, uint32_t *exp_idx)
    {
        //uint32_t idx = 0;
        uint32_t i  = 0;
        uint32_t slen = strlen(expr);
        uint32_t space = 0;
        
        //end of expression
        if(expr[*exp_idx]=='\0')
        {
            (*exp_idx)++;
    	    return LEXER_OK;
        }
    
        //skip spaces
        while(expr[*exp_idx] == ' ')
        {
    	//token->type = Space;
            space = 1;
            (*exp_idx)++;
    	if (*exp_idx > slen)
    	    return LEXER_FAIL;
        }
    
        //get compare
        if (IsCompare(expr[*exp_idx]))
        {
            i = 0;
            while (IsCompare(expr[*exp_idx]))
            {
                token->name[i++] = expr[(*exp_idx)++];
                if ( (i > 2) || (*exp_idx > slen))
    	        return LEXER_FAIL;
            }
            token->name[i] = '\0';
            token->type = Compare;
            
            return LEXER_OK;
        }
    
        //get a variable - start with a letter
        if (IsLetter(expr[*exp_idx]))
        {
    	i = 0;
    	while (IsLetter(expr[*exp_idx]) || IsDigit(expr[*exp_idx]))
    	{
    	    token->name[i++] = expr[(*exp_idx)++];
    	    if ( (i > TOKEN_MAX_SIZE) || (*exp_idx > slen))
    		return LEXER_FAIL;
    	}
    	token->name[i] = '\0';
            
            if (IsIn(token->name))
                token->type = In;
            else if (IsOut(token->name))
                token->type = Out;
            else if (IsLogic(token->name))
                token->type = Logic;
            else if (IsIf(token->name))
                token->type = If;   
            else if (IsThen(token->name))
                token->type = Then;   
            else     
    	    token->type = Alphanumeric;
            
            return LEXER_OK;
        }
    
        //get a number
        if (IsNum(expr[*exp_idx]))
        {
            i = 0;
    	while (IsDigit(expr[*exp_idx]))
    	{
    	    token->name[i++] = expr[(*exp_idx)++];
    	    if ( (i > TOKEN_MAX_SIZE) || (*exp_idx > slen) )
    	        return LEXER_FAIL;
    	}
    	token->name[i] = '\0';
    	token->type = Number;
            return LEXER_OK;
        }
            
        //get an arithmetic
        if (IsMath(expr[*exp_idx]))
        {
            // '-' may be operand or negative number
            if (expr[*exp_idx] == '-')
            {  
                i = 0;
                if (space == 1) 
                {
                    space = 0;
                    token->name[i++] = expr[(*exp_idx)++];
                    if (IsDigit(expr[*exp_idx]))
                    {
                       while (IsDigit(expr[*exp_idx]))
                       {
                           token->name[i++] = expr[(*exp_idx)++];
                           if ( (i > TOKEN_MAX_SIZE) || (*exp_idx > slen) )
    	                   return LEXER_FAIL;
                       }
                       token->name[i] = '\0';
    	           token->type = Number;
                       return LEXER_OK;
                    }
                    else
                    {
                        while (IsMath(expr[*exp_idx]))
                        {
                            token->name[i++] = expr[(*exp_idx)++];
                            if ( (i > 2) || (*exp_idx > slen) )
                            return LEXER_FAIL;
                        }
                        token->name[i] = '\0';
                        token->type = Math;
                        return LEXER_OK;
                    }
                }
                else
                {
                    while (IsMath(expr[*exp_idx]))
                    {
                        token->name[i++] = expr[(*exp_idx)++];
                        if ( (i > 2) || (*exp_idx > slen) )
                            return LEXER_FAIL;
                    }
                    token->name[i] = '\0';
                    token->type = Math;
                    return LEXER_OK;
                }
            }
            else
            {
                i = 0;  
                while (IsMath(expr[*exp_idx]))
                {
                    token->name[i++] = expr[(*exp_idx)++];
                    if ( (i > 2) || (*exp_idx > slen) )
                        return LEXER_FAIL;
                }
                token->name[i] = '\0';
                token->type = Math;
            }
            return LEXER_OK;
        }
        
        //get logic
        if (IsBitLogic(expr[*exp_idx]))
        {
            i = 0; 
            while (IsBitLogic(expr[*exp_idx]))
            {
                token->name[i++] = expr[(*exp_idx)++];
                if ( (i > 2) || (*exp_idx > slen) )
    		return LEXER_FAIL;
            }
            token->name[i] = '\0';
            
            if (i==1)
               token->type = Bitlogic;
            else if (i==2)
    	   token->type = Logic;
            
            return LEXER_OK;
        }
            
        if (IsGroup(expr[*exp_idx]))
        {
            i = 0; 
            token->name[i++] = expr[(*exp_idx)++];
            token->name[i] = '\0';
    	token->type = Group;
            return LEXER_OK;
        }
        
        if (IsEnd(expr[*exp_idx]))
        {
            i = 0; 
            token->name[i++] = expr[(*exp_idx)++];
            token->name[i] = '\0';
            token->type = End;
            return LEXER_OK;
        }
            
        return LEXER_OK;
    }
    

     

     

     

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

  11. 3 hours ago, Herz said:

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

     

    Резистор нижнего плеча конечно же низкоомный по сравнению с верхним. А коденсаторы ставят такой величины, чтобы постоянные времени верхнего и нижнего плеча оказались равны,  C1*R1 = C2*R2. В высоковольтном/высокоомном плече R1 нет нужды ставить дополнительные конденсаторы,  роль С1 играет проходная емкость самих резисторов - при условии что эти резисторы находятся далеко от земли и емкостная связь с землей, что называется, "не путается под ногами". В моем случае именно так и было, высокоомные резисторы были смонтированы на штырях, а земли под ними не было, только шасси (т.е. корпус) сантиметрах примерно в 5, как помнится. Ну а в низкоомном плече, естественно, для получения той же постоянной времени потребовался конденсатор С2 параллельно резистору R2.

  12. On 5/18/2019 at 8:18 PM, Herz said:

    Тогда что Вы там осциллографом смотреть собираетесь? Частотная компенсация здесь не только желательна, но и необходима. Без неё Вы получите гарантированный обман зрения...

    Компенсация нужна, бесспорно, но и слишком с ней усердствовать не надо.

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

    Там в цепи ОС стоял самодельный делитель, набранный из пары десятков прецизионных 2-ваттных металлопленочных резисторов. И чуть ни на каждом резисторе висел мелкий конденсатор, "для компенсации", причем все разных номиналов. Из каких соображений автор их ставил и как побирал - не знаю, с автором я не пересекся ни разу, он ушел из фирмы.

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

    У меня был высоковольтный пробник для осцилла, Тектроникс 6015А, если правильно помню. Каково же было мое удивление, когда, сравнив сигналы с Тектроникса и с самодельного делителя, я убедился, что  делитель работает честно, а Тектроникс врет как сивый мерин: на полках долгих сигналов он показывает некую невесть откуда взявшуюся "просадку". Очевидно на полках резисторы высоковольтного плеча прогревались и "плыли", другого объяснения я не нашел. И фронты у Тектроникса были немножко похуже.

    В результате изменений возбуд я убрал, а время установления уменьшил вдвое.

  13. 5 hours ago, wim said:

    В трансформаторе делается межобмоточный экран.

    +1

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

  14. On 12/13/2018 at 9:46 PM, Neznayka said:

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

    (Dow Corning) DOWSIL 3140 RTV или подобный силикон.

  15. 14 hours ago, serj1979 said:

    Ну после такого поста что сказать, вы целиком и полностью правы, то что я хотел, я узнал. Тема для меня закрыта.

    Не забывайте, что форум читают разные люди. Вы всего лишь топикстартер. Задача что-то втолковать лично вам является вторичной и необязательной. Первичной является задача корректно осветить поднятый технический вопрос. Даже если вы не понимаете ответов, возражaете не по делу и встаете в позу, когда вам в третий раз подряд повторяют сказанное ранее, все более развернуто и доходчиво для вашего уровня.

     

  16. 51 minutes ago, serj1979 said:

    Необходима минимизация программной обработки, при всех описанных вами методах (да и при всех других) необходим анализ входных данных, чем больше "искаженных" данных,
    тем больше ресурсов на это тратится. Минимизировать количество "искажённых" данных позволяет подтяжка (с опять таки определёнными "минусами").
     

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

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

    2. Использование CAN трансиверов не требует никакого "анализа входных данных", откуда у вас такие странные идеи? Вы просто ставите вместо трансиверов RS485 - трансиверы CAN. Софт об этой замене вообще ничего не знает. От слова "совсем". Вы понимаете разницу между "контроллером CAN" и "трансивером CAN", или у вас само слово CAN вызывает панику и полностью отключает мозг?

     

  17. 20 minutes ago, serj1979 said:

    есть задача:
    - реализовать в устройстве поддержку RS485/422.
    - минимизировать программную обработку.
    В рамках этих задач организуется схемотехника (если "чо" резисторы и отпаять можно без изменения топологии платы).
     

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

  18. 6 minutes ago, serj1979 said:

    Да поможет, но в том и в другом случае задача поиска пакета в потоке данных с соответствующим "отъеданием" процессорного времени.
    Есть задача минимизировать затраты на пакетную обработку, решается за счёт резисторов подтяжки (есть издержки такого решения).
    Но то как "тришкин кафтан" натянул на одну сторону оголилось другое.

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

    А уж если полагаетесь на подтяжки, непонятно зачем тогда RS485. Тогда уж лучше приемопередатчики CAN. Им и подтяжка не нужна, и помехоустойчивость получите лучше, чем у RS485 с подтяжками. Только не забудьте, что у многих приемопередатчиков CAN есть защита от длительного доминантного уровня на выходе.

  19. On 10/26/2018 at 10:50 PM, serj1979 said:

    Номиналы подтягивающих резисторов были достаточно высокие, ток соответственно маленький, смещение потенциалов небольшое,
    ну и в момент отрубания передатчика уровень линии подтянутый резаками воспринимался как "0". Посчитал ток, сменил резисторы, проблема ушла.

    Да кстати, граждане а на практике при построении систем на 485, кто ни будь "баловался" с подтягивающими резисторами (земля/питание),
    нужно ли это (без них в линии "мусор" вроде....)?
     

    Если интерфейсу на основе RS485 для нормальной работы требуются подтягивающие резисторы, то это плохой интерфейс. Например, для Modbus RTU подтягивающие резисторы не нужны, он одинаково хорошо работает и с ними, и без них.

  20. On 10/30/2018 at 5:10 AM, Scanner said:

    Уважаемые знатоки ТопоРа, подскажите как заставить его подводить дорожку к центру контактной площадки?

     

    Штатными средствами ТопоР-а - никак.

    .
    Можно отправить результат разводки назад в KiCAD и отредактировать руками.

    .

    А еще можно создать контактные площадки, окруженные барьерами. В барьерах сделать проход для проводника там, где он должен подключаться к площадке. Например, при экспорте из KiCAD в ТопоР я для пробы подправил файл Спекктры .dsn таким образом: в библиотечном  определении компонента 0603 добавил keepout полигоны вокруг контактных площадок

        (image 0603
          (outline (path signal 150  0 500  0 -500))
          (pin Rect[T]Pad_900x1000_um 2 800 0)
          (pin Rect[T]Pad_900x1000_um 1 -800 0)
          (keepout "" (polygon Front 0  -1250 150 -1250 500 -350 500 -350 -500 -1250 -500 -1250 -150 
                -1400 -150 -1400 -650 -150 -650 -150 650 -1400 650 -1400 150))
          (keepout "" (polygon Front 0   1250 150  1250 500  350 500  350 -500  1250 -500  1250 -150 
                 1400 -150  1400 -650  150 -650  150 650  1400 650  1400 150))
        )
    

    После разводки ТопоР стал подводить проводники к центрам, как и ожидалось:

     

     

     

     

    TopoR_0603.png

  21. On 10/22/2018 at 6:58 PM, maple said:

    Я проверила на тех примерах пользователей, которые у меня есть. Обратный импорт прошел и в ses, и в Игл. А можете Ваши файлы прислать? vorobyeva.ov@spb.prosoft.ru

    Спасибо, я справился :-) Я неправильно настраивал экспорт из ТопоР-а в формате ses. Цепочка KiCAD - TopoR - KiCAD отлично работает.

    Результаты разводки ТопоР-а очень впечатляют, вручную такую топологию не сделаешь.  Но все же очень желательно их потом немножко подправить перед отправкой в производство. К счастью, недавние улучшения ТопоР-а позволяют это сделать с легкостью.

  22. Я ТопоР давненько в руки не брал, лет десять, наверное. Забросил его еще в те времена, когда он разводил только линиями в любом направлении и дугами. Забросил по причине того, что после ТопоР-а обычным редактором (Алтиумом, например) вручную уже ничего подправить было невозможно - обычный редактор не умеет работать с такими платами.

    Недавно узнал, что в ТопоР-е появилась возможность задавать прокладку под 45 градусов и в сетке. Скачал демо версию, осваиваю потихоньку. Интерфейс за эти годы заметно изменился, да и забылось уже многое. Даже удалось платку из KiCAD-а переправить в ТопоР и переразвести. Но вот назад - никак, KiCAD или падает при чтении результата в формате Игл, или ругается на результат в формате Спектра.

    А вообще, ТопоР - он классный. Это единственный авторазводчик, который разводит лучше, чем я сам :-)

  23. On 10/15/2018 at 4:12 PM, Danchik said:

    Я им как 2 недели расписываю уже простым языком , что нужно просто по периметру закрасить нижний слой платы, но нет...им нужно правильный файл маски...((

    На данный момент жду результата проверки по двум архивам:
    1. с дополнительным монтажным компонентом на втором слое, которого попросто налепил на свободное место без подключения к дорожкам.
    2. с расширением файлов гербера "Protel"....gbl/gtl и т.д.


    Они это PCBWay

    Я ещё параллельно веду тему на основном форуме KiCad

    https://forum.kicad.info/t/applying-a-solder-mask-to-the-board/13037/27

    В KiCAD есть Gerber Viewer. Откройте в нем свои гербер файлы и посмотрите, что вы на самом деле сгенерировали. Я так всегда делаю для проверки перед отправкой платы на изготовление.

    С PCBway имел дело несколько раз, у меня с ними никаких проблем с гербер файлами, сгенерированными KiCAD-ом, не возникало. А "написанное простым языком" изготовитель имеет полное право - или даже обязанность - посылать к чертовой матери. Он сделает то, что вы прислали в герберах.

  24. On 8/7/2018 at 12:49 AM, gte said:

    Назовите приличный проприетарный CAD который не имеет функции нумерации по расположению деталей на плате.

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

     

    У меня совсем иные приоритеты. Мне нужен удобный и недорогой (лучше бесплатный) инструмент для ручной разводки. С огорчением вынужден констатировать, что разводить платы на 5-й версии стало намного менее удобно, чем на 4-й.  Всерьез подумываю откатиться назад, настолько все стало плохо.

     

    PS: уфф, слава богу, нашел опцию "Preferences / Legacy Toolset", отлегло. С "модерновым тулсетом" работать крайне неудобно и о-очень медленно.

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