nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 13:08



Reply to topic  [ 34 posts ]  Go to page Previous  1, 2, 3  Next
Пишем программки на Си для играния с форматом Гербер... 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
Shaos wrote:
Есть желание (но нету времени) сделать из этих наработок полноценный редактор Гербер-файлов (под GPLv3 естественно)
Кто со мной? :roll:


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

_________________
:dj: https://mastodon.social/@Shaos


14 Sep 2011 09:14
Profile WWW
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Post 
Это сколько лет займёт?

_________________
Extreme Entertainment


15 Sep 2011 11:41
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
Mac Buster wrote:
Это сколько лет займёт?


Ну потихоньку будем двигаться - вон визуализатор уже имеется ;)

_________________
:dj: https://mastodon.social/@Shaos


15 Sep 2011 19:15
Profile WWW
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Post 
Нет, я про время разводки спрашивал :)

_________________
Extreme Entertainment


16 Sep 2011 07:31
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
Mac Buster wrote:
Нет, я про время разводки спрашивал :)


Ну не на специалистах же и спектрумах разводиться будем :)

_________________
:dj: https://mastodon.social/@Shaos


16 Sep 2011 07:57
Profile WWW
Devil

Joined: 06 Oct 2006 03:17
Posts: 856
Location: г.Лянтор,Сургутского р-на,ХМАО
Reply with quote
Post 
А схема есть? Могу поспособствовать в разводке.


16 Sep 2011 07:59
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
fifan wrote:
А схема есть? Могу поспособствовать в разводке.


Хочется получить сугубо автоматизированное решение (причём опенсорцное)

_________________
:dj: https://mastodon.social/@Shaos


16 Sep 2011 08:37
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post Re:
Shaos wrote:
Shaos wrote:
Есть желание (но нету времени) сделать из этих наработок полноценный редактор Гербер-файлов (под GPLv3 естественно)
Кто со мной? :roll:

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

Плюс редактор схем для ввода (по юзер интерфейсу - копия Eagle v5) под названием скажем Vulture (то бишь птица Гриф) :roll:

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

P.P.S. Я даже доменное имя уже прихватизировал - vultu.red ;)

_________________
:dj: https://mastodon.social/@Shaos


27 Apr 2019 00:35
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Чего-то сломалось в gif-либе в последних линуксах - не собирается больше нифига :(
Придется переписать на использование PNG
P.S. Либо взять публик-домейную реализацию GIF-сохранялки...

_________________
:dj: https://mastodon.social/@Shaos


14 Jul 2019 20:03
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Вот поглядим внутрь простого гербера, сгенерённого в Eagle v5 (вспоминая чего я собственно расковырял в 2010 году, сочиняя свою рисовальную программку):

Attachment:
dip2top.png
dip2top.png [ 12.4 KiB | Viewed 9567 times ]


Полный текст файла под спойлером (формат Gerber RS-274X):
 dip2.top
Code:
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:
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:
%
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

_________________
:dj: https://mastodon.social/@Shaos


20 Jul 2019 21:13
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post Re:
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

_________________
:dj: https://mastodon.social/@Shaos


20 Jul 2019 21:44
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Shaos wrote:
Shaos wrote:
Shaos wrote:
Есть желание (но нету времени) сделать из этих наработок полноценный редактор Гербер-файлов (под GPLv3 естественно)
Кто со мной? :roll:

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

Плюс редактор схем для ввода (по юзер интерфейсу - копия Eagle v5) под названием скажем Vulture (то бишь птица Гриф) :roll:

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

P.P.S. Я даже доменное имя уже прихватизировал - vultu.red ;)

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

_________________
:dj: https://mastodon.social/@Shaos


23 Jul 2019 00:44
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Вобщем предварительно вот такой заголовок будет у моих кустарно сгенерённых герберов:
Code:
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;
}

_________________
:dj: https://mastodon.social/@Shaos


20 Oct 2019 17:59
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Вот более продвинутый вариант с особыми вариантами для outline, silkscreen и soldermask:
Code:

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;
}

_________________
:dj: https://mastodon.social/@Shaos


20 Oct 2019 18:16
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Программка для конвертации псевдо-ASCII Circuits.CC в Gerber/Excellon:

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

Осталось толстые проводники научить рисовать и валидацию вумную написать...

_________________
:dj: https://mastodon.social/@Shaos


22 Oct 2019 05:15
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 34 posts ]  Go to page Previous  1, 2, 3  Next

Who is online

Users browsing this forum: No registered users and 24 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.