I needed to add an array of 0603 LEDs to a loudspeaker drawing (shown below).
Since I've done some scripting for xfig
files before, I thought I'd try that again.
You can see the tiny green LEDs distributed over the big middle
driver. You can find the
script here. You'll
need Tcl and Tcl's cmdline package to run it. Once you've got
things set up, you can see the usage with
~/p/eventual/scripts/boxarc λ tclsh boxarc.tcl -h
boxarc usage: boxarc [options]
-l value Box length (mils) <100>
-w value Box width (mils) <100>
-d value Minimum depth <50>
-r value Arc radius (mils) <1000>
-s value Start angle (degrees) <0>
-e value End angle (degrees) <90>
-n value Number of boxes <10>
-o value Output file name <none>
-- Forcibly stop option processing
-help Print this message
-? Print this message
...and you can get the LEDs shown in the above image with
...which puts 32 0.063 x 0.031 inch boxes on a 2.5 inch radius between
angles 30 and 150 degrees. The depth setting of 10 puts the LEDs "on
top" and visible in the image.
Xfig is still a very convenient tool for
me, and I need it to work under Cygwin. I've tried to document how
I've been able to get it to work. You will, of course, need to start
by installing Cygwin.
Download setup-x86.exe
Download the 32-bit (or 64-bit if you're feeling lucky) setup.exe from
cygwin.com. I like to copy it to
my Windows desktop so I can easily run it again when I need to add
packages. The 64-bit version seemed to be missing a few packages the
last time I tried it, and I haven't tried it since then.
Run the installer
Select install from internet. The default installation directory
(C:\cygwin) works for me. I also like to store package information
to C:\cygstore, but this isn't important. After selecting file
locations, you can use the
mirror sites page to find a local
mirror.
Choose these packages for installation:
xorg-server
xinit
xfig
xfig-lib
ghostscript
ghostscript-fonts-other
ghostscript-fonts-std
...and then Cygwin will decide which dependencies will also need to be
installed. The initial installation takes me about 15 minutes.
Start the Cygwin Terminal
This creates your home directory and some useful configuration files.
Start the X server
Starting the X server with
export DISPLAY=:0
startxwin &
...will let you keep using the same terminal after the server starts.
I've had some strange problems with this sequence of commands -- it
works for me on a host OS, but it failed at first on a VirtualBox
Windows 7 guest. The fix was to start the XWin Server via the start
menu instead of the command line. After I did that, the command line
started working. Maybe a config file got written? Anyway, now X is
running.
Start xfig to see the problem
I've got xfig 3.2 patchlevel 5c. I add some text to the canvas, then
zoom in. The error message is:
Font size 17 not found, using smaller 12 point
...and the glyphs don't scale with the rest of the canvas -- extremely
annoying.
Install some font tools
I needed to install the:
xset
mkfontdir
mkfontscale
...packages via the cygwin installer.
Download ghostscript fonts
I'm not sure where the fonts should be archived, but the file you want
is ghostscript-fonts-std-8.11.tar.gz. It looks like it's hosted
at SourceForge. I make the directory ~/fonts and unpack the file
there. This will make its own fonts directory. Descend into this
directory and:
mkfontdir
mkfontscale
Add this new fonts directory to the list known by X
With the X server running,
xset fp+ ~/fonts/fonts
...and you won't see any output.
Test the fix
Fire up xfig again and type some text. Enjoy the nice scaling glyphs
when you change the zoom factor!
You'll probably want to add the export DISPLAY=:0 line to your
.bash_profile or your .bashrc file. Unfortunately, the xset
command won't work until X is actually running. You could add that
line to your .bashrc, but you'd have to make sure you started
X via the start menu before you started the Cygwin Terminal. You
could also simply type bash after starting X to re-run the .bashrc
commands. And there are probably many better ways of doing all this.
Update on 2021-Jan-20 — Cygwin's X server issues
I stopped using Cygwin's X server because it wasn't working well with my high resolution display. Xfig's buttons and popups were too tiny to be usable. The VcXsrv server does a much better job, but my xset command stopped working. I saw the error messages:
xset: bad font path element (#97), possible causes are:
Directory does not exist or has wrong permissions
Directory missing fonts.dir
Incorrect font server address or syntax
The fix was to replace the Cygwin file path with a Windows path:
xset fp+ "c:/cygwin64/home/me/fonts/fonts"
...where c:/cygwin64/home/me is my home directory.
...and that's success! Of course, you can make your life easier by
adding the PATH command to your .bashrc or .bash_profile script.
Edit on Saturday, September 24, 2016
I could not install ActiveTcl in a way that allowed an ordinary
user to use teacup. I tried installing everything into
/home/john/opt instead of /opt, but teacup then created a
~/.teapot directory owned by root. So I guess users of "locked
down" systems will need to find another way to get the packages they
need.
I was initially excited to use my new JTAGICE3 programmer with my
XMEGA board, but I couldn't get it to work with avrdude on Linux. I
don't want to switch to Windows just for this project, so I hooked up
the AVR Dragon as shown below.
Upgrade the Dragon's firmware
My original AVR Dragon had firmware that didn't support XMEGA
programming. Updating this required booting into Windows and starting
Atmel Studio. I ended up upgrading the firmware to version 7.39.
Set some udev rules
Linux Mint puts my user in the plugdev group -- not the dialout
group. But udev seems to want to put everything in the dialout
group, and it somehow isn't enough to just add my user to that group.
In the end, I wrote some udev rules to support the Dragon, the Common
Device Class Abstract Control Model (CDC-ACM) protocol, and the Atmel
bootloader protocol:
# Support the AVR Dragon
ATTR{idVendor}=="03eb", ATTRS{idProduct}=="2107", MODE="660", GROUP="plugdev"
# Support the CDC virtual COM port provided by the demo application
ATTRS{product}=="CDC Virtual Com", SYMLINK+="xmega", GROUP="plugdev"
# The stock bootloader shows up as idVendor 0x03eb, idProduct 0x2fe2
ATTR{idVendor}=="03eb", ATTRS{idProduct}=="2fe2", MODE="660", GROUP="plugdev"
Get the bootloader image
Some Google searches for the original bootloader image eventually let me to
this page,
and this link for the Xmega
bootloader images.
Flash the image with avrdude
avrdude -p atxmega256a3bu -c dragon_jtag -P usb -e -U flash:w:atmel_bootloader/binary/atxmega256a3bu_104.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02s
avrdude: Device signature = 0x1e9843
avrdude: erasing chip
avrdude: reading input file "atmel_bootloader/binary/atxmega256a3bu_104.hex"
avrdude: input file atmel_bootloader/binary/atxmega256a3bu_104.hex auto detected as Intel Hex
avrdude: writing flash (267770 bytes):
Writing | ################################################## | 100% 0.00s
avrdude: 267770 bytes of flash written
avrdude: verifying flash memory against atmel_bootloader/binary/atxmega256a3bu_104.hex:
avrdude: load data flash data from input file atmel_bootloader/binary/atxmega256a3bu_104.hex:
avrdude: input file atmel_bootloader/binary/atxmega256a3bu_104.hex auto detected as Intel Hex
avrdude: input file atmel_bootloader/binary/atxmega256a3bu_104.hex contains 267770 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.00s
avrdude: verifying ...
avrdude: 267770 bytes of flash verified
avrdude done. Thank you.
...and you're welcome.
Boot into the bootloader with the magic button
Remove the JTAG cable, remove the USB cable, hold down the SW0 button,
then plug in the USB cable. You'll now be in the bootloader.
Test it -- load the XMEGA A3BU demo
You can download the XMEGA demo
here.
You can flash the image using the
dfu-programmer utility:
dfu-programmer atxmega256a3bu flash sample_hexes/XMEGA_A3BU_XPLAINED_DEMO1.hex
Validating...
35062 bytes used (13.81%)
...and you'll need one final power cycle to boot into the application
code when dfu-programmer finishes.
Check out the grinloader project for more details
My grinloader project has a
makefile that automates the steps I just described. It also archives
the bootloader hexes and the demo application.
The venerable xfig is still a nice vector
drawing program with a clean user interface. Using
ghostscript to convert its eps output to
png allows setting the conversion resolution explicitly. The script
below takes two arguments: the maximum dimension of the finished png
in pixels, and the input fig file.