Projects

This is my project-site... I plan to put up schematics, code, etc. Check out the documented projects to the left!

About my projects:

I've a tendency to get fixated on making things work in ways they shouldn't work; connecting things in ways they were never intended, pushing documented limits, finding undocumented ways to do things, etc. Along with a tendency to reinvent the wheel. I seem to have a lot of time and very little money. Further, I tend to look toward things that I can create en-masse despite seldom doing-so. So most projects are done with tiny budgets, looking for ways to make use of parts which aren't best-suited to work together, have crippling-bugs, etc. (How many iBooks with failed GPUs have ended up in my parts-bin?!) I also have a tendency to learn a tool and expect to use it and continue to learn to use it in better ways for quite some time. (E.G. I tire quickly of learning new coding-languages and new environments when I'm so familiar with and still learning new techniques in C... I don't particularly look forward to upgrading to a new computer any time soon; my development system--despite its age and increasing incompatibility--has been fine-tuned to my needs... etc. etc. etc.). Finally, I have a tendency to get ideas for things to try, prove the concept is possible, then let it fall to the side, never to be completed. MOST of the projects here (especially those documented) are completely functional and currently in-use. If I post incomplete ones, I'll explicitly state that.

Ironic example, as far as putting things together in ways never intended: The latest venture is how to connect an old (cracked) LCD to a computer; e.g. an old laptop display. Connecting an old laptop display is *easily* done, these days, via ebay and various <$50 converters (I got mine for $6!). It could be handy to have a second display, but that was barely my intent... The "Big Idea", in this case, is how to make use of an old *cracked* LCD display... can it be connected as a *really short* and, comparatively, *really wide* second monitor, for e.g. status indicators (CPU usage meter, clock, whatnot)? The irony, I guess, is that such a use requires (or seems to require) lower-level control of things like the monitor-timing... These $6 ebayable VGA/DVI->LVDS converters are *highly sophisticated.* The amount of circuitry, memory, timing subsystems, etc. required to make something like that plausible is astonishing. Yet, it's (it seems) *too* sophisticated for my needs. A system like this is downright amazingly sophisticated, yet what makes it so is its ability to adapt somewhat unpredictable (and likely not at all synchronized) input data into something somewhat standardized for output to a wide assortment of displays. I can't stress it enough, it's mind-boggling that something like this could be only $6. From what I can piece together, we're talking high-speed ADC's, dual-port high-speed large memories, sophisticated addressing/timing schemes for both input and output, etc. And all this exists in a single chip. Yet, the very thing that makes it so sophisticated, so compatible with the vast majority of end-users' needs, is exactly what makes it (apparently) completely incompatible with *my* goals. Sure, the cracked display could be run at its original resolution, half of it unusable, but part of my goal is to make full-use of the non-cracked part, while making the cracked-portion "invisible" to the computer (and thus, maybe it could actually be physically removed with a glass-cutter, and the system wouldn't attempt to move windows to the cracked-portion). The problem, as I'm envisioning it, is that these highly-sophisticated VGA->LVDS converters basically separate the timing-signals output by the computer from those sent to the display. A tremendous feat, but not at all helpful for the case I'm pursuing.

I put this here as an example of the sorts of pursuits that catch my attention. Maybe a decade ago I would have been pleased to find that it would only cost $6 to connect my old laptop display as a second display on my computer... but at the time, that wasn't possible... heck, at the time, adding any second-display to a Windows-based computer was new-technology (the vast-majority of VGA cards occupied the same address-range, so it was nearly impossible to put *two* in the same computer).

So, in an ironic twist of technological time-lines... it seems I've ventured into yet another pursuit that requires reinventing something that's already *quite sophisticated*. Can my idea be accomplished? I'm pretty certain it can, but likely not with these sophisticated $6 single-chip systems, unless I just happen to find a workaround in this particular design. (Though, I haven't given up hope, and will likely experiment with it a bit more, since it's so easily acquired). The somewhat ironically "more functional" implementation I envision would be *significantly* less-sophisticated; break out the DVI signals into raw binary pixel data (certainly such a deserializer exists), then feed that back into an LVDS-serializer... throw in a custom EDID to "cut-out" the unusable portion of the screen, and it should be done. All that circuitry, and a *huge* amount more, exist already in this $6 chip, but apparently I need to rewire its innards, or start from "scratch".

I dunno, it seems ironic to me. And is a perfect example of the sorts of projects I seem to pursue. The technology is there, just not usable in such ways.

Irony2.0 is that a decade ago I actually had every intention of adding a (swivellable?) second display to my laptop... a decade ago, I would've thought that to be danged-near the coolest thing possible. Now? eh, it'd be handy to have a second-display, equally-handy if it didn't add too much bulk to my system, didn't load the battery too much, was portable, etc... Is it doable, now? *absolutely.* Do I have much interest in doing it, now? Come on, man... that was a decade ago! Why I have an interest in this cracked-display thing boggles my mind... I don't even have a cracked-display. Something to do with making other people's trash another person's treasure, maybe.

Things you'll find here (eventually, maybe):

Most of my projects are driven by AVR (8-bit ATmega/ATtiny) microcontrollers... Yes, these are the ones used in Arduinos, but I haven't joined forces with the Arduiners; though I do hope some of my projects can be useful to them.

    • I mostly code in C (avr-gcc), a tiny bit of (inline) assembly.

    • My main system is a Mac PPC G4, so I'm a bit behind the times. Though it's close enough to *nix that I've done quite a few Bash scripts, etc.

    • Most of my code-writing and documentation is done in VIM. Yay for old tools which remain useful and improve over time!

    • I still use TTL 74x00-series chips quite a bit.

    • I'm not particularly good at analog-circuitry, but I make attempts from time-to-time.

    • I don't do much designing of PC software, besides scripts and interfaces for my electronics-projects. Though to that end, I've done a little with OpenGL, GIMP, and a few others...

I'm drawing a blank, so I'll just let my projects speak for themselves.

Projects that may eventually end up here:

(Some of these are relatively new, some quite old, and always being improved)

"Free-running" system, where data-pins are fed-back to command/address pins. Once loaded with data, the AVR can be removed from the system completely

Tons of tricks and hacks developed

    • Don't use "Auto-Refresh", instead just open and close the banks, allows for "free-running mode to run continuously

    • Push those limits: Refresh need only be done ~every ten seconds!

  • LVDS Single-to-dual converter Upgrade your laptop's LCD from single-pixel to dual-pixel!

  • Add an old Pen-Tablet's Wacom digitizer to your laptop! - Use bluetooth to send the signals, Hacked TabletMagic to interpret them, Stole power from the LCD backlight

  • Lego drawing-machine (HP-GL compatible!)

    • Hanging three-pen system -- two motors at the top for gravity-based triangulation pens selected and lifted/pushed via additional motors at the top, pulleys and cables (no electronics at the pen carriage)

    • 3-axis cable-driven machine (stationary motors) to mimic an old Pen-Plotter I'd lost years ago. Addition of third-axis to experiment with cable-pulley techniques

  • Dual-output power-supply: 2-22V; 1-output 4-44V, or +/-2-22V) 4A with built-in meter (and the woes of trying to do high-side current-monitoring)

  • Simple PC-Based Serial I/O logger

  • Record near CD-Quality audio onto an SD card with an AVR!

And some smaller ones:

And lots of reusable code: (See: _commonCode)

    • Bash scripts, bash scripts, bash scripts

    • Makefiles (AVR and otherwise)!

    • "Bithandling" everything from setbit, writebitsMasked, to getBitFromArray, and much more

    • Timing handlers: "deci-millisecond timer", "tcnter"...

    • Motion-Control -- motor speed-ramping and positioining DC with encoders, Steppers

    • Various Protocols, bit-banged and hardware-based, polled and interrupt-based SPI, UARTs, MIDI, i2c

    • Fading-"heartbeat" ala a Mac's "sleep" indicator.

    • Various modulation-schemes - "High Frequency Modulation", PWM, ...

    • Device interfaces to AVR...

      • Text-based LCDs

      • "Stowaway keyboard" (foldable, for PDAs)

      • PS2 touchpad

      • Motors

      • Solenoids

      • SecureDigital cards

      • SDRAM

      • Graphic LCDs with and without onboard processing/memory...

    • Standardized interface for On-Chip Peripheral interfaces

      • Serial (USI/USART)

      • Timer/Counters

      • PWM

      • ADCs

      • ...

Lots of C experiments and notes:

Too much to list...

Various other experiments, hacks, repair-jobs, and web-crawls:

    • Use that old DVD-burner's laser to cut things

    • Use that dead Plasma TV's Tuner for a "real" (tube) TV in the DigitalTV era and/or connect an old LCD instead.

    • A simple TTL controller for an LCD "mood-light" (and/or groovy relaxing random patterns)

    • Solder Circuits Without PCBs! - (Who needs 'em, when you can straighten and solder pins directly to each other? Even TQFP!)

    • XBox's DVD Drive Failed? It's still a pretty good movie-player. (Yeah, it can be fixed, but I don't have the moolah and didn't have a computer with SATA until just recently).

As part of my re/de-inventing of the wheel (Well, first, I probably misuse well-established terms quite a bit, being mostly self-taught, and self-retaught, so keep that in mind when reading below). It seems my current developmental-stage is somewhere between round-robin and preemptive multitasking. A lot can still be done with round-robin. I used to love interrupts, using them for dang-near everything, but sometimes they just can't be handled without messing with other timing-schemes... and my latest projects are somewhat timing-sensitive. So, I guess, most of my code of the past few years consists of a main while loop filled with "update_whatever()" function-calls, and update-functions filled with tiny-increments in state-machines. Maybe a step backwards in terms of the current state-of-the-computer-art (hyperthreading!) but still quite useful. Also, I think it's a step closer to the Arduino-crowd... no?

Similar "achievements" (or dechievements?) exist in other forms: e.g. my LCD controller project has gone from a frame-buffer, to sprites(?), to on-the-fly image-generation, to a row-buffer, to a "row-segment" buffer... making use of the same tiny memory to increase resolution from 32x32 pixels and 8 colors to 341x768 pixels and 48 colors (with only 512B of RAM!). Yeah, we're in an era with (nearing?) gigabyte video-ram, and I'm figuring out how to get away with 512 BYTES.

Anyways, I intend to document many of these projects here... please let me know if you're intrigued by any in particular, and I'll be that much more likely to do it sooner!

-------