[VULTURED] Пишем программки на Си для играния с форматом Гербер и т.д.

Публичный форум для http://www.nedopc.org/nedopc

Moderator: Shaos

А не взяться ли нам за написание опен-сорсного клона Eagle v5.12?

Да - поможем!
0
No votes
Можно, но чур пиши сам
0
No votes
А мне лично пофиг
1
25%
Нет, это никому не надо
3
75%
Чушь какая...
0
No votes
 
Total votes: 4
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:Есть желание (но нету времени) сделать из этих наработок полноценный редактор Гербер-файлов (под GPLv3 естественно)
Кто со мной? :roll:
Плюс авторазводка. Идея собственно такая - имеем нетлист соединений, далее система сама раскидывает корпуса и раздвигает по мере авторазводки в соответствии с заранее установленными ограничениями (ширина дорожек, расстояние между дорожек, размер дырок и т.д.) - в результате получаем плату минимального размера при заданных условиях...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Post by Mac Buster »

Это сколько лет займёт?
Extreme Entertainment
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Mac Buster wrote:Это сколько лет займёт?
Ну потихоньку будем двигаться - вон визуализатор уже имеется ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Post by Mac Buster »

Нет, я про время разводки спрашивал :)
Extreme Entertainment
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Mac Buster wrote:Нет, я про время разводки спрашивал :)
Ну не на специалистах же и спектрумах разводиться будем :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
fifan
Devil
Posts: 912
Joined: 06 Oct 2006 03:17
Location: г.Лянтор,Сургутского р-на,ХМАО

Post by fifan »

А схема есть? Могу поспособствовать в разводке.
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

fifan wrote:А схема есть? Могу поспособствовать в разводке.
Хочется получить сугубо автоматизированное решение (причём опенсорцное)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re:

Post by Shaos »

Shaos wrote:
Shaos wrote:Есть желание (но нету времени) сделать из этих наработок полноценный редактор Гербер-файлов (под GPLv3 естественно)
Кто со мной? :roll:
Плюс авторазводка. Идея собственно такая - имеем нетлист соединений, далее система сама раскидывает корпуса и раздвигает по мере авторазводки в соответствии с заранее установленными ограничениями (ширина дорожек, расстояние между дорожек, размер дырок и т.д.) - в результате получаем плату минимального размера при заданных условиях...
Плюс редактор схем для ввода (по юзер интерфейсу - копия Eagle v5) под названием скажем Vulture (то бишь птица Гриф) :roll:

P.S. Пусть будет vultured (типа гриф-редактор) :mrgreen:

P.P.S. Я даже доменное имя уже прихватизировал - vultu.red ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Пишем программки на Си для играния с форматом Гербер...

Post by Shaos »

Чего-то сломалось в gif-либе в последних линуксах - не собирается больше нифига :(
Придется переписать на использование PNG
P.S. Либо взять публик-домейную реализацию GIF-сохранялки...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Пишем программки на Си для играния с форматом Гербер...

Post by Shaos »

Вот поглядим внутрь простого гербера, сгенерённого в Eagle v5 (вспоминая чего я собственно расковырял в 2010 году, сочиняя свою рисовальную программку):
dip2top.png
Полный текст файла под спойлером (формат Gerber RS-274X):

 dip2.top

Code: Select all

G75*
G70*
%OFA0B0*%
%FSLAX24Y24*%
%IPPOS*%
%LPD*%
%AMOC8*
5,1,8,0,0,1.08239X$1,22.5*
%
%ADD10C,0.0520*%
%ADD11OC8,0.0600*%
%ADD12C,0.0600*%
%ADD13C,0.0357*%
%ADD14C,0.0120*%
%ADD15C,0.0500*%
%ADD16R,0.0357X0.0357*%
D10*
X002093Y002292D02*
X002613Y002292D01*
X005093Y002292D02*
X005613Y002292D01*
D11*
X001353Y001792D03*
X001853Y001292D03*
X005853Y001292D03*
D12*
X004403Y004542D02*
X003803Y004542D01*
X003803Y005542D02*
X004403Y005542D01*
D13*
X005603Y005542D03*
X005603Y005042D03*
X005103Y003542D03*
X002603Y003542D03*
D14*
X005103Y003542D01*
X004853Y004542D02*
X004103Y004542D01*
X004853Y004542D02*
X005353Y005042D01*
X005603Y005042D01*
X005603Y005542D02*
X004103Y005542D01*
D15*
X004103Y004542D02*
X001353Y004542D01*
X001353Y001792D01*
X001853Y001292D02*
X005853Y001292D01*
D16*
X006103Y005042D03*
X006103Y005542D03*
M02*

Грубо этот файл можно разбить на три части:
1) заголовок - можно тупо не вдаваясь в подробности сохранить его как есть и вставлять во все герберы (к заголовку также можно отнести макрос %AMOC8, который задаёт форму восьмигранных площадок)
2) добавление "кистей" (или как их лучше назвать) %ADDnn и далее тип C - круглые, R - прямоугольные, OC8 - восьмигранные (макрос)
3) непосредственно само рисование - сначала ставится "кисть" Dnn* (где nn номер кисти), а потом строчки с координатами:
XnnnnnnYnnnnnnDmm*
где mm это команда плоттеру:
03 - ткнуть выбранной "кисточкой" в указанные координаты (т.е. опустить и тут же поднять, оставив отпечаток)
02 - опустить "кисть" в указанные координаты (и оставить её там)
01 - провести "кистью" до новых координат (если далее опять идёт команда 01, то продолжаем рисовать)
Файл заканчивается командой M02*

Продолговатые контактные площадки рисуются как прочерк круглого пера диаметром 0.06 дюйма:
X004403Y004542D02*
X003803Y004542D01*

Вот самый простейший Гербер - четыре линии, рисующие прямоугольник, обозначающий границы платы:

Code: Select all

G75*
G70*
%OFA0B0*%
%FSLAX24Y24*%
%IPPOS*%
%LPD*%
%AMOC8*
5,1,8,0,0,1.08239X$1,22.5*
%
%ADD10C,0.0000*%
D10*
X000105Y000107D02*
X000105Y008227D01*
X008097Y008227D01*
X008097Y000107D01*
X000105Y000107D01*
M02*
Как видим размер пера тут 0 целых 0 десятых (т.е. не для рисования на плате).

Ещё из интересного - команды "рисования" построены так, чтобы минимизировать пустые движения - типа рисуем справа-налево, потом слева-направо и т.д.

Файлы дырок (в формате "Excellon") ещё более простые:

 dip2.drd

Code: Select all

%
M48
M72
T01C0.0197
T02C0.0320
T03C0.0400
%
T01
X2603Y3542
X5103Y3542
X5603Y5042
X6103Y5042
X6103Y5542
X5603Y5542
T02
X5353Y2292
X2353Y2292
T03
X1353Y1792
X1853Y1292
X4103Y4542
X4103Y5542
X5853Y1292
M30

Между двумя процентами находится заголовок - там некие предустановки начинающиеся с буквы M - их просто тупо копируем не вдаваясь в детали
Далее задаются размеры "свёрел" - TnnCдиаметрвдюймах (все дырки у нас C - круглые)
Далее само сверление:
Тnn - выбираем "сверло"
XnnnnYnnnn - сверлим дырку в указанных координатах
Файл завершается командой M30
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re:

Post by Shaos »

Shaos wrote:Когда сконвертил все свои платы из игла обратил внимание, что на получившихся GIF-ах у SMD компонентов контактные площадки выглядят чуть больше чем надо (а у QFP вообще слипаются) - что там я не до конца расковырял...
Это потому что я слои soldermask рисовал как сплошные площадки, а на самом деле они чуть ширше самих площадок т.к. олицетворяют собою дырки в зелёнке, через которые будет наноситься припой на оголённую медь, например вот размер восьмигранных площадок в слоях меди (верхний и нижний соответственно):

dip2.top:%ADD11OC8,0.0600*%
dip2.bot:%ADD12OC8,0.0600*%

а вот в soldermask-слоях (также верхний и нижний):

dip2.smt:%ADD11OC8,0.0680*%
dip2.smb:%ADD11OC8,0.0680*%

Как видим soldermask имеет размер на 0.008 дюйма больше

Надо это как-то предусмотреть при отрисовке и не заливать soldermask-слои сплошняком, как щас моя рисовальная программка делает

P.S. Заодно восьмигранники можно починить

P.P.S. Существует эталонный онлайн просмотрщик герберов от мантейнеров стандарта: https://gerber-viewer.ucamco.com/

P.P.P.S. Википедия пишет (см. https://en.wikipedia.org/wiki/Gerber_format), что в 2016 году в стандарт герберов добавили возможность сохранять netlist информацию - это значит, что уже сейчас герберы можно использовать непосредственно в редакторах печатных плат - не только как результат для отдавания в производство, но и процессе разработки!

P.P.P.P.S. Вот от авторов про Gerber X2: https://www.ucamco.com/en/gerber/demo-1
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Re:

Post by Shaos »

Shaos wrote:
Shaos wrote:
Shaos wrote:Есть желание (но нету времени) сделать из этих наработок полноценный редактор Гербер-файлов (под GPLv3 естественно)
Кто со мной? :roll:
Плюс авторазводка. Идея собственно такая - имеем нетлист соединений, далее система сама раскидывает корпуса и раздвигает по мере авторазводки в соответствии с заранее установленными ограничениями (ширина дорожек, расстояние между дорожек, размер дырок и т.д.) - в результате получаем плату минимального размера при заданных условиях...
Плюс редактор схем для ввода (по юзер интерфейсу - копия Eagle v5) под названием скажем Vulture (то бишь птица Гриф) :roll:

P.S. Пусть будет vultured (типа гриф-редактор) :mrgreen:

P.P.S. Я даже доменное имя уже прихватизировал - vultu.red ;)
Наверное VultureD можно начать разрабатывать как просмотрщик-редактор герберов, как предполагалось изначально, а там видно будет...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Пишем программки на Си для играния с форматом Гербер...

Post by Shaos »

Вобщем предварительно вот такой заголовок будет у моих кустарно сгенерённых герберов:

Code: Select all

FILE* fopenGE(char* suffix)
{
 FILE* f;
 char str[256];
 strncpy(str,ccc,256);
 strncat(str,suffix,256);
 str[255] = 0;
 f = fopen(str,"wt");
 if(f!=NULL)
 {
   fprintf(f,"G75*\n");
   fprintf(f,"G70*\n");
   fprintf(f,"%OFA0B0*%\n");
   fprintf(f,"%FSLAX24Y24*%\n");
   fprintf(f,"%IPPOS*%\n");
   fprintf(f,"%LPD*%\n");
   fprintf(f,"%AMOC8*\n");
   fprintf(f,"5,1,8,0,0,1.08239X$1,22.5*\n");
   fprintf(f,"%\n");
   fprintf(f,"%ADD10OC8,0.0600*%\n");      // D10* octagonal pad
   fprintf(f,"%ADD11C,0.0600*%\n");        // D11* oval pad
   fprintf(f,"%ADD12R,0.0800X0.0260*%\n"); // D12* surface mounted pad
   fprintf(f,"%ADD13C,0.0357*%\n");        // D13* circular via
   fprintf(f,"%ADD14C,0.0120*%\n");        // D14* signal trace
   fprintf(f,"%ADD15C,0.0500*%\n");        // D15* power trace
 }
 return f;
}
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Пишем программки на Си для играния с форматом Гербер...

Post by Shaos »

Вот более продвинутый вариант с особыми вариантами для outline, silkscreen и soldermask:

Code: Select all


FILE* fopenGE(char* suffix)
{
 FILE* f;
 char str[256];
 int outline = 0;
 int soldermask = 0;
 int silkscreen = 0;
 if(!strcmp(suffix,".GTO")) silkscreen = 1;
 if(!strcmp(suffix,".GKO")) outline = 1;
 if(suffix[3]=='S') soldermask = 1;
 strncpy(str,ccc,256);
 strncat(str,suffix,256);
 str[255] = 0;
 printf("%s\n",str);
 f = fopen(str,"wt");
 if(f!=NULL)
 {
   fprintf(f,"G75*\n");
   fprintf(f,"G70*\n");
   fprintf(f,"%%OFA0B0*%%\n");
   fprintf(f,"%%FSLAX24Y24*%%\n");
   fprintf(f,"%%IPPOS*%%\n");
   fprintf(f,"%%LPD*%%\n");
   fprintf(f,"%%AMOC8*\n");
   fprintf(f,"5,1,8,0,0,1.08239X$1,22.5*\n");
   fprintf(f,"%%\n");
   if(silkscreen) fprintf(f,"%%ADD10C,0.0063*%%\n"); /* D10* for silkscreen layer */
   else if(outline) fprintf(f,"%%ADD10C,0.0000*%%\n"); /* D10* for outline layer */
   else
   { /* for copper layers and soldermask layers: */
     fprintf(f,"%%ADD10OC8,0.06%c0*%%\n",soldermask?'8':'0'); /* D10* octagonal pad */
     fprintf(f,"%%ADD11C,0.06%c0*%%\n",soldermask?'8':'0'); /* D11* wide oval pad */
     if(soldermask) fprintf(f,"%%ADD12R,0.0580X0.0580*%%\n");
     else fprintf(f,"%%ADD12R,0.0500X0.0500*%%\n"); /* D12* square pad */
     if(soldermask) fprintf(f,"%%ADD13R,0.0880X0.0340*%%\n");
     else fprintf(f,"%%ADD13R,0.0800X0.0260*%%\n"); /* D13* surface mount pad */
     fprintf(f,"%%ADD14C,0.0357*%%\n"); /* D14* circular via */
     fprintf(f,"%%ADD15C,0.0120*%%\n"); /* D15* signal trace */
     fprintf(f,"%%ADD16C,0.0500*%%\n"); /* D16* power trace */
   }
 }
 return f;
}
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Пишем программки на Си для играния с форматом Гербер...

Post by Shaos »

Программка для конвертации псевдо-ASCII Circuits.CC в Gerber/Excellon:

https://gitlab.com/shaos/circuits_cc/blob/master/utils/cccp.c

Осталось толстые проводники научить рисовать и валидацию вумную написать...
Я тут за главного - если что шлите мыло на me собака shaos точка net