fisl2012/: first outline of FISL13 talk; abstract and biography

Grmbl. Some junk ended up in this commit as well. Don't dare to disentangle
the mess.
This commit is contained in:
Werner Almesberger 2012-07-22 01:02:40 -03:00
parent 8418a19db1
commit cd80647273
8 changed files with 598 additions and 24 deletions

View File

@ -17,11 +17,17 @@ GP2RML = $(CAE_TOOLS)/gp2rml/gp2rml
# Z1 = -44
# PIECE_Z = 7.9
X0 = 5
Y0 = 45
Z1 = -44
# run with acrylic (corner at 4, 0)
# #1: 15, 10
# #2: 15, 50
# #3: 80, 10
# PIECE_Z = 5.15
X0 = 80
Y0 = 10
Z1 = -45
PIECE = -5 -5 30 55
PIECE_Z = 5.5
PIECE_Z = 5.15
Z_STEP = 2
CLEARANCE = 2
SPEED_XY = 1
@ -32,13 +38,21 @@ Z_OFFSET = 0.1
FIN_SPEED_XY = 3
FIN_SPEED_Z = 3
PARAMS = X0=$(X0)mm Y0=$(Y0)mm Z1=$(Z1)mm PIECE_Z=$(PIECE_Z)mm \
# acrylic
# ~0.1 mm / 12 mil tool correction # not needed
#MILL = 120mil
SPEED_XY = 2
SPEED_Z = 2
FIN_SPEED_XY = 5
FIN_SPEED_Z = 5
PARAMS = X0=$(X0)mm Y0=$(Y0)mm Z1=$(Z1)mm MILL=$(MILL) PIECE_Z=$(PIECE_Z)mm \
Z_OFFSET=$(Z_OFFSET)mm
PARTS = top mid bot
PART = top
.PHONY: all plot mill pos cng clean
.PHONY: all plot plot-fin mill pos cng clean
all: $(PART)-mill.rml $(PART)-finish.rml
@ -73,7 +87,10 @@ $(PART)-finish.rml: $(PART)-finish.gp Makefile
$< >$@ || { rm -f $@; exit 1; }
plot: $(PART)-mill.gp
echo 'splot "$(PART)-mill.gp" with lines' | gnuplot -persist
echo 'splot "$<" with lines' | gnuplot -persist
plot-fin: $(PART)-finish.gp
echo 'splot "$<" with lines' | gnuplot -persist
mill: $(PART)-mill.rml $(PART)-finish.rml
PORT=/dev/ttyUSB0 $(SPOOL) $^
@ -88,5 +105,9 @@ clean:
rm -f case.gp
rm -f $(PARTS:%=%-piece.gp) $(PARTS:%=%.gp)
rm -f $(PARTS:%=%-area.gp)
rm -f $(PARTS:%=%-mill.gp) $(PARTS:%=%-mill.rml)
rm -f $(PARTS:%=%-finish.gp) $(PARTS:%=%-finish.rml)
rm -f $(PARTS:%=%-mill.gp)
rm -f $(PARTS:%=%-finish.gp)
spotless: clean
rm -f $(PARTS:%=%-mill.rml)
rm -f $(PARTS:%=%-finish.rml)

View File

@ -5,7 +5,7 @@ while [ "$1" ]; do
done
: ${MILL:=125mil}
: ${OVERLAP:=0.5mm}
: ${OVERLAP:=1.6mm}
: ${X0:=0mm}
: ${Y0:=0mm}
: ${Z1:=0mm}

View File

@ -76,11 +76,12 @@ frame top_window {
frame top_pcb {
loop if = 1, top_pcb
set off = topborder+topridge
set inside = topborder+topridge
frame top_outline @
ll: vec @(off, off)
RRECT(pcb_, ll, width-2*off, length-2*off, ri_ridge)
ro: vec @(topborder, topborder)
ri: vec ro(topridge, topridge)
RRECT(ridge_i_, ri, width-2*inside, length-2*inside, ri_ridge)
}
frame top_ridge {
@ -264,13 +265,13 @@ table
{ part, z, top_surface, top_window, top_pcb, top_ridge,
mid_ridge, mid_pcb, mid_body,
bot_posts, bot_base, bot_surface}
{ "top_surface", 2.5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
{ "top_window", 1.5, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }
// { "top_pcb", 0.5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }
{ "top_surface", 3.3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
{ "top_window", 2.3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }
{ "top_pcb", 1.2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }
{ "top_ridge", 0.5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }
{ "mid_ridge", 0.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }
{ "mid_pcb", 1.0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }
{ "mid_body", 4.5, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 }
{ "mid_ridge", 0.6, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }
{ "mid_pcb", 1.2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }
{ "mid_body", 4.7, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 }
{ "bot_posts", 1.2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 }
{ "bot_base", 2.0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }
{ "bot_surface", 2.7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }
@ -291,8 +292,9 @@ table
table
/* usb_roff = offset from right outer case edge */
/* usb_d = 10 mm for prototypes (mini-USB); reduce to 6.0 mm for micro */
{ usb_w, usb_d, usb_roff }
{ 8.5mm, 6.0mm, 4.5mm }
{ 8.6mm, 10.0mm, 4.9mm }
table
/* post_y is from the edge of the battery bay. post_x is from the edge */
@ -331,8 +333,8 @@ frame bot_surface @
measx top_outline.edge_ul -> top_outline.edge_ur 4mm
measy top_outline.edge_ll -> top_outline.edge_ul 4mm
measx top_pcb.pcb_ul -> top_pcb.pcb_ur 3mm
measy top_pcb.pcb_ll -> top_pcb.pcb_ul 3mm
//measx top_pcb.pcb_ul -> top_pcb.pcb_ur 3mm
//measy top_pcb.pcb_ll -> top_pcb.pcb_ul 3mm
measx top_ridge.ridge_o_ul -> top_ridge.ridge_o_ur 4mm
measy top_ridge.ridge_o_ll -> top_ridge.ridge_o_ul 4mm

80
fisl2012/Makefile Normal file
View File

@ -0,0 +1,80 @@
SHELL=/bin/bash
#DL=USB.png Nano_cola.jpg Atben_atusb_prod_03.jpg Atben_atusb_prod_05.jpg \
# M1_dmx_video.jpg \
# UBB_production_08.JPG ubb-vga-pub-plugged-medium.jpg \
# ubb-vga-pub-1024-medium.jpg SIE_KICAD.png
#GEN=schhist.png fped.png kicad.png achieve.pdf flow.pdf
#PNG=atusb-front.png
.PHONY: spotless clean upload upload-es
all: talk.pdf
xpdf talk.pdf
talk.pdf: talk.tex $(GEN) $(DL) $(PNG)
pdflatex talk
talk-es.pdf: talk-es.tex $(GEN) $(DL) $(PNG)
pdflatex talk-es
kicad.png: eeschema.xwd pcbnew.xwd
pnmcomp -xoff=0 -yoff=300 \
<(convert eeschema.xwd ppm:-) \
<(convert pcbnew.xwd ppm:- | \
pnmpad -white -left=900 -bottom=300) | \
convert - $@
schhist.png: schhist.xwd
convert $< $@
fped.png: fped.xwd
convert $< $@
USB.png:
wget http://projects.qi-hardware.com/schhist/atusb/847b3546d90d7271690bcd17014cf2cae9482538/diff/USB.png
Nano_cola.jpg:
wget http://en.qi-hardware.com/w/images/7/78/Nano_cola.jpg
Atben_atusb_prod_03.jpg:
wget http://en.qi-hardware.com/w/images/0/06/Atben_atusb_prod_03.jpg
Atben_atusb_prod_05.jpg:
wget http://en.qi-hardware.com/w/images/c/ce/Atben_atusb_prod_05.jpg
M1_dmx_video.jpg:
wget http://en.qi-hardware.com/w/images/5/55/M1_dmx_video.jpg
UBB_production_08.JPG:
wget http://en.qi-hardware.com/w/images/8/83/UBB_production_08.JPG
ubb-vga-pub-plugged-medium.jpg:
wget http://downloads.qi-hardware.com/people/werner/ubb/vga/web/ubb-vga-pub-plugged-medium.jpg
ubb-vga-pub-1024-medium.jpg:
wget http://downloads.qi-hardware.com/people/werner/ubb/vga/web/ubb-vga-pub-1024-medium.jpg
SIE_KICAD.png:
wget http://linuxencaja.com/images/9/9d/SIE_KICAD.png
achieve.pdf: achieve.fig
fig2dev -L pdf $< $@
flow.pdf: flow.fig
fig2dev -L pdf $< $@
talk.ps: talk.pdf
pdf2ps $< $@
p16: talk.ps
mpage -8 $< | lpr
spotless:
rm -f $(DL)
clean:
rm -f $(GEN) talk.ps
upload: talk.pdf
qippl talk.pdf fisl13.pdf

18
fisl2012/abstract.txt Normal file
View File

@ -0,0 +1,18 @@
Making Hardware with KiCad and Friends
KiCad is a well-established Open Source EDA suite that provides tools
for most of the basic tasks in circuit design. In larger projects,
and especially those of an open and collaborative nature, additional
requirements appear that KiCad can only partially satisfy.
Specifically, collaborative projects benefit from visualization that
helps to quickly follow the work of others and to track a project's
revision history. Furthermore, an automated and thus easily
reproducible workflow lowers the barrier of entry and avoids costly
mistakes.
In the Qi-Hardware project, we use KiCad as the centerpiece for various
hardware designs and enhance its functionality with patches or external
programs. This presentation will describe the complete workflow from
design to fabrication, introduce the various tools we use to complement
KiCad, and also briefly address common design rules.

10
fisl2012/bio.txt Normal file
View File

@ -0,0 +1,10 @@
Werner got hooked on Linux in the days of the 0.12 kernel and started
to get his hands dirty from early on with contributions like the LILO
boot loader, the initial RAM disk (initrd), and the MS-DOS file system.
Later activities led him into networking, with the Linux-ATM project as
part of his PhD thesis, and he eventually landed in the Openmoko project.
Having had a taste of hardware there, but eager to do more, he then
journeyed deeper into the world of electronics and finally joined the
Qi-Hardware project, where he now dabbles with making gadgets that aim
to blend software and hardware under common principles of freedom.

443
fisl2012/talk.tex Normal file
View File

@ -0,0 +1,443 @@
\documentclass[14pt,trans]{beamer}
\usepackage{color}
\usepackage{url}
\usepackage{colortbl}
%\usepackage{soul}
%\usepackage{verbatim}
\usefonttheme{structurebold}
\setbeamertemplate{navigation symbols}{}
\setbeamertemplate{items}[ball]
%\setbeamersize{sidebar width left=-5mm}
\title{\Large Making Hardware with KiCad and Friends}
\author{Werner Almesberger \\\url{werner@almesberger.net}}
\date{July 21, 2012}
%\setul{}{1.5pt}
\begin{document}
\begin{frame}
\titlepage
\end{frame}
% --- Overview ----------------------------------------------------------------
\begin{frame}{Overview}
\begin{itemize}
\item KiCad introduction
\item Qi-Hardware workflow
\item $\dots$ and tools
\end{itemize}
\url{downloads.qi-hardware.com/people/werner/fisl13.pdf}
\end{frame}
% --- KiCad Introduction ------------------------------------------------------
\begin{frame}{KiCad}
\begin{itemize}
\item Complete EDA solution
\item Free Software: GPL, LGPL
\item Text files $\rightarrow$ extensible
\item C++, wxWidgets
\item Multi-platform: Linux, Windows, Mac
\end{itemize}
\end{frame}
% --- Schematics --------------------------------------------------------------
\begin{frame}{KiCad: Schematics}
eeschema + component editor: netlist, BOM
SCREENSHOTS
\end{frame}
% --- Layout ------------------------------------------------------------------
\begin{frame}{KiCad: Layout}
cvpcb + pcbnew + module editor -> gerbers (gerbv)
SCREENSHOTS
\end{frame}
% --- Fped --------------------------------------------------------------------
\begin{frame}{Footprint Editor (fped)}
%\begin{center}
% \includegraphics[height=6cm]{fped.png}
%\end{center}
SCREENSHOT (highlight vector)
\begin{itemize}
\item Fully parametric
\item Automated repetition (loops, tables, sub-frames)
\item GUI or text-based
\item Automatic measurements
\item Output: KiCad, Postscript, Gnuplot
\end{itemize}
\end{frame}
% --- Qi-Hardware -------------------------------------------------------------
\begin{frame}{Qi-Hardware}
\begin{itemize}
\item Collection of loosely connected projects
\item Loose collective of like-minded developers
\item Copyleft Hardware with Free Software
\item Development and manufacturing
\item Toolmaking
\end{itemize}
Products:
\begin{itemize}
\item Ben NanoNote (Handheld computer)
\item Ben-WPAN (IEEE 802.15.4 wireless)
\item Milkymist One (FPGA-based Video synthesizer)
\end{itemize}
\end{frame}
% --- Collaborative Design ----------------------------------------------------
\begin{frame}{Collaborative Design}
\begin{itemize}
\item Track other people's work
\item Review other people's work (libraries)
\item Shared design information
\item Shared version control (git)
\item Shared procedures and rules
\end{itemize}
\end{frame}
% --- KiCad Limitations -------------------------------------------------------
\begin{frame}{KiCad Limitations}
\begin{itemize}
\item No integrated version control system support
\item Integration leads to weak peripheral tools
\begin{itemize}
\item Footprint editor
\item Component catalog
\item Module catalog
\end{itemize}
\item Scattered libraries CHECK
\end{itemize}
\end{frame}
% --- Qi-Wardware Adaptation --------------------------------------------------
\begin{frame}{Qi-Hardware Adaptation}
\begin{itemize}
\item Command-line oriented use
\item Extend KiCad with patches
\item External scripts/programs
\item Own component and module libraries with common rules
\end{itemize}
\end{frame}
% --- What goes into git ------------------------------------------------------
\begin{frame}{What goes into git}
KiCad:
\begin{itemize}
\item Project file: {\tt {\em project}.pro}
\item Schematics: {\tt {\em project}.sch}, {\tt {\em subsheet}.sch}
\item Footprint mapping: {\tt {\em project}.cmp}
\item Layout: {\tt {\em project}.brd}
\end{itemize}
Qi-Hardware:
\begin{itemize}
\item Makefile ({\tt sch}, {\tt brd}, {\tt fab}, {\tt clean})
\item Bookshelf (for dsv)
\item Project-local libraries
\end{itemize}
\end{frame}
% --- What doesn't ------------------------------------------------------------
\begin{frame}{What doesn't}
KiCad:
\begin{itemize}
\item Netlist: {\tt {\em project}.net} \\
Generate with eeschema from {\tt *.sch} and {\tt {\em project}.cmp}
\item Caches and backups: {\tt {\em project}.bak}, {\tt {\em project}.000},
{\tt {\em project}-cache.lib}
\item Postscript: {\tt {\em project}-{\em layer}.g{\em XX}}
\item Gerbers: {\tt {\em project}-{\em layer}.g{\em XX}}
\item BOMs: {\tt {\em project}.lst}, {\tt {\em project}.cvs}
\item Fab outputs: {\tt {\em project}.drl}, {\tt {\em project}.pos}
\item And so on: {\tt {\em project}.erc}, {\tt {\em project}.rpt},
{\tt {\em project}.wrl}, $\ldots$
\end{itemize}
\end{frame}
% --- Project File ------------------------------------------------------------
\begin{frame}{Project File}
Project settings. Lists of libraries.
Issues:
\begin{itemize}
\item Local absolute paths
\item Default libraries
\item Timestamps $\rightarrow$ commit noise
\end{itemize}
Solution:
\begin{itemize}
\item Maintain manually
\item {\tt purge} script \\
\url{wernermisc/bin/purge}
\end{itemize}
\end{frame}
% --- Makefile ----------------------------------------------------------------
\begin{frame}[fragile]{Makefile}
Issues:
\begin{itemize}
\item Shortcuts
\item Glue tools together
\item Avoid mistakes
\item Share common procedures
\end{itemize}
Example:
\begin{verbatim}
front:
pcbnew --plot=ps --plot-fill-all-zones --layers=Front \
--plot-mirror $(PROJECT).brd
lpr $(PROJECT)-Front.ps
\end{verbatim}
\end{frame}
% --- KiCad Command-Line Patches ----------------------------------------------
\begin{frame}{KiCad Command-Line Patches}
Original hack by Werner Almesberger, clean rewrite by Wolfgang Spraul.
\begin{itemize}
\item Idea: command-line access to main output functions
\item eeschema
\begin{itemize}
\item Visualization: Postscript (and SVG, DXF)
\item BOM $\rightarrow$ BOOM
\item Netlist, ERC
\end{itemize}
\item pcbnew
\begin{itemize}
\item Fabrication: Gerbers, drill (Excellon), component positions
\item Visualization and DIY: Postscript
\item Attributes: mirror, size, origin, fill zones, $\ldots$
\end{itemize}
\end{itemize}
\url{eda-tools/kicad-patches}
\end{frame}
% --- Data Sheet Viewer (dsv) -------------------------------------------------
\begin{frame}[fragile]{Data Sheet Viewer (dsv)}
\begin{itemize}
\item Bookshelf: name and aliases $rightarrow$ PDF or ZIP with PDF
\item Download (wget) to local cache
\item Hierarchical lookup by name or alias
\item Example: \\
{\tt dsv avr} $\rightarrow$ ATtiny87 ({\tt doc8265.pdf})
$\rightarrow$ xpdf
\end{itemize}
Bookshelf example:
\begin{verbatim}
N: attiny87
A: attiny167
A: avr
D: http://www.atmel.com/Images/doc8265.pdf
\end{verbatim}
\end{frame}
% --- Data Sheet Viewer (dsv) -------------------------------------------------
\begin{frame}{dsv Motivation}
\begin{itemize}
\item Make sure everybody uses the same data sheet
\begin{itemize}
\item Same component
\item Same manufacturer
\item Same data sheet revision
\end{itemize}
\item Copyright: can't just check in PDF
\item Industrial pragmatism: mail or ``internal'' repository
\item Qi-Hardware: send {\tt BOOKSHELF} around
\end{itemize}
\url{eda-tools/dsv}
\end{frame}
% --- Schematics Symbol Catalog ----------------------------------------------
\begin{frame}{Schematics Symbol Catalog}
\begin{itemize}
\item For selection, review
\item Hierarchical order with alphabetic index
\item Short descriptions and data sheet links
\item Added value: indicate pin types
\item TODO: connect to dsv
\end{itemize}
DRAWING (hierarchy + descr + com libs ---genkicat--> PDF)
\end{frame}
% --- Footprint Catalog ------------------------------------------------------
\begin{frame}{Footprint Catalog}
\begin{itemize}
\item Likewise, for footprints
\item Added value: measurements, pad types
\end{itemize}
DRAWING (hierarchy + descr + com libs ---genkicat--> PDF)
\url{eda-tools/genkicat}
\end{frame}
% --- Schematics History ------------------------------------------------------
\begin{frame}{Schematics History}
\begin{itemize}
\item Schematics revision history
\item {\tt git diff} produces gibberish
\end{itemize}
EXAMPLE
\url{http://projects.qi-hardware.com/schhist/}
\end{frame}
% --- Schematics History (cont'd) ---------------------------------------------
\begin{frame}{Schematics History (cont'd)}
How it works:
\begin{itemize}
\item Walk git revision history
\item Check out project whenever schematics change
\item Run eeschema to make Postscript
\item Convert to PNG (find diffs, with highlighting) and PDF
\item Wrap in HTML
\end{itemize}
Issues:
\begin{itemize}
\item Nasty shell script
\item Resource-hungry (partial caching)
\item Large schematics get confusing
\item Projects spanning multiple repositories
\end{itemize}
\url{eda-tools/schhist}
\end{frame}
% --- Layout History ----------------------------------------------------------
\begin{frame}{Layout History}
\begin{itemize}
\item Layout revision history
\item To do $\ldots$
\end{itemize}
\url{eda-tools/brdhist}
\end{frame}
% --- Gerber Renderer ---------------------------------------------------------
\begin{frame}{Gerber Renderer}
\begin{itemize}
\item ``Photorealistic'' view of PCB
\item Combines Gerber and Excellon
\item Easy see issues with solder paste, silk screen, solder mask, $\ldots$
\item Uses gerbv for rendering
\end{itemize}
EXAMPLE
\url{eda-tools/prettygerbv}
\end{frame}
% --- BOM Processor -----------------------------------------------------------
\begin{frame}{BOM Processor (BOOM)}
\begin{itemize}
\item BOM $\rightarrow$ select components $\rightarrow$ find supplier
$\rightarrow$ shopping list
\item Work in progress. Rewrite from Perl to C
\begin{itemize}
\item Faster
\item Less headache with data structures
\item Better parsing
\end{itemize}
\item Snag: Digi-Key spider no longer works
\item Future: help with component selection
\end{itemize}
\url{eda-tools/b2}
\end{frame}
% --- BOOM Data Flow ----------------------------------------------------------
\begin{frame}{BOOM Data Flow}
DRAWING
\end{frame}
% --- Schematics Design Rules -------------------------------------------------
\begin{frame}{Schematics Design Rules}
...
URL
\end{frame}
% --- Libraries ---------------------------------------------------------------
\begin{frame}{Libraries}
Goals:
\begin{itemize}
\item Consistent naming
\item Known origin of design information
\item Documented development process
\end{itemize}
To do:
\begin{itemize}
\item Improve organization
\item Better integrate background information
\item Reviews !
\end{itemize}
\url{kicad-libs/components}, \url{kicad-libs/modueles}
\end{frame}
% --- Qi-Hardware Workflow ----------------------------------------------------
\begin{frame}{Qi-Hardware Workflow}
DIAGRAM
\end{frame}
% --- Conclusion --------------------------------------------------------------
\begin{frame}{Conclusion}
\begin{itemize}
\item KiCad is a good basis for collaborative projects
\item Open design allows extension with scripts
\item Workflow is complex and needs careful consideration
\end{itemize}
To do:
\begin{itemize}
\item Spread the word
\item Improve quality of libraries
\item Integrate patches into mainline KiCad
\item Finish BOOM and write brdhist
\end{itemize}
\end{frame}
\end{document}

View File

@ -4,7 +4,7 @@ http://lists.en.qi-hardware.com/pipermail/discussion/
2009 85 141 137 157 99 145
2010 180 180 263 214 412 218 492 295 260 132 116 174
2011 150 155 125 108 71 127 49 106 129 69 71 33
2012 39 20 38 36 15
2012 39 20 38 36 15 23
http://lists.milkymist.org/pipermail/devel-milkymist.org/
@ -12,4 +12,4 @@ http://lists.milkymist.org/pipermail/devel-milkymist.org/
2009 3 8 15 27 33 14 24 14
2010 29 28 36 28 22 25 35 14 27 39 17 12
2011 61 43 59 81 17 48 43 35 24 78 116 183
2012 52 67 48 30 35
2012 52 67 48 30 36 16