Read my blog with this tag
Follow my feed with this tag
Searching for: embedded
4-axis half-stepping translator in AVR [projects/01129403515]
Chris started with a MAXNC 10 open-loop machine. The included driver
boxes (which we came to understand were complete crap) use one pin per winding.
This requires two parallel ports for 4 axes. So, a year or so ago, before he
switched to L297/8-based boards,
I helped Chris design an avr-based translator
from step+direction pulses to the individual winding activation signals. Today
I'm posting the program, which I compiled with avr-gcc. In the future I might
post the board, which was a double sided design created in eagle.
ET-ARM Stamp [projects/01141702410]
I recently got an ET-ARM Stamp (a very wide
DIP-format board with an ARM microcontroller on board). I haven't done
anything exciting with it yet, but I will as soon as I can think of something!
Some notes about the thing:
Creating a Quadrature Divider: What Won't Work [projects/01149094674]
A proposed quadrature divider circuit, and a
waveform that it will treat incorrectly
As an improvement to the simplest possible
closed-loop servo system, I've been trying to design a circuit that will
function as a quadrature divider: the input and output are both quadrature
waveforms with the same direction, but the output waveform is 1/8 or 1/16 as
fast as the input.
Because emc2's encoder module poops out somewhere around 20 microsecond polling
intervals, an external divider is the only way to get accurate feedback from a
fast servo motor with a high-resolution encoder. Division by 16 lets the PC
see a 25kHz quadrature signal instead of a 400kHz one. For Chris's lathe
retrofit, the target speed is actually around 125kHz (1250 mm/min, 1mm/rev
leadscrew, 3:1 pulley, 500 line/rev encoder), but to keep it from being too
easy, he's going to do 3 such decoders on a single 16MHz atmega.
Many people seem to hit on the idea of using an up/down counter to process a
quadrature input. Chris and I managed to
convince a couple of bright guys on the #emc channel that this would work to
create a quadrature divider circuit. Well, it doesn't.
400kHz Triple quadrature divider for atmega8 and quadrature state table generator [projects/01149271333]
1MHz+ Quadrature Divider for attiny13 [projects/01149348342]
Quadrature divider board. Actual size: .7x.4 inches (about 18x10mm)
This untested code, along with an Eagle schematic and board layout, are
for a quadrature divider that polls at over 1MHz. The R and S test points are
used to program the device.
Like the 400kHz triple divider, this program uses a state table generated by "mkstate.py", and
is GPL software.
For real-world use, external pull-ups should probably be added to the board's
input side, according to the directions of the encoder manufacturer.
Software Uploader for Pluto-P board [01164408418]
I just got a "Pluto-P" board from http://fpga4fun.com. I have
wanted to learn about FPGAs for some time, and my project ideas include making
a HAL module for the "flashy" digital oscilloscope. Later, I hope to
investigate hardware quadrature counting and/or step generation, a sort of
hobbyist-level alternative to Jon Elson's fine boards.
Update: The HAL driver for this board has been included in emc since version 2.2
More on the pluto-p (including FPGA pin numbers for the "JTAG" connector [01165081407]
There are a lot of questions about the pluto-p that are left
unanswered by the website and the "getting started" document to which you're
given a link to after you order. I've tried to answer them for myself,
and now I'm sharing those answers with my readers. The most important thing
I report here is the ACEX pin numbers for the JTAG connector.
Pluto_servo progress: It's running cradek's lathe! [01165199941]
Note, 6/2014: I do not recommend choosing pluto hardware for any new projects.
Chris is "successfully" running his lathe with a firmware. I used the
scare quotes because there have been a few problems, not all of which have been
resolved. But he reports that he was able to get better tuning, quieter moves,
and of course higher resolution without the /16 quadrature divider.
Do not buy: PCI-8255 [01165433819]
Pluto-Servo: EMC2 Servo Controller [01166412010]
Note, 6/2014: I do not recommend choosing pluto hardware for any new projects.
Pluto_servo is an emc2 driver
and associated firmware that allow the Pluto-P board to be used to control a
servo-based CNC machine. The Pluto-P is an inexpensive ($60)
FPGA board featuring the ACEX1K chip from Altera. Pluto_servo will be released
under the terms of the GNU General Public License version 2. The pluto_servo
system is suitable for control of a 4-axis CNC mill, a 3-axis mill with PWM
spindle control, a lathe with spindle encoder, etc.
Pluto_Servo has landed [01166994496]
pincompare.py: compare pin assignments from two Quartus II .qsf files [01184030881]
Recently when developing pluto_step I wanted to make sure I knew the relationship between its pinout
and that of pluto_servo. For that purpose, I wrote this script.
Files currently attached to this page:
pincompare.py1.4kB
The sump.org digital logic analyzer [01216696167]
(M)(L)Triggering on a
glitch (unexpected low time) on channel 5
Ever since Steve Padnos let me borrow his commercial logic analyzer at CNC
Workshop, I've been wishing I had one. Several years ago, fenn alerted me to
minila, which consists of GPL
hardware and software, but there don't seem to (presently) be any pre-built
boards available for purchase, and I don't relish soldering surface-mount
parts.
Then I stumbled on this FPGA Based Logic Analyzer. It's works on the still-available, $100 "S3BOARD", and
the FPGA firmware is GPL. (It also has somewhat more memory than minila, and
can also go up to 200MHz. On the other hand, it doesn't have a mode like
minila's "state analysis", and it transfers over slow RS232 serial instead of
EPP). I got the board today, and have some initial experiences to report.
High speed transfers for sump.org logic analyzer [01219362482]
… dual-channel 200Msps boards. keyword software embedded electronics…
Two-element capacitative touch sensor [01219970985]
(M)(L)Touching the sensor
(M)(L)The finger position readout
As a distraction from my real project -- building a lightbulb alarm clock for
the coming winter -- I've been playing with capacitative sensors. My first
effort was a wire taped to a piece of metal foil, and that worked OK. The
present iteration is a two-element touch sensor on a milled circuit board.
The sensors are each about 1" by .5" and are connected to the arduino by a
3-pin header. The components on the board are very simple -- two 1M resistors.
With a combination of software running on the microcontroller and in the PC,
the sensor is made into a virtual slider.
Xilprg: Zoltan Csizmadia's xilinx jtag programmer [01220321934]
I was thrilled to discover xilprg. Now I can test a new FPGA firmware by just
typing ":make flash" in vim: It successfully programs the xc3s200 fpga and
xcf02s platform flash on the digilentinc.com s3board using their parallel
cable, without requiring proprietary linux kernel modules. Apparently it also
works with the digilentinc USB cable.
at90usb162 gotcha: PC0 vs XTAL2 [01223089539]
Autoreprogram for DFU devices [01223124878]
Red Alert Box [01233419381]
(M)(L)Oh no, vmware crashed again
Every morning I get up too late, and then I think to myself "I'll just check
real quick to see that everything on my home network is running". 45 minutes
later I've browsed all the new lolcats and read a few personal trainwreck posts on askme, and now I'm running really late.
This is the kind of problem we can solve with technology!
Facepalm of the day [01236908015]
I wrote this code for my red alert box and tested it
using a shorter timeout than 60 seconds--it worked fine with a 10-second
timeout. Just today I realized that the 60s timeout wasn't working; even after
several minutes without communication, the globe was still showing green. The
cause of the bug is left to the reader, but a hint is available if you click
"more inside".
void loop()
{
unsigned long now = millis(); // time since boot in milliseconds
if(Serial.available()) {
level = Serial.read() % 4;
last_message = now;
} else if(now - last_message > 60*1000 && level < 3) {
// if no message received after 60*1000 ms, increase alert level
last_message = now; // well, sorta
level ++;
}
if(level != oldlevel) {
set_led_color(level);
oldlevel = level;
}
delay(50);
}
qq: quick & dirty terminal [01241487838]
at90usb162 single-sided board [01246277973]
I got an e-mail request for this board. You may use this eagle (4.x) library,
schematic, and board under the GNU GPL version 2 or later, or CC-BY-SA.
Towards my GPS LED Light Clock [01308773950]
A few years ago, I made a CCFL light clock using an Arduino with a custom
shield containing a transformer (to get a reliable 60Hz timebase) and a
triac (for solid-state switching of the lamp). By having a simple 7-day alarm calendar (set at compile time), the clock seldom requires interaction except for the reading lamp function.
However, the design has two main problems:
Side track: wwvb links [01308865139]
Chris asks what advantage GPS has over WWVB for my clock
project. I don't have a good answer for that (except that having enough
controls to select one of 4 mainland US timezones and whether to apply DST
is undesirable). However, this did prompt me to do some googling about WWVB.
I found some interesting links about generating WWVB signals at home.
wwvbpy: WWVB timecode generator in python [01311601289]
Helpful Scripts for CircuitPython & Real Time Clocks (RTCs) [01594912346]
I have used two different RTCs in the Feather form factor. One has
the PCF8523, and the other
has the DS3231. The former has an SD card slot while the latter has higher precision including a temperature-compensated crystal oscillator.
Calibrating the DS3231 and PCF8523 RTCs [01594923755]
The DS3231 and PCF8523 real time clocks (RTCs) can
both be calibrated by writing various register values. To follow the
calibration procedures you'll need a frequency counter you trust, with at least
6 digits to calibrate the PCF8523 and 7 digits to calibrate the DS3231. (It
also has to operate at the comparatively low frequency of 32.768kHz; a common
inexpensive 8-digit frequency counter such as the "SANJIAN STUDIO" has a
minimum of 100kHz so it's not usable for this purpose) I use an old HP 5315B
universal counter that has been calibrated against GPS time.
Minimal Time-Zone Handling for CircuitPython [01595021837]
For my clock, I want automatic handling of Daylight Saving Time. However,
CircuitPython doesn't build in any distinction between local and UTC time, and
fitting in the entire Python3 datetime module or an Olson time zone database is
simply not going to happen. What can we do that is simple enough to fit, but
can represent the reality of timezones where I live?
Quad CharliePlex FeatherWing hack [01595078470]
Adafruit makes these neat "CharlieWing" displays that allow you to control a 15x7 LED matrix using the
I2C bus. I2C uses two signal wires (called SDA and SCL, for Serial DAta and
Serial CLock), and can connect multiple devices as long as they have different
addresses.
I noticed that the bigger brother of this device, with a whopping 144 LEDs, could be configured for 4 different I2C addresses, while this one could only be configured for 2.
Or could it?
Si5351 Frequency Planner in Python [01597601150]
Some notes on the Si5351a [01597715716]
Pi Zero W USB Proxy [01599489100]
Use printf() in Arduino programs [01635628323]
… way to set up an embedded software project that's not to different from C(++)? I have…