tag:blogger.com,1999:blog-62225490718785535712024-03-13T10:02:23.529-07:00GRAVITRONICTomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.comBlogger40125tag:blogger.com,1999:blog-6222549071878553571.post-15019849318796381342012-05-04T05:31:00.000-07:002012-05-04T05:31:49.205-07:00Cure your hangover by preventing it with DrinkPacer for iOS<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVpOEJWrOMjCQ4TDPsEFQcZmB4vwXcSlk9LxxiRxTtqAzECIj-jLZR5ZmtRtvn-UvlZQPOP7BA_Pf4Jxs8FEcOdpq3SHTcyAVGYkJ5_y1KKIWiqZPt2lAxAqkClc3hiNUcfPMwSn4RhidF/s1600/IMG_0832.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVpOEJWrOMjCQ4TDPsEFQcZmB4vwXcSlk9LxxiRxTtqAzECIj-jLZR5ZmtRtvn-UvlZQPOP7BA_Pf4Jxs8FEcOdpq3SHTcyAVGYkJ5_y1KKIWiqZPt2lAxAqkClc3hiNUcfPMwSn4RhidF/s320/IMG_0832.PNG" width="213" /></a></div>
<br />
<br />
I made a new app called DrinkPacer and it's the solution to <a href="http://itunes.apple.com/us/app/drinkpacer/id522224281?ls=1&mt=8">cure hangovers</a> by preventing them the night before.<br />
<div>
<br /></div>Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-76063811018515105992012-02-10T06:23:00.000-08:002012-04-13T12:43:28.548-07:00Running Dropbox Referral ads got me banned from Adwords<b><span style="font-size: large;">NOTE: My blog has now moved. Please visit my new blog where I write about <a href="http://www.burnsmod.com/blog">audio apps, diy synthesizers, and CNCs</a>.</span></b><br />
<br />
This is a short tale of warning for those who are considering running their Dropbox affiliate link in Adwords ads to get the full 10 gigs of free space.<br />
<br />
I did this and it cost me my Adwords account.<br />
<br />
I had never used Adwords before so I opened a new account and used a $100 free credit coupon. I ran ads similar to those provided by the guides on how to do this. Nothing extremely spamming, just connecting with phrases like "free storage" and "free cloud backup" and ads with copy like "Download and get 2GB space free!". <br />
<br />
As an aside, if you decide to ignore my warning: Put the words "download app" in your ad. Before I did that I had more clicks but less referrals since Dropbox requires the app installed to count the referral. Telling the user they'd have to download the app reduced my click's but increased signups, saving me money.<br />
<br />
Anyways, all was well. I ended up with 10 gigs of space, and still had $10 left of Adwords credit.<br />
<br />
Until I received this email:<br />
<br />
"Dear AdWords Advertiser,<br />
<br />
Google maintains a high standard for the quality of our advertisements and our user experience. We have recently determined that your business maintains multiple AdWords accounts simultaneously serving ads for similar or related keywords and/or businesses.<br />
<br />
In addition, our records indicate that some or all of these accounts were opened using promotional coupons limited to one redemption per individual or business. As a result, we have suspended your AdWords accounts and would ask that you refrain from creating additional accounts using other AdWords promotional coupons that you may already possess or obtain in the future.<br />
<br />
Sincerely,<br />
The Google AdWords Team"<br />
<br />
Ouch. <br />
<br />
Reading the letter, it makes sense: From their perspective a bunch of new Adwords accounts are being created, using coupons, and all advertising the same website. Fraud! Ban them!<br />
<br />
And they did.<br />
<br />
<br />
<br />
<br />
Blatant Ad: Want to DJ on your Android device or HP TouchPad? Get DJPad:<br />
For Android: <a href="https://market.android.com/details?id=com.burnsmod.djpad&feature=search_result">Pro</a> | <a href="https://market.android.com/details?id=com.burnsmod.djpaddemo&feature=search_result">Lite</a><br />
For WebOS: <a href="https://developer.palm.com/appredirect/?packageid=com.tugbits.djpad">Pro</a> | <a href="https://developer.palm.com/appredirect/?packageid=com.tugbits.djpaddemo&applicationid=1000507">Lite</a><br />
<br />
<br />Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com1tag:blogger.com,1999:blog-6222549071878553571.post-36214652664271243862012-02-04T11:28:00.000-08:002012-04-13T12:44:59.903-07:00DJPad: Android DJ App Now Available On MarketAfter a night of beer & coding I'm proud to announce that DJPad has been ported Android and is available on the Android Market!<br />
<br />
DJPad is now an Android DJ application!<br />
<br />
<a href="https://market.android.com/details?id=com.burnsmod.djpad">DJPad Full on Android Market</a><br />
<br />
<a href="https://market.android.com/details?id=com.burnsmod.djpaddemo">DJPad Free on Android Market</a><br />
<br />
For more information check out my new software & eventually hardware company's website <a href="http://www.burnsmod.com/">Burns Modular</a>Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com1tag:blogger.com,1999:blog-6222549071878553571.post-35612998125436507492012-01-22T14:39:00.000-08:002012-01-22T14:39:28.757-08:00DJPad DJ app for HP TouchPad: Demo Video!With my morning coffee I made a little demo video of DJPad today.
<iframe width="560" height="315" src="http://www.youtube.com/embed/t6p1emSaRV4" frameborder="0" allowfullscreen></iframe><br /><br />
DJPad is available for sale right now: <a href="https://developer.palm.com/appredirect/?packageid=com.tugbits.djpad">DJPad on the WebOS App Store</a>Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-69723246947249611032012-01-08T14:35:00.000-08:002012-01-16T09:13:27.606-08:00DJPad: WebOS DJ App for HP TouchPad released!<span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;">I have just released a DJ app for the TouchPad. It's called DJPad and it's available right now in the App Store.</span><br />
<br />
<a href="https://developer.palm.com/appredirect/?packageid=com.tugbits.djpad">https://developer.palm.com/appredirect/?packageid=com.tugbits.djpad</a><br />
<br />
<span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;">It's a 100% PDK app and is very fast. It gets around 40ms latency on the TouchPad. I wrote my own DSP routines.</span><br />
<br />
<span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;">In it's current form it is rather barebones. As long as the app sees support I will add features.</span><br />
<br />
<span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;">Right now it features:</span><br />
<span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;">- plays 2 MP3s with +/-8% pitch control and simple (set, recall) cue points.</span><br />
<span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;">- mixer with 3 band EQ, crossfader, auto-normalization</span><br />
<span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;">- simple "Scratch" ability (drag finger over waveform)</span><br />
<br />
<span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;">I have a ton of plans for features including:</span><br />
<span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;">-split L/R output for cueing in one ear / master mix in the other, or for deck 1 out L and deck 2 out R for using an external mixer.</span><br />
<span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;">- better, configurable GUI with parallel waveforms and circular "scratch" discs.</span><br />
<span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;">- FX</span><br />
<span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;">- proper playlist support, with auto-mix functionality</span><br />
<br />
<span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;">Please download and rate, and most of all.. if you buy it and are unhappy please request features and I will see what I can do!</span>
<br />
<span style="font-family: verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; font-size: 13px;"><br /></span><br />
For feature requests please use the <a href="http://forums.webosnation.com/webos-development/309957-djpad-dj-application-touchpad.html#post3279065">forum thread on WebOS Nation</a>.<br />
<br />
<br />Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-5177312969353149402011-12-02T15:12:00.001-08:002012-04-13T12:45:40.121-07:00Decoding the Korg Monotribe Firmware Upgrade<b><span style="font-size: large;">NOTE: My blog has now moved. Please visit my new blog where I write about <a href="http://www.burnsmod.com/blog">audio apps, diy synthesizers, and CNCs</a>.</span></b><br />
<br />
<b><u>NOTE: This is still a work in progress. Keep watching the blog & github as we figure out more of the file encoding.</u></b><br />
<br />
Korg released a firmware update for the monotribe. It's an audio file that you play to the sync input of the monotribe. Interesting, yeah? Let's take a look at the content of the file and see how far we can get towards disassembly. This would be the first steps towards a custom firmware for the korg monotribe.<br />
<br />
The tutorial assumes you're running ubuntu linux, but any OS should be fine. Just use your preferred methods to get the utilities we're going to use.<br />
<br />
The firmware is delivered as an stereo m4a file. We want a binary object file.<br />
<br />
First, convert to a .wav with the free utility "faad":<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b><br /></b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>sudo apt-get install faad</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>faad -o monotribe-fw.wav MONOTRIBE_SYS_0201.m4a</b></span><br />
<br />
Before loading it into python lets also make a raw version of the file and just glance at the data to get an idea of what's up.<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>faad -f 2 -o monotribe-fw.raw MONOTRIBE_SYS_0201.m4a</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>hexdump -C monotribe-fw.raw | head -n 40</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>*</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>00000700 f7 ff f7 ff 18 00 18 00 e5 ff e5 ff 24 00 24 00 |............$.$.|</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>00000710 e5 ff e5 ff 1d 00 1d 00 de ff de ff 12 00 12 00 |................|</b></span><br />
<br />
First of all we see each sample is 2 bytes, and most likely little endian. Remember that there were 2 channels? The upload process would be very finicky if it depended on a different sample on the L and R channels, and if you look here, it definitely appears that the L and R samples are always the same.<br />
<br />
What I'm expecting is that the wave content will mostly look like a squarewave, and that we're sending a serial data stream of 1's and 0's which the firmware reconstitutes, checksums, and writes to the onboard flash.<br />
<br />
Looking at the wave in audacity, this appears correct:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAf061H8sgSZswEnhcFHi7I4MPcVmKERPRCkrIzCNDWKGS2-fZx0jGFNh_kzrJoqzPQbpX-d9EXy7y2ZS4B6yDkLscrkcOk55E2Y3sjbz4tTKvWIjkgNNrFtBBPf7cdbsYdNya4eaGzLWY/s1600/waveform.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAf061H8sgSZswEnhcFHi7I4MPcVmKERPRCkrIzCNDWKGS2-fZx0jGFNh_kzrJoqzPQbpX-d9EXy7y2ZS4B6yDkLscrkcOk55E2Y3sjbz4tTKvWIjkgNNrFtBBPf7cdbsYdNya4eaGzLWY/s320/waveform.png" width="320" /></a></div>
<br />
<br />
Let's remove one channel so we can process the samples easier in python.<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>sox monotribe_fw.wav -c 1 monotribe_fw1.wav mixer -l</b></span><br />
<br />
Time to fire up the python interpreter and play with some data! We will use the <a href="http://docs.python.org/library/wave.html">wave library</a> to decode the audio.<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b><br /></b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>python</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>Python 2.7 (r27:82500, Apr 14 2011, 00:58:22)</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>[GCC 4.3.3] on linux2</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>Type "help", "copyright", "credits" or "license" for more information.</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b><br /></b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>>>> import wave</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>>>> fw = wave.open("monotribe_fw1.wav", "r")</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b><br /></b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>>>> fw.getframerate()</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>44100</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>>>> fw.sampwidth()</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>2</b></span><br />
<br />
Yup! Looks like our data. Lets read the first few samples.<br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br /></span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">>>> fw.readframes(8)</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'</span></b><br />
<br />
After looking at the waveform in audacity it's clear that the wavefile is not a perfect squarewave with only values at -1 and +1. We need our data normalized over time. It looks like near the start of the file is a pure squarewave, probably to get the monotribe to sync to the playback rate.<br />
<br />
We are going to ingest this waveform in a similar way that the monotribe does. First, we'll categorize every sample as being either a 1, 0. Then we'll group the sampled 1's and 0's to decide what the next bit is of the firmware.<br />
<br />
Note that at this point we could be wrong and a 1 could be a 0 or vice versa. I'm just using that as a guess right now.<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b><br /></b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b># convert the variable data to either a 1 or a 0.</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>from struct import unpack</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>fw.rewind()</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>s = fw.readframes(1)</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>samplestr = ""</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>while not s == "":</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> val = unpack("h", s)[0]</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> if (val > 0):</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> samplestr += "1"</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> elif (val < -0):</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> samplestr += "0"</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> s = fw.readframes(1)</b></span><br />
<br />
Let's dump this to a file in case we screw it up:<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>f = open("samplestr", "w")</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>f.write(samplestr)</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>f.close()</b></span><br />
<br />
We have to do a bit of fuzzy processing to turn (batch of 1 samples) into a single 1, and (batch of 0 samples) into a single 0. But how long are the batches that represent a single bit? I'm a BASH man for string processing, so into the shell we go.<br />
<br />
Let's break the file into separate lines of sequential 1's and 0's:<br />
<br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">cat samplestr | sed 's/10/1\n0/g' | sed 's/01/0\n1/g' > lines</span></b><br />
<br />
Now let's build a histogram of sequence lengths:<br />
<br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">cat lines | sort | uniq -c</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> 21 0</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> 8 00</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> 2 000</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> 3 0000</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> 170376 00000</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> 1 0000000</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> 160543 0000000000</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> 20 1</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> 8 11</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> 2 111</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> 4 1111</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> 170375 11111</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> 1 111111</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> 1 1111111</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"> 160543 1111111111</span></b><br />
<br />
Now before we go any farther lets look at the data.<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>*snip...*</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>11111</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>00000</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>1111111111</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>0000000000</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>11111</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>00000</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>1111111111</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>0000000000</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>1111111111</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>0000000000</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>1111111111</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>0000000000</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>1111111111</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>0000000000</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>*snip...*</b></span><br />
<br />
Interesting. Looks like there's two signals - a "short square wave" that lasts 10 samples, and a "long square wave" that lasts 20 samples. Maybe a short wave is a 1, and a long wave is a 0? Or vice-versa? First lets assume everything else is garbage and all we want is a sequence of numbers that denotes the order of "long wave, long wave, short wave, long wave"... etc. We can get rid of all the 0's since they're duplicate data for indicating if the bit is set, so filter down to just the 1 lines.<br />
<br />
<b>cat lines | grep '^11111$\|^1111111111$' > bitlines</b><br />
<b>cat bitlines | sed 's/^11111$/0/' | sed 's/^1111111111$/1/' > bits</b><br />
<br />
Now 'bits' is a file with either a 1 or a 0 on every line. Let's try converting that to a binary file and see if it looks recognizable.<br />
<br />
in Python:<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>from struct import pack</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>f = open("bits", "r")</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>finished = ""</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>i = 0</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>f.seek(0)</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>str=""</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>for b in f.readlines():</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> if b[0] == "0":</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> str = "0" + str</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> elif b[0] == "1":</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> str = "1" + str</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> i+=1</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> if i == 8:</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> finished += pack("B", int(str, 2))</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> i = 0</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b> str = ""</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b><br /></b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>f = open("firmware", "w")</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>f.write(finished)</b></span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><b>f.close()</b></span><br />
<br />
Let's look at the data now...<br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">*</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">000004e0 00 01 6a 2d 0d b5 1d fb 35 65 35 d5 5d 4d fb 9d |..j-....5e5.]M..|</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">000004f0 6d cd 5d 00 1b e4 ff ff 00 bf 7f ff ff ff ff ff |m.].............|</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">00000500 ff ff ff e1 00 00 00 00 00 00 00 00 00 00 00 00 |................|</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">00000510 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">*</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">000006f0 00 00 00 00 00 00 00 00 b5 7f fd ff fd a7 bf ff |................|</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">00000700 ff 89 bf ff ff 89 bf ff ff 89 bf ff ff 89 bf ff |................|</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">00000710 ff 89 bf ff ff bf ff ff ff ff ff ff ff ff ff ff |................|</span></b><br />
<br />
I'm hoping that there's a nice header at the start that says KORG or similar. This does not have it. What if we were not properly aligned on a byte? What if what we think is a 0, is a 1? What if we're using the wrong bit-endianness?<br />
<br />
To speed up the process I wrote a quick python script that tries all of the values for the issues above, and then ran the output binaries through strings. And did it work??? YES! We now have the firmware file!<br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br /></span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">strings 13.bin | grep KORG</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">KORG SYSTEM FILE</span></b><br />
<b><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">KORG</span></b><br />
<br />
Download and run <a href="https://github.com/gravitronic/monotribe/blob/master/decoder.py">this python script</a> in the same directory as that "bits" file and it'll output the firmware<br />
<br />
<b>UPDATE: there were alignment issues with that script. nitro2k1 uploaded <a href="http://blog.gg8.se/wordpress/2011/12/04/korg-monotribe-firmware-20-analysis/">a new script to his blog that fixes the alignment issues</a></b><br />
<br />
happy hacking :D<br />
<div>
<br /></div>Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com8tag:blogger.com,1999:blog-6222549071878553571.post-42520523169367058142011-11-24T17:39:00.001-08:002012-04-13T12:46:06.670-07:00MAME with Ubuntu 11.10 in a JAMMA Arcade Cabinet<b><span style="font-size: large;">NOTE: My blog has now moved. Please visit my new blog where I write about <a href="http://www.burnsmod.com/blog">audio apps, diy synthesizers, and CNCs</a>.</span></b><br />
<b><span style="font-size: large;"><br /></span></b><br />
<b>NOTE: After trying to get MAME running with Ubuntu 11.10 on an arcade monitor I actually ran into a ton of trouble with some X11 crashes that would not go away. Since then, I've found <a href="http://arcade.groovy.org/">Groovy Arcade Linux</a> which is made for linux in arcade cabinets. I will be writing a review/tutorial for installing Groovy soon as I move to it as a possible solution!</b><br />
<b><br /></b><br />
<b>Like this post? <a href="http://twitter.com/gravitronic">Consider following me on twitter</a>!</b><br />
<br />
This blog post describes the work necessary to get a PC running Ubuntu 11.10 running MAME and various other emulators inside a real JAMMA arcade cabinet with a real monitor.<br />
<br />
For the interface between the PC and the arcade cabinet I chose a <a href="http://www.ultimarc.com/jpac.html">J-PAC</a> adapter. On the computer side it plugs accepts a VGA and PS/2 connection, and it plugs directly into the JAMMA connector inside the arcade cabinet. I considered manually hacking the buttons of an xbox controller to the arcade buttons, but for $100 including shipping, this also includes an amplifier for the video signal which I did not want to build myself.<br />
<br />
<b><u>1. Parts needed</u></b><br />
<br />
<ul>
<li>JAMMA arcade cabinet. The monitor and arcade controls should work and be connected to the JAMMA standard connector.</li>
<li>Computer. The faster, the better, if you want to emulate newer games. Needs video card, sound card, some sort of network card. I chose to install a wifi PCI adapter so that I could SSH/FTP to the computer while it's inside the arcade cabinet.</li>
<li>J-PAC, as mentioned previously</li>
<li>Another computer, networked to the MAME computer</li>
<li>MAME ROMs. Can't help ya.</li>
</ul>
<div>
<a name='more'></a></div>
<div>
<br /></div>
<div>
<div>
<b><u>2. Prepare Arcade Cabinet</u></b></div>
<div>
<b><u><br /></u></b></div>
<div>
Following the <a href="http://www.ultimarc.com/jpac2.html">JPAC</a> installation page, remove the game power supply (not the monitor transformer!) and game board from the arcade cabinet. Be careful! There are voltages present in the cabinet that could kill you.</div>
</div>
<div>
<br /></div>
<div>
If your cabinet has 6 buttons per player, wire buttons 4/5/6 to the J-PAC adapter screw terminals. Daisy chain a ground connection to all the buttons and wire it to the GND connection on the J-PAC.</div>
<div>
<br /></div>
<div>
Find space in the cabinet to fit your computer. I had a shelf in mine for the original game board. I lowered it 3 inches in order to fit the case and not have to resort to putting it on the ground with the monitor transformer.</div>
<div>
<br /></div>
<div>
<b><u>3. General computer installation</u></b></div>
<div>
<b><u><br /></u></b></div>
<div>
Until the last step, we're going to leave the computer out of the arcade cabinet. Hook it up to a normal PC monitor.</div>
<div>
<ul>
<li>Install Ubuntu 11.10. I downloaded and burnt the ISO to CD. I made my user account "mame". It doesn't matter if you choose "auto-login" here because we're actually going to modify things later.</li>
</ul>
<ul>
<li>Click on the top-left and in the search bar type "terminal" and hit enter. Then enter the following command (It's long)</li>
</ul>
</div>
<div>
<b>sudo apt-get install ssh samba ftpd fluxbox</b></div>
<div>
<b><br /></b></div>
<div>
You may need to configure samba by editing /etc/samba/smb.conf to enable home directory accounts.</div>
<div>
<br /></div>
<div>
We need to enable auto-logon, but we're also going to boot into the lighter-weight fluxbox instead of the Ubuntu Unity interface. Edit the file /etc/lightdm/lightdm.conf to contain:</div>
<div>
<br /></div>
<div>
<div>
<b>[SeatDefaults]</b></div>
<div>
<b>autologin-guest=false</b></div>
<div>
<b>autologin-user=mame</b></div>
<div>
<b>autologin-user-timeout=0</b></div>
<div>
<b>autologin-session=lightdm-autologin</b></div>
<div>
<b>greeter-session=unity-greeter</b></div>
<div>
<b>user-session=fluxbox</b></div>
</div>
<div>
<br /></div>
<div>
This will boot fluxbox directly, without prompting for a user/password. Fluxbox takes up less resources and will load quicker than the Ubuntu Unity interface. I also know it better so it's easier for me to script it to load the MAME launcher.</div>
<div>
<br /></div>
<div>
<b>3. MAME configuration</b></div>
<div>
<b><br /></b></div>
<div>
First, install MAME:</div>
<div>
<b><br /></b></div>
<div>
<b>sudo apt-get install mame</b></div>
<div>
<b><br /></b></div>
<div>
The default Ubuntu MAME install tries to load a config from ~/.mame/, but we don't want to hide our MAME directory so do the following:</div>
<div>
<b><br /></b></div>
<div>
<b>mkdir -p ~/emulators/mame</b></div>
<div>
<b>ln -s ~/emulators/mame ~/.mame</b></div>
<div>
<b><br /></b></div>
<div>
Put your ROMs into ~/emulators/mame/roms and make sure you can run them by with:</div>
<div>
<b><br /></b></div>
<div>
<b>mame <rom.zip></b></div>
<div>
<b><br /></b></div>
<div>
Download the MAME history, category list, controls.ini, etc.. and place them in ~/emulators/mame.</div>
<div>
<br /></div>
<div>
<b>4. Wah!Cade configuration</b></div>
<div>
<b><br /></b></div>
<div>
Follow <a href="http://krisarnold.com/2010/11/02/ubuntu-arcade-machine-part-1-wahcade-and-mame/">this tutorial</a> and the <a href="http://www.anti-particle.com/wahcade_quick.shtml">Wah!Cade Quick Start Guide</a> to configure Wah!Cade.</div>
<div>
<br /></div>
<div>
To get it to auto-start on boot, edit ~/.fluxbox/startup and add the line:</div>
<div>
<b><br /></b></div>
<div>
<b>/usr/local/bin/wahcade -f &</b></div>
<div>
<b><br /></b></div>
<div>
before the "<b>exec fluxbox</b>" line.</div>
<div>
<br /></div>
<div>
Reboot and make sure that wahcade starts without any needed input and goes to the game list. If you can reach the cord, plug the J-PAC just into the PS/2 (or USB) connection and make sure it is configured properly to run wahcade.</div>
<div>
<br /></div>
<div>
<b>5. Reconfigure X11 for Arcade Monitor</b></div>
<div>
<br /></div>
<div>
This part was the toughest for me. Usually people use windows and the soft15 application to force their video card to output the arcade cabinet-friendly 15kHz signal. I tried a bunch of solutions to this and what I came up with was creating a file /home/mame/.xprofile that will use xrandr to add, then set, the perfect modeline for the arcade monitor. Be warned! After you reboot this will run and your normal monitor will likely not be able to display the signal. Be sure that you can SSH into the arcade machine from your other computer before adding the .xprofile file.</div>
<div>
<br /></div>
<div>
<div>
<b>#!/bin/sh</b></div>
<div>
<b><br /></b></div>
<div>
<b>xrandr --newmode "mame" 12.192000 640 656 720 800 240 244 248 254 -HSync +VSync</b></div>
<div>
<b>xrandr --addmode VGA-1 "mame"</b></div>
<div>
<b>xrandr --output VGA-1 --mode mame</b></div>
</div>
<div>
<br /></div>
<div>
Shutdown and attach the PC into the arcade cabinet. Attach the J-PAC to both the PS/2 or USB, and the SVGA connector. Boot up and it should be working!</div>
<div>
<br /></div>
<div>
<br /></div>Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-55238441043266706242011-11-14T16:32:00.001-08:002012-04-13T12:46:28.576-07:00Making a Modular CNC Mill Spindle (MyDIYCNC Build log #4)<b><span style="font-size: large;">NOTE: My blog has now moved. Please visit my new blog where I write about <a href="http://www.burnsmod.com/blog">audio apps, diy synthesizers, and CNCs</a>.</span></b><br />
<br />
Like this post? Consider <a href="http://www.twitter.com/gravitronic">following me on twitter</a>!<br />
<br />
When I left off in my ongoing <a href="http://gravitronic.blogspot.com/2011/11/my-diy-cnc-build-log-3-build-problems-g.html">My DIY CNC build log</a> I had a few problems remaining. The spindle was not up to the task of really any quality milling, and some axis still had issues with not being parallel. After some thought for the future I decided to divide and conquer the issues. I dealt with the parallel axis issues on their own (mostly just taking apart, realigning, and putting back together).<br />
<br />
For the spindle, though, I went back to the drawing board.<br />
<b></b><br />
<a name='more'></a><b><br /></b><br />
<b>Requirements</b><br />
My spindle carriage must:
<br />
<ul>
<li>make it easy debug problems</li>
<li>make it easy to trial solutions</li>
<li>simplify changing spindles in the future (think laser etching, or 3d printing)</li>
<li>still be rigid enough to create quality work.</li>
</ul>
<div>
I decided to take the existing spindle mounts off the z axis carriage, and create a modular carriage adapter plate that allows for switching spindles with little effort. The rest of the post is a guide to modularize my DIY CNC spindle to support easily switching spindles between milling, 3d printing, laser cutting, or any other tool.
<br />
For this project you will need:
<br />
<ul>
<li>z axis carriage removed from CNC</li>
<li>3x 1" bolts, with matching wingnuts, and washers.</li>
<li>small countersunk screws for attaching new spindle mounts to the spindle plate.</li>
</ul>
<table>
<tbody>
<tr><td><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="http://img189.imageshack.us/img189/6880/imageaxy.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="320" src="http://img189.imageshack.us/img189/6880/imageaxy.jpg" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">DIY CNC Z axis carriage, spindle removed</td></tr>
</tbody></table>
</td><td><div>
<b>Step 1: Flatten existing carriage.</b></div>
<div>
<b><br /></b></div>
<div>
Remove the z axis carriage from the CNC and remove the attached spindle attachments so you have just a flat plate.</div>
</td></tr>
<tr>
<td><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="http://img42.imageshack.us/img42/8987/imagezle.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="320" src="http://img42.imageshack.us/img42/8987/imagezle.jpg" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Spindle plate template about to be cut</td></tr>
</tbody></table>
</td><td><div>
<b>Step 2: Create mate plate</b></div>
<div>
<br /></div>
<div>
Create a second spindle plate that will "mate" with the spindle carriage. This plate will mount the actual spindle, and be held onto the carriage with 3 bolts.</div>
<div>
<br /></div>
<div>
Note the corner cut out to avoid the leadscrew mount on the carriage (visible in the photo above).</div>
<div>
<br /></div>
<div>
I'm using 1/4 inch MDF from home depot.</div>
</td></tr>
<tr><td><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="http://img856.imageshack.us/img856/9310/imagelyl.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="240" src="http://img856.imageshack.us/img856/9310/imagelyl.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Spindle plate sitting on carriage</td></tr>
</tbody></table>
</td><td><div>
<b>Step 3: Align spindle plate</b></div>
<div>
<br /></div>
<div>
Align the new cut out spindle plate with the carriage and tape into place.</div>
</td></tr>
<tr><td><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="http://img59.imageshack.us/img59/7944/imagevmgo.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="320" src="http://img59.imageshack.us/img59/7944/imagevmgo.jpg" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">(tape removed in photo post-drilling)</td></tr>
</tbody></table>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="http://img507.imageshack.us/img507/1685/imagekn.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="320" src="http://img507.imageshack.us/img507/1685/imagekn.jpg" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Another picture of the spindle plate + carriage</td></tr>
</tbody></table>
</td><td><div>
<b>Step 4: Drill mating holes</b></div>
<div>
<b><br /></b></div>
<div>
<br /></div>
<div>
With the spindle plate taped to the carriage, drill holes the size of your mounting bolts. Be<b> very careful </b>to choose spots leaving enough room for the spindle to be mounted. </div>
<div>
<br /></div>
<div>
Also ensure the bolt heads can be accessed with a wrench to hold in place while tightening the spindle plate with the wingnuts.</div>
<div>
<br /></div>
<div>
Also be sure to plan to leave enough space near the mounting bolts on the spindle plate from to have room for the wing nuts that will hold the plate to the carriage.</div>
</td></tr>
<tr><td><div class="separator" style="clear: both; text-align: center;">
<a href="http://img841.imageshack.us/img841/284/imageftk.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="http://img841.imageshack.us/img841/284/imageftk.jpg" width="240" /></a></div>
</td><td><div>
<b>Step 5: Deal with fallout</b>.</div>
<div>
<br /></div>
<div>
This picture is a view from the bottom of the z axis carriage. The problem it's showing is that the plate mounting bolts hit the edge of the z axis parallel bars mount. This limits z axis travel by about an inch, so file down the parallel bars mount until the bolts can pass smoothly past without causing problems.</div>
</td></tr>
<tr><td><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="http://img51.imageshack.us/img51/9703/imageptn.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="320" src="http://img51.imageshack.us/img51/9703/imageptn.jpg" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">2 spindle mounts, taped, and match drilled</td></tr>
</tbody></table>
</td><td><div>
<b>Step 6: Create new spindle mounts</b></div>
<div>
<br /></div>
<div>
Measure the diameter of your spindle tool and cut two matching mount pieces out of the MDF.</div>
<div>
<br /></div>
<div>
Align the spindle mount edges that will attach to the mounting plate and tape them together. Drill a hole large enough to fit your spindle through both. This should create a nicely aligned "matching drilled" hole in both spindle mounts.</div>
</td></tr>
<tr><td><div class="separator" style="clear: both; text-align: center;">
<a href="http://img403.imageshack.us/img403/3185/imagemyo.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="http://img403.imageshack.us/img403/3185/imagemyo.jpg" width="240" /></a></div>
</td><td><div>
<b>Step 7: Insert spindle, attach mounts to carriage</b></div>
<div>
<br /></div>
<div>
Last step of spindle plate assembly is to first tightly insert the spindle into the mounts, then align the mounts on the spindle plate. </div>
<div>
<br /></div>
<div>
Pre-drill through the back of the spindle plate into the mounts. The MDF may split so be sure to align the holes directly into the center of the mounting plate, and be sure to pre-drill holes big enough that the mounting screws will fit without expanding the holes much. My MDF split a bit but is still holding strong, so I added a layer of tape and moved on.</div>
<div>
<br /></div>
<div>
Countersink the mounting screw holes before inserting the screws so that the back of the spindle plate can be flush with the carriage.</div>
</td></tr>
<tr><td><div>
(For some reason I got excited and failed to get a picture of this step)</div>
</td><td><b>Step 8: Put it all together</b>
<br />
<div>
<br /></div>
<div>
Insert the spindle plate mounting bolts into the holes you drilled in step 4, then reinstall the z axis carriage into the CNC. Insert the spindle plate into the mounting bolts and pull it flush to the carriage. Tighten the plate to the carriage using the wingnuts on the bolts. You now have a modular spindle attachment for your CNC!</div>
</td></tr>
</tbody></table>
</div>Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com1tag:blogger.com,1999:blog-6222549071878553571.post-24633716309389126352011-11-04T09:54:00.000-07:002011-11-14T16:42:21.000-08:00Need Roland Parts?While in the process of fixing a friend's TR-707 I found out something I think is rather amazing for a company today. Roland still has parts in stock for products as old as the 707! I was able to order a new DC socket from them directly for 2$ + 8$ shipping!<br />
<br />
I did not see an equivalent on the US site, but if you're in Canada fill out a part request form <a href="http://www.roland.ca/default.asp?c=245">here</a> and they will reply promptly with the parts office phone number and the part number you need to provide. It may be a good idea to get the part number from the service manual available <a href="http://www.synthmanuals.com/manuals/roland/tr-707/service_manual/">here on synthmanuals</a>.<br />
<br />
While I sincerely appreciate the existence of the alternative (<a href="http://www.vintageplanet.nl/">http://www.vintageplanet.nl</a>) since they have rare parts that Roland no longer has in stock, needing just the $2 part I was very happy to be able to get it from them directly. <br />
<br />
Since they're shipping from Vancouver I will only have to wait about a week. This is much better than the minimum 15 euro purchase + shipping (and waiting) from Europe!Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com1tag:blogger.com,1999:blog-6222549071878553571.post-50648447154321674892011-11-02T14:02:00.000-07:002012-04-13T12:46:46.529-07:00My DIY CNC Build Log #3: Build Problems, & G-Code tutorial<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: left;">
<b style="text-align: -webkit-auto;"><span style="font-size: large;">NOTE: My blog has now moved. Please visit my new blog where I write about <a href="http://www.burnsmod.com/blog">audio apps, diy synthesizers, and CNCs</a>.</span></b></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv1H0-6n-TC9EB3JW1USVx9kHdAIuvW4i5X5nw1adTub2yU3-G8elyJa3jJWeg41iuHPAJkbE7VkRQJSGB23ZDr3vs7M2h6aSj-dymuXpQD-FVcqlV0CyXI_Y8Jnyy4_8a0uen-D5AfAUl/s1600/square.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv1H0-6n-TC9EB3JW1USVx9kHdAIuvW4i5X5nw1adTub2yU3-G8elyJa3jJWeg41iuHPAJkbE7VkRQJSGB23ZDr3vs7M2h6aSj-dymuXpQD-FVcqlV0CyXI_Y8Jnyy4_8a0uen-D5AfAUl/s400/square.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div style="text-align: -webkit-auto;">
<b><u>Let's learn some G-Code.</u></b></div>
<div style="text-align: -webkit-auto;">
<b><u><br /></u></b></div>
<div style="text-align: -webkit-auto;">
I got tired holding down the manual control buttons in KCad to move my CNC about, so I was pleased to learn the G01 G-code command. In KCad you have a dropdown menu of 10 commands you can edit as you please to set up homing or re-tool commands.</div>
<div style="text-align: -webkit-auto;">
<b><u><br /></u></b></div>
<div style="text-align: -webkit-auto;">
As I do not want to re-invent the documentation for the wheel, I looked for premade g-code cheat sheets. Naturally there is a <a href="http://www.cnczone.com/forums/g-code_programing/8183-g_code_cheat_sheet.html">CNCZone thread for G-code cheat sheets.</a> From there I found <a href="http://www.cnczone.com/forums/attachment.php?attachmentid=5530&d=1109095575">This G & M Code booklet</a> to be the most complete as it contains examples for most of the commands.<br />
<br /></div>
Click to read more about more common DIY CNC build problems and solutions.<br />
<br />
<br />
<a name='more'></a><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<b><u>Build Problems</u></b></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u><br /></u></b></div>
<div class="separator" style="clear: both; text-align: left;">
At the end of Part 2 of my DIY CNC assembly log I ended up unhappy with my CNC's ability to cut a level table in a piece of plywood. I bought a piece of MDF with hope that it would do better. It wasn't much better at all. The table got deeper in corners, had bit marks of different depths, and took over 5 hours to get halfway.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I found:</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ul>
<li>My Z axis leadscrew was mounted offset on the z spindle carriage. This resulted in the leadscrew giving up for a lot of the Z range instead of operating properly. Removing the leadscrew mount and reinstalling it on the spindle carriage so that the leadscrew remains parallel off the z axis stepper motor, and my z axis now moves much smoother.</li>
<li>The spindle "wobble" and variance was moreso because one of my parallel bars came out of it's pocket on my y axis! This reduced the rigidity of the X axis quite a bit, which caused the spindle to move depending it being "pushed" or "pulled" by the y axis. it'd cut deeper. Not what you want for a level table bed :(. Thankfully I reinserted this rod and it remained aligned well enough for the y axis to travel smoothly.</li>
<li>My bit was not big enough for the stepover value I set in CAMBAM. This resulted in too few passes so I got a toothed groove instead of a flat surface. Instead of re-rendering more g-code passes I found a thicker bit. With my reinforced axis I think I can just use the bigger bit with the existing g-code and there will be enough passes for a level bed to result. If not, well, I got more MDF :)</li>
<li>The default My DIY CNC spindle is a piece of crap. I'm trying a weird solution tonight, mounting a "snake" extender on my Mastercraft rotary tool and sitting the tool itself beside the CNC. It's ugly but if it works I don't care. This means I have to build a new spindle carriage so I'm looking at a way to make this modular so I can swap carriages.</li>
</ul>Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-18750297276419112412011-10-18T09:41:00.001-07:002012-04-13T12:47:08.959-07:00My DIY CNC Build Log Part 2, Software, Tuning<b><span style="font-size: large;">NOTE: My blog has now moved. Please visit my new blog where I write about <a href="http://www.burnsmod.com/blog">audio apps, diy synthesizers, and CNCs</a>.</span></b><br />
<br />
This is Part 2 of the build log for my MyDIYCNC kit. I took part in the Kickstarter for around $400 and received a complete 3axis CNC kit. I plan to use it for modular synth milled circuit boards and aluminum frontpanels. You can read Part 1 <a href="http://gravitronic.blogspot.com/2011/09/mydiycnc-build-log-part-1-assembly.html">here</a>.<br />
<br />
I finished the electronics without a hitch. For now I'm using KCam in Windows. The software is usable and relatively simple so while it's good to start with, I plan on switching to ECM2 in Linux before long. Using KCam with Windows 7 if the parallel port has problems changing bits and you see no CNC motion, close the program and run as administrator. It's now running as a new user so you have to re-set up your port and table settings.<br />
<br />
Click to read more about Inkscape->DXF importing to KCam, and using CAMBAM to generate a flat table bed.<br />
<br />
<br />
<a name='more'></a><br />
<br />
<br />
I found that on my old Athlon desktop, the computer really needs everything else closed to give good CNC performance. Otherwise when the CPU is active doing other things, you will hear the motors pause temporarily. That's because the parallel port is actively pulsing every stepper step, instead of a more hardware based solution where the computer sends entire motion commands to a microcontroller. That's ok, just don't surf & mill.<br />
<br />
KCad supports DXF R12 importing. The R12 is important as Inkscape's built in DXF export saves R13 which is incompatible. The solution is to get <a href="http://tim.cexx.org/?p=590">Better Better DXF Output</a> plugin for Inkscape which will save in R12. I had some problems getting importing this DXF however so I reverted to the older <a href="http://www.bobcookdev.com/inkscape/inkscape-dxf.html">Better DXF Output</a> plugin which worked for my simple 1-layer use cases. This worked on my CNC but I found that my table is not a perfectly level plane. This resulted in a wide variance in milling depth of my "Hello World" test.<br />
<br />
The solution to that problem is to mill a level table bed. I tried to do this with a piece of plywood and ran into many frustrations. The first was that DXF between Inkscape and KCad doesn't seem to support milling filled shapes. I guess the outlines are saved to DXF and kcad won't invent toolpaths for filling. I needed to move to <a href="http://www.cambam.info/">CAM BAM</a> to generate the machining code for a level bed.<br />
<br />
Getting CAM BAM to generate my milling code took a long time. It kept printing a message in the bottom saying "Step over must be positive and nonzero". But I had it set to 0.4! After reading more I found out that stepover is a fraction of the tool's width that will dictate how much overlap there is between consecutive passes. While I had the Stepover parameter set to 0.4, I had to also set tool widths and "final stepover" values so the code generator could convert from the fraction to an actual distance in fractions of an inch. Finally, I had my gcode!<br />
<br />
Time to mill out the bed :(. Firstly, this operation really highlights how this CNC is wayyyy too slow to do 3d object milling. It is going to take a few hours probably to mill the bed, which would be a equivalent to the first pass of probably 20 passes to mill away layers on a 3d shape. The other solution is to repair my CNC, fix the parallel bars, and fix the problems that make it need to go too slow, but honestly.. I'd be better off making my own CNC design from scratch at this point. Hopefully this one works well enough to do circuit boards and halftone images.<br />
<br />
Secondly it highlighted how inaccurate the default spindle is on the MyDIYCNC kit. When the drill bit contacts the wood, it vibrates and shakes within a distance about twice it's tool diameter. Other people on the MyDIYCNC forums have switched to a bigger dremel tool with good results. I want to do that but I've lost all the collet pieces on my Mastercraft dremel-style tool, so for now I'm stuck on the default dremel.<br />
<br />
I'm thinking the plywood is causing problems. I'm switching to MDF tonight to give the table bed another shot. Here's hoping ><.Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-73084447131254348032011-10-14T09:23:00.000-07:002011-11-14T16:43:20.760-08:00KORG iKaossilator Mini-Review / First ImpressionsLike this review? Consider <a href="http://www.twitter.com/gravitronic">following me on Twitter</a> for more!<br />
<br />
I bought this and have played with it for 20 minutes this morning.<br />
<br />
I have yet to read the manual so I might be missing stuff. I kind of like my first few days to have accidental discoveries before reading the manual.<br />
<br />
<b><u> Pros: </u></b><br />
- my new favorite sketchpad!<br />
- I love the ability to experiment with new scales and keys. For me this app's biggest use will be learning new scales and then using them in other songmaking. A scale-limited x/y pad is so freeing for new ideas.<br />
- the pattern mapper looks like a great way to work live. Too many iOS apps don't have a nice live interface for progressing through your loops. This is totally usable.
- this, monotribe, and kaoss pad would be a great fun portable set up.<br />
<br />
<b><u> Cons: </u></b><br />
- While WIST is cool, now I need 2 ipods just to sync my monotribe. Couldn't we split the stereo out? Or toggle a sync clock via a dongle pin?<br />
- all parts forced to same key choice.<br />
- no per-part volume control (just mute/solo)?<br />
- H<b>OW CAN I TURN OFF THE TEMPO SYNCED DELAY</b> - I _HATE_ this about a lot of Korg stuff, they shove it down your throat.<br />
- I wish I could import samples and have a simple sample playback machine.<br />
- I wish there was a "tweak" knob per part that would increase distortion or cutoff or something without having to replay the part on the x/y pad and probably mess up the pitch/timing of the loop.<br />
- some tiny bugs, like when touching the "loop length" very often it doesn't do anything. Maybe it's detecting a drag instead of a touch?<br />
<br />
<b><u>Wishlist:</u></b><br />
- a way to split the headphone out to be "audio output" on the L and "monotribe sync" on the R, or a dongle that could output monotribe clock.<br />
- A way to turn off the damn reverb/delay!<br />
- sample/loop import/export. It's a long shot but it'd be awesome.<br />
- is WIST an open source protocol? It'd be great for 3rd party apps to support WIST, like beatmaker. Then I wouldn't need sample importing, just another ipod.<br />
<br />
<b><u> Tips:</u></b><br />
- in special FX there are some drum parts so you can make your own beats with 1 or 2 tracks of this played rhythmically<br />
- a lot of the settings, if you touch and let go you will get a window to select a new patch, but if you drag right/left you can select a new patch or setting without leaving the main window.Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-42439448804814265812011-10-02T19:19:00.001-07:002011-11-14T16:43:38.309-08:00Music - 707, tama techstar, monotribe, boss pedals - Live improv techno<object height="81" width="100%"> <param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F24667999">
</param>
<param name="allowscriptaccess" value="always">
</param>
<embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F24667999" type="application/x-shockwave-flash" width="100%"></embed> </object> <a href="http://soundcloud.com/gravitronic/live-improvised">Live, improvised</a> by <a href="http://soundcloud.com/gravitronic">Gravitronic</a>Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-83353218624222732352011-09-29T10:03:00.000-07:002011-11-14T16:45:12.865-08:00My DIY CNC Build Log: Part 1, AssemblyThis is Part 1 of the build log for my MyDIYCNC kit. I took part in the Kickstarter for around $400 and received a complete CNC kit. I plan to use it for modular synth milled circuit boards and aluminum frontpanels. You can read Part 2 <a href="http://gravitronic.blogspot.com/2011/10/my-diy-cnc-build-log-part-2-software.html">here</a>.<br />
<br />
<b><u>Day 1</u></b><br />
<br />
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
I picked up my kit last night and started. I got this far: <a href="http://yfrog.com/h6bfjnwj" style="color: #d52a0b; text-decoration: none;">http://<span data-scayt_word="yfrog.com" data-scaytid="1">yfrog.com</span>/<span data-scayt_word="h6bfjnwj" data-scaytid="10">h6bfjnwj</span></a> (image)</div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<br /></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
So far it's going quite well! To clarify one thing in the step-by-step instructions, when assembling the frame be sure that the top frame pieces have their side holes positioned pointing towards the outside, and they should be oriented such that the holes are closer to the "back" of the frame rather than the "front" in order to match the finished <span data-scayt_word="CNC" data-scaytid="17">CNC</span> images. I got lost in the wording that is on that page now, hopefully that explains it better.. not sure :)</div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<br /></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
Other than that to get the rods into the rubber grommets I found the easiest thing to do was slightly twist them as forcing them into place. Not a lot of twist as I didn't want to slice the rubber, but it got them in without creating any new problems.</div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<br />
Click to read more about the DIY CNC construction and problems encountered.<br />
<br />
<br />
<a name='more'></a><br /></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<b><u>Day 2</u></b></div>
<br />
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
I now am almost done the construction.</div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<br /></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
I have found that before drilling, taping parts is invaluable in the y axis / z carriage construction steps where things get a little bit vague in the manual.</div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<br /></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
Some steps in the manual are out of place and you really need to be thinking while you put this together. For example, step 39 says to use your square to ensure the gantry <span data-scayt_word="backbrace" data-scaytid="1">backbrace</span> is vertical.. but at this point the <span data-scayt_word="grantry" data-scaytid="3">grantry</span> uprights have not been made square so the <span data-scayt_word="backbrace" data-scaytid="2">backbrace</span> would be on an angle!</div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<br /></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
My y axis sadly had a lot of trouble with the parallel rod alignment. I also noticed that the gantry uprights do not really match one another well at all. I'm guessing they were made separately on a <span data-scayt_word="CNC" data-scaytid="5">CNC</span>? It's too bad that they are not a match drilled pair, that would ensure perfect alignment. Also the holes were about <span data-scayt_word="0.5mm" data-scaytid="4">0.5mm</span> too far apart for the parallel rods compared to the y axis carriage.</div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<br /></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
I ended up drilling one of the parallel rod holes out a bit bigger on both of the gantry uprights to fix the y axis alignment. It's not as smooth as the X and Z axis but hopefully it's sufficient.</div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<br /></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
Here's how mine looks right now. My z axis carriage is a bit sideways :( but it travels smooth so I can make do.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://img189.imageshack.us/img189/8941/imagecrd.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://img189.imageshack.us/img189/8941/imagecrd.jpg" width="240" /></a></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<br /></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<b><u>Day 3</u></b></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
Another day, more progress, more tips.</div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<br /></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
I can't stress how much you need to confirm the parallel y axis rods before trying to do your gantry uprights. I ended up making significant holes trying to fix the problem that ended up being non-parallel bars and then had to re-fill most of the holes with tape to get the rods once again relatively tight.</div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<br /></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
Before attaching the spindle mounts to the z axis carriage, test fit the spindle in position. I found I had to both slightly increase the size of the bottom mount, and significantly file/drill down the size of the top mount in order to get the spindle mounted vertically. If I had mounted the top mount higher on the carriage it probably would have fit as stock.</div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<br /></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
I also seem to be missing my zip ties. Maybe I misplaced them since unpacking the box. Whatever, I need to go to home depot to get more polyethylene tubing since my Z axis is not connected. I also seem to be missing the fasteners that go over the tubing to couple the steppers to the <span data-scayt_word="leadscrew" data-scaytid="1">leadscrew</span>? Hopefully home depot has something that will work.</div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<br /></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
I did all the electronics work yesterday except for the spindle, and 2 of my 3 axis work! I'm using <span data-scayt_word="KCAM" data-scaytid="3">KCAM</span> with windows 7, the other changes I had to do to get it to work was change my parallel port to <span data-scayt_word="ECP" data-scaytid="5">ECP</span> mode in the BIOS, and when starting <span data-scayt_word="KCAM" data-scaytid="4">KCAM</span>, right click and select "run as administrator". My Z axis is turning but as I mentioned before I need to re-do the coupling. A sharp end of the <span data-scayt_word="leadscrew" data-scaytid="2">leadscrew</span> pierced the tubing once it was softened and I ended up not making a good connection. One thing to note, when modifying the <span data-scayt_word="ATX" data-scaytid="6">ATX</span> power supply, most of the "red" <span data-scayt_word="5v" data-scaytid="7">5v</span>cables on the supply sent with the kit was actually using a slightly purple cable. You can check this when you have the top off by seeing which are connected to the power supply's <span data-scayt_word="5v" data-scaytid="8">5v</span> rail (It's <span data-scayt_word="labelled" data-scaytid="9">labelled</span>).</div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<br /></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
If mounting the electronics enclosure on top of the power supply don't<span data-scayt_word="overtighten" data-scaytid="10">overtighten</span> the power supply screws on the electronics case or you will crack it.</div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<br /></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
I found, sadly, that at 10 <span data-scayt_word="IPM" data-scaytid="11">IPM</span> my X and Y axis run into multiple spots where there is too much friction and the axis would skip steps. I think my axis may need some sort of light lubricant as when I originally built the x axis it was so smooth moving that the table would slide just from gravity when I moved the frame. I have them working smoothly at <span data-scayt_word="2IPM" data-scaytid="13">2IPM</span>. Will investigate lubrication and maybe bumping that up to 4-5 <span data-scayt_word="IPM" data-scaytid="12">IPM</span> hopefully without much effort.</div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
<br /></div>
<div style="font-family: 'Century Gothic', Arial, Helvetica, sans-serif; margin-bottom: 0.5em; margin-right: 10px; margin-top: 0.5em;">
I'm thinking for the future, and wanting to replace my spindle, of removing the spindle mounts from the z axis carriage and drilling 2 or more holes through, and then installing the spindle onto a plate with matching holes and using bolts and <span data-scayt_word="wingnuts" data-scaytid="14">wingnuts</span> to attach the spindle to the z axis. That would make spindle on the fly a reality! Maybe rubber washers between the spindle mount plate and the z axis carriage to absorb vibration. Any comments?<br />
<br />
<b>Read <span class="Apple-style-span" style="font-family: 'Times New Roman';">Part 2 of my build log <a href="http://gravitronic.blogspot.com/2011/10/my-diy-cnc-build-log-part-2-software.html">here</a>.</span></b></div>Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-53379051673428963732011-09-23T10:03:00.000-07:002011-11-14T16:44:06.857-08:00First modular PCB designed!It's the old adage, best become a dealer to support your habit.
My plans for a small-scale modular fabrication lab in my garage are in full swing. My MyDIYCNC kit is half built, hopefully finished over the weekend. Below is my first modular PCB design. It's a true spring reverb driver module. It drives the sound through a widely available spring reverb tank like the <a href="http://www.amazon.com/MOD-Reverb-Tanks-9EB2C1B-Tank/dp/B005CQ99MC/ref=sr_1_4?ie=UTF8&qid=1316796907&sr=8-4">MOD 9EB2C1B Reverb Tank</a> from Amazon, with adjustable EQ, mix, and drive settings.
I did not design the circuit, it came from <a href="http://www.muffwiggler.com/forum/viewtopic.php?t=36048">this muffwiggler forum thread</a>. I plan on releasing the EAGLE design files to the public once this is finished!
Some pictures! (Sorry for thumbnails, it's that or the wide images break my blogger template)<br />
<br />
<a href="http://imageshack.us/photo/my-images/846/reverbboard1.png/" target="_blank"><img border="0" src="http://img846.imageshack.us/img846/8000/reverbboard1.th.png" /></a>
<a href="http://imageshack.us/photo/my-images/594/reverbschem1.png/" target="_blank"><img border="0" src="http://img594.imageshack.us/img594/3185/reverbschem1.th.png" /></a><br />
<br />
Before selling modules I need to sort out an HPLV spray gun & compressor tank for painting the metal panels before etching, but other than that it's all things I've done before. Exciting!
After this I think my next module will be a true tube overdrive/distortion, then some classic filters. I'm looking to build an tonally incomparable FX rack :)
Interested in purchasing any of my built modules? Contact me!Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com6tag:blogger.com,1999:blog-6222549071878553571.post-20009172553321858402011-09-09T08:55:00.001-07:002011-09-09T08:55:49.183-07:00New setup, monotribe & TR-707 videoRecorded this last night. Monotribe through Boss Heavy Metal HM-2 and Digital Delay DD-3, synced with Roland TR-707 trigger a Tama Techstar TS-204.<br />
<br />
<iframe width="560" height="345" src="http://www.youtube.com/embed/NJvpg0eWWZs" frameborder="0" allowfullscreen></iframe>Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-87834294643099248402011-07-13T18:10:00.000-07:002011-07-17T07:33:43.038-07:00Turning Original XBOX into Arcade MachineSo I bought an old JAMMA arcade cabinet. JAMMA is a standard interconnect so that you can take a generic cabinet with monitor and control panel, and plug different games into it. Arcade owners benefitted by only needing to buy new PCBs instead of entire new consoles when they wanted to change games.<br />
<br />
My initial idea when I bought an arcade cabinet was to put an old XBOX in there, get rid of all the existing wiring & monitor, and drop in the xbox. For controls I was going to hand-wire the arcade buttons to my existing xbox controllers. This has a few problems:<br />
<br />
<ul><li><b>The monitor</b>. I was going to have to hack into place a TV. This was probably going to be ugly at best, and dangerous at worst.</li>
<li><b>The controls</b>. Hand soldering to the tiny controller pads? That wouldn't take a good bashing & kicking an arcade machine should be able to take while grinning.</li>
</ul><br />
In other words: bad solution. If you want to put an XBOX into a JAMMA cabinet it looks like your best solution is to wire up your controls to the JAMMA cab in a standard fashion and then get a <a href="http://cgi.ebay.co.uk/Xbox-console-time-control-timer-board-Jamma-cabinet-/250756462241?pt=LH_DefaultDomain_0&hash=item3a623ff6a1#ht_3452wt_1272">XBOX to JAMMA adapter</a>. Now you have a standard JAMMA cab that could still play other PCBs if you bought them, and a MAME box! Best of both worlds!<br />
<br />
I don't think I'm going to do this though. My cabinet has a vertical monitor and while it'll lack the 2-player games, I think I'm going to go with the <a href="http://www.jammaboards.com/store/60-in-1-icade-classic-multigame-jamma-pcb/prod_212.html">60-in-1 classic games</a>. It's emulated ROMs but provides a ton of classic gaming.Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com2tag:blogger.com,1999:blog-6222549071878553571.post-35428308566222907942011-06-30T13:01:00.000-07:002012-04-13T12:47:41.203-07:00Your Quest: Cheapest MAME cabinet: Part 1, decisions.<b><span style="font-size: large;">NOTE: My blog has now moved. Please visit my new blog where I write about <a href="http://www.burnsmod.com/blog">audio apps, diy synthesizers, and CNCs</a>.</span></b><br />
<b><br /></b><br />
<b>Like this post? Consider <a href="http://twitter.com/gravitronic">following me on twitter</a>!</b><br />
<b><br /></b><br />
<b>NOTE: While this is probably the cheapest way to a MAME interface, I ended up with getting a simpler J-PAC for wiring. <a href="http://gravitronic.blogspot.com/2011/11/mame-with-ubuntu-1110-in-jamma-arcade.html">Read my post about configuring Ubuntu to run inside the an arcade cab here!</a></b><br />
<br />
I'm possibly buying a house soon. Naturally, the first thing on my mind is putting a stand-up arcade machine in the place. While I ended up buying a proper JAMMA cabinet, this post describes my original plan to build a MAME cabinet.<br />
<h2>
Requirements</h2>
<ul>
<li>Stand-up. No bar-top machines</li>
<li>Two-player, only interact via arcade buttons & joystick</li>
<li>Should support NES, SNES, SEGA, and old-school MAME titles</li>
</ul>
<h2>
Cabinet</h2>
<table border="1" cellpadding="0" cellspacing="0"><tbody>
<tr><th>Choice</th><th>Price</th><th>Pros</th><th>Cons</th></tr>
<tr><td>JAMMA Cabinet (used)</td><td>$200?</td><td>Comes with buttons,speakers,screen</td><td>Hard to find, heavy to ship, custom monitor</td></tr>
<tr><td>DIY MDF Cabinet</td><td>$100-$150 inc. buttons</td><td>Can make lighter, smaller, thinner</td><td>More work, need to paint & trim, need buttons</td></tr>
</tbody></table>
Winner? Lets go with DIY / MDF.<br />
<br />
<h2>
Buttons</h2>
For buttons, I was originally going to go with a la carte parts from SparkFun until I ran into this ebay deal: <a href="http://cgi.ebay.ca/2-Joysticks-and-14-Buttons-Arcade-Multicade-MAME-Jamma-/110687176621?pt=LH_DefaultDomain_0&hash=item19c57847ad#ht_758wt_1140">2 joysticks & 14 buttons for $34 + shipping</a>! Much cheaper!<br />
<br />
But how to wire up the buttons / joystick? Depends on our choice of brain.<br />
<br />
<h2>
Brain</h2>
For the brain I have 3 free choices: XBOX, Wii, or old PC. While software-wise they could be considered equivalent I am tempted to sell my Xbox, keep the Wii on the TV, and use an old PC. More on this decision later.<br />
<br />
<table border="1" cellpadding="0" cellspacing="0"><tbody>
<tr><th>System</th><th>Method</th><th>Pros</th><th>Cons</th></tr>
<tr><td>PC</td><td>Hard-soldered to a USB keyboard</td><td>will be cheap</td><td>Lots of fine solder work to do</td></tr>
<tr><td>XBOX</td><td>hand-soldered to two xbox contollers</td><td>FREE!</td><td>Again, lots of fine, custom, solder work to do. If it breaks then I have to go in and fix by hand.</td></tr>
<tr><td>Wii</td><td>Arduino-based classic controller emulation</td><td>Most elegant solution</td><td>Even more DIY work, most expensive, have to hack wired power to wiimotes</td></tr>
</tbody></table>
<br />
Since I have a purposeless xbox, and plenty controllers, maybe that's the best bet? The work will be to wire up all the buttons to ripped apart controllers, then pack it all into a box and expose the wires with a nice little screw-post connector.<br />
<br />
7 buttons per controller gives me, looking at an xbox controller, all I need.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeXdZyBIVaKQYrs9W5W00sZKz5rs33oHKFBnJzUcFX0LWKxIJgsU0PAncNHS_VbJaJgpJr-SbO1Dwa9kQCmARh1EfknXQSb7jp2M0u4d4A0YzpTJ6KO2kwmEmhL1kbUP4Qw-ClkuNi5QAI/s1600/controller_s1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeXdZyBIVaKQYrs9W5W00sZKz5rs33oHKFBnJzUcFX0LWKxIJgsU0PAncNHS_VbJaJgpJr-SbO1Dwa9kQCmARh1EfknXQSb7jp2M0u4d4A0YzpTJ6KO2kwmEmhL1kbUP4Qw-ClkuNi5QAI/s320/controller_s1.jpg" width="320" /></a></div>
- Almost all the digital buttons & D-Pad. I guess I can live without "Back" and just with "Start". That's actually perfect.<br />
<br />
I think I will go with 6 buttons + 1 1p/2p button each player. That works for SNES and SEGA as well as the lesser MAME arcade games as well. Excellent!<br />
<br />
Still to be determined: Screen, speakers, painting, etc, etc. However it is exciting to think the current total cost is around $50 + MDF/screws.Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-57019217733126978472011-06-28T10:07:00.000-07:002011-06-28T10:07:31.050-07:00What Have I Done (5 new drum machines on the way)So I went from no drum machines to finding some great deals, asking them if they'd ship and not hearing back, to suddenly they all replied with "yes". Thankfully the deals are great enough that I can keep half of these and sell the other half to pay for the 1st half and end up with a few drum machines effectively for free.<br />
<br />
So, <b>what did I buy?</b> In order of most exciting to medium-exciting:<br />
<br />
<b>Tama Techstar TS-305</b><br />
Weird progressive techno bleeps and bloops? Not the same overused roland x0x boxes? Enter the TS-305. It's a bit bigger than I'd prefer, but not much should compare to completely analog adjustable drums.<br />
<iframe width="425" height="349" src="http://www.youtube.com/embed/pDSRmL2HCX8" frameborder="0" allowfullscreen></iframe><br />
<br />
<b>Tama Techstar TS-204</b><br />
Companion to the 305. Adds a synth and a clap. Pairs with the 305 (which I actually bought from a different seller in a different country) and I'll likely keep these together. Not sure if the synth can be 1v/oct CV controlled or is just triggered beeps. Will have to play!<br />
<iframe width="425" height="349" src="http://www.youtube.com/embed/ZFJ71XALlm4" frameborder="0" allowfullscreen></iframe><br />
<br />
<b>Roland TR-707</b><br />
A classic house drum machine. Excited to be able to use the separate outs as a trigger brain for the TS-305/204 combo until I build a dedicated MIDI->trigger rig. This unit was super cheap as half the voices apparently don't work. I'm expecting it to be the slide volume pots but some time with the oscilliscope will sort this out I'm sure. I really like this diabolical devices circuit bending, it's very useable bends (not just shitty noise), might have to replicate once it's fixed.<br />
<iframe width="560" height="349" src="http://www.youtube.com/embed/LoaNgWraGOw" frameborder="0" allowfullscreen></iframe><br />
<br />
<b>Yamaha RX5</b><br />
Did not plan on getting this but the seller threw it in for $75 shipped and a ton of blogs suggest it's "most underrated drum machine ever". Two videos convinced me to get it for $75.<br />
<br />
One: this thing can do dark techno with the ability to pitch samples down two octaves reverse, and add their own loop points.<br />
<iframe width="560" height="349" src="http://www.youtube.com/embed/itB4lkxRRDQ" frameborder="0" allowfullscreen></iframe><br />
<br />
Two: This thing can do pure SNES. Unfortunately I can't find the video supporting this statement right now but basically this can act as a 16-channel MIDI device and play all it's samples across the keyboard.<br />
<br />
I'll take a moment to mention that videos of the RX5 are good examples why circuit bending should be a means to a useable end and not applied just because they make an terrible noise effect.<br />
<br />
I'll also take a minute to say I hate when a company starts re-using their product codes between product lines. I guess when you make everything from drum machines to motorcycles it's inevitable.<br />
<br />
Last but not least: The Boss Dr. Pad 1.<br />
<iframe width="425" height="349" src="http://www.youtube.com/embed/aAm_cWNVs0E" frameborder="0" allowfullscreen></iframe><br />
<br />
I guess this thing is digital? I thought it was analog but doesn't sound like it from the video. Oh well, this on "hand clap" next to my SP303 and incoming korg monotribe will be a fun jam setup!Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-1277138339212715182011-06-21T09:30:00.000-07:002011-06-21T09:30:17.453-07:00HOLY CRAP: FL STUDIO MOBILEBuying this tonight! Mobile fruity loops? yes please! I've been waiting for this to arrive for quite awhile, hoping it keeps me from buying a drum machine for a little while :)<br />
<br />
<a href="http://www.image-line.com/documents/news.php?entry_id=1307332924&title=get-fl-studio-mobile">FL Studio Mobile basic use tutorial video</a><br />
<br />
<iframe width="560" height="349" src="http://www.youtube.com/embed/0Q-AoN2q9qE" frameborder="0" allowfullscreen></iframe>Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-77430638730474383962011-06-11T16:24:00.000-07:002011-06-11T16:24:28.338-07:00Original XBox: Alternate Alternate usesAh, the original Xbox. Online gaming machine. DVD player. In it's prime, my roommates and I used this thing nearly 24/7 in our townehouse during university. Halo (lots of Halo), networked media center, emulator, and occasionally even another video game.<br />
<br />
But what about now? The games are dated, the services disconnected. The DVD drive is failing. The wii's emulation and even media center (with the new wii MC) capabilities rival the original xbox (although not at 720p I suppose).<br />
<br />
What's left? ultimate emulator machine into a cabinet? It seems like the only remaining choice.Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-66643836493139599702011-05-27T09:38:00.000-07:002011-05-27T09:38:36.283-07:00How to take something apartJust read a post on the vintage synth forums where someone asked if it was common to end up with "extra screws" after taking something apart and putting it back together.<br />
<br />
It is common.. if you do not adopt a proper procedure.<br />
<br />
When I had to take apart a laptop and knew I had to "go deep" - all the way to removing the LCD, opening the bezel, and replacing the LCD screen - I knew I had to step up my documentation while taking the thing apart.<br />
<br />
You need a pen, piece of paper, and tape. What you do now is for every "set" of screws you remove (say, the four holding the bottom of the case on, or the 8 holding the keybed in place, etc) - you tape the screws directly to the piece of paper, and write a note next to the screws with enough detail to be able to identify where they go. Keep these little taped sets numbered as well so you know the order in which they go back in. If your object is REALLY intricate, also take digital photos of each step location.<br />
<br />
Tada - no more "extra" screws.Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-61418466482556878092011-03-29T20:41:00.000-07:002011-03-29T20:42:30.734-07:00TM3030 Demo<iframe width="425" height="344" src="http://www.youtube.com/embed/snRyYciTZQU?fs=1" frameborder="0" allowFullScreen=""></iframe><br /> Quick demo of the TM3030 Bassline synthesizer I builtTomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-33093131686038578452011-03-29T09:23:00.000-07:002011-03-29T09:23:40.843-07:00Why you (well, I) need a KinectI want a Kinect. Not for gaming, but for everything else.<br />
<br />
<a href="http://hackaday.com/2011/03/25/kinect-minecraft-trifecta/#more-38226">kinect -> Minecraft, 3rd video</a><br /><br />
<br />
<a href="http://hackaday.com/2011/03/23/real-time-wireframe-video-effect-overlay-with-kinect/#more-38280">Make the line dance - Best VJ interface ever?</a><br />
<br />
<a href="http://eclecti.cc/hardware/facecube-copy-real-life-with-a-kinect-and-3d-printer">Scan with kinect, print with a 3d printer!</a><br />
<br />
I suck at art so anytihng that gets me a useable 3d model of somethnig from real life would be so great.Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0tag:blogger.com,1999:blog-6222549071878553571.post-76634318611602918802011-02-12T15:27:00.000-08:002011-03-11T19:19:36.323-08:00Monotron Acid Demo!<a href="http://www.jdoqocy.com/click-5017522-10434207?url=http%3A%2F%2Fwww.zzounds.com%2Fitem--KORMONOTRON&cjsku=KORMONOTRON" target="_top" onmouseover="window.status='http://www.zzounds.com/';return true;" onmouseout="window.status=' ';return true;"><br />
Korg MonoTron Analogue Ribbon Synthesizer on zZounds</a><img src="http://www.ftjcfx.com/image-5017522-10434207" width="1" height="1" border="0"/><br />
<br />
Threw this together this afternoon!<br />
<br />
<object height="81" width="100%"> <param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F10470338"></param><param name="allowscriptaccess" value="always"></param><embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F10470338" type="application/x-shockwave-flash" width="100%"></embed> </object> <span><a href="http://soundcloud.com/gravitronic/monotron-acid-demo">Monotron acid demo</a> by <a href="http://soundcloud.com/gravitronic">Gravitronic</a></span> <br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyq81B_9MIl4gyLWHxW9fAdarbtHPP7OlFplr27Ggjst37gITMmPflOkruPSpOow3AragXX4_-hE4M_mIAwo3jTBridHejWa5mE9AOBPKXBDO6H_dVkSGd-KOF1l-Br_05inshLKVdKRHX/s1600/3pjvt.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="320" width="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyq81B_9MIl4gyLWHxW9fAdarbtHPP7OlFplr27Ggjst37gITMmPflOkruPSpOow3AragXX4_-hE4M_mIAwo3jTBridHejWa5mE9AOBPKXBDO6H_dVkSGd-KOF1l-Br_05inshLKVdKRHX/s320/3pjvt.jpg" /></a></div><br />
What you are listening to is two tracks of korg monotron, and some 909 drums via the excellent d16 909 emulation VST.<br />
<br />
The first monotron track is MIDI sequenced from ableton live sent to a MIDI->CV converter and finally to the monotron, which has been modded and calibrated to approximately 1V/oct tuning. This is a 24-bar loop that is repeated a few times. There is reverb on this track to give it that acidy depth.<br />
<br />
The second track is the 909 bass drum being sent through the monotron, and at the same time me playing the knobs on the front of the monotron for the second synth part. I can't get the monotron gate to open for the external input without playing the oscillator as well yet so I sort of needed to have that second synth part in there whether I wanted it or not.<br />
<br />
I had to up to compress the audio and add quite a bit of gain in order to get this loud enough to post but other than that and the reverb this is pretty much raw. No work was done to try to reduce the noise floor, which after 2 tracks combined you really can hear it quite loud. Apparently changing the filter chip will reduce the hiss. Not sure if I'm going to do that or just leave it as it is.. its raw.<br />
<br />
<br />
Mods to the monotron are as described in <a href="http://gravitronic.blogspot.com/2011/02/modded-korg-monotron.html">a previous blog post</a>.<br />
<br />
<a href="http://www.jdoqocy.com/click-5017522-10434207?url=http%3A%2F%2Fwww.zzounds.com%2Fitem--KORMONOTRON&cjsku=KORMONOTRON" target="_top" onmouseover="window.status='http://www.zzounds.com/';return true;" onmouseout="window.status=' ';return true;"><br />
Korg MonoTron Analogue Ribbon Synthesizer on zZounds</a><img src="http://www.ftjcfx.com/image-5017522-10434207" width="1" height="1" border="0"/>Tomhttp://www.blogger.com/profile/11761371465633008628noreply@blogger.com0