tag:blogger.com,1999:blog-266855372024-03-13T06:09:57.020+01:00C-ScopeAbout computer programming, operating systems, gaming, gadgets, electronics and life in general...Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.comBlogger67125tag:blogger.com,1999:blog-26685537.post-84187586795618286052020-03-30T22:19:00.006+02:002020-04-01T11:51:40.976+02:00ZX80 Replica<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1Po1CQchHrJhuhfvKclu99J9Je2OZQUXwaC_8pUneSk6tkz69sAE4BIZA11RFnEWQkXdufInS_gXZnOAImBqrqxAP4NUFXumyuXEJvapL6wVdAT-MieM5kHaaG-iaZaU3eRis/s1600/ZX80+Final+Collage.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1Po1CQchHrJhuhfvKclu99J9Je2OZQUXwaC_8pUneSk6tkz69sAE4BIZA11RFnEWQkXdufInS_gXZnOAImBqrqxAP4NUFXumyuXEJvapL6wVdAT-MieM5kHaaG-iaZaU3eRis/s640/ZX80+Final+Collage.jpg" width="640" /></a></div>
<span style="font-family: "arial", "helvetica", sans-serif;">I always had a soft spot for the original ZX-80 computer. Never owned one since it was too expensive for me when it was released, and now I got the money it is still too expensive. Even though almost 50000 units were made, lots of them were lost over the years due to the bad build-quality. So €200-€500,- on eBay is not uncommon for a unit in good condition. </span><br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguC3J3oscZpanJizHTr4rkOb1e39qEdMLRecMkHrUBfJbB7t_1uwm9bEVzcdJ0BidL90QNGaJRZA9MEMN7GaiHlOpTwFmg8-ZCtxGKPabChhBfx9OEkslF3gcH5_L-BYN0KsNm/s1600/zx80.jpg" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" data-original-height="318" data-original-width="400" height="158" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguC3J3oscZpanJizHTr4rkOb1e39qEdMLRecMkHrUBfJbB7t_1uwm9bEVzcdJ0BidL90QNGaJRZA9MEMN7GaiHlOpTwFmg8-ZCtxGKPabChhBfx9OEkslF3gcH5_L-BYN0KsNm/s200/zx80.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: "arial", "helvetica", sans-serif;">The original ZX80</span></td></tr>
</tbody></table>
<span style="font-family: "arial", "helvetica", sans-serif;">When I <a href="http://c-scope.blogspot.nl/2015/05/the-makr-b-bot-part-1-getting-started.html" target="_blank">started building my first 3D printer</a> it was always in the back of my head that it could be used for creating a ZX-80 replica. That did not really work out, since it was too inaccurate and the effective build plate was just too small. </span><br />
<span style="font-family: "arial", "helvetica", sans-serif;">But <a href="http://c-scope.blogspot.nl/2018/04/3d-printer-v2-here-we-go-again.html" target="_blank">my new printer </a>has a build plate of 210x210 and it prints significantly better, so now is the time to build my own ZX-80.</span><br />
<span style="font-family: "arial", "helvetica", sans-serif;">Fortunately, thanks to the current retro computing revival, there are a lot of resources.First there is the ZX80 replacement keyboard on<a href="https://www.sellmyretro.com/offer/details/zx80-_kdlx-%28ready-to-use%29--_-pcb-keyboard-with-zx80-imprint%2C-fully-assembled-4054" target="_blank"> Sell My Retro</a>. This is an excellent keyboard, with actual tactile switches, which makes it much easier to type on than the original. Also available: </span><br />
<span style="font-family: "arial", "helvetica", sans-serif;"><a href="https://www.sellmyretro.com/offer/details/replacement-sinclair-zx80-plastic-case-rivets--_-2017-29077" target="_blank">original rivets</a>, again on Sell my Retro.</span><br />
<span style="font-family: "arial", "helvetica", sans-serif;">And the <a href="https://www.thingiverse.com/thing:1880449" target="_blank">design files</a> are on Thingiverse. These were not exactly to my liking, so I made quite some changes. Mainly to make them easier to print, and to make sure that the new keyboard would fit. </span><br />
<br />
<span style="font-family: "arial", "helvetica", sans-serif;">There are a lot of images available, but most are just showing the complete computer from the front or side. There are lots of<a href="https://k1.spdns.de/Vintage/Sinclair/80/Sinclair%20ZX80/Images/" target="_blank"> images on this site</a> that also show the rear, bottom and inside. I used these to refine my 3D design, which is now <a href="https://www.thingiverse.com/thing:4250953">available on Thingiverse</a>.</span><br />
<br />
<span style="font-family: "arial", "helvetica", sans-serif;">And if you don't want or cannot print the case yourself, it is also available as a <a href="https://www.shapeways.com/marketplace?type=product&q=zx80" target="_blank">complete printed part on Shapeways</a>. It's not cheap (about € 140,- for the set) but it obviously has a smoother finish and the bottom part is in one piece.</span><br />
<h3 style="text-align: left;">
<span style="font-family: "arial", "helvetica", sans-serif;">First part : the top cover. </span></h3>
<span style="font-family: "arial", "helvetica", sans-serif;">It took 27.3 hours to print, but turned out really nice. Unfortunately there was some warping on the edges, but not too bad and I can probably correct this by heating it a little. And 4 solid layers for the top was not enough to completely hide the support structure, so the honeycomb pattern is still vaguely visible on the surface.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "arial", "helvetica", sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdVqgyuhIDUat_zV02-mGHZxY1yPchywiKY5B8JNEqjSHklZxCeZM6KFDftwrerl3gxBgb_oI1iG_xz682sTKCwB_57a4Xp_pOlO2OIy65ReEe0xNMCztmFgbndIQ3lJJB9WJ2/s1600/WP_20180509_06_46_26_Pro-COLLAGE.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1600" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdVqgyuhIDUat_zV02-mGHZxY1yPchywiKY5B8JNEqjSHklZxCeZM6KFDftwrerl3gxBgb_oI1iG_xz682sTKCwB_57a4Xp_pOlO2OIy65ReEe0xNMCztmFgbndIQ3lJJB9WJ2/s640/WP_20180509_06_46_26_Pro-COLLAGE.jpg" width="640" /></a> </span></div>
<h3 style="text-align: left;">
<span style="font-family: "arial", "helvetica", sans-serif;">Part two : the bottom section.</span></h3>
<span style="font-family: "arial", "helvetica", sans-serif;">Since I could not print the whole bottom section on my printer I had to split it into two parts. By adding some support and making some minor changes to the basic shapes, I ended up with two printable pieces that can be bolted and glued together.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoq-kDCQmK40gOJUWTZsV_w0_qzcLOfvSAOJ7zYKDOCmHqy90HY0RZ23nIz87sa-e8BvW_z242PVBFVsorJDt9o5wLgfY6GadJ8IcKyTXacGkUWgU8ej2gwir3lh_blAuBoEYY/s1600/Bottom+sections+Collage.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1600" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoq-kDCQmK40gOJUWTZsV_w0_qzcLOfvSAOJ7zYKDOCmHqy90HY0RZ23nIz87sa-e8BvW_z242PVBFVsorJDt9o5wLgfY6GadJ8IcKyTXacGkUWgU8ej2gwir3lh_blAuBoEYY/s640/Bottom+sections+Collage.jpg" width="640" /></a></div>
<br />
<h3 style="text-align: left;">
<span style="font-family: "arial", "helvetica", sans-serif;">The electronics</span></h3>
<span style="font-family: "arial", "helvetica", sans-serif;">The internals are based on a Raspberry Pi Zero W. This is nice and small, and has enough power to emulate a ZX80. Since I wanted to make it close to the original I decided the rear connections had to be the same as on the original unit. </span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkxljeEOHYUmnpOomjgp0PHgb4hkWcr-u1dqRZ_w2BkwECB3qCO8FaaWUPCAPcnSYxQ_DpfHNsZAZS2nQvOYKCoemokFl6Mqn7N_VHiLS8HBndqK3tlDbc6cBgITgzWq4DRUu2/s1600/Rear.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="181" data-original-width="650" height="89" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkxljeEOHYUmnpOomjgp0PHgb4hkWcr-u1dqRZ_w2BkwECB3qCO8FaaWUPCAPcnSYxQ_DpfHNsZAZS2nQvOYKCoemokFl6Mqn7N_VHiLS8HBndqK3tlDbc6cBgITgzWq4DRUu2/s320/Rear.png" width="320" /></a></div>
<br />
<span style="font-family: "arial", "helvetica", sans-serif;">Three 3.5 mm jack sockets, an RCA jack and the board edge connector. The manual shows what is connected where:</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig5wNHxSyhzpTHYHzW7hftVZtDZaC8qUa4ClkRvBf_6cPGbauh0ZKRS9RGe_OdDKCnXRiNLX0gol0i_-y68Q7eUTD6Gep2CntrrCMLin2lbrJQBJZxhAx0Vh_0nUkRe4R8pdfb/s1600/ZX80Connections.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="655" data-original-width="955" height="219" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig5wNHxSyhzpTHYHzW7hftVZtDZaC8qUa4ClkRvBf_6cPGbauh0ZKRS9RGe_OdDKCnXRiNLX0gol0i_-y68Q7eUTD6Gep2CntrrCMLin2lbrJQBJZxhAx0Vh_0nUkRe4R8pdfb/s320/ZX80Connections.png" width="320" /></a></div>
<br />
<span style="font-family: "arial", "helvetica", sans-serif;">If we just apply 5V to the power jack we can connect that straight to the RPi (pin 2,4 and 6 on the header). The RCA jack can be connected to the TV out connection :</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "arial", "helvetica", sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVCD5WRBKuIOkOGfq9wrAa5Fh8t-tTFkTccL5UiIyatkAE7_LZqilHrpWCHxNVWyA34x-zfWl_O8C47ZV3DrCo9iGOYFGVl8LfHHvx8PgL98tOp1lkcofx4bxAsk5oFW6DZCtd/s1600/raspberry_pi_composite.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="393" data-original-width="800" height="157" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVCD5WRBKuIOkOGfq9wrAa5Fh8t-tTFkTccL5UiIyatkAE7_LZqilHrpWCHxNVWyA34x-zfWl_O8C47ZV3DrCo9iGOYFGVl8LfHHvx8PgL98tOp1lkcofx4bxAsk5oFW6DZCtd/s320/raspberry_pi_composite.jpg" width="320" /></a></span></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<h3 style="text-align: left;">
<span style="font-family: "arial", "helvetica", sans-serif;"> The keyboard</span></h3>
<span style="font-family: "arial", "helvetica", sans-serif;"> The ZX 80 or ZX81 keyboard is a simple matrix-keyboard. </span><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKT-h6lSnjHkqz_UzVLJvlqS_TGFGvjTlQGNEauo1m1bF0V40agHTlSXYOd4WtdPhSjurYjpHWwJlXVISA4dkDQk1DxcY7DK-vRg31hcfLlBcB0Mv3ytBuHgOKzaYnvuUl_zgV/s1600/ZX81+Keybord+Matrix.gif" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="629" data-original-width="1067" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKT-h6lSnjHkqz_UzVLJvlqS_TGFGvjTlQGNEauo1m1bF0V40agHTlSXYOd4WtdPhSjurYjpHWwJlXVISA4dkDQk1DxcY7DK-vRg31hcfLlBcB0Mv3ytBuHgOKzaYnvuUl_zgV/s400/ZX81+Keybord+Matrix.gif" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: "arial", "helvetica", sans-serif;">Original keyboard schematic</span></td></tr>
</tbody></table>
<span style="font-family: "arial", "helvetica", sans-serif;"></span><br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<span style="font-family: "arial", "helvetica", sans-serif;">It is actually 2 matrices of 4 x 5 each, and we will need 5+8 = 13 I/O pins to read it. Most people use an Arduino to read the matrix and emulate a standard USB keyboard. And I actually went the same route when <a href="http://c-scope.blogspot.com/2015/11/go-fo-c64-pert-ii-arduino-leonardo.html" target="_blank">converting a C64 to USB keyboard</a>. Since space in the ZX80 case is limited it would be nice to read the keyboard straight into the Pi. The Pi has 27 GPIO pins so that should be enough. Unfortunately the GPIO pins are spread almost</span><span style="font-family: "arial", "helvetica", sans-serif;"> at random over the connector, and some pins are better not used (like 0 and 1). But since we can just map IO pins in software this is not so relevant and I just connected both keyboard cables to all GPIOs on the left side (1..39)</span><span style="font-family: "arial", "helvetica", sans-serif;"><br /></span><br />
<h3 style="text-align: left;">
<span style="font-family: "arial", "helvetica", sans-serif;"><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0V1MkXiJ9HPE5H_Gppow4abDAT4PfgA_lTueCvCmaUZlh2Hi8NKC3KIm8BP216hdF0wfVeVfwxdSYC02ZTKER3ig3W212nZArRX6D4FrW7jxecoqg64CY7dhNNcV5vjORYdpf/s1600/RPi+Keyboard+wiring.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="788" data-original-width="1070" height="470" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0V1MkXiJ9HPE5H_Gppow4abDAT4PfgA_lTueCvCmaUZlh2Hi8NKC3KIm8BP216hdF0wfVeVfwxdSYC02ZTKER3ig3W212nZArRX6D4FrW7jxecoqg64CY7dhNNcV5vjORYdpf/s640/RPi+Keyboard+wiring.png" width="640" /></a></div>
</span></h3>
<span style="font-family: "courier new", "courier", monospace;">Numbering scheme: </span><br />
<span style="font-family: "courier new", "courier", monospace;">KB1 5 ,4 ,3 ,2 ,1 KB2 6,4,2,1 ,3 ,5 ,7 ,9</span><br />
<span style="font-family: "courier new", "courier", monospace;">GPIO 19,13,6 ,5 ,11 2,3,4,17,27,22,10,9</span><br />
<span style="font-family: "courier new", "courier", monospace;">WiringPi 24,23,22,21,14 8,9,7,0 ,2 ,3 ,12,13</span><br />
<span style="font-family: "courier new", "courier", monospace;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK1bPh3Vte7QmYWpRsd2rf9H55RNNnjMeIlTSzuZyMqI-tBpqjz2VXbSH2p4Pwf6eZLznLF_pQTcNpfPjmA0dlvXVvDu4eOLcsiLSSXzt38cGnSIvPFbQasGE3Y69xvptIh1b2/s1600/PCB+Collage.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="874" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK1bPh3Vte7QmYWpRsd2rf9H55RNNnjMeIlTSzuZyMqI-tBpqjz2VXbSH2p4Pwf6eZLznLF_pQTcNpfPjmA0dlvXVvDu4eOLcsiLSSXzt38cGnSIvPFbQasGE3Y69xvptIh1b2/s640/PCB+Collage.jpg" width="347" /></a></div>
<span style="font-family: "arial", "helvetica", sans-serif;">Note that I also mounted the 8 diodes in the KB2 lines, but I mounted them the other way around as compared to the original schematic.Basically this does not matter, it just inverts the logic as used in the software to read the pins. As I had already written the software before I notice that the diodes were reversed I decided to leave it that way.</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMZhClGejjkvdmhA-PNrTy-r_Hi0Avdw5rO-PniGCuEiR_oJmp68oZ2NZMKz6icr3pbkMTITiXC0I-NzmdLggxkr_7nmxq9II1COZ7QQOcs3b2fvo5Sbu_2M1nnPBS-BZx45In/s1600/IMG_20200329_144656.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1200" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMZhClGejjkvdmhA-PNrTy-r_Hi0Avdw5rO-PniGCuEiR_oJmp68oZ2NZMKz6icr3pbkMTITiXC0I-NzmdLggxkr_7nmxq9II1COZ7QQOcs3b2fvo5Sbu_2M1nnPBS-BZx45In/s400/IMG_20200329_144656.jpg" width="300" /></a></div>
<br />
<span style="font-family: "arial", "helvetica", sans-serif;">To keep the PCB in place I simply bolted it to a small piece of wood that I taped to the bottom using some double sided tape.</span><br />
<span style="font-family: "courier new", "courier", monospace;"></span>
<br />
<h2 style="text-align: left;">
<span style="font-family: "arial", "helvetica", sans-serif;">Software</span></h2>
<h3 style="text-align: left;">
<span style="font-family: "arial", "helvetica", sans-serif;">Reading the keyboard</span></h3>
<span style="font-family: "arial", "helvetica", sans-serif;">Controlling the IOpins on an RPi is easiest using the wiringPi library, which is already installed on Raspbian. Check if this is really the case by typing 'gpio -v' on the command-line. If it is there it will return the copyright and version info. Typing 'gpio - readall' will give the pin-mapping from the GPIO to WiringPi pin numbers.</span><br />
<br />
<span style="font-family: "arial", "helvetica", sans-serif;">Since I'm not the first one to read a matrix keyboard, I quickly found a <a href="https://github.com/mrpjevans/zxscanner" target="_blank">Python project that does exactly what I wanted.</a> This was <a href="http://mrpjevans.com/2017/09/zx-raspberry-version-2/" target="_blank">created by Mr PJ Evans</a>, and he did exactly what I'm trying to do now, only for a Spectrum.The Python code was not hard to translate to C.</span><br />
<span style="font-family: "arial", "helvetica", sans-serif;">I added one special combined key command to force a soft reset:</span><br />
<br />
<span style="font-family: "arial", "helvetica", sans-serif;"><span style="font-family: "arial", "helvetica", sans-serif;">SHIFT + </span>'1' + SPACE :</span><span style="font-family: "arial", "helvetica", sans-serif;">Reset the ZX80(soft reset)</span><br />
<br />
<h3 style="text-align: left;">
<span style="font-family: "arial", "helvetica", sans-serif;">The Emulator</span></h3>
<span style="font-family: "arial", "helvetica", sans-serif;">There are plenty ZX80 / 81 emulators available, but I needed one that was written in C, open source, and not too complex so I could inject my own keyboard reading code. I looked at Zesarux, which is a great emulator that supports teh full range of Sinclair computers. This however also makes it quite a massive project. And most of the naming and comments are in Spanish, which makes a bit hard for me to find my way around. </span><br />
<span style="font-family: "arial", "helvetica", sans-serif;">So I opted for the <a href="http://sz81.sourceforge.net/" target="_blank">SZ81 project</a>. Since this is just for emulating the ZX80 and ZX81 it is much smaller. I assumed it was just a matter of finding where the keyboard is read, and add my own function to read it from the hardware keyboard. Which is partially true: I could get it to work for entering basic commands and running it. But as soon as the emulator switches to 'special' modes like loading or saving a file the program uses all kind of tricks to send virtual keyboard, joystick and mouse commands. And these always seem to conflict with the keys as pressed on the keyboard so after several days I just gave up on this one too. </span><br />
<span style="font-family: "arial", "helvetica", sans-serif;">So I went one step back, to the original xz81 emulator which SZ81 was based on. This uses standard X-Windows, and is pretty basic :<a href="http://www.svgalib.org/rus/z81.htm">http://www.svgalib.org/rus/z81.htm</a>l. It's already an old project, and the source code is only available as a .ZIP file. </span><br />
<br />
<span style="font-family: "arial", "helvetica", sans-serif;">My version, with the keyboard reading routine, is <a href="https://github.com/Cees-Meijer/ZX81-RPi">available on GitHub</a>.Note that I included the ZX80.rom and ZX81.rom file. This may be somewhat illegal, as mentioned by most emulator projects, but since they are that easy to find at multiple places I thought it would be rather odd not to include them.</span><br />
<span style="font-family: "arial", "helvetica", sans-serif;">You can check out the project using the following command:</span><br />
<span style="font-family: "arial", "helvetica", sans-serif;"><br /></span>
<span style="font-family: "arial", "helvetica", sans-serif;"><span style="font-family: "courier new", "courier", monospace;">git clone https://github.com/Cees-Meijer/ZX81-RPi.git</span></span><br />
<br />
<span style="font-family: "arial", "helvetica", sans-serif;">Before compiling it, make sure you have installed the X11 development libraries:</span><br />
<br />
<pre style="text-align: left;">sudo apt-get install libx11-dev // for X11/Xlib.h</pre><pre style="text-align: left;">sudo apt-get install libxt-dev</pre><pre style="text-align: left;">sudo apt-get install libxtst-dev </pre><br />
<span style="font-family: "arial", "helvetica", sans-serif;">It is set to compile for ZX8</span><span style="font-family: "arial", "helvetica", sans-serif;"><span style="font-family: "arial", "helvetica", sans-serif;">0, but if you want the ZX81 version you can change t</span>he line:</span><br />
<pre style="text-align: left;"><span style="font-family: "arial", "helvetica", sans-serif;"><b>int </b>zx80=1; in 'common.c' to <b>int </b>zx80=0;</span></pre>
<br />
<span style="font-family: "arial", "helvetica", sans-serif;">The scaling is set to 2 in the Makefile:</span><br />
<br />
<span style="font-family: "courier new", "courier", monospace;"><span class="pl-smi">XDEF=-DSCALE</span>=2 -DMITSHM</span><br />
<br />
<span style="font-family: "arial", "helvetica", sans-serif;">This is the right setting for using the composite video output. When using the standard HDMI output this can be set to 3 or maybe even 4.</span><br />
<br />
<span style="font-family: "arial", "helvetica", sans-serif;">Build the software:</span><br />
<pre class="lang-c prettyprint prettyprinted" style="text-align: left;"><code><span class="pln"><code><span class="pln">sudo make xz81</span></code></span></code></pre>
<span style="font-family: "arial", "helvetica", sans-serif;">Install everything to the right position:</span><br />
<pre class="lang-c prettyprint prettyprinted" style="text-align: left;"><code><span class="pln"><code><span class="pln">sudo make install</span></code></span></code></pre>
<span style="font-family: "arial", "helvetica", sans-serif;">Make sure the ZX80.rom and / or the ZX81.ROM file are in '/usr/local/lib/z81/'. (This should be taken care of by the 'sudo make install' ).</span>
<br />
<h3 style="text-align: left;">
<span style="font-family: "arial", "helvetica", sans-serif;">Setting up the Pi</span></h3>
<span style="font-family: "arial", "helvetica", sans-serif;">When
the emulator starts it will take a while to boot and show all the Raspbian images and start screen, which does not add to
the retro feeling. So I first considered using the <a href="http://pipaos.mitako.eu/" target="_blank">pipaOS distro</a>, which is also used by <a href="https://obsolescence.wixsite.com/obsolescence/pidp-8" target="_blank">'Obsolescence Guaranteed' for the PiPDP-8</a>. This is very lightweight and boots really fast. But in the end I did have to install XWin, GCC and GIT anyway, so it's probably simpler to start with the standard Raspbian Lite.</span><br />
<br />
<span style="font-family: "arial", "helvetica", sans-serif;"><span style="font-family: "arial", "helvetica", sans-serif;">First use raspi-config to enable SSH, so you can use FileZilla to transfer files to the system. (Interfacing Options->SSH). By doing this first you make sure that if something goes wrong, and you get stuck in the emulator, you can still access the Pi.</span></span><br />
<span style="font-family: "arial", "helvetica", sans-serif;"><span style="font-family: "arial", "helvetica", sans-serif;">Next go to boot options, and make sure it boots automatically using the 'Console Autologin' option.</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcthVt51ouUE38iMzVvk24j7mOPRkeNwvnpwlMd-89Pnuewuhyql051REAHeatrdy232h53hH1S4BjEhg3HLXJdluJPcIiBG6KpkHtWI2GS1vfJ23zjiKtwFJ8rfGmVq1NfhZh/s1600/raspi-config-03-Boot-Options-B1-Desktop-or-CLI-B2-Console-Autologin.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="410" data-original-width="1600" height="102" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcthVt51ouUE38iMzVvk24j7mOPRkeNwvnpwlMd-89Pnuewuhyql051REAHeatrdy232h53hH1S4BjEhg3HLXJdluJPcIiBG6KpkHtWI2GS1vfJ23zjiKtwFJ8rfGmVq1NfhZh/s400/raspi-config-03-Boot-Options-B1-Desktop-or-CLI-B2-Console-Autologin.png" width="400" /></a></div>
<span style="font-family: "arial", "helvetica", sans-serif;"><span style="font-family: "arial", "helvetica", sans-serif;"><br /></span></span>
<br />
<span style="font-family: "arial", "helvetica", sans-serif;">Under 'Advanced settings', disable screen blanking ! This is very important, or else the screen will go blank after 10 minutes, and since there is no 'real' keyboard attached it will not come back again if you press a key on the ZX80 keyboard.</span><br />
<br />
<span style="font-family: "arial", "helvetica", sans-serif;">To start the emulator automatically on startup, edit the rc.local file:</span><br />
<br /><pre style="text-align: left;"> sudo nano /etc/rc.local </pre> <br />
<span style="font-family: "arial", "helvetica", sans-serif;">Add the line:</span><br /><pre style="text-align: left;"> sudo xinit /home/pi/projects/ZX81-RPi/xz81 &</pre> <span style="font-family: "arial", "helvetica", sans-serif;"><br /></span>
<span style="font-family: "arial", "helvetica", sans-serif;">Right before the 'exit 0'. (Don't forget the ampersand '&' on the end)</span><br />
<br />
<span style="font-family: "arial", "helvetica", sans-serif;">If this works, you can follow the <a href="https://scribles.net/customizing-boot-up-screen-on-raspberry-pi/" target="_blank">instructions on how to remove all Raspbian boot images</a> and texts.</span><br />
<br />
<span style="font-family: "arial", "helvetica", sans-serif;">We can speed up the boot time by adding the following lines to boot/config.txt:</span><br />
<br /><pre style="text-align: left;"> # Disable bluetooth </pre><pre style="text-align: left;"> dtoverlay=pi3-disable-bt</pre><pre style="text-align: left;"> # Set the bootloader delay to 0 seconds. </pre><pre style="text-align: left;"> boot_delay=0</pre><br />
<span style="font-family: "arial", "helvetica", sans-serif;">Also in config.txt are the settings for the video output. To make sure the composite video output works, check these two lines:</span><br />
<br />
<pre style="text-align: left;">#uncomment to force a a HDMI mode rather than DVI</pre><pre style="text-align: left;"> #hdmi_drive=2</pre> <pre style="text-align: left;"><br /> #uncomment for composite PAL</pre><pre style="text-align: left;"> sdtv_mode=2</pre>
<span style="font-family: "arial", "helvetica", sans-serif;"><br /></span>
<span style="font-family: "arial", "helvetica", sans-serif;">(or any of the <a href="https://www.raspberrypi.org/documentation/configuration/config-txt/video.md">other 5 available video modes</a>)
</span><br />
<span style="font-family: "arial", "helvetica", sans-serif;">Note that though 'hdmi_drive' is commented out, the Pi will likely still boot on HDMI if a HDMI monitor is connected.</span><br />
<span style="font-family: "arial", "helvetica", sans-serif;"><br /></span>
<br />
<h3 style="text-align: left;">
<span style="font-family: "arial", "helvetica", sans-serif;">Finishing touch: the stickers</span></h3>
<span style="font-family: "courier new", "courier", monospace;"><span style="font-family: "arial", "helvetica", sans-serif;">After some research I found that </span></span><span style="font-family: "arial", "helvetica", sans-serif;">the size of the 'sinclair ZX80' logo is 27 x 70 mm. That was enough to scale the image that I already found somewhere and so create some really nice stickers. </span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "arial", "helvetica", sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiear42pQg8DGyBOgoFgTTdrHKmr8x9xDd4oO9ggYhqhhFtJ61IqiY7nsqALfFFi0VFhSkZHNtUVHZFh_d-Y2ShPyYwq5Lj0oQzbwUq9Uw353MfyPh0VI7rxJbNG0OUxtGuQRSx/s1600/ZX80+Stickers.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="254" data-original-width="670" height="121" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiear42pQg8DGyBOgoFgTTdrHKmr8x9xDd4oO9ggYhqhhFtJ61IqiY7nsqALfFFi0VFhSkZHNtUVHZFh_d-Y2ShPyYwq5Lj0oQzbwUq9Uw353MfyPh0VI7rxJbNG0OUxtGuQRSx/s320/ZX80+Stickers.PNG" width="320" /></a></span></div>
<br />
<span style="font-family: "courier new", "courier", monospace;"><span style="font-family: "arial", "helvetica", sans-serif;"></span></span><br />
<span style="font-family: "arial", "helvetica", sans-serif;">The <a href="https://drive.google.com/open?id=1Q2ZD_mWjOgMVxBsuTuLOoz9TAf32FXrK">.pdf is available here</a>. When printed on glossy sticker sheets they look really good.</span><br />
<h3 style="text-align: left;">
<span style="font-family: "arial", "helvetica", sans-serif;">Zesarux </span></h3>
<span style="font-family: "arial", "helvetica", sans-serif;">Currently </span><span style="font-family: "arial", "helvetica", sans-serif;"><span style="font-family: "arial", "helvetica", sans-serif;"><a href="https://github.com/chernandezba/zesarux" target="_blank">ZEsaRUX</a> </span>is one of the best ZX type emulators. As mentioned, I have looked into this one but decided not to use it for my project. For reference I do include some suggestions on how to compile and use it.</span><br />
<span style="font-family: "arial", "helvetica", sans-serif;">The program is only available as source code, but there are <a href="https://github.com/chernandezba/zesarux/blob/master/src/INSTALL" target="_blank">instructions on how to build it</a> on the Raspberry Pi as well. </span><br />
<br />
<span style="font-family: "arial", "helvetica", sans-serif;">When running Raspbian Lite from the command line, we will have to start from there.</span><br />
<span style="font-family: "arial", "helvetica", sans-serif;">First : Install GIT</span><br />
<span style="background-color: black;"><span style="color: #f3f3f3;"><span style="font-family: "courier new", "courier", monospace;"><span style="font-family: "arial", "helvetica", sans-serif;">$ sudo apt-get install git</span></span></span></span><br />
<span style="font-family: "arial", "helvetica", sans-serif;">Next install SDL</span><br />
<span style="color: #f3f3f3;"><span style="background-color: black;"><span style="font-family: "courier new", "courier", monospace;"><span style="font-family: "arial", "helvetica", sans-serif;">$ sudo apt-get install libsdl1.2-dev</span></span></span></span><br />
<span style="font-family: "arial", "helvetica", sans-serif;">Now I created a folder zesarux in my ./Projects folder and cloned it as follows:</span><br />
<span style="background-color: black;"><span style="color: #f3f3f3;"><span style="font-family: "courier new", "courier", monospace;"><span style="font-family: "arial", "helvetica", sans-serif;">$ sudo git clone https://github.com/chernandezba/zesarux.git </span></span></span></span><br />
<span style="font-family: "arial", "helvetica", sans-serif;">This does require that you have a GitHub account yourself, as it could ask you for your username and password !</span><br />
<br />
<span style="font-family: "arial", "helvetica", sans-serif;"><span style="background-color: black;"><span style="color: white;"><span style="font-family: "courier new", "courier", monospace;">cd /usr/src/zesarux/zesarux/src </span></span></span></span><br />
<span style="font-family: "arial", "helvetica", sans-serif;"><span style="font-family: "arial", "helvetica", sans-serif;"><span style="background-color: white;">We must be in the src directory of the zesarux project </span></span></span><br />
<span style="background-color: black;"><span style="color: white;"><span style="font-family: "courier new", "courier", monospace;"><span style="font-family: "arial", "helvetica", sans-serif;"><br /></span></span></span></span>
<br />
<span style="background-color: black;"><span style="color: white;"><span style="font-family: "courier new", "courier", monospace;"> $ export CFLAGS=-O2<br /> $ export LDFLAGS=-O2</span></span></span><br />
<span style="background-color: black;"><span style="color: white;"><span style="font-family: "courier new", "courier", monospace;"><span style="background-color: black;"></span><span style="background-color: white;"><span style="color: black;"> </span></span></span></span></span><br />
<span style="background-color: black;"><span style="color: white;"><span style="font-family: "courier new", "courier", monospace;"><span style="background-color: black;"></span><span style="background-color: white;"><span style="color: black;"> </span></span></span></span></span><br />
<span style="background-color: black;"><span style="color: white;"><span style="font-family: "courier new", "courier", monospace;"><br /> $ sudo ./configure --enable-raspberry</span></span></span><br />
<span style="background-color: black;"><span style="color: white;"><span style="font-family: "courier new", "courier", monospace;"></span></span></span><br />
<span style="background-color: white;"><span style="font-family: "arial", "helvetica", sans-serif;">If this command executes successfully it will create the make file.</span></span><br />
<span style="background-color: black;"><span style="color: white;"><span style="font-family: "courier new", "courier", monospace;"></span></span></span><br />
<span style="background-color: black;"><span style="color: white;"><span style="font-family: "courier new", "courier", monospace;"> $ sudo make clean<br /> $ sudo make</span></span></span><br />
<span style="background-color: black;"><span style="color: white;"><span style="font-family: "courier new", "courier", monospace;"><span style="font-family: "arial", "helvetica", sans-serif;"><span style="background-color: white;"><span style="color: black;">The 'make' command will start the compiling. This will take a while. On the Rpi Zero it took about 3 minutes.</span></span></span></span></span></span><br />
<span style="background-color: black;"><span style="color: white;"><span style="font-family: "courier new", "courier", monospace;"><span style="font-family: "arial", "helvetica", sans-serif;"><span style="background-color: white;"><span style="color: black;">According to the docs, The recommended way to start the emulator is using the following settings:<br />--disableborder --zoom 1 --fullscreen --vo fbdev --ao sdl --no-detect-realvideo<br /><br /><span style="background-color: black;"><span style="color: white;"><span style="font-family: "courier new", "courier", monospace;">$ ./zesarux --disableborder --zoom 1 --fullscreen --vo fbdev --ao sdl --no-detect-realvideo</span></span></span><br />And yes, this works! after selecting the ZX80 in the menu we get a very realistic ZX80 screen. </span></span></span></span></span></span><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw2WGuF13ba0fZCO1jni2Jj6sj7ztkIFRnp5nGH0AIGhpGjZlD1K4NOo8JDWY9Lkrt5yQTjiIf-BS3oyX2-iAuMHDFdcHURov2-GZKNSTFZFEOC4DjYF37amUSI4vrsM89KCOi/s1600/IMG_20180924_214610.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1200" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw2WGuF13ba0fZCO1jni2Jj6sj7ztkIFRnp5nGH0AIGhpGjZlD1K4NOo8JDWY9Lkrt5yQTjiIf-BS3oyX2-iAuMHDFdcHURov2-GZKNSTFZFEOC4DjYF37amUSI4vrsM89KCOi/s320/IMG_20180924_214610.jpg" width="240" /></a><br />
<span style="font-family: "arial", "helvetica", sans-serif;"></span><br />
<span style="font-family: "arial", "helvetica", sans-serif;"></span><br />
<span style="font-family: "arial", "helvetica", sans-serif;">It doesn't always work as expected. When starting it from a system with full Raspbian I got the emulator just in the top left corner, and had to add <span style="font-family: "courier new", "courier", monospace;">--zoom=4</span> to get to fullscreen.</span><br />
<span style="font-family: "arial", "helvetica", sans-serif;">Since I wanted it to start as ZX80, I also added the <span style="font-family: "courier new", "courier", monospace;">--machine ZX80</span></span><span style="font-family: "arial", "helvetica", sans-serif;"> option. </span>Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com1Purmerend, Nederland52.5143815 4.964061099999998649.833897630269213 0.56952984999999856 55.194865369730785 9.3585923499999986tag:blogger.com,1999:blog-26685537.post-47943574210620443842019-10-23T22:38:00.000+02:002019-11-02T17:02:24.481+01:00The path to LoRaWAN<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif; font-size: small;">In 2017 I already <a href="http://c-scope.blogspot.com/2017/03/lora-with-lora-bee.html" target="_blank">tried to get a LoRa based radio link working</a>. Which worked, but only as a </span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqoTln_P4mzUnsBqYtX5WfIKxE9VPXSELMSPRW83h1SIT0xNtT-1uV6Srtdg-X50mNQi2_loiws_qorkcSU-mJKUI3GsuuYYuDwPkQuiUdyeqSKf1iUA4_J2tmqHnFShIv3YPH/s1600/Screenshot_2019-10-22+The+Things+Network.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="50" data-original-width="154" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqoTln_P4mzUnsBqYtX5WfIKxE9VPXSELMSPRW83h1SIT0xNtT-1uV6Srtdg-X50mNQi2_loiws_qorkcSU-mJKUI3GsuuYYuDwPkQuiUdyeqSKf1iUA4_J2tmqHnFShIv3YPH/s1600/Screenshot_2019-10-22+The+Things+Network.png" /></a>
local send / receive solution. At the time <a href="https://www.thethingsnetwork.org/" target="_blank">The Things Network</a> (TTN) was already operational, but it was quite complex to get started with it, certainly if you don't live near a public TTN node so you could not just send some data to it. I briefly considered setting up my own station, but at an estimated cost of €300,- this was still a bit too much for just a hobby project.</span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcZyMVhSewEYQxci3ZArqlaIdvF6PZbeR65FajvZPNJggApKU_hb2Bxyw_FWsS_S9rE4ExD1cgw2VlqvVRauKsj9AQjLfwdLuFmidgN4Np0835SOApaXGhTA1jX72hgDJj0y6Z/s1600/Screenshot_2019-10-22+The+Things+Network%25281%2529.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="52" data-original-width="67" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcZyMVhSewEYQxci3ZArqlaIdvF6PZbeR65FajvZPNJggApKU_hb2Bxyw_FWsS_S9rE4ExD1cgw2VlqvVRauKsj9AQjLfwdLuFmidgN4Np0835SOApaXGhTA1jX72hgDJj0y6Z/s1600/Screenshot_2019-10-22+The+Things+Network%25281%2529.png" /></a></span></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif; font-size: small;">Nowadays TTN has matured, and it is easier to find information on how to access it. There is a <a href="https://learn.adafruit.com/raspberry-pi-single-channel-lorawan-gateway" target="_blank">complete description on Adafruit </a>on how to build a single channel gateway, and there are several DIY project on how to build simple LoRa Nodes. </span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif; font-size: small;">The easiest way would of course be to buy a complete LoRa enabled board, like the <a href="https://pycom.io/product/lopy4/" target="_blank">LoPy</a>, the <a href="https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module" target="_blank">Adafruit Feather with LoRa</a>, <a href="https://wisen.com.au/store/products/whisper-node-lora/" target="_blank">the WISEN Whisper Node</a>, the <a href="https://www.mikroe.com/lora-5-click" target="_blank">MIKRO Electronika Lora5 Click</a>, or just one of <a href="https://www.thethingsnetwork.org/the-things-products" target="_blank">the TTN products</a>. (And there are many more, just Google '<a href="https://www.google.com/search?&q=LoRa+Board" target="_blank">LoRa Board</a>')</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9rT9godGUamG4eekBZQMdYgh46SeGGAH5Olpe5qGHtX-NJrAVazMAPt39VUdhNYFJxWntSX_JN-efzMyMTeoI7QhzbqcR1co65uM_5RXDFVNMk4lj-3yikq4vwDuJiUo1GOqc/s1600/Screenshot_2019-10-22+LoRa+Bee+module+featuring+LoRa%25C2%25AE+technology.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="290" data-original-width="290" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9rT9godGUamG4eekBZQMdYgh46SeGGAH5Olpe5qGHtX-NJrAVazMAPt39VUdhNYFJxWntSX_JN-efzMyMTeoI7QhzbqcR1co65uM_5RXDFVNMk4lj-3yikq4vwDuJiUo1GOqc/s200/Screenshot_2019-10-22+LoRa+Bee+module+featuring+LoRa%25C2%25AE+technology.png" width="200" /></a><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: small;"><span style="font-family: "arial" , "helvetica" , sans-serif;">But I already have these <a href="https://www.dragino.com/products/lora/item/109-lora-bee.html" target="_blank">Dragino LoRa Bee</a> units and I want to use them. Should not be that hard since they are basically just RF95W transceiver modules on a carrier board. And the RF95 modules are at the heart of 99% of all other LoRa devices. </span></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: small;"><span style="font-family: "arial" , "helvetica" , sans-serif;">A very nice description of a <a href="https://mariozwiers.de/2018/05/29/first-lora-node-in-the-real-world/" target="_blank">DIY LoRa node</a> is described by Mario Zwiers in a few blog posts that basically describe what I wanted to do. He created a small PCB with an Arduino Micro, a battery charger and a bare RF95W module. Unfortunately he just created the PCB from scratch, without a schematic. So I have to figure that out myself, but since the combinations are limited that cannot be too hard.</span></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: small;"><span style="font-family: "arial" , "helvetica" , sans-serif;"></span></span></span><br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Connecting LoRa Bee and Raspberry Pi Zero W</span></h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: small;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Pi to LoRa Bee wiring:</span></span></span></span></span><br />
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">3.3V to Raspberry Pi 3.3V</span>
</li>
<li>
<span style="font-family: "arial" , "helvetica" , sans-serif;">GND to Raspberry Pi Ground</span>
</li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">DIO0 to Raspberry Pi GPIO #3</span>
</li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">RST to Raspberry Pi GPIO #25</span>
</li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">SCK to Raspberry Pi SCK</span>
</li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">MISO to Raspberry Pi MISO</span>
</li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">MOSI to Raspberry Pi MOSI</span>
</li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">CS to Raspberry Pi CE1 </span>
</li>
</ul>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgayfOlrLMzKjTrf-orNQwKPYRx0qGBlWaXBTrHsVeLGuq6yJYDS-c-X-IqrM-QSeVAK0hlKjNST6mORIdy9AEXSUZafUdiDhBEiEC5wDJGwrK2AJb_oBJha7XB01sZgMyqD19z/s1600/PiZeroW+-+Lora+BEE+-+Wiki+for+Dragino+Project.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="668" data-original-width="1511" height="281" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgayfOlrLMzKjTrf-orNQwKPYRx0qGBlWaXBTrHsVeLGuq6yJYDS-c-X-IqrM-QSeVAK0hlKjNST6mORIdy9AEXSUZafUdiDhBEiEC5wDJGwrK2AJb_oBJha7XB01sZgMyqD19z/s640/PiZeroW+-+Lora+BEE+-+Wiki+for+Dragino+Project.png" width="640" /></a></span></div>
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvC2riz4cB5kmfenG1XA1BzJ72sabScbD-4ZUIdJHFqS9BQCT7tEuo1rQLUQTTdeIcnBnanSA3cx8Ifb8K8b5h-_kn_MhMAmfR2mpfBlNaZZBbs2rUfl8MdgS77zo7a83oEisP/s1600/Lora+gateway.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="1600" data-original-width="1421" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvC2riz4cB5kmfenG1XA1BzJ72sabScbD-4ZUIdJHFqS9BQCT7tEuo1rQLUQTTdeIcnBnanSA3cx8Ifb8K8b5h-_kn_MhMAmfR2mpfBlNaZZBbs2rUfl8MdgS77zo7a83oEisP/s200/Lora+gateway.png" width="177" /></a><span style="font-family: "arial" , "helvetica" , sans-serif;">Next I followed the basic instructions on installing Python. First installed the latest Raspbian to an SD card. Booted it on the Pi, and used raspi-config to set a Hostname, new password, and the WiFi network parameters. And from the 'Interfacing Options' section I also enabled SSH, SPI and I2C. </span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Run the standard updates:</span><br />
<code>sudo apt-get update</code><br />
<code>sudo apt-get upgrade</code><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">and</span><br />
<code>sudo pip3 install --upgrade setuptools</code><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">If above doesn't work try</span><br />
<code>sudo apt-get install python3-pip</code><br />
<br />
<code><span style="font-family: "arial" , "helvetica" , sans-serif;">Then install the GPIO libraries:</span></code><br />
<code><code>pip3 install RPI.GPIO</code></code><br />
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">And the Adafruit libraries:</span><br />
<code><code><code>pip3 install adafruit-blinka</code> </code></code><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp24oCizGhGBj8vWlJ3-r22hUlfYafsJeMLS4y-Qe-bzlYd2y8LT1v_pTEdCT7yZ2U_Gfm_ml5wpq7AetshBDTi9wulqVX7wSEU1CjO6sV7PxkWhKdwqSrxbhlohbCSvxWknS0/s1600/Screenshot_2019-10-23+CircuitPython+on+Linux+and+Raspberry+Pi.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="255" data-original-width="544" height="299" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp24oCizGhGBj8vWlJ3-r22hUlfYafsJeMLS4y-Qe-bzlYd2y8LT1v_pTEdCT7yZ2U_Gfm_ml5wpq7AetshBDTi9wulqVX7wSEU1CjO6sV7PxkWhKdwqSrxbhlohbCSvxWknS0/s640/Screenshot_2019-10-23+CircuitPython+on+Linux+and+Raspberry+Pi.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">(All this is also on the Adafruit site, I just repeated the steps here for convenience)</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Next install the RFM libraries:</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><code><b>sudo pip3 install adafruit-circuitpython-rfm9x</b></code></span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><code><span style="font-family: "arial" , "helvetica" , sans-serif;">After that I created a simplified version of the Adafruit sample program that would just check if the RFM unit was connected and working. Note that I changed the frequency setting in the RFM9x() function to 868.0, which is the frequency used in Europe.</span><b><br /></b></code></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><code><b><br />#Learn Guide: https://learn.adafruit.com/lora-and-lorawan-for-raspberry-pi<br />#Author: Brent Rubell for Adafruit Industries<br /><br />import time<br />import busio<br />from digitalio import DigitalInOut, Direction, Pull<br />import board<br /><br /># Import the RFM9x radio module.<br />import adafruit_rfm9x<br /><br /><br /># Configure RFM9x LoRa Radio<br />CS = DigitalInOut(board.CE1)<br />RESET = DigitalInOut(board.D25)<br />spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)<br /><br /> # Attempt to set up the RFM9x Module<br />try:<br /> rfm9x = adafruit_rfm9x.RFM9x(spi, CS, RESET, 868.0)<br /> print("RFM9x: Detected")<br />except RuntimeError:<br /> # Thrown on version mismatch<br /> print("RFM9x: ERROR")<br /><br />time.sleep(0.1)</b></code></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><code><b></b></code></span></div>
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">And it works:</span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxL0gVszERd34wb7Q4SRUTvyxCkoIjhv_rr7irk_vc_OPNFX4pKfO98bkbkRH6gp4pEK3lYlFB4qPcCEm6PqSB1hedA3QhZvmfOV7bB-9fi5mnlAHDdkMg8G-EyeO3et85ZSRz/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="130" data-original-width="691" height="75" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxL0gVszERd34wb7Q4SRUTvyxCkoIjhv_rr7irk_vc_OPNFX4pKfO98bkbkRH6gp4pEK3lYlFB4qPcCEm6PqSB1hedA3QhZvmfOV7bB-9fi5mnlAHDdkMg8G-EyeO3et85ZSRz/s400/Capture.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;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">The instructions tell you to clone the GIT repository . But GIT is not
installed by default on Raspbian. Use the following commands to get it :</span></div>
<br />
<span style="font-family: "courier new" , "courier" , monospace;"><span style="color: blue;">$</span> sudo apt-get update</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><span style="color: blue;">$</span> sudo apt-get install git-core</span><br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Next step would be to install WiringPi. But there is a slight problem: WiringPi is no longer available at the URL as given in the instructions. Apparently the creator of this library <a href="http://wiringpi.com/wiringpi-deprecated/" target="_blank">has given up on the open source community</a>. Fortunately there is still a mirror of the code at Github, which then probably is no longer maintained but will work fine with most projects.:</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><code>git clone https://github.com/WiringPi/WiringPi</code></span></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Build it using 'sudo ./build'</span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<h3 class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Installing and running the Single Channel Gateway</span></h3>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">The proceed to the next step, getting the single channel gateway code:</span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><code>git clone https://github.com/adafruit/single_chan_pkt_fwd.git</code></span><br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><code><span style="font-family: "arial" , "helvetica" , sans-serif;">This can now be built by using 'sudo make all'</span></code></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><code><span style="font-family: "arial" , "helvetica" , sans-serif;">Since I wired the RPi directly to my Lora Bee, and did not add any buttons or the display I had to modify the code in '</span></code></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><code><span style="font-family: "arial" , "helvetica" , sans-serif;"><code>lorawan_gateway.py</code>' so there were no references to the display any more and everything was just printed to the console. My modified code: </span></code></span></div>
<script src="https://gist.github.com/Cees-Meijer/6370f560d2659763e17a0c03f0674dcd.js"></script>
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">Now, what is not mentioned in the Adafruit guide is the fact that the unit is set-up according the settings in the file 'global_conf.json'. Which I had to modify to get it going for Europe. I changed the frequency to 868.1 Mhz, and I swapped the servers so the router.eu is now the first in the list. Also set this to 'enabled:true', and the router.us to false. and changed the "is_pi_xero":true (since I am using a Pi ZeroW for my gateway). Also note that "pin_dio0" is set to 3. So it should be connected to GPIO 3, and not (as written on the AdaFruit page) to 5.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<code>{<br /> "SX127x_conf": {<br /> "freq": 868100000,<br /> "spread_factor": 7,<br /> "pin_nss": 11,<br /> "pin_dio0": 3,<br /> "pin_rst": 25<br /> },<br /> "gateway_conf": {<br /> "ref_latitude": 0.0,<br /> "ref_longitude": 0.0,<br /> "ref_altitude": 10,<br /> "name": "Reigersbek51",<br /> "email": "me@email.com",<br /> "desc": "RPi Zero-LoraBee 1-Ch Gateway",<br /> "is_pi_zero": true,<br /> "servers": [<br /> {<br /> "address": "router.eu.thethings.network",<br /> "port": 1700,<br /> "enabled": true<br /> },<br />
{<br /> "address": "router.us.thethings.network",<br /> "port": 1700,<br /> "enabled": false<br /> }<br />
]<br /> }<br />}<br /> </code><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">Now I can start the gateway</span>.: <code>python3 lorawan_gateway.py</code><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">and register the gateway at The Things Network.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLjkRrjyZIl9oZF6lbN1OWoRy4pfYQ2W5hJ3mP6kNXIXOEEvmjj98mbVn1ikKiH6IosgUBh2DRlePjjVq6pArkdx7A2fwQMRy-5VkZuNRP7ungkLh6GHLOzUwBYIM1Z6O1GnwQ/s1600/Screenshot_2019-10-26+The+Things+Network+Console.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="677" data-original-width="1100" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLjkRrjyZIl9oZF6lbN1OWoRy4pfYQ2W5hJ3mP6kNXIXOEEvmjj98mbVn1ikKiH6IosgUBh2DRlePjjVq6pArkdx7A2fwQMRy-5VkZuNRP7ungkLh6GHLOzUwBYIM1Z6O1GnwQ/s320/Screenshot_2019-10-26+The+Things+Network+Console.png" width="320" /></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Full <a href="https://learn.adafruit.com/raspberry-pi-single-channel-lorawan-gateway/configuring-the-things-network" target="_blank">description is on this page</a>, no need to repeat it here...</span><br />
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">But after completing the registration and starting the gateway it did not work. It did not show 'connected'. Then I noticed that when the gateway is started it prints the Gateway ID. And that was all 00:00:FF:FF:00:00. So it looks like though the Python program displays the correct ID, the gateway code itself does not. Checking the code I noticed that there is a special case made for the Raspberry Pi Zero, which I am using. And in the initialisation I also see that 'Pi Zero' is set to 0. Even though I have changed this in the global_config.json to 'true' The fastest fix was to change line 102 in the .cpp file to: </span><br />
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">bool is_pizero = true;</span><br />
<br />
<a href="https://gist.github.com/Cees-Meijer/24778495e45755958ebf3e9fd93df5f0" target="_blank">My Modified code on GIST is here.</a>
<br />
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">and run another 'sudo make all' .Which solved the problem.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe_1hZRQwVy4sfkya4VF1pzowdXbhbVbir0agaUYTXaAcCliRCQ3HZhyphenhyphenuOebqQD0qtAHEXeNqWvU6fP3ge-4fFO6fNgPHGdk5XMDxc7w56i4PZ7PiyHxN7DQdxhd4OF6u-fcke/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="880" data-original-width="871" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe_1hZRQwVy4sfkya4VF1pzowdXbhbVbir0agaUYTXaAcCliRCQ3HZhyphenhyphenuOebqQD0qtAHEXeNqWvU6fP3ge-4fFO6fNgPHGdk5XMDxc7w56i4PZ7PiyHxN7DQdxhd4OF6u-fcke/s400/Capture.PNG" width="395" /></a></div>
<h3>
</h3>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The Sandbox Single Channel Gateway (LoRa GO DOCK)</span></h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The setup with the Raspberry Pi W and the LoRa Bee works fine. But just after finishing this, </span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0jY5u7t5ogpd2dkUGvjtKKwHgUkJcNze1kRuyxNwwiAaYuoKdE1buUw0xDxd2rnMdm3enZKopAvPW87ZuU1BwoJa_qYBdGmeawSmd4QNIFBP7upRTHSh2Pkd4Ppp-WSABGd9D/s1600/LoragoDock.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="720" data-original-width="720" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0jY5u7t5ogpd2dkUGvjtKKwHgUkJcNze1kRuyxNwwiAaYuoKdE1buUw0xDxd2rnMdm3enZKopAvPW87ZuU1BwoJa_qYBdGmeawSmd4QNIFBP7upRTHSh2Pkd4Ppp-WSABGd9D/s320/LoragoDock.jpg" width="320" /></a></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">I discovered the <a href="http://sandboxelectronics.com/?product=lorago-dock-single-channel-lorawan-gateway" target="_blank">LoRa GO DOCK</a>. At only $19,- this is a super cheap gateway, based on the ESP8266 so it's programmable using the Arduino IDE. Once programmed and configured the operation is similar to the RPi version, so it is a much easier solution. It's also super small, and comes with two antennas. The only drawback is that it has to come from China so it takes two to three weeks to deliver.</span><br />
<br />
<br />Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com0tag:blogger.com,1999:blog-26685537.post-23810510479694466572019-03-19T20:56:00.002+01:002019-04-29T20:18:48.704+02:00Getting started with SDL2<script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIfudH_ouKEryyYUBZ0Idz5i6seCEUa_SwbDyz7H4NIz0bttp6-K0EmsJawl_MeAYuyWfaYZz-d0GhfqG310Ueza57kixS_ZxbikC0cSDfTcXSb8OwRA6tTpMp66D770KNzAhE/s1600/SDL_logo.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="99" data-original-width="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIfudH_ouKEryyYUBZ0Idz5i6seCEUa_SwbDyz7H4NIz0bttp6-K0EmsJawl_MeAYuyWfaYZz-d0GhfqG310Ueza57kixS_ZxbikC0cSDfTcXSb8OwRA6tTpMp66D770KNzAhE/s1600/SDL_logo.png" /></a><span style="font-family: "arial" , "helvetica" , sans-serif;">The <a href="https://www.libsdl.org/index.php" target="_blank">Simple Directmedia Layer (SDL)</a> is a mature framework that has been around for quite some time. Though mainly targeted at writing games it is good for any program that requires the creation of arbitrary graphics screens, like for example retro computer emulators. One of the more interesting aspects of SDL is that it is cross-platform. It runs fine on your PC, Mac or Linux computer. And this includes the ever so popular Raspberry Pi.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">There are many excellent guides for setting up SDL on every platform.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://www.willusher.io/pages/sdl2/" target="_blank">TwinkleBearDev SDL2 Tutorials</a></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://www.parallelrealities.co.uk/tutorials/" target="_blank">Parallel Realities Game Tutorials</a></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="http://lazyfoo.net/tutorials/SDL/" target="_blank">Lazy Foo Productions </a> </span><br />
<h4>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Visual Studio</span></h4>
<span style="font-family: "arial" , "helvetica" , sans-serif;">There is a good <a href="https://www.wikihow.com/Set-Up-SDL-with-Visual-Studio-2017" target="_blank">step-by step guide on WikiHow</a> to configure Visual Studio. It however is already outdated since the easiest way to set it up today is by using the Nuget package manager. One of the major benefits of going this way is that you can now simply switch between 32 and 64 bit builds by just selecting the target platform in the VS project type dropdown. So : Lets Get Started !</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">First use 'File->New->Project' to create a 'Visual C++' -> 'Empty Project'. </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">Right click the 'Project' and select 'Manage NuGet packages'. In the NuGet Package manager go to the 'Browse' tab, and search for SDL2. Select the latest SDL2 package and click install. </span><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6Ni-N0zygoPuxMp0F-tbExc2Efye4ioN7Uy_hMDL3GFHvzTM1y18erGuYaLzrSXAcQWeLNw9X8ATHB3AyDnfFZl4s7P7TNavjz0xxrumrywViegGb9WV9SUGtNxYmHmzpxwZm/s1600/VS+NuGet+SDL.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="447" data-original-width="1137" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6Ni-N0zygoPuxMp0F-tbExc2Efye4ioN7Uy_hMDL3GFHvzTM1y18erGuYaLzrSXAcQWeLNw9X8ATHB3AyDnfFZl4s7P7TNavjz0xxrumrywViegGb9WV9SUGtNxYmHmzpxwZm/s640/VS+NuGet+SDL.PNG" width="640" /></a><span style="font-family: "arial" , "helvetica" , sans-serif;">Then scroll down an also install the 'SDL2_image', 'SDL2_ttf' and 'SDL2_mixer' packages for image handling, font management and sound. This basically configures your project completely for use with the SDL2 framework. </span><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4yy_cDSIdHE0G9_Y1dwuNf_z_B_Dhlyut7uKPW31WqEmHj-SbgnrBtNoI40qhGvuTFtZHmXlhJZbSSx-Ng_Dj6P2xLCpOXZZFMByAv9btIdBIpMdWxKwYPODHYX4FfpYxzBCc/s1600/VS+NuGet+extras+SDL.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="241" data-original-width="739" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4yy_cDSIdHE0G9_Y1dwuNf_z_B_Dhlyut7uKPW31WqEmHj-SbgnrBtNoI40qhGvuTFtZHmXlhJZbSSx-Ng_Dj6P2xLCpOXZZFMByAv9btIdBIpMdWxKwYPODHYX4FfpYxzBCc/s640/VS+NuGet+extras+SDL.PNG" width="640" /></a><span style="font-family: "arial" , "helvetica" , sans-serif;">The only thing you have to do manually is selecting the </span><span style="font-family: "arial" , "helvetica" , sans-serif;"><b>SubSystem</b> target. To do this open up the <b>System</b> page
and choose either Console or Windows from the drop down. If you choose Windows you won’t get
a console window that opens up with stdout, if you choose Console you will. My advice is to choose Console, as the console window is really handy as a debugging tool.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">Note that when you switch your target from 32 to 64 bit or vice-versa you will again have to choose the </span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><b>SubSystem</b> </span>target or your build will fail because it 'Cannot find an entry point for main()' </span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaOW4vm6kHmm_4G_5lQIl1NQh7c_LRjqt_-Ko-TV-bD1ITbxYKWMNWcRjA-GkRrtiQFPdjNQdZUAjCboEj_eyLlhAloV5lX4TM6ydJL5Ogf2iK7RNqHgXOqXs5XGrIr5hGnxXM/s1600/subsystem_set.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="612" data-original-width="862" height="283" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaOW4vm6kHmm_4G_5lQIl1NQh7c_LRjqt_-Ko-TV-bD1ITbxYKWMNWcRjA-GkRrtiQFPdjNQdZUAjCboEj_eyLlhAloV5lX4TM6ydJL5Ogf2iK7RNqHgXOqXs5XGrIr5hGnxXM/s400/subsystem_set.png" width="400" /></a></div>
<br />
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">You are now ready to start your first SDL project. </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">Right click the 'Source Files' folder and select 'Add ->; New Item...'. Select a 'C++ File', give it meaningful name if you want, and click OK. Open the empty C++ file, and copy the following:</span><br />
<pre class="prettyprint">#include "sdl.h"
#include "sdl_image.h"
#include <iostream>
#include <stdio>
<span style="font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace;">
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int main(int argc, char* args[]) {
SDL_Window* window = NULL;
SDL_Surface* screenSurface = NULL;
SDL_Renderer *renderer=NULL;
SDL_Texture *texture=NULL;
SDL_Event event;
SDL_Rect r;
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("Could not initialize SDL. SDL_Error: %s\n", SDL_GetError());
}
else {
window = SDL_CreateWindow("SDL Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if (window == NULL) {
printf("Cannot create window. SDL_Error: %s\n", SDL_GetError());
}
else {
SDL_Rect arect;
screenSurface = SDL_GetWindowSurface(window);
SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0x00, 0x00, 0x44));
arect.x = 64; arect.y = 64; arect.w = SCREEN_WIDTH - 128; arect.h = SCREEN_HEIGHT - 128;
SDL_FillRect(screenSurface, &arect, SDL_MapRGB(screenSurface->format, 0x00, 0x77, 0x77));
SDL_UpdateWindowSurface(window);
SDL_Delay(500);
}
}</span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace;">}</span></span></span>
</pre>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Run the program, and if all is well it will show a window with a blue border and green centre.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com4tag:blogger.com,1999:blog-26685537.post-51755286368877162992019-01-29T11:35:00.000+01:002020-05-24T17:16:05.578+02:00Extruder Trouble<span style="font-family: "arial" , "helvetica" , sans-serif;">After more than 100 hours successful printing on my new 3D printer, it suddenly failed heavily.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">An overnight print stopped halfway, leaving a mess of scattered plastics on my print bed. The problem was obvious: the thermistor got loose from the hot end, and the printer stopped after detecting a 'thermal runaway'. Prior to this however the temperature of the head did exceed the maximum for PLA and so the nozzle seemed jammed with burnt plastic and it looked like the inner tube of the hot end was filled with plastic. </span><br />
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">After spending two days trying to solve the jamming without any success I decided to give up and order a new hot-end. And not go for the lowest price this time, so I chose the <a href="https://e3d-online.com/lite6" target="_blank">E3D Lite6</a>. Still not very expensive at about €35,- </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"></span><br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaxAbwclt_hy-sokUFyPv1DlDWxVG8s9iA5sSJ9gwgsuhdG9sCQZwgp8tt3zQAUMfkKtZDI8RM2vm8Xw1N8taO59JPcZygAaGoc0zo4lkjFSLzhNDM2LHqCQQdxSX6j7Dfgw3k/s1600/E3D+Lite6+slice.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="400" data-original-width="170" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaxAbwclt_hy-sokUFyPv1DlDWxVG8s9iA5sSJ9gwgsuhdG9sCQZwgp8tt3zQAUMfkKtZDI8RM2vm8Xw1N8taO59JPcZygAaGoc0zo4lkjFSLzhNDM2LHqCQQdxSX6j7Dfgw3k/s320/E3D+Lite6+slice.jpg" width="136" /></a></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The kit is really complete. Everything from the smallest grub-screw to the required Allen-keys is included. </span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4QjfniF4MCndxJUTNye2UIq9217YpLw-Mg5l6CVvpQm3-pW1MeSziB4ZWSh4uyruiyITDf_66cLoulOAZe17aluX5LCe6fsmfSpvs54BhLwTO3yCLqeeoj5JmTD5yoztWQ4kE/s1600/WP_20180515_20_33_32_Pro.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="899" data-original-width="1600" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4QjfniF4MCndxJUTNye2UIq9217YpLw-Mg5l6CVvpQm3-pW1MeSziB4ZWSh4uyruiyITDf_66cLoulOAZe17aluX5LCe6fsmfSpvs54BhLwTO3yCLqeeoj5JmTD5yoztWQ4kE/s640/WP_20180515_20_33_32_Pro.jpg" width="640" /></a></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">And there is a really good <a href="https://e3d-online.dozuki.com/Guide/Lite6+Assembly/2?lang=en" target="_blank">assembly guide</a>.Which, near the end, mentions that after assembly you should tension the nozzle again when the extruder is hot. Of course I assumed that would not be necessary if I just tightened it properly in the first place. WRONG!</span><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiilviwKDBXTUdfbSikpAL6x6E_MukF47hbjoFiUweVvNfEoZYaw1GfpGoL_vnfYgl4PKWsRy85vkfjSqODp5g6NaO8tSEOApWn3vWgLYYSUdCjL5CydOXMYyzv1sO34yaCdVnw/s1600/BlackSpots.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="827" data-original-width="1251" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiilviwKDBXTUdfbSikpAL6x6E_MukF47hbjoFiUweVvNfEoZYaw1GfpGoL_vnfYgl4PKWsRy85vkfjSqODp5g6NaO8tSEOApWn3vWgLYYSUdCjL5CydOXMYyzv1sO34yaCdVnw/s320/BlackSpots.png" width="320" /></a><span style="font-family: "arial" , "helvetica" , sans-serif;">At one of the following prints I suddenly found black spots and blobs. At first I assumed that the it was just over-extrusion and that the excess of plastic was slowly building up at the tip. So I decreased the extruder flow by a few percent, but that did not help. Then I searched for 'black blobs in 3d print' and many suggested that probably the extruder was leaking. Which was exactly what happened. And after tightening the nozzle again, now with the extruder at 230 degrees, the problem was solved. </span><br />
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">Despite the very promising first two prints using the new extruder, the third failed again due to a clogged nozzle. And so did the fifth, so I decided to give up on the 0.2 mm nozzle and go to 0.3. At first I was reluctant to do that, since somehow it always stuck in my head that a smaller nozzle would give cleaner results. Which is basically true, but not as much as you'd expect as explained in the '<a href="https://www.prusaprinters.org/everything-about-nozzles-with-a-different-diameter/" target="_blank">Everything about nozzle diameters</a>' post on the site of Prusa Printers. And it's just so much easier to get a good flow rate. With the 0.2 nozzle I often experienced that the filament feeding would 'skip' due to the fact that the filament just wasn't feeding through the nozzle fast enough. Something I tried to solve by increasing the temperature to 230 degrees. The disadvantage here is that any excess filament on the nozzle tip seems to burn and finally this burnt plastic will clog the nozzle.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com0tag:blogger.com,1999:blog-26685537.post-2888491025988450802018-04-03T22:37:00.002+02:002019-01-29T11:25:48.043+01:003D Printer V2 - Here We Go Again<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXV0wIGkXGNI0stAqcfux-9S30o1fQ_AZ64rwHrUHXxvH8qnFNL6MP3BAw9QXeUOME4mjUIQh9gGflgZCqLhduWsFEBiiPfPBUzv1UyB2TLyYeFM-UbkeqAgM2MVIdlFCWHfoV/s1600/P1030189.JPG" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXV0wIGkXGNI0stAqcfux-9S30o1fQ_AZ64rwHrUHXxvH8qnFNL6MP3BAw9QXeUOME4mjUIQh9gGflgZCqLhduWsFEBiiPfPBUzv1UyB2TLyYeFM-UbkeqAgM2MVIdlFCWHfoV/s320/P1030189.JPG" width="320" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Makr-B-Bot Version 1</span></td></tr>
</tbody></table>
<span style="font-family: "arial" , "helvetica" , sans-serif;">A few years ago <a href="http://c-scope.blogspot.nl/2015/05/the-makr-b-bot-part-1-getting-started.html" target="_blank">I built a 3D printer</a>, made completely from standard MakerBeam. Inspired by the design of the first <a href="http://printrbot.com/" target="_blank">PrintrBot</a>, which seemed a design that was easy to replicate using these little aluminium profiles. It turned out to be little more complicated than I originally thought, but in the end it worked out quite nicely. </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">A few things kept bothering me though. First it seems impossible to get rid of the overhang. When the arm is extended to the maximum, it tends to hang down. Not much, but with a layer height of 0.2 mm this soon becomes noticeable. Which also brings up the second annoyance: it is very hard to level the printbed. The adjustment nuts are difficult to reach and the mounting points are too close together, making it very hard to get the bed level. And every time I move the whole printer the process has to repeated.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">So I already decided that the next printer design should be a the 'gantry crane' model, which also happens to be the most popular DIY 3D printer model at the moment. With of course the <a href="https://www.prusaprinters.org/prusa-i3/" target="_blank">Prusa i3 </a>as the absolute benchmark.</span><br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="clear: right; float: right; margin-bottom: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKAhCAnzE0iyD0dUhg467UsLRQexLKJxQZg9xlfwOzyHRYmJR4bOvjZPk8unMuU5CeRrCpmgUbpdTrqyH8p5sQPsGVaC8i0xCUI_SQnjar4FyhZdpAptWPryJWbaZdV-Vwi8YO/s1600/openbeam-9-pieces-of-240mm-clear-anodised-openbeam.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" data-original-height="600" data-original-width="800" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKAhCAnzE0iyD0dUhg467UsLRQexLKJxQZg9xlfwOzyHRYmJR4bOvjZPk8unMuU5CeRrCpmgUbpdTrqyH8p5sQPsGVaC8i0xCUI_SQnjar4FyhZdpAptWPryJWbaZdV-Vwi8YO/s200/openbeam-9-pieces-of-240mm-clear-anodised-openbeam.jpg" width="200" /></a></span></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: "arial" , "helvetica" , sans-serif;">9 pieces of 240mm clear anodised OpenBeam</span></td></tr>
</tbody></table>
<span style="font-family: "arial" , "helvetica" , sans-serif;">This time it started with the 'end of line' sale at <a href="https://www.makerbeam.com/" target="_blank">Makerbeam </a>of a 9 pieces set OpenBeam, originally intended for building a <a href="http://reprap.org/wiki/Kossel" target="_blank">Kossel type</a> printer. A quick sketch of the frame made me think that this was exactly what I needed to construct the basics. Which was wrong.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The parts in the set are 240 mm long. And a standard spindle is 300 mm. So obviously 240 it too short for the vertical stands. Also a standard print bed is 210x210, which means it has to move at least 200 to either side, making it a total travel of 400 mm. So I cut 2 beams in the middle, attached the 120 mm to a 240 piece and so created 4 pieces of 360. Connecting two pieces of OpenBeam is actually quite simple since the come with a 3mm centre hole. Just cut tap some M3 in it and screw in some M3 thread (a 2 cm piece is enough) Then just screw the other beam on there and you're done. If tightened properly it's even hard to see where the two beams are attached. And so, with 4 pieces of 360 and 3 pieces of 240, the design seems a lot more practical.</span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuFv73pr8IY-ZM8Tdj9PE9XyysTuBxvjK732SCaQ8Kw-aAIzPbZjwsvXVb_V9DIiVOn1SZ-sA3slRyyugMlrp9mnbwOXprgclg6oW0HQoiXrQQr_Y5Glw62656Ep-CfyzyWbYS/s1600/3D+Printer.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="423" data-original-width="385" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuFv73pr8IY-ZM8Tdj9PE9XyysTuBxvjK732SCaQ8Kw-aAIzPbZjwsvXVb_V9DIiVOn1SZ-sA3slRyyugMlrp9mnbwOXprgclg6oW0HQoiXrQQr_Y5Glw62656Ep-CfyzyWbYS/s320/3D+Printer.png" width="291" /></a></div>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Partslist</span></h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">When building the previous printer I already found that buying all the parts as separate items often exceeds the price of a complete printer kit from China. And things have not changed since then. That's to say the individual parts did all get a little cheaper, but so did the kits. For a mere €100 ~ €150,- you can buy a a minimal Chinese kit that contains almost all parts required to build a full printer. </span><br />
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">Anyway, here is the full list, with prices.</span><br />
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">OpenBeam 240mm (9p) clear OpenBeam €17.33 </span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlspppToo-ld9bg8rEjKbUXp-YZaQl5yc_q9ZZorOR9E36wDfazmg6XNbYtayOY5Sog_U4thdCVcB_hnb_J1Efm9stutbxsvMTJMJ7m3SaDVX8qqaN68TajwEMqJkft7QdtVTw/s1600/P1030195.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlspppToo-ld9bg8rEjKbUXp-YZaQl5yc_q9ZZorOR9E36wDfazmg6XNbYtayOY5Sog_U4thdCVcB_hnb_J1Efm9stutbxsvMTJMJ7m3SaDVX8qqaN68TajwEMqJkft7QdtVTw/s200/P1030195.JPG" width="200" /></a></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">OpenBeam Hexagon head bolts 6mm (100p) for OpenBeam €6.50<br />MakerBeam MakerBeam XL right angle bracket (12p) €8.95</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">Threaded rod for Z-axis dia.8mm 300mm 2 x €9.95 = € 19,90</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">Flexible coupling. 5 x 8 mm 2 x€4 = €8,-</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">GT2-6 belt € 2.75 x 2 = € 5.50<br />A4988 3D printer stepper driver € 2.85<br />Hotend Long 1,75mm € 11.95<br />Hotend cooling Fan holder € 3.36<br />NTC 100K with wire € 1.95<br />PTFE Teflon tube 2mm € 4.25<br />3d printer Heatbed spring € 0.55 x 4 € 2.20<br />GT2-6 20 Teeth Pulley Alumi € 2.95<br />Mounting bracket NEMA 17 € 4.45</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">Arduino Mega 2560 - clone € 15,95 1 € 15,95<br />3D Printer controller RAMPS 1.4 € 9,95<br />3D Printer Aluminium + PCB Heatbed MK3 € 22,50</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">MK8 extruder 3d printer kit € 14.95</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">NEMA17 stepper |1.8 deg/step| 4 kg/cm | 42BYGHW609L20P1X2 3 x €12.50 = €37.50<br />NEMA17 stepper |1.8 deg/step| 5 kg/cm | SL42S247A €15,-<br />Stepstick DRV8825 motordriver 2 x €5.75<br />Steel rod, 8mm x 1m 2x €3.75 = €7.50<br />Microswitch endstop 4 x €2.25 = €9.00<br /> LM8UU linear bearing 4 pcs. €5,-<br />Belt roller with bearings €3.50</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">300 W PSU: €0,- (taken from an old server frame)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: large;">Total: €246.74</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: large;"><span style="font-size: small;">Again, quite some money, but less than the previous build.</span></span></span><br />
<br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: large;"><span style="font-size: small;">Building</span></span></span></h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiI0_ivB_Jq-36rTglai0Np7QibyC2mUUOVibqb45do_sfK7CmmWfewkR4gy6tKG8ffuCqFymsTTEwzGIjVGFzJ0kpnwLAACG_Efk07IqDBZpsOHRc2Va_oX7w6KP4yd7soih2/s1600/P1030196-COLLAGE.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1201" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiI0_ivB_Jq-36rTglai0Np7QibyC2mUUOVibqb45do_sfK7CmmWfewkR4gy6tKG8ffuCqFymsTTEwzGIjVGFzJ0kpnwLAACG_Efk07IqDBZpsOHRc2Va_oX7w6KP4yd7soih2/s320/P1030196-COLLAGE.jpg" width="240" /></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: large;"><span style="font-size: small;">As with my previous build, I just started with assembling the base. And because I remember how important stability is I added some extra makerbeam (10x10) bars at the bottom. </span></span></span><br />
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: large;"><span style="font-size: small;">At least I could use my existing 3D printer to print some essential parts.</span></span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQynjzpa9LobYSC2Ikuf6myd0Pbd87ImpOS3wygrzjqqAxkQ_6LG7m8XEuqviDHJE3v4lgWzebfJ-qJ3AnQAlao2adPRTaosszdL7qCK_74Ov6LA-26mHo05uIIP_su65S13DK/s1600/P1030199-COLLAGE.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1600" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQynjzpa9LobYSC2Ikuf6myd0Pbd87ImpOS3wygrzjqqAxkQ_6LG7m8XEuqviDHJE3v4lgWzebfJ-qJ3AnQAlao2adPRTaosszdL7qCK_74Ov6LA-26mHo05uIIP_su65S13DK/s400/P1030199-COLLAGE.jpg" width="400" /></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: large;"><span style="font-size: small;">The Y-Carriage was constructed from standard makerbeam pieces, and some aluminium strip:</span></span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuJHizJNCRSSYpWlxtbO5HWmRIX4W6TE-uuiKv26HUwAQMpDoMSMh9ogfLRPlF2hVGtH_yjgLKJ6p4HJ5ZwN4JElPSF8qd-AfAeBNYXrnI335mPuAD6dJkxcgqhuKdZw3AQWlN/s1600/Carriage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1103" data-original-width="1111" height="317" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuJHizJNCRSSYpWlxtbO5HWmRIX4W6TE-uuiKv26HUwAQMpDoMSMh9ogfLRPlF2hVGtH_yjgLKJ6p4HJ5ZwN4JElPSF8qd-AfAeBNYXrnI335mPuAD6dJkxcgqhuKdZw3AQWlN/s320/Carriage.png" width="320" /></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: large;"><span style="font-size: small;">I used only 3 linear bearings for the slider this time since that is what they use on the Prusa printers as well. I assume a three point support is indeed less likely to wobble. (EDIT: Later I found this was not a good idea, as the top left corner now was hanging down a bit . So I mounted the fourth bearing)</span></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: large;"><span style="font-size: small;">The Y axis motor assembly is a single hose clamp.</span></span></span><br />
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: large;"><span style="font-size: small;">The first assembly:</span></span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmj42hgvxfezCzwwIxRx0h9y-gVLH2LYmFO3rLTb6oD-wKqVTQz5iOcsTD7Ch2U2RHuwbQbrrPle4Jy0FDiuRj4N9sHimqdrMoA6KU6nK9JzJJDLNHx81jDPJQRwrMQd1fSG1R/s1600/P1030208.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmj42hgvxfezCzwwIxRx0h9y-gVLH2LYmFO3rLTb6oD-wKqVTQz5iOcsTD7Ch2U2RHuwbQbrrPle4Jy0FDiuRj4N9sHimqdrMoA6KU6nK9JzJJDLNHx81jDPJQRwrMQd1fSG1R/s400/P1030208.JPG" width="400" /></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: large;"><span style="font-size: small;"> And the finished unit, as it is now:</span></span></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-BLm6-6fnNS6EUikJ-6oRUTGwyKZoSXp3QPJd9Li-C7h3779N4RE2kYfMkh2YMqf1OsSrcXjc4sSn8XY91qH-_T4J7FLZcz5S3g8s0QD9vVKqvXw1DSUq2zl3l_c37t0WPi5Y/s1600/P1030213.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-BLm6-6fnNS6EUikJ-6oRUTGwyKZoSXp3QPJd9Li-C7h3779N4RE2kYfMkh2YMqf1OsSrcXjc4sSn8XY91qH-_T4J7FLZcz5S3g8s0QD9vVKqvXw1DSUq2zl3l_c37t0WPi5Y/s400/P1030213.JPG" width="400" /></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: large;"><span style="font-size: small;"> Some details:</span></span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMKHGetYUphAMP2kOlNrISpdHW_sA4aDEBfrhSq3Zax54Yg1I73XriYJydwlJnOPYAuLqPdWk2dNju3Pr1vojwiqFRcTU5-EPTPm25l23SqrDEs109kwoNUrt4UFmPUvG1Gisd/s1600/P1030214-COLLAGE.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1600" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMKHGetYUphAMP2kOlNrISpdHW_sA4aDEBfrhSq3Zax54Yg1I73XriYJydwlJnOPYAuLqPdWk2dNju3Pr1vojwiqFRcTU5-EPTPm25l23SqrDEs109kwoNUrt4UFmPUvG1Gisd/s640/P1030214-COLLAGE.jpg" width="640" /></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: large;"><span style="font-size: small;"> </span><br /> </span></span><br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
SILENCE!</span></h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Although the very first print comes out acceptable, there is one serious problem: the whole printer makes a terrible noise. Apart from the four fans, which all contribute a bit, there is the X carriage motor that is really loud and the Y motor that is less loud but still annoying. It looks like the stepping itself is the problem. Certainly on the X carriage this is even a visible problem, since in some positions the belt starts resonating more than a centimetre. So I decided to invest in two Stepstick DRV8825 motor drivers to replace the original A4988 drivers. And I replaced the the X carriage motor with a more powerful one. This makes a lot of difference. Both X and Y now move smooth and silent. Then I placed the whole printer on a 2 cm layer of foam and that makes it even better. You can no longer hear the printing itself, it's the fan noise that prevails.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">
Pronterface for 2...</span></h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Now I have two printers that are physically different, I have problem with Pronterface. There is no way to save or load custom settings. So if I set it up for the new printer, the settings for the old one are simply replaced. Pronterface (or actually the Printrun) settings are stored in</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">C:\Users\<myname> as 'printrunconf.ini' which is a simple readable text-file. So I just copied that to a different folder, and adjusted the setting for my new printer. One day I might even write a Batch file that automatically swaps the .ini files for the specific printer...</myname></span><br />
<br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><myname>..or Octoprint</myname></span></h3>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWJ7YpONEbVbX89ljPIO5lKs4Ta_hIfIXPrJaWvSr704v7KXDoei7R6mRB1bDB-jy9UqnWGZvDm7Al0iACAbJyfSBa7v-MtrtP_9h7u9rgAwIeFbJaDUOrWow6_So35jmw4nbA/s1600/octoprint_logo.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="200" data-original-width="249" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWJ7YpONEbVbX89ljPIO5lKs4Ta_hIfIXPrJaWvSr704v7KXDoei7R6mRB1bDB-jy9UqnWGZvDm7Al0iACAbJyfSBa7v-MtrtP_9h7u9rgAwIeFbJaDUOrWow6_So35jmw4nbA/s200/octoprint_logo.png" width="200" /></a><span style="font-family: "arial" , "helvetica" , sans-serif;"><myname>After facing some troubles with printing from my laptop, I realized this was the reason I mounted a LCD controller board to my first printer so I could print from SD card. After considering the option of moving the controller to my new printer I suddenly remembered reading about<a href="https://octoprint.org/" target="_blank"> OctoPrint</a>, and how convenient it is to have printer that can be controlled over WiFi. Which is true. A Raspberry Pi B+ with <a href="https://octoprint.org/download/" target="_blank">OctoPi </a>on it is definitely a great way to create a stand-alone printer which can be controlled through a web-browser. </myname></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><myname>My only problem with this setup is that it can sometimes take quite long to connect to the OctoPrint server. After I started my browser and pointed it at the IP address it sometimes takes more than a minute before the control page is visible and responds to my clicks. But once the file is loaded and the print starts everything runs smooth.</myname></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><myname>USB trouble</myname></span></h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><myname>Since my other printer has a controller-board attached with a SD card slot, I have not been printing a lot from Pronterface directly so I forgot about this. But sometimes it seems like the serial stream to the printer stops or just passes command very slowly. The printhead stops or moves at a very slow pace which causes humps in the plastic. After some time (30 seconds to a minute) it resumes normal speed and prints as normal. I found this happened to others as well, but there does not seem to be a general solution, or even a definite cause for it. So I applied two of the tips I found so far:</myname></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><myname>- Disable the 'Monitor Printer' setting in Pronterface (Settings->Options). You won't be able to see the temperature of your heater and bed, and there will be no text window with printer messages any more. But this makes the data stream to the printer probably more efficient, and there is less chance that your computer is waiting for an answer that may not come. (Pure guessing though, I have not actually monitored the stream to see what's actually going on)</myname></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><myname>Check your 'Power Settings: </myname></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><myname>- Make sure the computer is set to 'Maximum Performance' and it does not go to sleep after 2 hours..</myname></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><myname>- Also in the power settings: check the setting of the USB and disable the "USB Selective suspend"</myname></span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBbPU1q0_G5blelZMW9Q08VEAaiP3uVGTZ7_AvIGFkRWEFMDe84Q0k5TX7UOa-NlQLW2PhmN7H1MjPkPVm4AUfOivLpMMpiVteq-uEZe6m9eux5ktdkLPCSOcv_G-9U9pIp1Yl/s1600/USB+Settings+Power+Mode.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="442" data-original-width="404" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBbPU1q0_G5blelZMW9Q08VEAaiP3uVGTZ7_AvIGFkRWEFMDe84Q0k5TX7UOa-NlQLW2PhmN7H1MjPkPVm4AUfOivLpMMpiVteq-uEZe6m9eux5ktdkLPCSOcv_G-9U9pIp1Yl/s320/USB+Settings+Power+Mode.png" width="292" /></a></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><myname><br /></myname></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><myname><br /></myname>
<myname> </myname></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com1tag:blogger.com,1999:blog-26685537.post-82123645118419486522017-06-17T10:44:00.000+02:002017-09-05T07:59:39.796+02:00Welcome to FPGA landWelcome to FPGA land.. where the processing is faster, the resources more basic, and the number of three or four letter acronyms is huge. FPGA's (Field Programmable Gate Arrays) always fascinated me, but I never had the chance to work with them. Since they are a more application specific and harder to use than microcontrollers it has taken a little longer before they appeared in the hobby-space. Nowadays there are several development board available. Joel Williams did a really<a href="https://joelw.id.au/FPGA/CheapFPGADevelopmentBoards" target="_blank"> nice list of boards</a> on his blog, so I don't have to repeat that. Still, a lot of the boards are $100,- and more, which still is a significant amount of money. Then I bumped into the <a href="https://numato.com/products/fpga-boards/" target="_blank">Numato Labs</a> 'Elbert V2 -Spartan 3A Development board' at only $29,95, which seems like a nice 'lets have go' price.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAogXc5_-7KW_n6UWyATv55C474CCPQGlkX9zMaDX9S638wNtu_SGHfRVKx4X4CZ8C6RM_gh-NjwhzVOauFoUA-T_FSnCf3ohAuQo11SKEM1xvGjUi4HqghI9eSX_jCo8F4avY/s1600/ElbertV2+FPGA.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="735" data-original-width="1187" height="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAogXc5_-7KW_n6UWyATv55C474CCPQGlkX9zMaDX9S638wNtu_SGHfRVKx4X4CZ8C6RM_gh-NjwhzVOauFoUA-T_FSnCf3ohAuQo11SKEM1xvGjUi4HqghI9eSX_jCo8F4avY/s320/ElbertV2+FPGA.png" width="320" /></a></div>
Getting it connected to my PC was easy. Just plug in the USB cable, and the board immediately starts running it's demo. Windows automatically recognizes and installs it as a USB comport. To use the board you should install the Numato Lab USB CDC Driver, which is available on their website. After downloading and unpacking the driver, just find the USB serial port in Windows Device Manager, right click and select 'Update driver'. Use the 'Browse my computer for drivers' option to point it at the driver you just downloaded and install. The port will now show up with the board name:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw2dtyW1Sik4DB83dc3x0IjzH0kJQoao6LoTI820Bk3t4zW3sC-7DNLJW6O61vp2z7XvIClmTe39z4LYyImdXSYzamuL3-L2dBHCTG8Z3qr1FFhMZ_ZaOMJUa5mCBbxpnp2WZf/s1600/Xilinx-Device+manager_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="60" data-original-width="568" height="65" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhw2dtyW1Sik4DB83dc3x0IjzH0kJQoao6LoTI820Bk3t4zW3sC-7DNLJW6O61vp2z7XvIClmTe39z4LYyImdXSYzamuL3-L2dBHCTG8Z3qr1FFhMZ_ZaOMJUa5mCBbxpnp2WZf/s640/Xilinx-Device+manager_2.png" width="640" /></a></div>
<br />
<h4>
Software</h4>
This appeared to be the hard part. There is basically just one option to program the Spartan-3 and that is the Xilinx ISE Design Suite. It is free, but it has not been maintained since 2014, so Windows 10 is not officially supported. It's also HUGE. It's nearly 7GB download, and takes up exactly 20GB of disk space after installation. So be prepared to spend at least a day to get everything up and running.<br />
First get the Xilinx WebPack at:<br />
https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/design-tools.html<br />
I downloaded the 'All platforms' suite, which comes in 4 separate parts:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi81oQv7yELbTO4R2zSfiIZPB0Ssn5zhPKKfyWb6A66BVcSTMKhom6I0KHOMFTAMrtb07stufp-HgpTywznnNSgROEbB__iagZOM7RRUiygalMcxMyMLR_rIIvBS7WqHN_mmtRq/s1600/Xilinx-All+platforms.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="357" data-original-width="495" height="287" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi81oQv7yELbTO4R2zSfiIZPB0Ssn5zhPKKfyWb6A66BVcSTMKhom6I0KHOMFTAMrtb07stufp-HgpTywznnNSgROEbB__iagZOM7RRUiygalMcxMyMLR_rIIvBS7WqHN_mmtRq/s400/Xilinx-All+platforms.png" width="400" /></a></div>
But further down the page there are also complete installers for either Windows or Linux.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjUJMh4M7kwwk-OE3qtcL31lw8vTaQiEsYzDqVGc2v4xwqNNpWttrY0Bo-jJUbkC1dyoQzc8Kj4F1Asu49YlNo3hsfdrFCTP7sYA5j60sDg81TPbEnTolcNIn7_Vav5XktPPlq/s1600/waiting-meme-1024x590.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="590" data-original-width="1024" height="115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjUJMh4M7kwwk-OE3qtcL31lw8vTaQiEsYzDqVGc2v4xwqNNpWttrY0Bo-jJUbkC1dyoQzc8Kj4F1Asu49YlNo3hsfdrFCTP7sYA5j60sDg81TPbEnTolcNIn7_Vav5XktPPlq/s200/waiting-meme-1024x590.jpg" width="200" /></a></div>
All together this is 7 GB download, so you'll need some patience here.<br />
If you downloaded the four parts as shown above, unzip only the first one (the one that ends in .zip, all the others have an extra .zx extension). This will create the file 'xsetup.exe'. Just click this to start the setup process. Which also takes at least an hour, so again: be patient.<br />
After installation you will have to run the 'settings64.bat' file to setup the environment variables, which is in C:\Xilinx\14.7\ISE_DS.<br />
Then click the ISE Design icon on your desktop to start the program..or not. On my machine it started, but crashed with the message: '_pn.exe stopped working'. The Xilinx forum came up with the following solution:<br />
<br />
<br />
<i>For everyone trying to use Xilinx ISE 14.5 in Windows 8 x64. <br />Rename libPortability.dll to libPortability.dll.orig, and copy libPortabilityNOSH.dll to libPortability.dll.<br /><br />Do this in:<br /><br />C:\Xilinx\14.5\ISE_DS\ISE\lib\nt64<br />C:\Xilinx\14.5\ISE_DS\common\lib\nt64 (copy dll from first location)<br /><br /> This turns off SmartHeap.</i><br />
<br />
OK. So we'll have to do without the SmartHeap, whatever that is. But now the program indeed starts fine, also on my Windows 10 machine.<br />
Next step is to acquire a license. The software points you at the right page on the Xilinx website, where you'll have to register again, select the required license and have this key mailed to you. This can be imported into the software, and finally we can start doing some real work...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzzFGWY0eoEZnid6K3zBOJ5J3cy9M5s5d7dednmL7lPfqHhNWE2HZ0hEEa2NfeOGSChXG_SoXXdhvjPxYbVQAjjgZEWSuxiBZzIT3DZ1ZTxUfbm2EwG5FyXoUZvf82odjkx6rJ/s1600/Xilinx+-+ISE.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="569" data-original-width="795" height="457" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzzFGWY0eoEZnid6K3zBOJ5J3cy9M5s5d7dednmL7lPfqHhNWE2HZ0hEEa2NfeOGSChXG_SoXXdhvjPxYbVQAjjgZEWSuxiBZzIT3DZ1ZTxUfbm2EwG5FyXoUZvf82odjkx6rJ/s640/Xilinx+-+ISE.png" width="640" /> </a> </div>
<h3 class="separator" style="clear: both; text-align: left;">
Programming</h3>
<div class="separator" style="clear: both; text-align: left;">
A FPGA is programmed using a HDL (Hardware Description Language). There are two common flavours right now: Verilog and VHDL. I chose VHDL, mainly because I a colleague lent me a book named '<a href="http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0470185317.html" target="_blank">FPGA Protototyping By VHDL Examples</a> Xilinx Spartan-3 Version ' by Pong P.Chu. (there is a <a href="http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0470185325.html" target="_blank">Verilog version</a> too, so it does not really matter). </div>
<div class="separator" style="clear: both; text-align: left;">
Now this is a really expensive book, but there are also plenty of online resources. However, they may not all be specific to the Spartan-3. The FPGA centre for example has a nice <a href="http://fpgacenter.com/examples/MyFirstVhdl/project.php" target="_blank">VHDL Starter Guide</a>.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com2tag:blogger.com,1999:blog-26685537.post-27322966686914194312017-03-05T17:28:00.001+01:002017-04-04T12:59:51.947+02:00LoRa with the LoRa BeeFor some time already LoRa is the new hype. This Long Range Low Power radio technology makes it possible to send small amounts of data over long distances using very little power. I's associated mainly with the LoRaWAN network and IOT applications, but LoRa itself is just the radio and the low-level protocol that is used to transmit and receive bytes. You could just use two transceivers to transfer data one to one, not using any network protocol or dedicated access points.<br />
<br />
As I wanted to start experimenting with LoRa at lowest possible costs I bought a set of <a href="http://wiki.dragino.com/index.php?title=Lora_BEE" target="_blank">LoRa Bee modules from Dragino</a>. At US$36 ( including shipping) for a set of two, it was the cheapest option at the time (Second half of 2016). That they also came with a neat antenna was definitely a plus.<br />
But when it became time to actually connect them and send some data,I found this a little bit harder than expected.<br />
First the 'Bee' form factor itself. Its got a 2 mm pitch header that will not fit a standard breadboard. And the pins are too small for standard female to male jumper wires.<br />
Second it is 3.3V only. So I bought an Arduino Mini Pro, 8MHz - 3.3V version, and made some jumper wires from an IC socket and a standard header.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW2rGLC1fV1tQ2XM0ic8oUalNX4Akb2VqBW3Dq6s-pxuqi3WjbiX_mn6z8Bho-AGp0W4h4oI73yuuX6906ctJOE5I9GBhyphenhyphenrJKu3xX9nd6em16xQyUl2J-KR5R0BTxHydyUzZdv/s1600/LoraBee_Arduino_mini_pro.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="368" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW2rGLC1fV1tQ2XM0ic8oUalNX4Akb2VqBW3Dq6s-pxuqi3WjbiX_mn6z8Bho-AGp0W4h4oI73yuuX6906ctJOE5I9GBhyphenhyphenrJKu3xX9nd6em16xQyUl2J-KR5R0BTxHydyUzZdv/s640/LoraBee_Arduino_mini_pro.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOmhdvf51wxUU7IkKCMqZ8QbXquCVO2eVtYNm5CLcivpgYob7DmexQ6yayBXMuidzJ_x9EONqZ9pvEDqtltOaHSbnG_d9mABeE8jufWK-YhVVPLS9A4A8bg6EdUSzVmWpgKQA6/s1600/LoraBee_Arduino+Pro+Mini.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="278" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOmhdvf51wxUU7IkKCMqZ8QbXquCVO2eVtYNm5CLcivpgYob7DmexQ6yayBXMuidzJ_x9EONqZ9pvEDqtltOaHSbnG_d9mABeE8jufWK-YhVVPLS9A4A8bg6EdUSzVmWpgKQA6/s400/LoraBee_Arduino+Pro+Mini.png" width="400" /></a></div>
It's connected as follows: NSS-10, MOSI-11, MISO-12, SCK-13.<br />
<br />
<h3>
The WAZIUP LoRa Project</h3>
<br />
Next we need some software to drive it. And here it gets a bit harder. There are so many options, many extensively documented but usually in an experimental state. I found the article by Congduc Pham, <a href="http://cpham.perso.univ-pau.fr/LORA/RPIgateway.html" target="_blank">'A DIY low-cost LoRa gateway'</a> to come closest to what I wanted to achieve. And it actually contains a lot of information on connections, theory and applications. Professor Pham developed a simple protocol for just transferring data from multiple end-points to central server, without the overhead of the full LoRaWAN stack. All this as part of a 'WAZIUP' project that aims to bring this type of networking to sub-Saharan African countries. <br />
By just following the instructions in the .pdf it's easy to <a href="http://cpham.perso.univ-pau.fr/LORA/WAZIUP/Low-cost-LoRa-IoT-step-by-step.pdf" target="_blank">install the program to the Arduino</a> and get the <a href="http://cpham.perso.univ-pau.fr/LORA/WAZIUP/Low-cost-LoRa-GW-step-by-step.pdf" target="_blank">software on the Raspberry pi</a>.<br />
<br />
A few pitfalls that I found while getting this all to work:<br />
<br />
<br />
- The instructions tell you to clone the GIT repository . But GIT is not installed by default on Raspbian. Use the following commands to get it :<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;"><span style="color: blue;">$</span> sudo apt-get update</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><span style="color: blue;">$</span> sudo apt-get install git-core</span><br />
<br />
- Compiling the Lora Gateway software for Raspberry Pi B+. Since it is a B+, I compiled it for the the Raspberry Pi 2 , but later I found that my board is the original Raspberry Pi B+, which actually is a Raspberry 1. So if nothing happens after you start the lora_gateway, check your version.<br />
<br />
- Minimal time between messages. I started with the '<i>Arduino_LoRa_temp</i>' program, but I changed the time between messages on the Arduino to 1 minute ( <span style="font-family: "courier new" , "courier" , monospace;">idlePeriodInMin = 1;</span> ). After a while I noticed that the gateway did not receive every message, but actually only one in two. It looks like the software limits the amount of transmitted bytes per hour. After increasing the interval to 2 minutes it worked fine. When using the '<i>Arduino_LoRa_InteractiveDevice</i>' program I noticed that this has no limitations, and you can send multiple messages with short intervals. Officially there is a limit on the available radio time (Time On Air or ToA) of 1%, meaning you should not have actual transmissions for more than a total of 3.6 seconds per hour. This is explained in <a href="http://cpham.perso.univ-pau.fr/LORA/WAZIUP/FAQ.pdf" target="_blank">section 29 of the FAQ</a>.<br />
<br />
<br />
- The driver software is called SX1272.cpp, but I have a RF95 . The SX1272 is identical to the RF-95 as used on the Lora Bee. <br />
<br />
- When the messages are received on the gateway, but the message itself is unreadable they ar probably AES encrypted, and the gateway does not decode this. For testing it's easier to disable AES. Just comment out the define:<br />
<span style="font-family: "courier new" , "courier" , monospace;">//#define WITH_AES</span><br />
<br />
- CAD = Channel Activity Detection.<br />
- SIFS = Short InterFrame Space<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
What it looks like on the RPi when it's running:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6jErhWgeZ3ZFJ3lxsOxYJk9aip0szw_7FAcQstpmSCa8PvSSdssSg90aZjINEgXHh1x9qucYVxu7wx9cra7Gg50jBuOKuwbuJ-up-lAgNnFyN29GtjOfH0LRHEuo1kBizzlK2/s1600/LoraGateway_Running.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="524" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6jErhWgeZ3ZFJ3lxsOxYJk9aip0szw_7FAcQstpmSCa8PvSSdssSg90aZjINEgXHh1x9qucYVxu7wx9cra7Gg50jBuOKuwbuJ-up-lAgNnFyN29GtjOfH0LRHEuo1kBizzlK2/s640/LoraGateway_Running.png" width="640" /></a></div>
(And a minor issue, actually only related to the Rasperry Pi: SSH is now disabled on Raspbian. I could not connect through SSH to my Raspberry Pi running Raspbian Lite. An<a href="https://www.raspberrypi.org/blog/a-security-update-for-raspbian-pixel/" target="_blank"> article on the RPi site explains</a>
that on newer version SSH is disabled by default. It also has the
solution: just add a file 'ssh' to the root folder of the SD card. Make
sure you change the password..)<br />
<br />
What's really cool about the code is that mr. Pham made clever use of <a href="https://www.cooking-hacks.com/documentation/tutorials/raspberry-pi-to-arduino-shields-connection-bridge" target="_blank">the ArduPi library</a> so the code for the Raspberry Pi and the Arduino is (almost) identical.<br />
<br />
<h3>
LoraWan</h3>
When you want to go for a solution that is compatible with the LoraWan network, I suppose nothing beats the simplicity of the <a href="https://www.pycom.io/product/lopy/" target="_blank">LoPy</a>, an integrated module with Lora, WiFi and bluetooth, programmed in Pyton. There is a nice <a href="https://www.rs-online.com/designspark/easy-lorawan-and-much-more-with-the-lopy?cm_mmc=NL-EM-_-DSN_20170306-_-DM37895-_-HB_URL&cid=DM37895&bid=243005151" target="_blank">introduction on Element14</a>.<br />
<br />
Using LoraWan and the associated 'The Things Network' requires a nearby gateway. Which, if none is available, you can <a href="https://www.thethingsnetwork.org/labs/story/how-to-build-your-own-lorawan-gateway" target="_blank">build yourself</a>. At a total cost of about €200,- this is definitely not a bad deal. But if that's a little too much for just some simple experiments you can also build a <a href="https://www.hackster.io/ChrisSamuelson/lora-raspberry-pi-single-channel-gateway-cheap-d57d36" target="_blank">super cheap single channel gateway</a>.Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com0tag:blogger.com,1999:blog-26685537.post-7772441667259657772017-02-14T13:39:00.001+01:002017-03-08T09:58:26.310+01:00Recovery of a ZLinx ZP24D Radio Modem<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga68MOjHlgSLWKuF5FhTL_d9M7hOgBqSChLCf8HAP0zSFtCeGKcFIwhT_Y5FgYMmjYWPH2y_99rdqPc5Wq7CI7cYuuMqK7NjeGap4kk5_YgXVgmFyr0c52cLF4Rb2OPmN-3R9y/s1600/Zlinx-Industrial-Grade-Wireless-Radio-Modems.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga68MOjHlgSLWKuF5FhTL_d9M7hOgBqSChLCf8HAP0zSFtCeGKcFIwhT_Y5FgYMmjYWPH2y_99rdqPc5Wq7CI7cYuuMqK7NjeGap4kk5_YgXVgmFyr0c52cLF4Rb2OPmN-3R9y/s1600/Zlinx-Industrial-Grade-Wireless-Radio-Modems.jpg" /></a>The ZP24D-25RM is a 2.4 Ghz radio modem by B&B Electronics, branded as 'Zlinx'. Although sold as Plug&Play, it comes with basic software that actually shows quite a lot of options.<br />
And if you get some settings wrong (like the sleep mode) , it may become impossible to access the modem.<br />
The standard software however does not have a solution for this. There is no way to revert to 'Factory Settings' without connecting to the modem in command mode, which is no longer possible because the settings are wrong. There is no reset button or switch setting to manually reset it, so you are stuck .<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8NbvFZIgSDhN7l7tzIXvxS1Q0EEFAgFK7LVL2Dw474NTZ9zSxnabBlKjtAnZo2Mfh_Hs_jnR85FfbMpt2HVDFd7di6atIpxltRsdCduajX989FSSsEFy0_IlRueTjPUTVIiSd/s1600/WP_20170214_13_23_23_Pro.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8NbvFZIgSDhN7l7tzIXvxS1Q0EEFAgFK7LVL2Dw474NTZ9zSxnabBlKjtAnZo2Mfh_Hs_jnR85FfbMpt2HVDFd7di6atIpxltRsdCduajX989FSSsEFy0_IlRueTjPUTVIiSd/s320/WP_20170214_13_23_23_Pro.jpg" width="320" /></a>When opening the modem in search of a reset-switch, it was found however that the this unit is actually just a standard XBee module with additional interfacing electronics.<br />
<br />
The XBee is a XBEE PRO S1, a fairly common module, which makes searching for a solution a little easier.<br />
<br />
<br />
<br />
The following comes from the Digi website, ( http://knowledge.digi.com/articles/Knowledge_Base_Article/Recovery-procedure-for-XBees/?q=xbee+reset&l=en_US&fs=Search&pn=1 ) and disciusses ways to recover a 'sleeping Xbee:<br />
<br />
<span id="j_id0:j_id1:j_id284"><span id="j_id0:j_id1:j_id284:j_id285:j_id308"><span id="j_id0:j_id1:j_id284:j_id285:j_id308:j_id309:j_id316"><span id="j_id0:j_id1:j_id284:j_id285:j_id308:j_id309:j_id316:j_id317:j_id560:j_id562:1:j_id563:j_id564"></span></span></span></span><br />
<b>A note regarding sleeping XBees:</b><br />
If sleep mode has been enabled, the XBee may appear to be
unresponsive since X-CTU expects the radio to be awake when performing
any action on the radio. To see if the module is sleeping, go to the
terminal tab and watch the Line Status indicator. If CTS periodically
flashes, then the module is sleeping and only momentarily waking up.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAABqlZFV6YLmy2gF22w-3zgj6mqsmdRW6f39Xha8FrW_D6zMTI30IEIWyC8KQOzn0egEZuNwZ9HYnbDzB0nadS7P6P11ov1XVp7OZlEoc7nmr3BALd9SR6mHzklnzf3cVUpFa/s1600/rtaImage.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAABqlZFV6YLmy2gF22w-3zgj6mqsmdRW6f39Xha8FrW_D6zMTI30IEIWyC8KQOzn0egEZuNwZ9HYnbDzB0nadS7P6P11ov1XVp7OZlEoc7nmr3BALd9SR6mHzklnzf3cVUpFa/s1600/rtaImage.gif" /></a></div>
<br />
Now this is exactly what has happened to my Zlinx. And they offer a solution, which almost works, except for a few issues.<br />
<br />
First we will need the 'X-CTU' software, legacy version 5.2.8.6. :<br />
https://www.digi.com/support/productdetail?pid=3352&type=utilities<br />
(This was hard to find on the Digi website, but just Google it and the page will pop up.)<br />
<br />
<br />
Then, if the X-CTU software connects to the unit, it will not recognize the module since it contains non-standard firmware.<br />
To
solve this, go to the folder where the ZLinx software is installed
(E.G. C:\Windows\Program Files(x86)\B&B
Electronics\ZLinx\ZlinxManager) There you'll find the folder 'Update'
with the firmwares for the different types of Zlinx modems. Now copy all
these folders to the 'update' folder in the folder where the X-CTU
software is installed. (E.G. C:\Program Files (x86)\Digi\XCTU\update). <br />
<br />
Now you can start the X-CTU software, select the right COM port and baud rate and then go to the 'Modem Configuration' tab. Select the modem type from the drop-down box:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQkORkR3rStaluEzB3u1w2vhPPWmizoo-ziRBQepLp8CHSMCC92G0SfIsNMQC1RAMbnyxT8-lsgamotDW0YXcNEBJZD6dTh6VBDaeBgW_0D4c-ybwFTjCCzRealsgL-xi51m4K/s1600/Zlinx+Config.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQkORkR3rStaluEzB3u1w2vhPPWmizoo-ziRBQepLp8CHSMCC92G0SfIsNMQC1RAMbnyxT8-lsgamotDW0YXcNEBJZD6dTh6VBDaeBgW_0D4c-ybwFTjCCzRealsgL-xi51m4K/s400/Zlinx+Config.png" width="306" /></a></div>
FIRST click 'Show Defaults', so all settings are factory default. Then click 'Write'. The software will try to connect to the modem, and fail: <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid20-cT0_Ax1bgFkTeXzM7OJcst7mW8dIhMLYIFiZUQTCqXZSszvAel739ragxHV2p-aIOLke6mwd29qptyzPmj5GqrSs5CN9VqvJgI1QWigkEaJ8oRwwpoFeUEtUw-Uf-cqaX/s1600/Zlinx+Config+Action.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid20-cT0_Ax1bgFkTeXzM7OJcst7mW8dIhMLYIFiZUQTCqXZSszvAel739ragxHV2p-aIOLke6mwd29qptyzPmj5GqrSs5CN9VqvJgI1QWigkEaJ8oRwwpoFeUEtUw-Uf-cqaX/s320/Zlinx+Config+Action.png" width="305" /></a></div>
Now it's time to reset the XBee by switching power Off and On. The program will continue, and write the default settings to the XBee. Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com0tag:blogger.com,1999:blog-26685537.post-82381707821472133922016-07-02T23:23:00.002+02:002016-07-10T22:07:56.458+02:00The 'Makr-B-Bot' Part 2: Building the mechanics<div class="separator" style="clear: both; text-align: left;">
After <a href="http://c-scope.blogspot.nl/2015/05/the-makr-b-bot-part-1-getting-started.html" target="_blank">collecting the parts and studying the drawings</a> and instructions of the Printrbot it's time to start building. Before I got started I realized two things are very important for a 3D-Printer: It must be rigid, and all angles must be exactly 90 degrees. For lengths up to 30 cm the makerbeam seems rigid enough, although in the end I found that if you lift the bottom frame at one end it still deforms slightly. By using only the pre-cut length pieces I made sure all angles 90 degrees and all guides are exactly parallel .</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
This is the basic frame. Although over time many things have adde and modified, this part has remained basically unchanged. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLSkbsOCuqbfx01uWz99wduukF-lNxTyK9HumYwz1eHg2e_B5iW8wU4ndk2S93ffyK7TgEeM6Uz5JepDH4Yggjlfo7UvCXbqtA4EUIBy8SBti4GYdSb6z5bUhRIbYY5IRQeGOX/s1600/WP_20150421_19_07_15_Pro.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLSkbsOCuqbfx01uWz99wduukF-lNxTyK9HumYwz1eHg2e_B5iW8wU4ndk2S93ffyK7TgEeM6Uz5JepDH4Yggjlfo7UvCXbqtA4EUIBy8SBti4GYdSb6z5bUhRIbYY5IRQeGOX/s1600/WP_20150421_19_07_15_Pro.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Fixing the vertical rods,both at the bottom and at the top.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-yMYaeUU3uzA/V3gn74xIu3I/AAAAAAAAC04/5Y18eg59hKQ_m-MTL7IgLP0mks0sTcKOgCKgB/s1600/WP_20150421_19_07_15_Pro-COLLAGE.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://1.bp.blogspot.com/-yMYaeUU3uzA/V3gn74xIu3I/AAAAAAAAC04/5Y18eg59hKQ_m-MTL7IgLP0mks0sTcKOgCKgB/s400/WP_20150421_19_07_15_Pro-COLLAGE.jpg" width="300" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Mounted the Y-Axis stepper motor on a piece of Aluminium L-profile. A frame made from 4 pieces of 100 mm is used as the carrier. Four ball bearings on the side, four on the front to carry the Y-Axis sliders. </div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-B_f3E2s8ECk/V3gojmqxA0I/AAAAAAAAC1A/RGzMMxI71989NhLvtIrlkQIf4nhVDMUcgCKgB/s1600/WP_20150426_14_43_46_Pro-COLLAGE.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://2.bp.blogspot.com/-B_f3E2s8ECk/V3gojmqxA0I/AAAAAAAAC1A/RGzMMxI71989NhLvtIrlkQIf4nhVDMUcgCKgB/s320/WP_20150426_14_43_46_Pro-COLLAGE.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
The Y-Axis slider is assembled from two rods and some 100, 50 and 40 mm makerbeams. Note that on the photo's most parts are still assembled using Ty-Raps. Later on I replaced most of these with hose clamps, but during the build and test phase this is more flexible.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-86wUOvz0IWk/V3gqM65mRxI/AAAAAAAAC1M/F0gfa66crFAvjfpmn6Tp_PCwBC6c9vfKgCKgB/s1600/WP_20150426_17_55_29_Pro-COLLAGE.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://1.bp.blogspot.com/-86wUOvz0IWk/V3gqM65mRxI/AAAAAAAAC1M/F0gfa66crFAvjfpmn6Tp_PCwBC6c9vfKgCKgB/s400/WP_20150426_17_55_29_Pro-COLLAGE.jpg" width="300" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
The print bed will be placed on a frame made from two rods and some 100mm makerbeam pieces. I mounted a piece of 40mm beam to the front of the steppermotor and two 10mm ball bearings to that. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-bcuyYigwD4o/V3gr-5-gj0I/AAAAAAAAC1Y/9iSj5ZHb8T8PyQQobsZgGlhiewf6G99hQCKgB/s1600/WP_20150427_11_06_25_Pro-COLLAGE.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://3.bp.blogspot.com/-bcuyYigwD4o/V3gr-5-gj0I/AAAAAAAAC1Y/9iSj5ZHb8T8PyQQobsZgGlhiewf6G99hQCKgB/s400/WP_20150427_11_06_25_Pro-COLLAGE.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
The Z-Axis motor is placed in the corner, and fixed using one long hose-clamp.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-7b_xFj_-BvM/V3gkbv22GZI/AAAAAAAAC0Y/hpmnnPOwN6wk53zjpKB_49BBoRp-wvL7wCKgB/s1600/WP_20150514_13_59_09_Pro.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://1.bp.blogspot.com/-7b_xFj_-BvM/V3gkbv22GZI/AAAAAAAAC0Y/hpmnnPOwN6wk53zjpKB_49BBoRp-wvL7wCKgB/s320/WP_20150514_13_59_09_Pro.jpg" width="179" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
Basic setup, with some electronics to test if all motors run and if it all moves as expected... <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-Qe-voWIaf14/V3gkbnFqfjI/AAAAAAAAC0Y/HDUaWzgb6m0L85keu-9F190XQfb8hyalQCKgB/s1600/WP_20150503_16_50_58_Pro.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="358" src="https://4.bp.blogspot.com/-Qe-voWIaf14/V3gkbnFqfjI/AAAAAAAAC0Y/HDUaWzgb6m0L85keu-9F190XQfb8hyalQCKgB/s640/WP_20150503_16_50_58_Pro.jpg" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://2.bp.blogspot.com/-EcrPi8Hws34/V3gkbr4b5gI/AAAAAAAAC0Y/BaIop1Q0e7k-Atsxdyz55cByrt2NjlEOwCKgB/s1600/WP_20150421_19_07_15_Pro.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<br />Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com0tag:blogger.com,1999:blog-26685537.post-25366630907273327322016-05-01T11:19:00.002+02:002016-05-02T09:01:56.813+02:00Commodore VIC-20<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_D6lqWcxellvI2MTrT_eVb3dkKzdviipQgL-D8eqOqEBdqdhQeKdnv6tFEIqU7uqVh2fsBbJgIva9ydX7YKXy25ElKaXccy1tzAogKswqgH-DfF4GoP34rDJ2Sl8fVHY5-Lr_/s1600/VIC20_Front.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_D6lqWcxellvI2MTrT_eVb3dkKzdviipQgL-D8eqOqEBdqdhQeKdnv6tFEIqU7uqVh2fsBbJgIva9ydX7YKXy25ElKaXccy1tzAogKswqgH-DfF4GoP34rDJ2Sl8fVHY5-Lr_/s400/VIC20_Front.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilamOo4dQZgV307ZvbWBiPHcVizlkOYL12dPP4C89KqzfmEWiOE3QF5lb8cdjgNyvEyJZQPGhL8ZylfuNad4gs70CV20j7F7MZF1nJhIUQ8FwwYOQsEV6Z6UMYRE8Lu9XxnSmz/s1600/P1030013.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
The famous VIC-20. Predecessor to the Commodore 64, introduced in 1980 and thus being the very first affordable (US$300,-) colour computer. Almost three million units were sold at the time, so they are still not very rare.<br />
The unit I got (for €40,-) is in pretty good condition. The case has some inevitable yellow marks, caused by the reaction of UV light with the flame-retardand in the plastic. Something that could be removed (just google for 'RetrOBright') but I think I'll just leave it like it is and not risk damaging the plastic.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisXCc1Qh3hSUvz7cPf5QlbLUpRQoyBYkKfLWNqkfIis-smIqmE0liJuwJdzvJ7HKdsR8oK5vsugzEkeKgLcqIc-WDUJOF7OlhyphenhyphenL052WJVA64QcvLcWblITXmeFmSVz54YWSMb-og/s1600/P1030014-COLLAGE.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisXCc1Qh3hSUvz7cPf5QlbLUpRQoyBYkKfLWNqkfIis-smIqmE0liJuwJdzvJ7HKdsR8oK5vsugzEkeKgLcqIc-WDUJOF7OlhyphenhyphenL052WJVA64QcvLcWblITXmeFmSVz54YWSMb-og/s640/P1030014-COLLAGE.jpg" width="640" /> </a></div>
<div class="separator" style="clear: both; text-align: justify;">
The unit came without any cables, so the first step will be to find out how to connect the monitor. As always, this information is easy to be found. I found a complete <a href="http://www.retroisle.com/commodore/vic20/Technical/Hardware/VIC20ports.php" target="_blank">overview on Retro Isle</a> this time.</div>
<div class="separator" style="clear: both; text-align: justify;">
The video is on the 5-pin DIN plug, 2 = GND, 4= Video. </div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Unfortunately it does not seem to work. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg80CvJC0DML2PdV2inYDGJYZVpNMPbTxzETXr_Bw_FHZUk2n-U4rrpcGWAJ4mr6uOqmuy33ewtFf-Vkp3nl8fTvbCu5fqmgkfFpSKFURLbA8i9vcpkL5qVZmInbPWepbfHJiF5/s1600/WP_20160501_14_54_45_Pro.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="111" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg80CvJC0DML2PdV2inYDGJYZVpNMPbTxzETXr_Bw_FHZUk2n-U4rrpcGWAJ4mr6uOqmuy33ewtFf-Vkp3nl8fTvbCu5fqmgkfFpSKFURLbA8i9vcpkL5qVZmInbPWepbfHJiF5/s200/WP_20160501_14_54_45_Pro.jpg" width="200" /></a></div>
My small LCD monitor (that works fine with my TRS-80 and Acorn Electron) says 'no signal'. When measuring the video signal on the outside and on the board itself using an oscilloscope it looks good. But even adjusting the output level to the max does not solve the issue.<br />
<div class="separator" style="clear: both; text-align: justify;">
Just to be sure there is something wrong with it I connected it to the flatscreen television in the living room, only to find that it actually does work....</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwMDsOt1jPzeS30z-3RStWmqYdnxEEw61CXJ1AYK30WKWWt4gHSfmPk6zIejSq0kztpzHNgsw7pruGvEIh-b2m8qReyQfSjXYKFEP_133p-wmYJjg13ePFVeB1bVC7WjnEEd4R/s1600/WP_20160501_14_49_38_Pro.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwMDsOt1jPzeS30z-3RStWmqYdnxEEw61CXJ1AYK30WKWWt4gHSfmPk6zIejSq0kztpzHNgsw7pruGvEIh-b2m8qReyQfSjXYKFEP_133p-wmYJjg13ePFVeB1bVC7WjnEEd4R/s320/WP_20160501_14_49_38_Pro.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
Looking into this issue I found several references to the fact that the video signal of the VIC is really bad, which did not really matter in those days since the standard television and monitor was pretty tolerant, but is a problem for our modern, all digital, LCD screens.</div>
<div class="separator" style="clear: both; text-align: justify;">
On the 'Denial WIKI' there are a <a href="http://sleepingelephant.com/denial/wiki/index.php?title=Hardware_Modifications#Improving_VIC_Video" target="_blank">few suggestions on how to improve video output</a> which might be worth trying.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<br />Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com0tag:blogger.com,1999:blog-26685537.post-54318044559880325322016-04-25T22:12:00.001+02:002016-05-09T10:51:51.344+02:00Acorn Electron<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRkYw9dzDMzV0BrRV2ScrYgFCscBa4Le1CSfyZ7TH_NRN2cpotXGENrbBTmNjvFej_PhT6hpy5ZJ-TS2yVIXHQmuG1eAI_ocNrPib43yW4rv-AeBUSX3xTTvmUnknmVKA3U3k0/s1600/P1030011.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRkYw9dzDMzV0BrRV2ScrYgFCscBa4Le1CSfyZ7TH_NRN2cpotXGENrbBTmNjvFej_PhT6hpy5ZJ-TS2yVIXHQmuG1eAI_ocNrPib43yW4rv-AeBUSX3xTTvmUnknmVKA3U3k0/s320/P1030011.JPG" width="320" /></a></div>
For only €20,- I purchased an Acorn Electron in excellent condition. The Electron was developed around 1982 as a direct competitor to the the Sinclair Spectrum, and even though it had some drawbacks it was sold in such large quantities that it is not to rare today. No need to tell the history, since there is already <a href="http://www.theregister.co.uk/2013/08/23/acorn_electron_history_at_30/" target="_blank">an excellent article on The Register</a> about that.<br />
Although this machine was not really on my wish-list it's a pleasant surprise. First it's very compact and well-built. The housing is made of solid plastic, which even after 30 years does not show any colouring or scratches.<br />
The keyboard is pretty good, and although most keys have multiple functions they are not crammed with it like the Commodore 64 or Sinclair spectrum.<br />
The inside looks equally good. Just four screws have to be taken out to reveal a very clean motherboard and separate power supply .<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO76OKxh8oWbhxFxSTSiiHdM189PmE5k5gx0tPeXO5ujw2APXE2tOqwPQOd8l_AKDHlXrlciTc_IUHQZQWLPjwX3F4toCwu7EU8QDwckgflZLD0had7_2vwIvRiQBBZcnsqt9D/s1600/WP_20160423_12_29_25_Pro-COLLAGE.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO76OKxh8oWbhxFxSTSiiHdM189PmE5k5gx0tPeXO5ujw2APXE2tOqwPQOd8l_AKDHlXrlciTc_IUHQZQWLPjwX3F4toCwu7EU8QDwckgflZLD0had7_2vwIvRiQBBZcnsqt9D/s640/WP_20160423_12_29_25_Pro-COLLAGE.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ3GrWbMPca2g5ECxD0c3hChkBUT4lYSBQqlpXEEH_6ssomw5urC97ACune5wWTT-y-Jq1fX_OLpTjHgSGNe71Fen8lHXX161K3NjRHQgG6xujMtvA3KCiwIVbsrH2JB4giwIz/s1600/P1030005.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"> </a> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW_HjtmKsEuKCLfGEGhTQ0DzFnPD15pA2iqkusRvgtOCqvbtdyTWYzMBzsaAi8XUtlpYgWr1z4pzcMxpjc2aE0vbR1vWO-aqQpq_x50a16vcFmtpvgUnKVCLx7UIZPn8nw-_mh/s1600/P1030004.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
<div class="separator" style="clear: both; text-align: left;">
They were very serious about the shielding against electromagnetic radiation, as clearly visible on the keyboard side. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPUBrcagHpMYnhiEJNjs6eeEvwLjQVheigXuTmC1AtutA3bKgiI-s7wLlO0fbdLLXs2SJc8tYB7llaX0zNEDQqdBCaVvEMs7AScs6C7o4lcO5EI5jVd-EneBbYve1O9B_-4mTx/s1600/P1030005.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPUBrcagHpMYnhiEJNjs6eeEvwLjQVheigXuTmC1AtutA3bKgiI-s7wLlO0fbdLLXs2SJc8tYB7llaX0zNEDQqdBCaVvEMs7AScs6C7o4lcO5EI5jVd-EneBbYve1O9B_-4mTx/s320/P1030005.JPG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The user guide is excellent. It starts (as many user guides from this era) with an explanation of what a computer is: </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
"A computer is a general purpose electronic machine that can be
instructed to do a great variety of things - play games, perform complex
calculations, store and retrieve information, display graphs and so on."</div>
<div class="separator" style="clear: both; text-align: left;">
(You can read the whole guide on <a href="http://www.acornelectron.co.uk/ugs/acorn/ug-english/chapter001_eng.html" target="_blank">Acorn Electron World . </a>
)</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
What surprised me is the possibilities of the Basic interpreter. It actually has named functions and procedures, a 'repeat..until' loop, quite advanced graphic functions and a built-in assembler to write machine code. And this machine code is definitely worth checking out, because the Basic is not really fast...</div>
<h3 class="separator" style="clear: both; text-align: left;">
Enabling Colour on the composite video output</h3>
<div class="separator" style="clear: both; text-align: left;">
After working with it for while having it connected to a LCD monitor I noticed that it did not display colour. Initially worried that maybe the video circuit was damaged, I soon found out that this is intentional. The standard composite video output is set to black and white, but there is a link on the board that can be made to enable the colour signal. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI3Ib_BA9pBmeAWOw2NwgwoFOB_uSsMJpYMhHouXphCtxnVqHOYhHRsVhPetnGbobyOOyyu2BWRlsxJDVP77YnrNM7VXD9LhnccDeqTO9CLgTHXV2a7g6EqqCoX979JUkOrCS65A/s1600/WP_20160423_12_39_38_Pro.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI3Ib_BA9pBmeAWOw2NwgwoFOB_uSsMJpYMhHouXphCtxnVqHOYhHRsVhPetnGbobyOOyyu2BWRlsxJDVP77YnrNM7VXD9LhnccDeqTO9CLgTHXV2a7g6EqqCoX979JUkOrCS65A/s640/WP_20160423_12_39_38_Pro.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
It's marked 'LK4', and I just soldered a link on it. After that the monitor shows colour as expected, but I do have the impression that the letters are less crisp (which was probably the reason for Acorn to have just black and white as a default)</div>
<h3 class="separator" style="clear: both; text-align: left;">
Loading software</h3>
<div class="separator" style="clear: both; text-align: left;">
The machine came without a cassette recorder, but it should work with any standard audio recorder. Which in these days can be replaced by simple recording / replay software on a PC. I used Audacity to record a simple Basic program, and after fiddling a bit with the audio levels (for recording as well as playback) it worked fine.</div>
<div class="" style="clear: both; text-align: left;">
Loading standard software appeared a bit harder. Almost all software published for the Electron is available online, usually in the '.UEF' ('Universal Emulator Format') file format. A very simple Windows program named <a href="http://electrem.emuunlim.com/Tools.html" target="_blank">FreeUEF </a>can be used to either replay it as audio or to convert it to a .WAV file that can be replayed by other software. The last solution did not really work for me. Replaying the created .WAV files using Audacity always gave an error after reading the first block. All other blocks seem to load fine, but the program will not run on the Electron.</div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH56A8zOsrd8lbHgJPApU-L55-VWRz0r7JN1VNes4_LXnrPHgm_SzBVRROZJjLG_ZITflVwTl-C_nn2ruvcPHUj55Hhfz6bNl5sxrU2JEP-iw80_gdef1cYmsgB_f3ubsn2fh-/s1600/tapdancer.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH56A8zOsrd8lbHgJPApU-L55-VWRz0r7JN1VNes4_LXnrPHgm_SzBVRROZJjLG_ZITflVwTl-C_nn2ruvcPHUj55Hhfz6bNl5sxrU2JEP-iw80_gdef1cYmsgB_f3ubsn2fh-/s200/tapdancer.png" width="200" /></a><br />
Finally I used an Android App on my tablet named '<a href="https://play.google.com/store/apps/details?id=co.kica.tapdancer&hl=nl" target="_blank">TapDancer</a>'. This works flawlessly and because it actually looks like a Commodore Datasette it adds a little extra to the retro-feeling...<br />
<br />
And if you want to go a step further, there is the <a href="http://www.zeridajh.org/hardware/gosdc/index.htm" target="_blank">GoSDC </a> expansion module that lets you load programs from an SD card. But let's face it: compared to loading programs using the tape interface it only saves you a minute during the loading itself. So unless you switch programs every 5 minutes I doubt if this is really worth it.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com0tag:blogger.com,1999:blog-26685537.post-39259032235509465112015-11-03T21:21:00.002+01:002016-05-01T21:56:59.057+02:00Go for C64 - Part II - The Arduino Leonardo solutionAfter <a href="http://c-scope.blogspot.nl/2014/10/go-forc64.html" target="_blank">trying to turn my C64 into a USB keyboard</a> the whole project ended in a cupboard for a year at 90% completion. In the end the whole PICAXE - Arduino Pro Micro combination felt a bit clumsy.<br />
Then I recently stumbled on a blogpost where someone <a href="https://smittytone.wordpress.com/2014/02/16/the-sinclair-zx81-a-raspberry-pi-retro-restyle-part-1/" target="_blank">connects a ZX81 keyboard to the Arduino Leonardo</a>, and I found a cheap (€12,-) Leonardo-clone so I decided this was the way to go.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyDZ75st0MVxqgsXcGH9sfL_yvKFggz2JjWuhrkZnkByzrpUWcpjZ0LiCRMoCBYoqvineiAekQ9XXfZZU_nRQlMSjIekCPHra-5IQBZea4jKsVWrHT5-C18iSBznRdBKTAdy9C/s1600/ArduinoLeonardoFront_2_450px.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyDZ75st0MVxqgsXcGH9sfL_yvKFggz2JjWuhrkZnkByzrpUWcpjZ0LiCRMoCBYoqvineiAekQ9XXfZZU_nRQlMSjIekCPHra-5IQBZea4jKsVWrHT5-C18iSBznRdBKTAdy9C/s320/ArduinoLeonardoFront_2_450px.jpg" width="320" /></a></div>
The board came with front headers, which makes connecting the keyboard super easy.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinCSJFnqEG9IkE1PY7Fx0DW0YCT31COT8FR-kSx-Tq-Fad7VW0mlpwC80vK5K90Nas-Tpi1L3R4Wb4LkreqecyOKdFwu8MUuY24kj2mmzYxDQfVp_DZE0kaG5k83v5-Jkfamer/s1600/WP_20151103_21_33_38_Pro.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinCSJFnqEG9IkE1PY7Fx0DW0YCT31COT8FR-kSx-Tq-Fad7VW0mlpwC80vK5K90Nas-Tpi1L3R4Wb4LkreqecyOKdFwu8MUuY24kj2mmzYxDQfVp_DZE0kaG5k83v5-Jkfamer/s400/WP_20151103_21_33_38_Pro.jpg" width="400" /></a></div>
This is the C64 Keyboard matrix: ( diagram from the '<a href="http://www.waitingforfriday.com/index.php/C64_VICE_Front-End" target="_blank">WaitingForFriday</a>' blog)<br />
<br />
<br />
<br />
<img alt="Corrected C64 Keyboard matrix and keyboard connector diagrams" border="0" src="http://www.waitingforfriday.com/images/thumb/e/ee/C64_Keyboard_Schematics_PNG.png/600px-C64_Keyboard_Schematics_PNG.png" height="536" width="640" /><br />
It is connected to the Arduino as follows:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">A - D0</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">B - D1</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">C - D2</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">D - D3</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">E - D4</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">F - D5</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">G - D6</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">H - D7</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">0 - D8</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">1 - D9</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">2 - D10</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">3 - D11</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">4 - A0</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">5 - A1</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">6 - A2</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">7 - A3</span><br />
<br />
The code can be a mix of the code from '<a href="http://biosrhythm.com/?p=910" target="_blank">Biosrythm</a>' and <a href="https://smittytone.wordpress.com/2014/02/16/the-sinclair-zx81-a-raspberry-pi-retro-restyle-part-1/" target="_blank">TechTonic . :</a><br />
<br />
<pre style="background: #ffffff; color: black;"><span style="color: #004a43;">#</span><span style="color: #004a43;">include </span><span style="color: maroon;"><</span><span style="color: #40015a;">Keyboard.h</span><span style="color: maroon;">></span>
<span style="color: dimgrey;">// ZX81 USB Keyboard for Leonardo</span>
<span style="color: dimgrey;">// (c) Dave Curran</span>
<span style="color: dimgrey;">// 2013-04-27</span>
<span style="color: dimgrey;">// Modified with Function keys by Tony Smith</span>
<span style="color: dimgrey;">// 2014-02-15</span>
<span style="color: dimgrey;">// Adapted for use with Commodore 64 Keyboard by Cees Meijer</span>
<span style="color: dimgrey;">// 2015-11-04</span>
<span style="color: dimgrey;">// Enable the debug mode (serial output) by keeping F7 pressed when </span></pre>
<pre style="background: #ffffff; color: black;"><span style="color: dimgrey;">// starting the program</span>
<span style="color: dimgrey;">// Special Commodore graphic characters are not implemented</span>
<span style="color: #004a43;">#</span><span style="color: #004a43;">define</span><span style="color: #004a43;"> NUM_ROWS 8</span>
<span style="color: #004a43;">#</span><span style="color: #004a43;">define</span><span style="color: #004a43;"> NUM_COLS 8</span>
<span style="color: #004a43;">#</span><span style="color: #004a43;">define</span><span style="color: #004a43;"> SHIFT_ROW 3</span>
<span style="color: #004a43;">#</span><span style="color: #004a43;">define</span><span style="color: #004a43;"> SHIFT_COL 1</span>
<span style="color: #004a43;">#</span><span style="color: #004a43;">define</span><span style="color: #004a43;"> RSHIFT_ROW 4</span>
<span style="color: #004a43;">#</span><span style="color: #004a43;">define</span><span style="color: #004a43;"> RSHIFT_COL 6</span>
<span style="color: #004a43;">#</span><span style="color: #004a43;">define</span><span style="color: #004a43;"> F7_ROW 7</span>
<span style="color: #004a43;">#</span><span style="color: #004a43;">define</span><span style="color: #004a43;"> F7_COL 7</span>
<span style="color: #004a43;">#</span><span style="color: #004a43;">define</span><span style="color: #004a43;"> DEBOUNCE_VALUE 100</span>
<span style="color: #004a43;">#</span><span style="color: #004a43;">define</span><span style="color: #004a43;"> REPEAT_DELAY 500</span>
<span style="color: dimgrey;">// Keymap for normal use</span>
byte keyMap<span style="color: #808030;">[</span>NUM_ROWS<span style="color: #808030;">]</span><span style="color: #808030;">[</span>NUM_COLS<span style="color: #808030;">]</span> <span style="color: #808030;">=</span>
<span style="color: purple;">{</span>
<span style="color: purple;">{</span><span style="color: #0000e6;">'1'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'3'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'5'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'7'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'9'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'+'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'$'</span><span style="color: #808030;">,</span> KEY_BACKSPACE<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span>KEY_LEFT_ARROW<span style="color: #808030;">,</span> <span style="color: #0000e6;">'w'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'r'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'y'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'i'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'p'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'*'</span><span style="color: #808030;">,</span> KEY_RETURN<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span><span style="color: #0000e6;">'~'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'a'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'d'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'g'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'j'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'l'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">';'</span><span style="color: #808030;">,</span> KEY_LEFT_ARROW<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span><span style="color: #0000e6;">'~'</span><span style="color: #808030;">,</span> <span style="color: #008c00;">0</span> <span style="color: #808030;">,</span> <span style="color: #0000e6;">'x'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'v'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'n'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">','</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'/'</span><span style="color: #808030;">,</span> KEY_UP_ARROW<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span><span style="color: #0000e6;">' '</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'z'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'c'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'b'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'m'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'.'</span><span style="color: #808030;">,</span> <span style="color: #008c00;">0</span> <span style="color: #808030;">,</span> KEY_F1<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span><span style="color: #0000e6;">'~'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'s'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'f'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'h'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'k'</span><span style="color: #808030;">,</span><span style="color: #0000e6;">':'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'='</span> <span style="color: #808030;">,</span> KEY_F3<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span><span style="color: #0000e6;">'q'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'e'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'t'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'u'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'o'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'@'</span><span style="color: #808030;">,</span> KEY_UP_ARROW<span style="color: #808030;">,</span> KEY_F5<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span><span style="color: #0000e6;">'2'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'4'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'6'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'8'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'0'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'-'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'~'</span><span style="color: #808030;">,</span> KEY_F7<span style="color: purple;">}</span>
<span style="color: purple;">}</span><span style="color: purple;">;</span>
<span style="color: dimgrey;">// Keymap if Shift is pressed</span>
byte keyMapShifted<span style="color: #808030;">[</span>NUM_ROWS<span style="color: #808030;">]</span><span style="color: #808030;">[</span>NUM_COLS<span style="color: #808030;">]</span> <span style="color: #808030;">=</span>
<span style="color: purple;">{</span>
<span style="color: purple;">{</span><span style="color: #0000e6;">'!'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'#'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'%'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'\''</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">')'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'+'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'$'</span><span style="color: #808030;">,</span> KEY_BACKSPACE<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span>KEY_LEFT_ARROW<span style="color: #808030;">,</span> <span style="color: #0000e6;">'W'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'R'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'Y'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'I'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'P'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'*'</span><span style="color: #808030;">,</span> KEY_RETURN<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span><span style="color: #0000e6;">'~'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'A'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'D'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'G'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'J'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'L'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">']'</span><span style="color: #808030;">,</span> KEY_RIGHT_ARROW<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span><span style="color: #0000e6;">'~'</span><span style="color: #808030;">,</span> <span style="color: #008c00;">0</span> <span style="color: #808030;">,</span> <span style="color: #0000e6;">'X'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'V'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'N'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'<'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'?'</span><span style="color: #808030;">,</span> KEY_DOWN_ARROW<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span><span style="color: #0000e6;">' '</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'Z'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'C'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'B'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'M'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'>'</span><span style="color: #808030;">,</span> <span style="color: #008c00;">0</span> <span style="color: #808030;">,</span>KEY_F2<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span><span style="color: #0000e6;">'~'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'S'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'F'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'H'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'K'</span><span style="color: #808030;">,</span><span style="color: #0000e6;">'['</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'='</span><span style="color: #808030;">,</span> KEY_F4<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span><span style="color: #0000e6;">'Q'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'E'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'T'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'U'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'O'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'@'</span><span style="color: #808030;">,</span> KEY_UP_ARROW<span style="color: #808030;">,</span> KEY_F6<span style="color: purple;">}</span><span style="color: #808030;">,</span>
<span style="color: purple;">{</span><span style="color: #0000e6;">'"'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'$'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'&'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'('</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'0'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'-'</span><span style="color: #808030;">,</span> <span style="color: #0000e6;">'~'</span><span style="color: #808030;">,</span> KEY_F8<span style="color: purple;">}</span>
<span style="color: purple;">}</span><span style="color: purple;">;</span>
<span style="color: dimgrey;">// Global Variables</span>
<span style="color: maroon; font-weight: bold;">int</span> debounceCount<span style="color: #808030;">[</span>NUM_ROWS<span style="color: #808030;">]</span><span style="color: #808030;">[</span>NUM_COLS<span style="color: #808030;">]</span><span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">int</span> altKeyFlag<span style="color: purple;">;</span>
bool serial_output<span style="color: purple;">;</span>
<span style="color: dimgrey;">// Define the row and column pins</span>
byte colPins<span style="color: #808030;">[</span>NUM_COLS<span style="color: #808030;">]</span> <span style="color: #808030;">=</span> <span style="color: purple;">{</span><span style="color: #008c00;">0</span><span style="color: #808030;">,</span><span style="color: #008c00;">1</span><span style="color: #808030;">,</span><span style="color: #008c00;">2</span> <span style="color: #808030;">,</span><span style="color: #008c00;">3</span> <span style="color: #808030;">,</span><span style="color: #008c00;">4</span> <span style="color: #808030;">,</span><span style="color: #008c00;">5</span> <span style="color: #808030;">,</span><span style="color: #008c00;">6</span> <span style="color: #808030;">,</span><span style="color: #008c00;">7</span><span style="color: purple;">}</span><span style="color: purple;">;</span> <span style="color: dimgrey;">// A,B,C,D,E,F,G,H</span>
byte rowPins<span style="color: #808030;">[</span>NUM_ROWS<span style="color: #808030;">]</span> <span style="color: #808030;">=</span> <span style="color: purple;">{</span><span style="color: #008c00;">8</span><span style="color: #808030;">,</span><span style="color: #008c00;">9</span><span style="color: #808030;">,</span><span style="color: #008c00;">10</span><span style="color: #808030;">,</span><span style="color: #008c00;">11</span><span style="color: #808030;">,</span>A0<span style="color: #808030;">,</span>A1<span style="color: #808030;">,</span>A2<span style="color: #808030;">,</span>A3<span style="color: purple;">}</span><span style="color: purple;">;</span>
<span style="color: dimgrey;">// SETUP</span>
<span style="color: maroon; font-weight: bold;">void</span> setup<span style="color: #808030;">(</span><span style="color: #808030;">)</span>
<span style="color: purple;">{</span>
<span style="color: dimgrey;">// Set all pins as inputs and activate pull-ups</span>
serial_output <span style="color: #808030;">=</span> false<span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">for</span> <span style="color: #808030;">(</span>byte c <span style="color: #808030;">=</span> <span style="color: #008c00;">0</span> <span style="color: purple;">;</span> c <span style="color: #808030;"><</span> NUM_COLS <span style="color: purple;">;</span> c<span style="color: #808030;">+</span><span style="color: #808030;">+</span><span style="color: #808030;">)</span>
<span style="color: purple;">{</span>
pinMode<span style="color: #808030;">(</span>colPins<span style="color: #808030;">[</span>c<span style="color: #808030;">]</span><span style="color: #808030;">,</span> INPUT<span style="color: #808030;">)</span><span style="color: purple;">;</span>
digitalWrite<span style="color: #808030;">(</span>colPins<span style="color: #808030;">[</span>c<span style="color: #808030;">]</span><span style="color: #808030;">,</span> HIGH<span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: dimgrey;">// Clear debounce counts</span>
<span style="color: maroon; font-weight: bold;">for</span> <span style="color: #808030;">(</span>byte r <span style="color: #808030;">=</span> <span style="color: #008c00;">0</span> <span style="color: purple;">;</span> r <span style="color: #808030;"><</span> NUM_ROWS <span style="color: purple;">;</span> r<span style="color: #808030;">+</span><span style="color: #808030;">+</span><span style="color: #808030;">)</span>
<span style="color: purple;">{</span>
debounceCount<span style="color: #808030;">[</span>r<span style="color: #808030;">]</span><span style="color: #808030;">[</span>c<span style="color: #808030;">]</span> <span style="color: #808030;">=</span> <span style="color: #008c00;">0</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
<span style="color: purple;">}</span>
<span style="color: dimgrey;">// Set all pins as inputs</span>
<span style="color: maroon; font-weight: bold;">for</span> <span style="color: #808030;">(</span>byte r <span style="color: #808030;">=</span> <span style="color: #008c00;">0</span> <span style="color: purple;">;</span> r <span style="color: #808030;"><</span> NUM_ROWS <span style="color: purple;">;</span> r<span style="color: #808030;">+</span><span style="color: #808030;">+</span><span style="color: #808030;">)</span>
<span style="color: purple;">{</span>
pinMode<span style="color: #808030;">(</span>rowPins<span style="color: #808030;">[</span>r<span style="color: #808030;">]</span><span style="color: #808030;">,</span> INPUT<span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
<span style="color: dimgrey;">// Function key is NOT pressed</span>
altKeyFlag <span style="color: #808030;">=</span> ALT_KEY_OFF<span style="color: purple;">;</span>
pinMode<span style="color: #808030;">(</span>rowPins<span style="color: #808030;">[</span>F7_ROW<span style="color: #808030;">]</span><span style="color: #808030;">,</span> OUTPUT<span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">if</span> <span style="color: #808030;">(</span>digitalRead<span style="color: #808030;">(</span>colPins<span style="color: #808030;">[</span>F7_COL<span style="color: #808030;">]</span><span style="color: #808030;">)</span> <span style="color: #808030;">=</span><span style="color: #808030;">=</span> LOW<span style="color: #808030;">)</span> serial_output <span style="color: #808030;">=</span> true<span style="color: purple;">;</span>
<span style="color: dimgrey;">// Initialise the keyboard</span>
<span style="color: maroon; font-weight: bold;">if</span> <span style="color: #808030;">(</span>serial_output <span style="color: #808030;">)</span>
<span style="color: purple;">{</span>
Serial<span style="color: #808030;">.</span>begin<span style="color: #808030;">(</span><span style="color: #008c00;">9600</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
<span style="color: maroon; font-weight: bold;">else</span>
<span style="color: purple;">{</span>
Keyboard<span style="color: #808030;">.</span>begin<span style="color: #808030;">(</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
<span style="color: purple;">}</span>
<span style="color: dimgrey;">// LOOP</span>
<span style="color: maroon; font-weight: bold;">void</span> loop<span style="color: #808030;">(</span><span style="color: #808030;">)</span>
<span style="color: purple;">{</span>
bool shifted <span style="color: #808030;">=</span> false<span style="color: purple;">;</span>
bool r_shifted <span style="color: #808030;">=</span> false<span style="color: purple;">;</span>
bool keyPressed <span style="color: #808030;">=</span> false<span style="color: purple;">;</span>
<span style="color: dimgrey;">// Check for the Shift key being pressed</span>
pinMode<span style="color: #808030;">(</span>rowPins<span style="color: #808030;">[</span>SHIFT_ROW<span style="color: #808030;">]</span><span style="color: #808030;">,</span> OUTPUT<span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">if</span> <span style="color: #808030;">(</span>digitalRead<span style="color: #808030;">(</span>colPins<span style="color: #808030;">[</span>SHIFT_COL<span style="color: #808030;">]</span><span style="color: #808030;">)</span> <span style="color: #808030;">=</span><span style="color: #808030;">=</span> LOW<span style="color: #808030;">)</span> shifted <span style="color: #808030;">=</span> true<span style="color: purple;">;</span>
pinMode<span style="color: #808030;">(</span>rowPins<span style="color: #808030;">[</span>RSHIFT_ROW<span style="color: #808030;">]</span><span style="color: #808030;">,</span> OUTPUT<span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">if</span> <span style="color: #808030;">(</span>digitalRead<span style="color: #808030;">(</span>colPins<span style="color: #808030;">[</span>RSHIFT_COL<span style="color: #808030;">]</span><span style="color: #808030;">)</span> <span style="color: #808030;">=</span><span style="color: #808030;">=</span> LOW<span style="color: #808030;">)</span> shifted <span style="color: #808030;">=</span> true<span style="color: purple;">;</span>
pinMode<span style="color: #808030;">(</span>rowPins<span style="color: #808030;">[</span>SHIFT_ROW<span style="color: #808030;">]</span><span style="color: #808030;">,</span> INPUT<span style="color: #808030;">)</span><span style="color: purple;">;</span>
pinMode<span style="color: #808030;">(</span>rowPins<span style="color: #808030;">[</span>RSHIFT_ROW<span style="color: #808030;">]</span><span style="color: #808030;">,</span> INPUT<span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">for</span> <span style="color: #808030;">(</span>byte r <span style="color: #808030;">=</span> <span style="color: #008c00;">0</span> <span style="color: purple;">;</span> r <span style="color: #808030;"><</span> NUM_ROWS <span style="color: purple;">;</span> r<span style="color: #808030;">+</span><span style="color: #808030;">+</span><span style="color: #808030;">)</span>
<span style="color: purple;">{</span>
<span style="color: dimgrey;">// Run through the rows, turn them on</span>
pinMode<span style="color: #808030;">(</span>rowPins<span style="color: #808030;">[</span>r<span style="color: #808030;">]</span><span style="color: #808030;">,</span> OUTPUT<span style="color: #808030;">)</span><span style="color: purple;">;</span>
digitalWrite<span style="color: #808030;">(</span>rowPins<span style="color: #808030;">[</span>r<span style="color: #808030;">]</span><span style="color: #808030;">,</span> LOW<span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">for</span> <span style="color: #808030;">(</span>byte c <span style="color: #808030;">=</span> <span style="color: #008c00;">0</span> <span style="color: purple;">;</span> c <span style="color: #808030;"><</span> NUM_COLS <span style="color: purple;">;</span> c<span style="color: #808030;">+</span><span style="color: #808030;">+</span><span style="color: #808030;">)</span>
<span style="color: purple;">{</span>
<span style="color: maroon; font-weight: bold;">if</span> <span style="color: #808030;">(</span>digitalRead<span style="color: #808030;">(</span>colPins<span style="color: #808030;">[</span>c<span style="color: #808030;">]</span><span style="color: #808030;">)</span> <span style="color: #808030;">=</span><span style="color: #808030;">=</span> LOW<span style="color: #808030;">)</span>
<span style="color: purple;">{</span>
<span style="color: dimgrey;">// Increase the debounce count</span>
debounceCount<span style="color: #808030;">[</span>r<span style="color: #808030;">]</span><span style="color: #808030;">[</span>c<span style="color: #808030;">]</span><span style="color: #808030;">+</span><span style="color: #808030;">+</span><span style="color: purple;">;</span>
<span style="color: dimgrey;">// Has the switch been pressed continually for long enough?</span>
<span style="color: maroon; font-weight: bold;">int</span> count <span style="color: #808030;">=</span> debounceCount<span style="color: #808030;">[</span>r<span style="color: #808030;">]</span><span style="color: #808030;">[</span>c<span style="color: #808030;">]</span><span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">if</span> <span style="color: #808030;">(</span>count <span style="color: #808030;">=</span><span style="color: #808030;">=</span> DEBOUNCE_VALUE<span style="color: #808030;">)</span>
<span style="color: purple;">{</span>
<span style="color: dimgrey;">// First press</span>
keyPressed <span style="color: #808030;">=</span> true<span style="color: purple;">;</span>
pressKey<span style="color: #808030;">(</span>r<span style="color: #808030;">,</span> c<span style="color: #808030;">,</span> shifted<span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
<span style="color: maroon; font-weight: bold;">else</span> <span style="color: maroon; font-weight: bold;">if</span> <span style="color: #808030;">(</span>count <span style="color: #808030;">></span> DEBOUNCE_VALUE<span style="color: #808030;">)</span>
<span style="color: purple;">{</span>
<span style="color: dimgrey;">// Check for repeats</span>
count <span style="color: #808030;">-</span><span style="color: #808030;">=</span> DEBOUNCE_VALUE<span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">if</span> <span style="color: #808030;">(</span>count <span style="color: #808030;">%</span> REPEAT_DELAY <span style="color: #808030;">=</span><span style="color: #808030;">=</span> <span style="color: #008c00;">0</span><span style="color: #808030;">)</span>
<span style="color: purple;">{</span>
<span style="color: dimgrey;">// Send repeat</span>
keyPressed <span style="color: #808030;">=</span> true<span style="color: purple;">;</span>
pressKey<span style="color: #808030;">(</span>r<span style="color: #808030;">,</span> c<span style="color: #808030;">,</span> shifted<span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
<span style="color: purple;">}</span>
<span style="color: purple;">}</span>
<span style="color: maroon; font-weight: bold;">else</span>
<span style="color: purple;">{</span>
<span style="color: dimgrey;">// Not pressed; reset debounce count</span>
debounceCount<span style="color: #808030;">[</span>r<span style="color: #808030;">]</span><span style="color: #808030;">[</span>c<span style="color: #808030;">]</span> <span style="color: #808030;">=</span> <span style="color: #008c00;">0</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
<span style="color: purple;">}</span>
<span style="color: dimgrey;">// Turn the row back off</span>
pinMode<span style="color: #808030;">(</span>rowPins<span style="color: #808030;">[</span>r<span style="color: #808030;">]</span><span style="color: #808030;">,</span> INPUT<span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
digitalWrite<span style="color: #808030;">(</span>rowPins<span style="color: #808030;">[</span>RSHIFT_ROW<span style="color: #808030;">]</span><span style="color: #808030;">,</span> LOW<span style="color: #808030;">)</span><span style="color: purple;">;</span>
digitalWrite<span style="color: #808030;">(</span>rowPins<span style="color: #808030;">[</span>SHIFT_ROW<span style="color: #808030;">]</span><span style="color: #808030;">,</span> LOW<span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
<span style="color: maroon; font-weight: bold;">void</span> pressKey<span style="color: #808030;">(</span>byte r<span style="color: #808030;">,</span> byte c<span style="color: #808030;">,</span> bool shifted<span style="color: #808030;">)</span>
<span style="color: purple;">{</span>
<span style="color: dimgrey;">// Send the keypress</span>
<span style="color: maroon; font-weight: bold;">if</span> <span style="color: #808030;">(</span>serial_output<span style="color: #808030;">)</span> </pre>
<pre style="background: #ffffff; color: black;"><span style="color: purple;"> {</span> </pre>
<pre style="background: #ffffff; color: black;"> Serial<span style="color: #808030;">.</span>print<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">|</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>Serial<span style="color: #808030;">.</span>print<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0f69ff;">\r</span><span style="color: #0f69ff;">\n</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>Serial<span style="color: #808030;">.</span>print<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">|</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: purple;">;</span> </pre>
<pre style="background: #ffffff; color: black;"> Serial<span style="color: #808030;">.</span>print<span style="color: #808030;">(</span>r<span style="color: #808030;">)</span><span style="color: purple;">;</span>Serial<span style="color: #808030;">.</span>print<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">,</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: purple;">;</span>Serial<span style="color: #808030;">.</span>print<span style="color: #808030;">(</span>c<span style="color: #808030;">)</span><span style="color: purple;">;</span>Serial<span style="color: #808030;">.</span>print<span style="color: #808030;">(</span><span style="color: maroon;">"</span><span style="color: #0000e6;">:</span><span style="color: maroon;">"</span><span style="color: #808030;">)</span><span style="color: purple;">;</span></pre>
<pre style="background: #ffffff; color: black;"><span style="color: purple;"> </span><span style="color: purple;">}</span>
byte key <span style="color: #808030;">=</span> shifted <span style="color: purple;">?</span> keyMapShifted<span style="color: #808030;">[</span>r<span style="color: #808030;">]</span><span style="color: #808030;">[</span>c<span style="color: #808030;">]</span> <span style="color: purple;">:</span> keyMap<span style="color: #808030;">[</span>r<span style="color: #808030;">]</span><span style="color: #808030;">[</span>c<span style="color: #808030;">]</span><span style="color: purple;">;</span>
<span style="color: maroon; font-weight: bold;">if</span> <span style="color: #808030;">(</span>serial_output<span style="color: #808030;">)</span>
<span style="color: purple;">{</span>
<span style="color: maroon; font-weight: bold;">if</span> <span style="color: #808030;">(</span>key <span style="color: #808030;">></span> <span style="color: #008c00;">0</span><span style="color: #808030;">)</span><span style="color: purple;">{</span> Serial<span style="color: #808030;">.</span>write<span style="color: #808030;">(</span>key<span style="color: #808030;">)</span><span style="color: purple;">;</span><span style="color: purple;">}</span>
<span style="color: purple;">}</span>
<span style="color: maroon; font-weight: bold;">else</span>
<span style="color: purple;">{</span>
<span style="color: maroon; font-weight: bold;">if</span> <span style="color: #808030;">(</span>key <span style="color: #808030;">></span> <span style="color: #008c00;">0</span> <span style="color: #808030;">)</span> Keyboard<span style="color: #808030;">.</span>write<span style="color: #808030;">(</span>key<span style="color: #808030;">)</span><span style="color: purple;">;</span>
<span style="color: purple;">}</span>
<span style="color: purple;">}</span></pre>
<br />
<br />Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com1tag:blogger.com,1999:blog-26685537.post-6706691166046817982015-05-06T21:54:00.006+02:002016-09-27T10:33:12.606+02:00The 'Makr-B-Bot' Part 1: Getting startedWhen the 3D-Printing hype started a few years ago with the RepRap and it's followers, I immediately considered building one. By that time however it was not really easy to collect the parts. People were building their own electronics, frames and extruders from scratch which included a lot of experimenting and tinkering to get it right. Round the same time I ran into a product called '<a href="http://www.makerbeam.eu/epages/63128753.sf/en_GB/ObjectPath=/Shops/63128753/Categories" target="_blank">MakerBeam</a>', an aluminium T-Slot profile for small constructions. This seemed like the right framework for a 3-D printer so I bought the starter kit. Bolted a few parts together and decided it would still be a lot of work to build a printer from this. So the kit ended up in a closet, and I have not used it since..<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYD4lRLdiqZlv3HGQSn6HqZ1bfIkrBaOVFoW-32h2h5NYogGlhjxHw-fH0lcwqWMk3GY_IFF95MP3eFehFdjaAPw8zeA-MklziA9VKfcs_1Y7Xvzr-bpOV_tmZysiARQ04AtU9/s1600/Makerbeam_collage_1280x905.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYD4lRLdiqZlv3HGQSn6HqZ1bfIkrBaOVFoW-32h2h5NYogGlhjxHw-fH0lcwqWMk3GY_IFF95MP3eFehFdjaAPw8zeA-MklziA9VKfcs_1Y7Xvzr-bpOV_tmZysiARQ04AtU9/s320/Makerbeam_collage_1280x905.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">MakerBeam</td></tr>
</tbody></table>
<br />
In the following years the 3D printer market exploded, and at some point even got mainstream with little €1000,- plug and play printers you could buy at the supermarket. So I lost interest. The idea of building one did stick at the back of my mind however. And over time I did collect some parts like a set of stepper motors, some extra Makerbeams and some electronics.<br />
<br />
Until recently I got inspired by pictures of the <a href="http://printrbot.com/shop/simple-makers-kit-2/" target="_blank">Printrbot Simple Maker kit</a> . This amazingly simple design is probably the most minimalistic printer possible, yet it performs remarkably well for it's price, which is as low as US$350 for a complete kit.
Now US$350,- is absolutely a good price for the full kit, but unfortunately that only works if you live in the USA. Once you get it to Europe the total price has become a whopping €550,- (= US$ 590,- !) which more or less defies the idea of a 'cheap DIY printer'. <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="data:image/jpeg;base64,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" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=26685537" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=26685537" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><br /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSYQ8BSAVa7MNZXq4iSsK_v1YVCign08pBCFHuvM__I5KIffSefMdifsfET4tEUP4YBLTI0amuCpN7RY2hA3U8q8CxEAal-MADQbIZ-XdiNnaWUeW9bJ4OL3EyByHiu8C7hq3f/s1600/SimpleMakerKitEdited.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="263" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSYQ8BSAVa7MNZXq4iSsK_v1YVCign08pBCFHuvM__I5KIffSefMdifsfET4tEUP4YBLTI0amuCpN7RY2hA3U8q8CxEAal-MADQbIZ-XdiNnaWUeW9bJ4OL3EyByHiu8C7hq3f/s1600/SimpleMakerKitEdited.jpg" width="320" /></a></div>
Since this is an 'open source' printer so it is possible to download the drawings and make the plywood parts yourself, but that would still be quite expensive for a single unit.<br />
<div class="separator" style="clear: both; text-align: left;">
While looking for additional pictures of the PrintrBot design I also found the <a href="http://replicatorwarehouse.com/r-360-modular-printer-with-rotating-bed/" target="_blank">R360 Printer by Replicator warehouse</a> :</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRff23BmSoAMEUnlE9WLJScz7aikHumFHbKafKNhTbUv8-4vCcfs1EGD47bIZhziqa_LNEFweo7QVp8-gBiqhpUV1uN65GidPTFPJFbgDkvASs1Njm7bLsWAE5WlIDSvWXLN_5/s1600/R-360+Printer.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRff23BmSoAMEUnlE9WLJScz7aikHumFHbKafKNhTbUv8-4vCcfs1EGD47bIZhziqa_LNEFweo7QVp8-gBiqhpUV1uN65GidPTFPJFbgDkvASs1Njm7bLsWAE5WlIDSvWXLN_5/s1600/R-360+Printer.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
This
looks almost identical, but they chose a rotating bed to print on. That seemed a bit too experimental to me, although I understand it works pretty well. I do think it's a little bit too much plastic...<br />
<br />
So I wondered if it would be possible to build this specific design using standard Makerbeam parts.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwSiFM3lpLYxF51U-gi5FMyX6yVO1hql7mcR11nHg8U80F0VZscVqZ8o9ull8tR1akrKg9wM3yrAfrv8R6L88qTXKNbAGR3MaZJx-cgDlHDiO5J5S_yvvSDgdYORhIoSMQfL2G/s1600/WP_20150419_13_26_28_Pro.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwSiFM3lpLYxF51U-gi5FMyX6yVO1hql7mcR11nHg8U80F0VZscVqZ8o9ull8tR1akrKg9wM3yrAfrv8R6L88qTXKNbAGR3MaZJx-cgDlHDiO5J5S_yvvSDgdYORhIoSMQfL2G/s1600/WP_20150419_13_26_28_Pro.jpg" width="400" /> </a> </div>
<div class="separator" style="clear: both; text-align: left;">
And I did not want to spend too much money on it so I spend quite some time to find the cheapest parts....</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<h4 class="separator" style="clear: both; text-align: left;">
Parts.</h4>
<ul>
<li><a href="http://www.makerbeam.eu/" target="_blank">Makerbeam </a>starter kit.+ extra set of right angle brackets. ( €100 )</li>
<li>Acme rod (trapezoidal thread) with nut . ( €20 ). This one used to be hard to get, but nowadays most 3D printer shops sell the standard 30 cm version that is used in the RepRap Mendel (<a href="http://makemendel.com/mechanical-parts/acme-lead-screws-with-nut-tr-10-8" target="_blank">MakeMendel</a>,<a href="http://www.vanallesenmeer.nl/Draadas-Z-as-dia.8mm-300mm-lang" target="_blank">VanAllesEnMeer (Dutch) </a>)</li>
<li>Flexible coupling 5 mm to 8 mm.n (€6,50) Any 3D printer shop has these in stock</li>
<li>2 pcs Aluminium pully, T2.5 (€ 6,50)</li>
<li>1 m. of T2.5 5mm Timing belt (€4,50)</li>
<li>12 pcs. LM8UU linear ball Bearings (€12,-) (€1,- / each is really good deal ! <a href="http://www.electronixs.nl/c-2382277/mechanisch/" target="_blank">Kromhout Electronix</a>s (Dutch))</li>
<li>3 pcs. NEMA 17 stepper motors (€30,- (special package deal, might be hard to get them that cheap now..))</li>
<li>Funduino Mega 2560 R3 Module (Arduino Mega compatible board) (€15)</li>
<li>RAMPS 1.4 interface board (€18, including the Motor Drivers)</li>
<li>4 pcs. 4988 Motor Driver (Polulu or compatible) </li>
<li>Geeetech MK8 All Metal 3D Printer Extruder (<a href="http://www.dx.com/" target="_blank">DealExtreme</a>) (€45)</li>
<li>AT Power supply (second hand, from an old PC)</li>
<li>Lots of Ty-Raps</li>
<li>16 Hose clamps, 12-22 mm (€10)</li>
<li>2 pcs. 1m. 8mm. Steel Rod (€15)</li>
<li>Heated bed (€15)</li>
<li>16x24 Photo frame (€1,50)</li>
<li>12V/ 20 A Power Supply (€24,-) </li>
</ul>
Total: € 322,50<br />
(Actually a little less since not the whole MakerBeam kit is used)<br />
<br />
Again, the US$350,- for the the PrintrBot Simple kit seems like a bargain. You probably have to buy all parts in really large quantities to get that low. Not to mention the US$179,- <a href="http://www.tiko3d.com/" target="_blank">TIKO 3D</a> , or the <a href="http://www.x3dmachines.com/collections/all" target="_blank">US$199 Genesis UNO</a> ..<br />
And with the colourful DaVinci minimaker entering the local toy-shop, 3D printing definitely entered the realm of consumer goods.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3zqkq1EdPQEsZGLlYlCl5H3m2IRMGdCKWbqMqdyTvv0C6OwYR_pdD2TX-d6KlQMPEuXVScAhY_I4a_pL24OtegTZSC-22fOrnbBNbIK702W0lBf9ZHJVEbPkiOA4Y7MoAUqor/s1600/DaVinci_BartSmit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="284" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3zqkq1EdPQEsZGLlYlCl5H3m2IRMGdCKWbqMqdyTvv0C6OwYR_pdD2TX-d6KlQMPEuXVScAhY_I4a_pL24OtegTZSC-22fOrnbBNbIK702W0lBf9ZHJVEbPkiOA4Y7MoAUqor/s320/DaVinci_BartSmit.png" width="320" /></a></div>
<br />
<br />Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com0tag:blogger.com,1999:blog-26685537.post-642475061221503432014-10-11T16:17:00.003+02:002016-05-01T21:57:58.512+02:00Go for....C64<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmmZT0QgsIrR4XcLGBggFzKHvnBea4rsrXFu0z1TPrkBuuZvIhDRTC9VdNl6Ss8l2JcT0iMHtr0iU_uvVycPcVTRmybbr-q_Rmb02cxKpzjLeoBEDeAw0RZJyjoNffpPOOyt1l/s1600/trs80-i.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmmZT0QgsIrR4XcLGBggFzKHvnBea4rsrXFu0z1TPrkBuuZvIhDRTC9VdNl6Ss8l2JcT0iMHtr0iU_uvVycPcVTRmybbr-q_Rmb02cxKpzjLeoBEDeAw0RZJyjoNffpPOOyt1l/s1600/trs80-i.jpg" width="320" /></a>My first computer was a TRS-80 Model I. I still have fond memories of this black and grey box with it's black and white screen, 128x48 monochrome graphics, 12" monitor and tape drive for data storage. Unfortunately we sold it when we got the twice as fast and portable<a href="http://en.wikipedia.org/wiki/Aster_CT-80" target="_blank"> Aster CT-80</a> (4 Mhz clock, two floppy drives!). Only for sentimental reasons I'd love to own one now., but they are quite rare and therefore relatively expensive on eBay...<br />
Anyway, I always kept a weak spot for these all-in one keyboard computers like the TSR-80, Atari 2600, VIC-20 and of course the <a href="http://en.wikipedia.org/wiki/Commodore_64" target="_blank"><b><span style="color: blue;">Commodore C64</span></b></a>. According to Wikipedia 12 to 17 million of these units were sold at the time making this a lot less rare.<br />
(An uncertainty of <i>5 Million</i> ? That's so weird there are even <a href="http://www.pagetable.com/?p=547" target="_blank">special pages</a> dedicated to this mystery..)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs63CBgnjnlRmv3yx-14DkWMf-VDUJS2P0na0du0EAnwbxKi9gP5jVuwUfN5AgvlFvOQtTVsyJN7LpIxyWZ-KJbJ9Y62XoWhjYzMusz30OWC3Bn4HkVUM_ScsuadwhO-1yLymC/s1600/300px-Commodore-64-Computer.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs63CBgnjnlRmv3yx-14DkWMf-VDUJS2P0na0du0EAnwbxKi9gP5jVuwUfN5AgvlFvOQtTVsyJN7LpIxyWZ-KJbJ9Y62XoWhjYzMusz30OWC3Bn4HkVUM_ScsuadwhO-1yLymC/s1600/300px-Commodore-64-Computer.png" /></a></div>
Anyway, 12 million or more seems to be enough to saturate the demand even 30 years later and complete systems can be bought for 50 to 100 Euro's. Actually I own a complete system myself. It's a complete, working set including an original tape recorder and diskette drive. I might have to wipe the dust off and find a suitable TV-set to check if it's still 100%. In the meantime I thought it was a nice idea to have just an empty C64 housing with keyboard and use that as a keyboard for my PC. Or maybe mount a Raspberry Pi inside to turn it into a working Linux computer. Or connect it to a tablet running a C64 emulator like<a href="https://www.blogger.com/:%20https://play.google.com/store/apps/details?id=com.explusalpha.C64Emu" target="_blank"> C64.EMU</a> .<br />
<br />
[ As usual, I'm not the first to think about this and there is even a complete interface for sale: the <a href="http://www.vesalia.de/e_keyrahv2.htm" target="_blank">Keyrah V2</a>. Better (or worse..) there is even an<a href="https://www.etsy.com/uk/shop/TynemouthSoftware" target="_blank"> Etsy shop</a> that has Commodore and many other computers converted to USB keyboards. But that's what I consider cheating. At least some hacking has to be done or it would be too easy ! My first thought was to use the Arduino Micro. While<a href="http://www.c-scope.blogspot.nl/2013/10/my-claim-to-mame-building-mame.html" target="_blank"> building my MAME cabinet</a> I already discovered that this would have been the easiest way to implement a virtual USB keyboard. On the <a href="http://biosrhythm.com/?p=910" target="_blank">biosrythm </a>blog there is already a complete description on how to use Arduino to get the C64 keyboard to USB, but he is using the <a href="http://arduino.cc/en/Main/arduinoBoardDuemilanove" target="_blank">Duemilanove</a> . ]<br />
<br />
I picked up an empty C64 from ebay.de for €30 and bought a Arduino Pro Micro for only €7,- (who said hobbies have to be expensive?)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp3hTvBL5TYhNmUx4TQhtF1uBzFk3DKiUGib9VkHQBezFCPsVecklHDtazCKXgeRZixA-6eWJ2R2lJEfT9oTUYhyphenhyphenjgLnxtTJL7wutQP-KSuBxAJ18WDMFCVyyaw_8AfdxWjic-/s1600/C64+Empty+housing.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp3hTvBL5TYhNmUx4TQhtF1uBzFk3DKiUGib9VkHQBezFCPsVecklHDtazCKXgeRZixA-6eWJ2R2lJEfT9oTUYhyphenhyphenjgLnxtTJL7wutQP-KSuBxAJ18WDMFCVyyaw_8AfdxWjic-/s1600/C64+Empty+housing.png" width="400" /></a></div>
<br />
The cable that sticks out on the right is the keyboard connector that used to be connected to the C64 motherboard.<br />
First we obviously have to find out how the keyboard is actually wired. I found a neat diagram on the '<a href="http://www.waitingforfriday.com/index.php/C64_VICE_Front-End" target="_blank">WaitingForFriday</a>' blog:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.waitingforfriday.com/images/thumb/e/ee/C64_Keyboard_Schematics_PNG.png/600px-C64_Keyboard_Schematics_PNG.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Corrected C64 Keyboard matrix and keyboard connector diagrams" border="0" src="http://www.waitingforfriday.com/images/thumb/e/ee/C64_Keyboard_Schematics_PNG.png/600px-C64_Keyboard_Schematics_PNG.png" height="503" width="600" /> </a> </div>
<div class="" style="clear: both; text-align: left;">
Great, but it presents and unexpected surprise: we will need 16 Input / Outputs for reading this matrix. And the Micro Pro only has 9 digital I/O pins. My first idea was to expand the number of I/O pins by using some shift registers but then I remembered I also had some <a href="http://www.picaxe.com/What-is-PICAXE/" target="_blank">PICAXE </a>chips in my toolbox. The PICAXE is a standard PIC micro-controller, pre-programmed with a Basic interpreter which makes programming real simple.And the <a href="http://www.picaxe.com/Hardware/PICAXE-Chips/PICAXE-28X2-microcontroller/" target="_blank">PICAXE 28X2</a> has 16 freely configurable I/O pins so that should work fine.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc-PQ8pMlEubhNvHbdlD0g1iPoVB4krHaFSJKnBA3nndHBjZ45AqcO4v87uNPpfvvxaZaCC6Hz2_k_sQY3N7sdbCsBxRKVLv23NBOKvpCDHuvk4wVHVR8wKYoYaEuIY3Lpwq8k/s1600/pinout28x2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc-PQ8pMlEubhNvHbdlD0g1iPoVB4krHaFSJKnBA3nndHBjZ45AqcO4v87uNPpfvvxaZaCC6Hz2_k_sQY3N7sdbCsBxRKVLv23NBOKvpCDHuvk4wVHVR8wKYoYaEuIY3Lpwq8k/s1600/pinout28x2.jpg" width="400" /></a></div>
<div class="" style="clear: both; text-align: left;">
<br /></div>
<div class="" style="clear: both; text-align: left;">
This chip even has all the I/O pins nicely laid out,making it easy to route the connector to the chip.</div>
<div class="" style="clear: both; text-align: left;">
Some soldering will be necessary though to split out the connector in sections that will go to B0..B7</div>
<a href="https://www.blogger.com/blogger.g?blogID=26685537" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>C0...C3 and C4...C7.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWm3TpvpIzGUpknYBzkefH18_9vn6f5epNv3SFHvaPrO0dtVQCQDefi15Rvx-s7UIqfn-4txF43GULuF9UuL6q0MVBeSYI2FwM2KipswgEvJW8QvW-MaNHAb0D1uvFQTBNQYGj/s1600/Keyboard+to+PicAxe.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="145" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWm3TpvpIzGUpknYBzkefH18_9vn6f5epNv3SFHvaPrO0dtVQCQDefi15Rvx-s7UIqfn-4txF43GULuF9UuL6q0MVBeSYI2FwM2KipswgEvJW8QvW-MaNHAb0D1uvFQTBNQYGj/s1600/Keyboard+to+PicAxe.png" width="320" /></a></div>
Unfortunately this does not work. The PICAXE does not have any pull up or down resistors on its pins, so when no key is pressed they are all floating which results in random values.Adding a 10K pull up resistor to each input solves this problem immediately.<br />
It's still a lot of puzzling to detect the right keys, certainly in combination with the left-shift, right-shift or Commodore key but you can find a complete working version of the PICAXE software at the end of this page.<br />
But since the PICAXE lacks an USB output we still need the Arduino Pro Micro to create a keyboard compatible output.<br />
So the whole exercise has been a fun and useful learning experience, but in hindsight it would have been easier to use the Arduino Leonardo... After all, this is a Pro Micro, but with plenty I/O to implement everything on a single board.<br />
<br />
<br />
<pre style="background: #ffffff; color: black;"><span style="color: dimgrey;"> </span></pre>
<pre style="background: #ffffff; color: black;"><span style="color: dimgrey;">'Commodore 64 Keyboard Decoder. Columns (A..H) connected to Port B. Rows (1..8) to port C</span>
<span style="color: dimgrey;">'Both ports have 10K Pull up resistor on each pin</span>
<span style="color: #e34adc;">main</span><span style="color: #808030;">:</span>
symbol ROWS <span style="color: #808030;">=</span> b1
symbol COLUMNS <span style="color: #808030;">=</span> b2
symbol ROW <span style="color: #808030;">=</span> b4
symbol COLUMN <span style="color: #808030;">=</span> b5
symbol KEY <span style="color: #808030;">=</span>b6
symbol CHECK_ROW <span style="color: #808030;">=</span> b11
symbol CHECK_COL <span style="color: #808030;">=</span> b12
symbol TEMP_SUB <span style="color: #808030;">=</span> b13
symbol TEMP_SUB1<span style="color: #808030;">=</span> b14
symbol SPECIAL_KEY_PRESSED <span style="color: #808030;">=</span> b15
symbol RIGHT_SHIFT <span style="color: #808030;">=</span> b16
symbol LEFT_SHIFT <span style="color: #808030;">=</span> b17
symbol CTRL <span style="color: #808030;">=</span>b18
symbol PREVIOUS_KEY <span style="color: #808030;">=</span>b19
symbol KEY_COUNT<span style="color: #808030;">=</span>b20
symbol KEY_DELAY <span style="color: #808030;">=</span> b21
PREVIOUS_KEY <span style="color: #808030;">=</span> <span style="color: #008c00;">0</span>
KEY_DELAY <span style="color: #808030;">=</span> <span style="color: #008c00;">100</span>
<span style="color: maroon; font-weight: bold;">do</span> <span style="color: #808030;">;</span> Endless <span style="color: maroon; font-weight: bold;">loop</span>
<span style="color: maroon; font-weight: bold;">let</span> dirsC <span style="color: #808030;">=</span> %<span style="color: #008c00;">11111111</span> <span style="color: dimgrey;">' switch all pins to outputs</span>
<span style="color: maroon; font-weight: bold;">let</span> dirsB <span style="color: #808030;">=</span> %<span style="color: #008c00;">00000000</span> <span style="color: dimgrey;">' switch all pins to inputs</span>
<span style="color: maroon; font-weight: bold;">let</span> pinsC <span style="color: #808030;">=</span> %<span style="color: #008c00;">00000000</span> <span style="color: dimgrey;">' switch all outputs low </span>
b1 <span style="color: #808030;">=</span> pinsB
<span style="color: maroon; font-weight: bold;">let</span> dirsC <span style="color: #808030;">=</span> %<span style="color: #008c00;">00000000</span> <span style="color: dimgrey;">' switch all pins to inputs</span>
<span style="color: maroon; font-weight: bold;">let</span> dirsB <span style="color: #808030;">=</span> %<span style="color: #008c00;">11111111</span> <span style="color: dimgrey;">' switch all pins to outputs</span>
<span style="color: maroon; font-weight: bold;">let</span> pinsB <span style="color: #808030;">=</span> %<span style="color: #008c00;">00000000</span> <span style="color: dimgrey;">' switch all outputs low </span>
b2 <span style="color: #808030;">=</span> pinsC
b3 <span style="color: #808030;">=</span> <span style="color: maroon; font-weight: bold;">NOT</span> b1
ROWS <span style="color: #808030;">=</span> <span style="color: maroon; font-weight: bold;">NOT</span> b2
COLUMNS<span style="color: #808030;">=</span>b3
<span style="color: dimgrey;">'sertxd("B1,B2: ",#b1," ",#b2,13,10)</span>
<span style="color: dimgrey;">'Check if Left Shift is pressed </span>
CHECK_ROW <span style="color: #808030;">=</span> %<span style="color: #008c00;">00001000</span>
CHECK_COL <span style="color: #808030;">=</span> %<span style="color: #008c00;">00000010</span>
<span style="color: maroon; font-weight: bold;">gosub</span> CheckRowCol
LEFT_SHIFT <span style="color: #808030;">=</span> SPECIAL_KEY_PRESSED
<span style="color: dimgrey;">'Check if Right Shift is pressed</span>
CHECK_ROW <span style="color: #808030;">=</span> %<span style="color: #008c00;">00010000</span>
CHECK_COL <span style="color: #808030;">=</span> %<span style="color: #008c00;">01000000</span>
<span style="color: maroon; font-weight: bold;">gosub</span> CheckRowCol
RIGHT_SHIFT <span style="color: #808030;">=</span> SPECIAL_KEY_PRESSED
<span style="color: dimgrey;">'Check if Right Shift is pressed</span>
CHECK_ROW <span style="color: #808030;">=</span> %<span style="color: #008c00;">00000100</span>
CHECK_COL <span style="color: #808030;">=</span> %<span style="color: #008c00;">00000001</span>
<span style="color: maroon; font-weight: bold;">gosub</span> CheckRowCol
CTRL <span style="color: #808030;">=</span> SPECIAL_KEY_PRESSED
ROW <span style="color: #808030;">=</span> ncd ROWS
COLUMN <span style="color: #808030;">=</span> ncd COLUMNS
<span style="color: dimgrey;">'sertxd("B1,B2,ROW,COL: ",#b1," ",#b2," ",#ROW," ",#COLUMN,13,10)</span>
<span style="color: maroon; font-weight: bold;">if</span> ROW<span style="color: #808030;">=</span><span style="color: #008c00;">0</span> or COLUMN<span style="color: #808030;">=</span><span style="color: #008c00;">0</span> <span style="color: maroon; font-weight: bold;">then</span> <span style="color: maroon; font-weight: bold;">goto</span> reset_keycount
ROW <span style="color: #808030;">=</span> ROW<span style="color: #808030;">-</span><span style="color: #008c00;">1</span>
COLUMN <span style="color: #808030;">=</span> COLUMN <span style="color: #808030;">-</span><span style="color: #008c00;">1</span>
b0 <span style="color: #808030;">=</span> <span style="color: #008c00;">8</span><span style="color: #808030;">*</span>COLUMN <span style="color: #808030;">+</span> ROW
<span style="color: maroon; font-weight: bold;">if</span> LEFT_SHIFT <span style="color: #808030;">=</span><span style="color: #008c00;">1</span> OR RIGHT_SHIFT<span style="color: #808030;">=</span><span style="color: #008c00;">1</span> <span style="color: maroon; font-weight: bold;">then</span> <span style="color: maroon; font-weight: bold;">goto</span> Shift_pressed
lookup b0<span style="color: #808030;">,</span><span style="color: #808030;">(</span><span style="color: #0000e6;">"1"</span><span style="color: #808030;">,</span><span style="color: #008c00;">8</span><span style="color: #808030;">,</span><span style="color: #0000e6;">"cr cq23wa~zse45rdxcft67ygvbhu89ijnmko0+pl,.:@-$*;/~=???"</span><span style="color: #808030;">,</span><span style="color: #008c00;">13</span><span style="color: #808030;">,</span><span style="color: #0000e6;">"?ffff"</span><span style="color: #808030;">)</span><span style="color: #808030;">,</span>KEY
<span style="color: maroon; font-weight: bold;">goto</span> Key_Pressed
Shift_pressed<span style="color: #808030;">:</span>
lookup b0<span style="color: #808030;">,</span><span style="color: #808030;">(</span><span style="color: #0000e6;">"!"</span><span style="color: #808030;">,</span><span style="color: #008c00;">8</span><span style="color: #808030;">,</span><span style="color: #0000e6;">"cr CQ"</span><span style="color: #808030;">,</span><span style="color: #008c00;">34</span><span style="color: #808030;">,</span><span style="color: #0000e6;">"#WA~ZSE$%RDXCFT&'YGVBHU()IJNMKO0+PL<>[@-$*]?~=???"</span><span style="color: #808030;">,</span><span style="color: #008c00;">13</span><span style="color: #808030;">,</span><span style="color: #0000e6;">"?ffff"</span><span style="color: #808030;">)</span><span style="color: #808030;">,</span>KEY
Key_Pressed<span style="color: #808030;">:</span>
<span style="color: dimgrey;">'sertxd("KEY PRESSED!",#ROW," ",#COLUMN," ",#b0,":",b1,13,10)</span>
<span style="color: maroon; font-weight: bold;">if</span> KEY <span style="color: #808030;">=</span> <span style="color: #0000e6;">"~"</span> <span style="color: maroon; font-weight: bold;">then</span> <span style="color: maroon; font-weight: bold;">goto</span> continue <span style="color: dimgrey;">'~ marks an unprintable character (Only Shift is pressed)</span>
<span style="color: maroon; font-weight: bold;">if</span> KEY <span style="color: #808030;">=</span> PREVIOUS_KEY AND KEY_COUNT <span style="color: #808030;"><</span> KEY_DELAY <span style="color: maroon; font-weight: bold;">then</span> <span style="color: maroon; font-weight: bold;">goto</span> count_keys
<span style="color: maroon; font-weight: bold;">if</span> KEY_COUNT <span style="color: #808030;"><</span><span style="color: #808030;">></span> KEY_DELAY <span style="color: maroon; font-weight: bold;">then</span> <span style="color: maroon; font-weight: bold;">goto</span> normal_delay
KEY_DELAY <span style="color: #808030;">=</span> <span style="color: #008c00;">3</span>
normal_delay<span style="color: #808030;">:</span>
KEY_COUNT <span style="color: #808030;">=</span><span style="color: #008c00;">0</span>
sertxd<span style="color: #808030;">(</span>KEY<span style="color: #808030;">)</span>
serout A<span style="color: #008c00;">.0</span><span style="color: #808030;">,</span>T9600_8<span style="color: #808030;">,</span><span style="color: #808030;">(</span>KEY<span style="color: #808030;">)</span>
PREVIOUS_KEY <span style="color: #808030;">=</span> KEY
<span style="color: maroon; font-weight: bold;">goto</span> continue
<span style="color: #e34adc;">count_keys</span><span style="color: #808030;">:</span>
KEY_COUNT <span style="color: #808030;">=</span> KEY_COUNT<span style="color: #808030;">+</span><span style="color: #008c00;">1</span>
<span style="color: maroon; font-weight: bold;">goto</span> continue
<span style="color: #e34adc;">reset_keycount</span><span style="color: #808030;">:</span>
KEY_COUNT<span style="color: #808030;">=</span><span style="color: #008c00;">0</span>
KEY<span style="color: #808030;">=</span><span style="color: #008c00;">0</span>
PREVIOUS_KEY <span style="color: #808030;">=</span><span style="color: #008c00;">0</span>
KEY_DELAY <span style="color: #808030;">=</span> <span style="color: #008c00;">30</span>
continue<span style="color: #808030;">:</span>
<span style="color: maroon; font-weight: bold;">loop</span> <span style="color: #808030;">;</span> <span style="color: maroon; font-weight: bold;">next</span> <span style="color: maroon; font-weight: bold;">loop</span>
<span style="color: #e34adc;">CheckRowCol</span><span style="color: #808030;">:</span>
SPECIAL_KEY_PRESSED <span style="color: #808030;">=</span> <span style="color: #008c00;">0</span>
TEMP_SUB <span style="color: #808030;">=</span> ROWS and CHECK_ROW <span style="color: dimgrey;">'Check if a specific bit in ROWS is set</span>
<span style="color: maroon; font-weight: bold;">if</span> TEMP_SUB <span style="color: #808030;">=</span> <span style="color: #008c00;">0</span> <span style="color: maroon; font-weight: bold;">then</span> <span style="color: maroon; font-weight: bold;">goto</span> NotPressed
TEMP_SUB <span style="color: #808030;">=</span> COLUMNS and CHECK_COL <span style="color: dimgrey;">'Check if a specific bit in COLUMNS is set</span>
<span style="color: maroon; font-weight: bold;">if</span> TEMP_SUB <span style="color: #808030;">=</span> <span style="color: #008c00;">0</span> <span style="color: maroon; font-weight: bold;">then</span> <span style="color: maroon; font-weight: bold;">goto</span> NotPressed
TEMP_SUB <span style="color: #808030;">=</span> NOB ROWS <span style="color: dimgrey;">'Bit in ROWS and in COLUMNS found. Check how many bits in ROWS are set</span>
<span style="color: maroon; font-weight: bold;">if</span> TEMP_SUB <span style="color: #808030;">=</span> <span style="color: #008c00;">1</span> <span style="color: maroon; font-weight: bold;">then</span> <span style="color: maroon; font-weight: bold;">goto</span> no_bit_reset <span style="color: dimgrey;">'If it is just one bit, do not reset it</span>
TEMP_SUB <span style="color: #808030;">=</span> <span style="color: maroon; font-weight: bold;">NOT</span> CHECK_ROW <span style="color: dimgrey;">'Invert all bits in the CHECK_ROW</span>
ROWS <span style="color: #808030;">=</span> ROWS and TEMP_SUB <span style="color: dimgrey;">'AND it with the ROWS to reset the bit we just found </span>
no_bit_reset<span style="color: #808030;">:</span>
TEMP_SUB <span style="color: #808030;">=</span> NOB b2
<span style="color: maroon; font-weight: bold;">if</span> TEMP_SUB <span style="color: #808030;">=</span> <span style="color: #008c00;">1</span> <span style="color: maroon; font-weight: bold;">then</span> <span style="color: maroon; font-weight: bold;">goto</span> no_bit_reset_2
TEMP_SUB<span style="color: #808030;">=</span> <span style="color: maroon; font-weight: bold;">NOT</span> CHECK_COL
COLUMNS <span style="color: #808030;">=</span> COLUMNS and TEMP_SUB
no_bit_reset_2<span style="color: #808030;">:</span>
SPECIAL_KEY_PRESSED <span style="color: #808030;">=</span> <span style="color: #008c00;">1</span>
<span style="color: #e34adc;">NotPressed</span><span style="color: #808030;">:</span>
<span style="color: maroon; font-weight: bold;">return</span></pre>
Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com0tag:blogger.com,1999:blog-26685537.post-62577697805493338332014-01-03T21:48:00.000+01:002014-02-08T14:38:58.358+01:00My Claim to MAME. (Building MAME: Intro)<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYQbRB0-b_-3aXP4rPU4pstpvL_uUvfGXVhSsB9kNug2b5OpvJyZOzO9kulGMAeahx1TkhDq4syna5VjG7G7Dgogpfc9OqtFwTddMtE1p_wvGHMIONPLNpdOTUUr6QO4GWOBLv/s1600/MAMELogoTMSmall.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYQbRB0-b_-3aXP4rPU4pstpvL_uUvfGXVhSsB9kNug2b5OpvJyZOzO9kulGMAeahx1TkhDq4syna5VjG7G7Dgogpfc9OqtFwTddMtE1p_wvGHMIONPLNpdOTUUr6QO4GWOBLv/s320/MAMELogoTMSmall.jpg" /></a>This is the first post to what hopefully is going to be a (small) series. For many years I always had in the back of my mind that one day I wanted to build a <a href="http://mamedev.org/">MAME </a>cabinet. It started back in the days when this was a rarity and only a few people did such a silly thing. Building it was complicated and expensive. Nowadays it looks like there are thousands of middle-aged men around the world that attempt to re-capture their youth this way, and parts, plans and building instructions are widely available. Hundreds of on-line shops sell every possible part you'd ever need and even complete cabinets. (just Google for <a href="https://www.google.com/search?q=%27MAME+Arcade+Shop&ie=utf-8&oe=utf-8&aq=t" target="_blank">'MAME Arcade Shop</a>' and you 'll see what I mean)<br />
<br />
But I want to keep the costs to a minimum by using parts I already have lying around.<br />
<br />
<b><i>The monitor</i></b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRPshODwbKgUxCpTsBYqKZaXqPEcvQ8C-ZTJbGdCMcJWlU57v2KEVf-_9JNarN8NNcj2sHSyQsKm7BwUdKApGskDbFGd3Fc89x7lVU86WsPh-zvnCp5pSzvjjRTocyjKFhd-P-/s1600/IMG_20131102_132829.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRPshODwbKgUxCpTsBYqKZaXqPEcvQ8C-ZTJbGdCMcJWlU57v2KEVf-_9JNarN8NNcj2sHSyQsKm7BwUdKApGskDbFGd3Fc89x7lVU86WsPh-zvnCp5pSzvjjRTocyjKFhd-P-/s200/IMG_20131102_132829.jpg" height="150" width="200" /></a></div>
An old 15"LCD monitor that became surplus since everybody in my family now has it's own laptop...<br />
<i><b>The computer</b></i><br />
Any old laptop, even with a broken screen, will do. I've some of these lying around at the office.Or I could even use my <a href="http://www.raspberrypi.org/archives/tag/mame" target="_blank">Raspberry Pi</a>.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpbpBf0uOAeg-SEcUuZ2MqvMHKmbMnCSCRpkgdDxfMJj39KmAmcMValinQrd4sd0DpvCuGJMC3V0cJ1x0cD8D9yxxrmiwcJ3h1zf2jGFfCbzolExYR8V_oP5W0SgjfMonI-AAR/s1600/IMG_20131031_080250.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpbpBf0uOAeg-SEcUuZ2MqvMHKmbMnCSCRpkgdDxfMJj39KmAmcMValinQrd4sd0DpvCuGJMC3V0cJ1x0cD8D9yxxrmiwcJ3h1zf2jGFfCbzolExYR8V_oP5W0SgjfMonI-AAR/s200/IMG_20131031_080250.jpg" height="150" width="200" /></a></div>
<a href="http://www.c-scope.blogspot.nl/2013/11/buiding-box-building-mame-cabinet-part-2.html" target="_blank"><i><b>The cabinet</b></i></a><br />
Some leftover MDF board is still in my shed for years. Maybe it's not enough for a full cabinet but it will get me started.<br />
<i><b>The controls</b></i><br />
I will need a joystick, some buttons, a 'spinner' (for playing Tempest) and a trackball. The trackball I already have. The joystick and buttons I had to buy, but they're not overly expensive ( €35,- for a joystick and seven buttons). The spinner is a bit of an issue. It seems not to hard to make myself, and they are quite expensive to buy so that will be a project in itself.<br />
<a href="http://www.c-scope.blogspot.nl/2013/11/its-all-about-control-building-mame.html" target="_blank"><i><b>The controller</b></i></a><br />
To connect all the controls to the PC you need some kind of interface. Again this can be bought, but I have a feeling this probably can be done with one of the USB powered micro controller boards I have lying around like the <a href="http://netduino.com/" target="_blank">NetDuino</a>, <a href="http://www.arduino.cc/" target="_blank">Arduino </a>or <a href="http://processors.wiki.ti.com/index.php/MSP430_LaunchPad" target="_blank">Launchpad</a>.<br />
<br />
Fortunately there are ton of sites (mainly blogs like these) with examples and how-to's. A few that I found very useful:<br />
<a href="http://arcadeartlibrary.com/arcade_art/index.php" target="_blank">The Arcade Art Library</a> - Where you can find all the graphics you need to create some good marquees and side art.<br />
<a href="http://www.koenigs.dk/mame/eng/index.htm" target="_blank">Project MAME</a>- Some very good step by step instructions on how to build different types of cabinets. I did not use any of their design but there are some really useful hints and tips in there.<br />
<a href="http://wiki.arcadecontrols.com/wiki/Main_Page" target="_blank">Build Your Own Arcade Controls (BYOAC)</a> - A general reference site with lots of info.<br />
<a href="http://www.coldbeamgames.com/3/post/2013/07/i-built-an-arcade-cabinet.html" target="_blank">I Built An Arcade!</a> - Great example of how to build a beautiful cabinet. Takes 13 months though...<br />
<a href="http://www.instructables.com/id/How-to-build-a-Bartop-Arcade/" target="_blank">How to build a bartop arcade </a>- Another detailed how-to with some good ideas.<br />
<a href="http://1uparcade.rmfx.com/" target="_blank">1UPArcade</a> - An amazing cabinet with a rotating control panel ! <br />
<br />
And finally:<br />
<a href="http://www.wickedretarded.com/~crapmame/index.html" target="_blank">What Is This Crap</a>. - A showcase of how NOT to do it. (beware, contains strong language..)<br />
<br />
<i><b>The Games</b></i><br />
By building a cabinet with a vertical monitor and just 4 buttons I have already limited the number of games that will be played on it. Which is fine with me since I prefer games from the seventies and eighties of which most were actually vertical platformers or shooters. Finding the games is easy, if you know where to look for. The best starting point I've found so far is the more than comprehensive <a href="http://www.mamedb.com/">MAME Database</a>. This does not only list the games but has descriptions and screenshots. No downloads however since (as you may well know) games are usually still copyrighted and downloading ROMs is considered illegal. But once you know the name of the game you can just Google it to find the ROM. (don't be surprise if you find some more 'obscure' sites with ads that are not directly suitable for kids...) <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com0tag:blogger.com,1999:blog-26685537.post-47015961258399737702014-01-02T19:26:00.000+01:002014-02-03T10:05:20.767+01:00Buiding the Box (Building MAME: The Cabinet.)When looking at all available designs and previously built MAME cabinets you soon find out that there is not just one universal design. And actually if you take a closer look at all the original cabinets you'll see they also differ a lot.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0cNhlLWYfVAvU6iJ-h4fi6yJpaPCcfsd2xyvlDIlkY-2UVbemqV7sZVnXP8EycjVEObOlCwRvoVInxxqtKq1j1ItBBYtyf65R9eOEaaImLvfIfRv1-evfVkRTEqh6lKel82IT/s1600/cabinets.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0cNhlLWYfVAvU6iJ-h4fi6yJpaPCcfsd2xyvlDIlkY-2UVbemqV7sZVnXP8EycjVEObOlCwRvoVInxxqtKq1j1ItBBYtyf65R9eOEaaImLvfIfRv1-evfVkRTEqh6lKel82IT/s320/cabinets.png" height="96" width="320" /></a></div>
I decided to take the 'Defender' design which is available as a <a href="http://sketchup.google.com/3dwarehouse/details?mid=2d46a031a17be2dd73b4ec5aa28d567a&prevstart=0" target="_blank">Sketchup model</a>. Imported it into the free '<a href="http://www.designspark.com/eng/page/mechanical" target="_blank">DesignSpark</a>' solid modeller and just projected the side of the box on the piece of MDF I had available. This also gave me the chance to make it less deep. Since my cabinet will be fitted with a slim LCD screen instead of a bulky monitor it can be a lot smaller than the original. From the model I created the following plan-view of the side:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPoW7wtpYJo7gWEcpGKEw7InMpBX-_bTX9H3mEWcCqwiwQXFbQKMV8vjo3SAWo3Gx37go4LBaTS21FqaL50GLSg6dw-teUX_fEbTn8HN4zkhhiEka8BM3dyIMV_RhL0MYaj0vZ/s1600/MAME+Sizes.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPoW7wtpYJo7gWEcpGKEw7InMpBX-_bTX9H3mEWcCqwiwQXFbQKMV8vjo3SAWo3Gx37go4LBaTS21FqaL50GLSg6dw-teUX_fEbTn8HN4zkhhiEka8BM3dyIMV_RhL0MYaj0vZ/s320/MAME+Sizes.png" height="320" width="278" /></a></div>
From there its just a matter of transferring the design to the board and use a jigsaw to shape them.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0oQT0sJNS_9iFfcgFqOwBdwELmgIU7PBEijZkjQVaQ_MmohR3wmU8i3Magr6Lp1DU5Wvwbl_cIa91kTQpWUJNP_vzZKldLJDtCv2Fh4HV-voWQ0aFYGY9YBiSAM5hGF1jQ-6V/s1600/IMG_20131102_122710.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0oQT0sJNS_9iFfcgFqOwBdwELmgIU7PBEijZkjQVaQ_MmohR3wmU8i3Magr6Lp1DU5Wvwbl_cIa91kTQpWUJNP_vzZKldLJDtCv2Fh4HV-voWQ0aFYGY9YBiSAM5hGF1jQ-6V/s320/IMG_20131102_122710.jpg" height="240" width="320" />I </a></div>
It's hard to saw straight lines using a jigsaw, so I first clamp on a piece of wood to align the saw. And when you just clamp two identical pieces of MDF together when you are sawing you get two perfectly identical sides.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3iC7cu2aeQeX0xtkRtr6iwaZEm-RqH9YYY9W0xhGU0pjFYH7DwncRNXziGFCTeFDPH1G0b-fhRxzQSEPpYDfRpXOoHSCQ13WnhxD344bR-PAbWpXNbY0ZXYEc5q2sVdSxLKv2/s1600/IMG_20131102_132135.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3iC7cu2aeQeX0xtkRtr6iwaZEm-RqH9YYY9W0xhGU0pjFYH7DwncRNXziGFCTeFDPH1G0b-fhRxzQSEPpYDfRpXOoHSCQ13WnhxD344bR-PAbWpXNbY0ZXYEc5q2sVdSxLKv2/s320/IMG_20131102_132135.jpg" height="240" width="320" /></a></div>
Note that sawing two layers at the same time like this probably only works if you use 8 to 10 mm MDF. If you use it on thicker material it is very hard to keep the jigsaw exactly vertical and if it is slightly tilted your lower board will have a different size than the top one.<br />
<br />
After I created the two sides I just estimated the optimum width by just holding the monitor next to one of the plates and finding good position. 50 cm seems like a good width so I just made the second MDF board exactly 50 cm wide. By doing this very carefully and making sure all corners of the board are now exactly 90 degrees it will be easy to create all front, top and rear surface plates.<br />
And then we paint..and paint<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
and paint..and paint...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicTl3TIn450ItFaUeSQCM1ze6y4Zb2W8y6MzCpVo-kxNS_HDu5_ftVkx70VP3V9vaEWp1sqmoAQMHFSb9UYNL7ghjM3QG0MjSuGbRK_IRyNRMj-5LHg853HOKSNe7DsnMT03m-/s1600/IMG_20131107_172200.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicTl3TIn450ItFaUeSQCM1ze6y4Zb2W8y6MzCpVo-kxNS_HDu5_ftVkx70VP3V9vaEWp1sqmoAQMHFSb9UYNL7ghjM3QG0MjSuGbRK_IRyNRMj-5LHg853HOKSNe7DsnMT03m-/s320/IMG_20131107_172200.jpg" height="320" width="240" /></a></div>
Yes, two layers of MDF primer on each side is the minimum. Because MDF sucks... And that I mean literally. It just sucks up paint so for a good final finish you just have to primer it first.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRGu0mWy7fuNVsWMWipW_9F8sAX7PiPoG9K5GbzCnNBU3HbOy4iv4W8wHFCatknpCX5nwlWa46cxSI90_XTa0pZxn9kE7yhQa3BgGXU9oian0drUWCiHdVE_Hq4dLeBLLn-Gad/s1600/Drilling+the+holes.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRGu0mWy7fuNVsWMWipW_9F8sAX7PiPoG9K5GbzCnNBU3HbOy4iv4W8wHFCatknpCX5nwlWa46cxSI90_XTa0pZxn9kE7yhQa3BgGXU9oian0drUWCiHdVE_Hq4dLeBLLn-Gad/s320/Drilling+the+holes.png" height="121" width="320" /></a></div>
Drilling the holes for the buttons. Using a 28 mm speed drill creates nice clean holes, but you must drill half way from one side, reverse the board and drill the rest from the other side.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihWakptaccfMJljOMrxPVVNQx8D6Qf_Aa7OAVMzLFwBMcQe2Z-RUKBALH_ERdOGUJ98or6aB7DMbifMminlcy-a1pbcEkVsMVcvjYAt034pwYXaDJAfHn028KBtNQWezjLQcnJ/s1600/Mounting+the+supports.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihWakptaccfMJljOMrxPVVNQx8D6Qf_Aa7OAVMzLFwBMcQe2Z-RUKBALH_ERdOGUJ98or6aB7DMbifMminlcy-a1pbcEkVsMVcvjYAt034pwYXaDJAfHn028KBtNQWezjLQcnJ/s320/Mounting+the+supports.png" height="122" width="320" /></a></div>
Glue on the supporting blocks. I used a 20x20 wooden stick that I found in the shed. It's painted wood so using wood glue is not optimal since that is supposed to be applied to unpainted surfaces. Using a Polyurethane based construction adhesive is better.<br />
In the mean time I keep refining the 3D model. And it's actually progressing faster than the real thing: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIVqWPRIjIEIAFdlpyQKj0o0aOlQtQizfpJEQK_aLs3x9Lqbpei-OICT-BHaG6Q-sHaJbr-QXa3HG-W0M7jOWYMtPBl5vOCn3dfo_eAbMbxas4BJE51LrN_vXUqQ6AWMXPGhRE/s1600/MAME_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIVqWPRIjIEIAFdlpyQKj0o0aOlQtQizfpJEQK_aLs3x9Lqbpei-OICT-BHaG6Q-sHaJbr-QXa3HG-W0M7jOWYMtPBl5vOCn3dfo_eAbMbxas4BJE51LrN_vXUqQ6AWMXPGhRE/s320/MAME_2.png" height="176" width="320" /></a></div>
But after assembling the main parts it starts to look like real:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4_JBAz3X846rCVnPR_7GaaWSaRsRr-4wuFdE16rd2NRIw2_jf6gjkzrc109CdkqDjPvvnXdyXt6x4Sra40zS61hPdCL7Kiqohyhg4NrM_9_Ecx8cEii0_ktqLiOR3PgvdFo8b/s1600/First+assembly.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4_JBAz3X846rCVnPR_7GaaWSaRsRr-4wuFdE16rd2NRIw2_jf6gjkzrc109CdkqDjPvvnXdyXt6x4Sra40zS61hPdCL7Kiqohyhg4NrM_9_Ecx8cEii0_ktqLiOR3PgvdFo8b/s320/First+assembly.png" height="320" width="240" /></a></div>
Next step would be to create the perspex cover for the control panel. I chose a standard 100x50 cm, 2mm thick perspex sheet which is available at almost every large hardware store. It was actually a coincidence that I chose 50 cm for the inner width of the cabinet but it's very convenient now since the perspex only has to be cut to length. And cutting perspex appeared a lot harder than I expected. First I tried to saw it using a fine pitch wood-saw intended for cutting laminate flooring. That does not work. The cut is very irregular and pieces just tend to break off. Second I tried cutting it using a hobby knife. This might be possible but its very hard to get one straight cut. Even if you use a steel ruler as a guide the knife just runs off if you are not very careful. After creating the cut (it's impossible to cut through the perspex) you can break it on the edge of a table. That does work but if the cut is pot too deep and not very straight you will get a very irregular edge with razor sharp points.<br />
Finally used the blade of a fine tooth hack-saw. That works better but it is essential that you carefully support both sides of the cut or the perspex will break.<br />
<br />
Then the holes. This turned out to be even harder and it took me three attempts and a full panel of perspex before I finally had one that did not have cracks, or even completely destroyed edges. My tips for making holes:<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKu8nui1ny5Q8D4t3TWLBEjtbo7aECagiZSfk-VBEZI3_nj22uDU1JuUN1d1KJnSkf2-ejT5egiaqmohjnPW6WY2brog8mFJfCTDvyMdNhwv0pVP3xdIVFGIN1B6YO2wZRN1dx/s1600/holesaw.JPG" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKu8nui1ny5Q8D4t3TWLBEjtbo7aECagiZSfk-VBEZI3_nj22uDU1JuUN1d1KJnSkf2-ejT5egiaqmohjnPW6WY2brog8mFJfCTDvyMdNhwv0pVP3xdIVFGIN1B6YO2wZRN1dx/s200/holesaw.JPG" height="200" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Hole saw</td></tr>
</tbody></table>
- Use a vertical drill and push the drill very slowly. If you drill too fast the perspex will crack.<br />
- Start every hole by drilling a small (3mm) hole in the centre. Then slowly increase the size of the drill but not more than 2 mm for every next step.<br />
- Drill any hole larger than 10 mm using a hole-saw ! Trust me, any other drilling device (like a step-cone drill for example) will crack the perspex. This has one disadvantage. The arcade buttons require a 28 mm hole and this somehow seems to be a very uncommon size. So far I just found one set that has the 28 mm included.<br />
- Support the perspex with wood and use a fresh piece for every hole so there is no hole in the wood under the perspex before you start the drilling.<br />
<br />
<br />
<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="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAP5fw9bknsTdAmd49NJwjcjHToC62xlQM5S0UA8NvsVlYL8upy2jpgAefM_mNIWcXnRBvMB05rGPWTs5U_BgDkLTdBjteYxWWyLtBk9N_NrOCLLXhh-FpS1OnuQHb1wnCppjR/s1600/IMG_20131226_145923.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAP5fw9bknsTdAmd49NJwjcjHToC62xlQM5S0UA8NvsVlYL8upy2jpgAefM_mNIWcXnRBvMB05rGPWTs5U_BgDkLTdBjteYxWWyLtBk9N_NrOCLLXhh-FpS1OnuQHb1wnCppjR/s200/IMG_20131226_145923.jpg" height="200" width="150" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">CRACK !</td></tr>
</tbody></table>
- Make sure you push down the perspex firmly and close to the drill. If you don't, the perspex might just jump up and crack.<br />
- Don't drill too close to the edges. If there are holes near the edge of your control panel (like there are on mine) make the sheet larger, drill them first and then cut the sheet to size. <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
But finally with the inside painted deep-blue and the control panel covered with the perspex sheet it starts to look really good:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkR9UDMBuULkPjaCcaCvTTd3Ocs6iddySRktyvoRw-Z_9vHbZ9A7Fj8DmTDo2BneDMlCErp5PgrpEhjK0jgDAACjB8ahb3sjjOWdPANhWPghCwMAzRwmfhwAIUyjNEF2-XhQwy/s1600/MAME+Detail+of+front_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkR9UDMBuULkPjaCcaCvTTd3Ocs6iddySRktyvoRw-Z_9vHbZ9A7Fj8DmTDo2BneDMlCErp5PgrpEhjK0jgDAACjB8ahb3sjjOWdPANhWPghCwMAzRwmfhwAIUyjNEF2-XhQwy/s320/MAME+Detail+of+front_2.png" height="315" width="320" /></a></div>
Creating the front bezel was actually very simple. First cut the perspex to size, place it in the cabinet and install the monitor so you can see were the screen is. Mark this on the perspex (I kept about 1 cm marging around the actual screen). Then (using a very sharp knife and a steel ruler) cut the protective foil and remove it on the edges. Then spray paint it a few times until the edges are really black. Make sure it really dry before removing the protective foil from the centre. And it looks really awesome when you look at it from the other side.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbVcPI4-eL8Ha6GPx8XhXIUeq7D5EXwwXTjimcnGP-F4vZHYPZxZISMM77lC110C-d0wolw0mfy7E__G7NUft1FXW2XGFNb5iCXwqQQ9RcqELRvIjd43HLXJIM8DvZGbN7mNBI/s1600/Bezel.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbVcPI4-eL8Ha6GPx8XhXIUeq7D5EXwwXTjimcnGP-F4vZHYPZxZISMM77lC110C-d0wolw0mfy7E__G7NUft1FXW2XGFNb5iCXwqQQ9RcqELRvIjd43HLXJIM8DvZGbN7mNBI/s1600/Bezel.png" height="81" width="400" /></a></div>
<br />
With the front-bezel installed, running LadyBug:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0qXm2FGa8kne_Xb9EyJSUOeXdWkJsXsq4T33Z_ySB29V07gkvx7rmYdHo4LRdIXiMJdyf1AsLe5lZ1AbwuJBhAsLQ8wmgThZEQxmohfUP4Y-m5V2vHFsitxEiq0gHsDXiE_F_/s1600/First+run.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0qXm2FGa8kne_Xb9EyJSUOeXdWkJsXsq4T33Z_ySB29V07gkvx7rmYdHo4LRdIXiMJdyf1AsLe5lZ1AbwuJBhAsLQ8wmgThZEQxmohfUP4Y-m5V2vHFsitxEiq0gHsDXiE_F_/s320/First+run.png" height="320" width="228" /></a></div>
On the pedestal, with the top marquee installed: <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwK2W98FTV6wlslLduqRM90EnxfWWxlhwTcZMW49ZGIJzM8xjcIaa2VKosdMq5_nAJOZDAijEv1AWfOVVvDtAhGWdLKkbwzOrgD72HlFMiPJw6Sk4OzKwUBn_4RvjFye-8NTLQ/s1600/Full+cabinet+with+marquee.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwK2W98FTV6wlslLduqRM90EnxfWWxlhwTcZMW49ZGIJzM8xjcIaa2VKosdMq5_nAJOZDAijEv1AWfOVVvDtAhGWdLKkbwzOrgD72HlFMiPJw6Sk4OzKwUBn_4RvjFye-8NTLQ/s1600/Full+cabinet+with+marquee.jpg" height="320" width="240" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com0tag:blogger.com,1999:blog-26685537.post-35023223339959134292014-01-01T14:03:00.000+01:002017-03-24T12:15:10.781+01:00It's all about Control. (Building MAME: The Controller)<span style="font-size: large;"><b>Using the Arduino as a MAME interface. </b></span><br />
<br />
MAME software runs on a computer. And modern computers do not have any simple I/O pins any more .(remember the parallel port that used to be on every computer for connecting a printer ?) So to connect switches and joysticks you will need some kind of interface that translates switch actions to USB. Early MAME builders cracked open standard keyboards and hard wired their switches to the different keys. This worked, but was quite difficult. Especially low cost keyboards did not have easy to solder contacts or convenient connectors to hook up to. Nowadays the most common solution is a dedicated controller that has lots of easy connectible inputs and USB output that just pretends to be standard keyboard. Best known are the <a href="http://www.ultimarc.com/ipac1.html" target="_blank">UltiMarc I-Pac</a> , OptiPac or J-Pac. An even lower cost solution are the<a href="http://www.xin-mo.com/?page_id=34" target="_blank"> Xin-Mo</a> controller boards (aroun US$25,-, including the wires).<br />
But to keep the cost to a minimum I intend to use what I already have...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO0VqHvRYOh-AA4S4Hw2ZqfJDEIlnQ78P-SXctcCVC5g1LSVxBCaoAXxGrkqFyD4J0G5c3WKDD6pvFZWZSoLTTkBNzb8LOMgm_6qP9DGZ1LKadQvMAuA7kVncFzPUpjCFbfo2u/s1600/ArduinoUno_R3_Front_450px.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="138" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO0VqHvRYOh-AA4S4Hw2ZqfJDEIlnQ78P-SXctcCVC5g1LSVxBCaoAXxGrkqFyD4J0G5c3WKDD6pvFZWZSoLTTkBNzb8LOMgm_6qP9DGZ1LKadQvMAuA7kVncFzPUpjCFbfo2u/s200/ArduinoUno_R3_Front_450px.jpg" width="200" /></a></div>
The cheapest solution would be to use my FunDuino
UNO R2 board. ( A cheap Chinese Arduino clone that ships at US$13,- from <a href="http://dx.com/s/funduino" target="_blank">DealExtreme</a>)<br />
It's got 14 digital I/O pins so that should be enough for
an 8 way joystick + 7 buttons. (An 8 way joystick only has 4 switches).
Since one of the buttons is just the 'Start' button so it will not need a
fast response time I could also connect that to one of the analogue
inputs and thus free 4 I/O pins for controlling additional stuff like
lighting, sound or LEDs.<br />
What I need is the Arduino to emulate
a keyboard or to behave like a 'HID' (Human Interface Device). And if
you know what to look for something like this is easy to find. Like on
the blog of <a href="http://mitchtech.net/arduino-usb-hid-keyboard/" target="_blank">MitchTech</a>.
Now I did not immediately get the idea of this, until I realised that
the Arduino board actually contains TWO different micro-controllers. One
is the main controller (a ATmega328) that runs the Arduino 'sketches' and
a second one (ATmega16u2) that just takes care of the USB communication
from your PC to the main controller. And this communication controller is what we are re-programming to switch from a virtual COM port to a HID device.<br />
First we will need a 'DFU' programmer. I use Windows, so I'll use '<a href="http://www.atmel.com/tools/flip.aspx" target="_blank">FLIP</a>'
The procedure seems simple enough. Reset the Arduino, use FLIP to
upload firmware. But I seem to have a problem with the reset. When I
release the reset the board starts running the last sketch I've
programmed it with, and it certainly does not show up as a new device.
Which in turn is required so I can install the USB driver that FLIP
needs. And of course I just overlooked something. When you have a <a href="http://arduino.cc/en/Hacking/DFUProgramming8U2">non SMD Arduino board you should solder a resistor at the back</a>. Yes, that is
mentioned on the MitchTech page... (And it's no longer required with the latest revision of the Arduino UNO)<br />
I just assumed I had a SMD board since
there are many SMD components on the top of the board. But it's
probably only so if the processor itself is a SMD version.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiltMUPqEqj0yF_RmUZh4wD82wn9BuRJt1i9q9xXzGhn1F0RtitGthUZsB9YGiDYSDUmee3nYbDOnp5vanCRr40nvKB4OkLPta51QWx3N-mJ6z-1vQY14YxYpuocgvlG4-62oMc/s1600/Device+manager+AT90USB82.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="233" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiltMUPqEqj0yF_RmUZh4wD82wn9BuRJt1i9q9xXzGhn1F0RtitGthUZsB9YGiDYSDUmee3nYbDOnp5vanCRr40nvKB4OkLPta51QWx3N-mJ6z-1vQY14YxYpuocgvlG4-62oMc/s320/Device+manager+AT90USB82.png" width="320" /></a>And indeed, when the resistor is mounted and we short circuit the two pins, left-top of the board, the unit shows up in the Windows device manager as a 'DFU' device. Left click on it, select 'Update Driver' and select the driver from the FLIP->usb directory. Then it shows up as an A90USB8. And when we unplug it and plug it back in it is again visible as the virtual serial port. <br />
<br />
Now we need to know what codes should be sent when a button is pressed. Which keys do we need to play MAME games ?<br />
The full overview is on<a href="http://mameosx.sourceforge.net/documentation/manual/keyboard.html" target="_blank"> this page.</a> And this is the selection of the ones I think I'll need:<br />
<dl>
<dt><span style="font-family: "courier new" , "courier" , monospace;">Key Function HID Key </span></dt>
<dt><span style="font-family: "courier new" , "courier" , monospace;">5 Insert coin 34</span></dt>
<dt><span style="font-family: "courier new" , "courier" , monospace;">1, 2 Start (players 1, 2) 30,31</span></dt>
<dt><span style="font-family: "courier new" , "courier" , monospace;">Arrow keys (U,D,L,R) Move Joystick 82,81,80,79</span></dt>
<dt><span style="font-family: "courier new" , "courier" , monospace;">Left Control Button 1 Bit0 </span></dt>
<dt><span style="font-family: "courier new" , "courier" , monospace;">Left Alt Button 2 Bit2</span></dt>
<dt><span style="font-family: "courier new" , "courier" , monospace;">Space Button 3 44</span></dt>
<dt><span style="font-family: "courier new" , "courier" , monospace;">Left Shift Button 4 Bit1</span></dt>
<dt><span style="font-family: "courier new" , "courier" , monospace;">Z </span><span style="font-family: "courier new" , "courier" , monospace;">Button 5 29 </span></dt>
<dt><span style="font-family: "courier new" , "courier" , monospace;">X </span><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;">Button 6 27</span> </span></dt>
<dt><span style="font-family: "courier new" , "courier" , monospace;">ESC (Escape) Quits the game 41 </span></dt>
<dt><br /></dt>
</dl>
('Bit0..Bit2' marks a bit in the Modifier byte)<br />
<br />
First I just used the MitchTech sample program. This just detects what pin is activated, sends a single key and then after 100 mS a 'releasekey' command. So if you press and hold a button you are sending 10 keydown / key-release commands per second. This works, but not very good. Most MAME games do not respond very well to a constant stream of key-presses. The movements often get a bit jerky, probably due to a regular key-buffer overload. Also it just sends one key at a time while the keyboard code does allow for multiple keys.<br />
In my program I created a loop that checks every time which contacts are closed, find the keyboard code that has to be generated for that contact and add that to the keyboard message. Then only send the message itself when its different from the previous one. And when a key is released its code is forced to 0 so a key-release is only sent once. Also I use some analog inputs as extra inputs for buttons by just reading the voltage on that input. Note that these inputs are 'floating' so if they are left open the result may be unpredictable. You will need to add pull up or down resistors to the inputs.<br />
<br />
So in the end the program looks a lot different but does exactly what I need:<br />
<br />
<a href="https://drive.google.com/file/d/0B4ij7Jv1Czf6U3ljdXBNbjBjeHc/edit?usp=sharing" target="_blank">MAME.ino (on my Google Drive)</a><br />
<br />
Now what I love about software: you can re-configure the buttons and joystick at no cost after you wired them...<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrx1NEd7mKoIIkWslPok1Muzm4ta1pvW0qenrisFGTPS48sE-HLCoL231daA7sn3H4s3gylQGQ-t9fDS7ihohl-bFwwsG_HOF8BoruIA8g_Keeq0GujXvOFKuufukorDosVmwT/s1600/IMG_20131105_215518.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrx1NEd7mKoIIkWslPok1Muzm4ta1pvW0qenrisFGTPS48sE-HLCoL231daA7sn3H4s3gylQGQ-t9fDS7ihohl-bFwwsG_HOF8BoruIA8g_Keeq0GujXvOFKuufukorDosVmwT/s320/IMG_20131105_215518.jpg" width="320" /></a></div>
I know most people use wires with crimp-on connectors for wiring their controls, but I just love soldering and for me this is much faster too. So I soldered all connections to the joystick and the plug on the FunDuino board. Here the buttons are not connected yet, but the black wire will serve as common ground for these.<br />
Testing is a little hard since most normal software does not really show you if you pressed a Control or Shift key. But the <a href="https://drive.google.com/file/d/0B4ij7Jv1Czf6d2FQQWE1WGxlOHM/edit?usp=sharing" target="_blank">'GhostKey'</a> program is an extremely simple way to test what code your keyboard is sending.<br />
While testing this set-up with the actual buttons I noticed another problem. How do you insert a 'coin' to get the game started when you don't have an actual coin-slot ? <br />
<div class="separator" style="clear: both; text-align: center;">
</div>
I decided to make the 'Single player - start game' button to double as a coin insert. That's the benefit of having a programmable controller. Now it just checks the state of the 'start game' button and if it's pressed for more than 2 seconds it sends key '5' (Insert Coin) . But if you release it sooner it just sends '1' (Single player start).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI2t-3To5nsWLKVwxWij8SaLtY37N89gwfSB49bCfPet2gmeghtyXRD91zmESwDr24Ppfhh9FIVssReDWwdUqnZ-Zam3xr8AgWN_zXJ8rcMQEPDeP8QbRaqWraLogWXMZyUXSE/s1600/Controller+wiring.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI2t-3To5nsWLKVwxWij8SaLtY37N89gwfSB49bCfPet2gmeghtyXRD91zmESwDr24Ppfhh9FIVssReDWwdUqnZ-Zam3xr8AgWN_zXJ8rcMQEPDeP8QbRaqWraLogWXMZyUXSE/s1600/Controller+wiring.JPG" width="320" /></a></div>
Wiring it was pretty easy. As shown on the right I screwed the Arduino to the bottom and glued a small breadboard next to it. This way it is fully reconfigurable and I can just add some pull-up resistors if needed. The only thing that worries me a bit is that the breadboard is upside-down and the wires could fall out, but that has not happened yet. And when everything works fine I can make a more permanent solution.<br />
<dl>
<dt><br /></dt>
</dl>
<br />
(Note: If you start out without a board and want to buy one it is probably better to choose the<a href="https://www.arduino.cc/en/Main/ArduinoBoardMicro" target="_blank"> Arduino Micro</a> since that has 20 I/O pins and 'mouse' and 'Keyboard' commands built in)<br />
<br />
<i><b>Ctrl Alt and....CRASH..</b></i><br />
After a while I noticed that the system sometimes seems to crash while playing games that use both the A and B button. Some further investigation showed that it actually happened when pressing the buttons AND moving the joystick Left or Up. What actually happens is that you create the key combination Ctrl Shift and Left arrow, which is caught by the Intel graphics driver. So it just rotates the screen, or changes the resolution and (worse) throws you back to the main window. The solution was simple. Left click on the desktop, select 'Graphic options' and in the Intel graphics settings just disable hotkey support.Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com0tag:blogger.com,1999:blog-26685537.post-51017834738216267622013-06-22T22:08:00.000+02:002015-02-18T22:49:47.220+01:00The shortest path to serving a 'Hello World' using Apache and Python WSGI on Windows<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbnD0GB6ITYaSPrLDo2Z8Dw947K-cVSlINo_4_cIhH71oCINzzlbMAjJ9EMhL5D7vGAvJpaZwJxCC1JcOqPYHBW5T8g-MiYMOx9s53DzC6nN7UhT0YBdQ6h4ZWIofpBViA1Qa1/s1600/python-logo.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbnD0GB6ITYaSPrLDo2Z8Dw947K-cVSlINo_4_cIhH71oCINzzlbMAjJ9EMhL5D7vGAvJpaZwJxCC1JcOqPYHBW5T8g-MiYMOx9s53DzC6nN7UhT0YBdQ6h4ZWIofpBViA1Qa1/s1600/python-logo.gif" /></a><span style="font-family: Arial,Helvetica,sans-serif;">So you want to create a website or service with some dynamic content, using templates, database and some code ? Get ready to choose form a gazillion choices in languages, frameworks and design patterns. And one of them is using Apache as the server, Python as the language and the <a href="http://webpython.codepoint.net/wsgi_tutorial" target="_blank">Web Server Gateway Interface (WSGI) </a>to link them. All three are documented abundantly but for some reason I have not found a simple step by step guide to set it up on a Windows machine and just get 'Hello World' to show up in my browser. So here is how I did it.</span><br />
<br />
<span style="font-family: Arial,Helvetica,sans-serif;"><a href="http://www.python.org/getit/" target="_blank">Install Python</a>. It's a standard Windows installer so that's just point and click. Then make sure the path to 'python.exe' is in your PATH <a href="http://www.computerhope.com/issues/ch000549.htm" target="_blank">environment variable</a>. </span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6D__ZAEVep2iBF7Fkkfydq3O_E-5KtEyw2wru4mpG30tKM7HpDGIBbshkHSlV6OgN_AHkq4TTzOjpK8fE5qV8I-aXx5D7UggMDyUotDH-eWSD5rw2109rNzYYyxEtPMVlYs4e/s1600/XAMPP.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6D__ZAEVep2iBF7Fkkfydq3O_E-5KtEyw2wru4mpG30tKM7HpDGIBbshkHSlV6OgN_AHkq4TTzOjpK8fE5qV8I-aXx5D7UggMDyUotDH-eWSD5rw2109rNzYYyxEtPMVlYs4e/s1600/XAMPP.jpg" /></a></div>
<span style="font-family: Arial,Helvetica,sans-serif;">Install Apache using <a href="http://www.apachefriends.org/en/xampp.html" target="_blank">XAMPP</a>. This is also available as Windows installer and you can also install MySQL, FileZilla, Tomcat and Mercury. I'd advice to install at least MySQL. After all a database is one of the minimal requirements for most websites. In my example XAMPP is installed to D:/Xampp.</span><br />
<span style="font-family: Arial,Helvetica,sans-serif;">Using the XAMPP control panel, start Apache and make sure it's running: open a browser and type 'localhost' as the URL. If it works it will show the XAMPP configuration screen.</span><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiTiaANyrdRPuZdD6i6NltQP_-3-xpOHhNnFv2tC_0t31g5DI3IaY6mND1PnoMe1qAvizFHYxawSm2AvDYo6J6zkLlHS6LzNq4uIkM37vIbhU6MQBVp2VNJ2924rxIhTTtaWZU/s1600/feather-small.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiTiaANyrdRPuZdD6i6NltQP_-3-xpOHhNnFv2tC_0t31g5DI3IaY6mND1PnoMe1qAvizFHYxawSm2AvDYo6J6zkLlHS6LzNq4uIkM37vIbhU6MQBVp2VNJ2924rxIhTTtaWZU/s1600/feather-small.gif" /></a><span style="font-family: Arial,Helvetica,sans-serif;"><br /></span>
<span style="font-family: Arial,Helvetica,sans-serif;">Now get the 'wsgi_mod.so' binary that matches your configuration. It must be the 32 bit or 64 bit version depending on system AND it must match the Apache version that is installed. Now XAMPP does not really show you which version it is using so the easiest way to find out is looking at the CHANGES.txt file in the apache folder. The current version of XAMPP (June 2013) contains version 2.4.3. This means that none of the </span><span style="font-family: Arial,Helvetica,sans-serif;"> 'wsgi_mod.so' files on the google.code page will work since they all target version 2.2 ! </span><br />
<span style="font-family: Arial,Helvetica,sans-serif;">I Googled for 'mod_wsgi apache 2.4' and found it in the <a href="http://www.apachelounge.com/viewtopic.php?t=5143" target="_blank">Apache Lounge</a> .</span><br />
<br />
<span style="font-family: Arial,Helvetica,sans-serif;">Copy the 'wsgi_mod.so' to the 'apache/modules/' folder. </span><br />
<span style="font-family: Arial,Helvetica,sans-serif;"></span>
<span style="font-family: Arial,Helvetica,sans-serif;">Add this line to 'httpd.conf' to load the mod_wsgi module:</span><br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">LoadModule wsgi_module modules/mod_wsgi.so</span><br />
<br />
<span style="font-family: "Courier New",Courier,monospace;"></span><br />
<span style="font-family: Arial,Helvetica,sans-serif;">Stop and start Apache to make sure it's still working.</span><br />
<br />
<br />
<span style="font-family: Arial,Helvetica,sans-serif;">Create a directory D:/Xampp/wsgi. Make sure you can run python scripts in this directory: open a command window, make sure you're in this directory and just type 'python'. If all is well it will show the installed python version and a command prompt. If not, check the environment variable 'PATH' and make sure the python folder is included.</span><br />
<span style="font-family: Arial,Helvetica,sans-serif;"><br /></span>
<span style="font-family: Arial,Helvetica,sans-serif;">Add the following lines to 'httpd.conf'. This will allow access to the wsgi directory, and make sure all wsgi requests are routed to the directory: </span><br />
<br />
<code>
<Directory "D:/xampp/wsgi" ><br />
AllowOverride None<br />
Options None<br />
Require all granted<br />
</Directory><br />
<br />
# Python WSGI interface module<br />
<IfModule wsgi_module></code><br />
<code><code> WSGIPythonHome "D:/Python27"<br />
</code>
WSGIScriptAlias / D:/xampp/wsgi<br />
</IfModule> </code><br />
<br />
<span style="font-family: Arial,Helvetica,sans-serif;">Now create a text file with the following contents:</span><br />
<span style="font-family: inherit;"><code><br /></code></span>
<code></code><code> </code>
<code>
<span style="color: blue;">def</span> <span style="color: red;">application</span>(environ, start_response):<br />
status = '200 OK'<br />
output = 'Hello World!'<br />
<br />
response_headers = [('Content-type', 'text/plain'),<br />
('Content-Length', str(len(output)))]<br />
start_response(status, response_headers)<br />
<br />
<span style="color: blue;">return</span> [output] </code><br />
<br />
<span style="font-family: Arial,Helvetica,sans-serif;">Save it as 'hello_world.wsgi' in the 'wsgi' directory </span><br />
<span style="font-family: Arial,Helvetica,sans-serif;">Open your browser and type 'localhost/hello_world.wsgi'. And yes: It will show 'Hello World' !</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUTvYPcCrTAdB6lBBY_9zXEoLMSRH0IDRifyYTCseWp-fY0Jvhp6LkkmhO9MFnash7ZZMKhIpC-ilSAL210ri82xqasmX4uBVVKWs45Rzxr1HTTfX98nhm2XpKX5id9bmDQ8Z7/s1600/firefox_hello_world.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUTvYPcCrTAdB6lBBY_9zXEoLMSRH0IDRifyYTCseWp-fY0Jvhp6LkkmhO9MFnash7ZZMKhIpC-ilSAL210ri82xqasmX4uBVVKWs45Rzxr1HTTfX98nhm2XpKX5id9bmDQ8Z7/s320/firefox_hello_world.png" height="172" width="320" /></a></div>
<br />
<span style="font-family: Arial,Helvetica,sans-serif;">Note that strictly spoken the </span><span style="font-family: Arial,Helvetica,sans-serif;"><code><code>'WSGIPythonHome "D:/Python27"' </code></code></span><span style="font-family: Arial,Helvetica,sans-serif;"> is not required for this example, but if you want to add code that uses the 'import' statement Apache needs to know where to find your Python directory.</span><br />
<br />
<h4>
<b>UPDATE : The 64 bit difference</b></h4>
<span style="font-family: Arial,Helvetica,sans-serif;">After writing the initial post I changed computers to a 64 bit Windows 8 laptop. And then it suddenly does not work as advertised. Xampp installs without a problem, but it seems impossible to get Apache to load the mod_wsgi.so module. When I startup apache manually using the command prompt it stops on 'mod_wsgi is not a valid Win32 application'. And even after trying several different versions of mod_wsgi.so it will not start. As I expect it has to do with the fact that this is 32 Bit Apache running on a 64 bit system it might be better to install a 64 bit version. Just download the installation from <b>https://www.apachelounge.com/download/win64/ </b>and extract the zip file. It's not really an installer, this will just unpack a complete apache folder with all binaries and required subfolders. If we now just replace the original xampp/apache folder with the one we just unpacked it will work just fine. Make sure you first save the httpd.conf file, or it will be overwritten and you'll have to apply all the changes for using the wsgi module. </span><br />
<span style="font-family: Arial,Helvetica,sans-serif;"><br /></span>Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com0tag:blogger.com,1999:blog-26685537.post-43387889309610000352012-11-13T09:06:00.002+01:002012-11-19T09:32:42.339+01:00Going straight to Windows 8<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVtjsdgYIxfq6iq8p_vcGlVQK1Tf9Yh86-sWf0gReDf-urz984tBrMJQzks94hvZZ161zpbiFNCibYtjw_YBcXJrHDpbnbAYvg-2KqdVV258q6GtJsBtdIZBUmEgcnnkajnaHB/s1600/Windows-7-Vista-XP-upgrad.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="144" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVtjsdgYIxfq6iq8p_vcGlVQK1Tf9Yh86-sWf0gReDf-urz984tBrMJQzks94hvZZ161zpbiFNCibYtjw_YBcXJrHDpbnbAYvg-2KqdVV258q6GtJsBtdIZBUmEgcnnkajnaHB/s200/Windows-7-Vista-XP-upgrad.png" width="200" /></a>I've been using <a href="http://en.wikipedia.org/wiki/Windows_XP" target="_blank">Windows XP</a> now for probably the whole 10 year of it's existence. Skipped Vista and Windows 7 because it just still worked for me. But now Windows XP is finally officialy declared obsolete and Microsoft generously offers the Windows 8 upgrade for only €29,- it's time for a change.<br />
And these are my experiences so far. <br />
<br />
<b>The 'old' laptop</b> <br />
Still a bit scared of the transition I decide to try some things first on an old laptop. It's an ACER 2410 Travelmate with a 1 Ghz Intel Celeron and 1 GB memory running Windows XP. The 80 GB harddisk is partitioned in a C an D drive, both 40 GB in size and using FAT32.<br />
First it appears installing Windows8 on a FAT32 disk with just 16 GB free storage is probably not a good idea. The installer just crashed twice without a clue why. So I first joined the two partitions using a partition manager (I used <a href="http://www.paragon-software.com/home/pm-express/" target="_blank">Paragon Partition manager</a>, but there are many). Then I converted the resulting disk to NTFS using the command-line '<b>convert</b> C: <b>/fs:ntfs</b> '<br />
This finally seemed to solve it and although the installation took nearly three hours it succeeded. And it works fine. I installed some of my 'mission critical' applications (Borland C++Builder 5, Goldmine CRM, Visual Studio 2008) and that all worked fine.<br />
<br />
<b>The Work laptop.</b><br />
This is more modern Toshiba Tecra 10A with a dual core Intel at 2.8 Ghz, 2 GB memory and a 150 GB hard-drive. This drive is using NTFS, but it's also partitioned in a 60 GB and 90 GB section.<br />
As expected the installation is easier here. There are no crashes and it takes somewhere around one and a half hour to complete. <br />
<br />
<b>Networking and Domain</b><br />
Now if you have a work laptop that needs access to a domain take care of that first.<br />
Here is an article on how to <a href="http://www.computerperformance.co.uk/win8/windows8-join-domain.htm" target="_blank">connect to a domain.</a> (or <a href="http://superuser.com/questions/335558/how-do-i-join-a-windows-8-pc-into-a-domain" target="_blank">the short version on SuperUser</a>).<br />
Then it might be useful to <a href="http://www.winsupersite.com/article/windows8/windows-8-tip-sign-domain-live-services-143454" target="_blank">connect your domain account to your Microsoft account</a>.<br />
<br />
<b>Viruschecker and security </b><br />
What I used to do first on any PC is installing Security Essentials. But this is not necessary any more since Windows 8 comes with 'Defender' which is exactly the same. So no need to install additional software for this.<br />
<br />
<b>Installations that require .NET 2.0 or 3.5. </b><br />
Even though Windows 8 comes with .NET 4.5, some software requires .NET 2.0 or 3.5 to be present. It can be installed as described in this MSDN article <a href="http://msdn.microsoft.com/en-us/library/hh506443.aspx" target="_blank">'Installing the .NET Framework 3.5 on Windows 8'.</a> <br />
NOTE: Installing a Windows language pack on Windows 8 before installing
the .NET Framework 3.5 will cause the .NET Framework 3.5 installation to
fail. So since there probably will be lot of .NET 2.0 software around for a while it might be a good idea to just do this for every installation.<br />
<br />
<b>Changing the language</b><br />
One of the nice features of Windows 8 is the ability to switch languages even after you installed it. If you go to '<i>Control Panel -> Clock, Language and Region -> Language</i>' you can just select another language.<br />
The article <a href="http://blogs.msdn.com/b/b8/archive/2012/02/21/using-the-language-you-want.aspx" target="_blank">Using the language you want</a> by Steven Sinofsky explains it all.<br />
<b><br /></b>
<b>TinyCAD application fails</b><br />
The only software so far the does not work is<a href="http://sourceforge.net/apps/mediawiki/tinycad/index.php?title=TinyCAD" target="_blank"> TinyCAD</a> , an open source schematics drawing program. It installs fine and runs but when you click File Open or Save it just gives a error:<br />
'Encountered an improper argument'. Everything else works fine, bur if you cannot load or save files it's pretty useless. Selecting 'Windows XP compatibility mode' when running does not solve the problem. I tried to find a solution but nobody has found one yet.So for the time being it just has to run in an Windows XP on Virtual box<br />
<br />
<b>VirtualBox</b><br />
The virtual PC software <a href="https://www.virtualbox.org/" target="_blank">VirtualBox</a> runs very smooth on Windows 8. Since <a href="http://www.microsoft.com/windows/virtual-pc/support/faq.aspx" target="_blank">Windows XP mode is no longer included in Windows 8</a> this is your only chance left if older software fails to run.<br />
<br />
<b>E-Mail</b><br />
Originally my idea was to avoid additional software and just stick as much as possible to the standard installation. Since there is such a nice e-mail tile on the start page I decided to go with that. Unfortunately it apparently does not support the POP3 protocol, so this attempt failed immediately and I had to install Thunderbird. Which works fine...<br />
<br />
<b>Matrox DualHead2Go (Multiple monitors)</b><br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1ZSKumqMYsGK8ui-D0TwnRbxSZY523U_Myw8UucomuV1MzmZgG8Xn5SDn5MdvfSKl6OsTiFPiZxNP38aNwE_ILUtBYuztQY5STN0Pr1eYZrwYHrxuPgwdua7j5FhlgCUGP5ts/s1600/monitors.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="104" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1ZSKumqMYsGK8ui-D0TwnRbxSZY523U_Myw8UucomuV1MzmZgG8Xn5SDn5MdvfSKl6OsTiFPiZxNP38aNwE_ILUtBYuztQY5STN0Pr1eYZrwYHrxuPgwdua7j5FhlgCUGP5ts/s200/monitors.png" width="200" /></a></div>
As a developer you can never have too much screen-space so I use the Matrox <a href="http://www.matrox.com/graphics/en/products/gxm/dh2go/analog/" target="_blank">DualHead2Go </a>adapter to connect an additional 2 monitors to my laptop. This always worked fine on Windows XP but on Windows 8 it really rocks ! It automatically switches to expanded desktop as soon as you plug in the adapter and returns to single screen mode when you take it out again. Even though the desktop is expanded, both screens get their own task-bar and charms. So if you open the 'Tiles' or 'RT' interface on your laptop screen it appears only there and the other screens just continue to show the desktop. And then, if you opened an RT program that fills the laptop screen you can just grab it and drop it to the monitor.<br />
<br />
<b>Sticky notes</b><br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj9EZp-hqrbSgqaJwRaoppnlz7E1NUfa2RfHS1Y21_n1xs_17fCA-LkD2vmFQZ5JkDGPJsBOD8j62C5ulmEFWnEyzDzjgHvHvxqANmJj_NCGoaPZE6phF_SxHEp7R1vloz3l2z/s1600/sticky.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj9EZp-hqrbSgqaJwRaoppnlz7E1NUfa2RfHS1Y21_n1xs_17fCA-LkD2vmFQZ5JkDGPJsBOD8j62C5ulmEFWnEyzDzjgHvHvxqANmJj_NCGoaPZE6phF_SxHEp7R1vloz3l2z/s1600/sticky.png" /></a></div>
Windows 8 has it's own<a href="http://windows.microsoft.com/is-IS/windows7/Using-Sticky-Notes" target="_blank"> 'sticky notes'</a> that do exactly what you'd expect. You can write them, change colors or font and stick them anywhere on the screen. Probably enough for most people, but I prefer the '<a href="http://www.zhornsoftware.co.uk/stickies/" target="_blank">Stickies' by Zhorm Software</a> . These are much more versatile. You can save and recall them, use them as an alarm clock and give them adjustable transparency. And they work fine on Windows 8...<br />
<br />
<b>Experience</b><br />
After using it for a few days I must say I'm impressed. Of course it takes some time to get used to the new interface and all the little differences between XP and 8 but the search function in the charms makes it super easy to find anything you need. And when you are used to it it just works a little faster. Like on my XP machine when it recovered form hibernation it would not reconnect to my companies network. I always first had to log off and log in again to get access to our server. Windows 8 just does this automatically.<br />
When switching my laptop off I always had to remember first to switch the desktop to my laptop screen or else if I switched it on without the external monitor my desktop would sometime still be off screen. Again: no problem on Windows 8. You can connect or disconnect a monitor anytime and the desktop will just restore to the most optimum settings. And with<a href="http://www.stardock.com/products/fences/" target="_blank"> Fences</a> installed all your icons will always be in the right place.<br />
<br />
And it definitely pays off to learn some of the Windows-key shortcuts like:<br />
<br />
<br />
Windows-C : Show the charms <br />
Windows-D : Go to the desktop<br />
Windows-X : show most common administrator settings<br />
Windows-Tab : Switch between apps and desktops (And Alt-Tab of course still works to switch between applications)<br />
Windows-R : Display the 'Run' window<br />
<br />
And there are many more as listed here on the<a href="http://blogs.msdn.com/b/hyperyash/archive/2012/08/28/windows-8-shortcuts.aspx" target="_blank"> 'List of Windows 8 Shortcuts'</a>.<br />
<br />
<br />
<br />
<br />
<br />Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com1tag:blogger.com,1999:blog-26685537.post-17209435533783286882012-10-14T21:24:00.003+02:002012-10-14T21:24:47.884+02:00Pi on the Side.<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX1u3H6laUeCmKBvKSZcHoI6dby0tod6SVBx0TCvcVbgYy62c8HQTaQikEP_RP8ybJTj7RPsPYcL3dqJXL_jt0ZC_TZBymkZuy0m-JXM91bQHqqhXwApH5WvDlh93mnqfp0_BV/s1600/raspi-images.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX1u3H6laUeCmKBvKSZcHoI6dby0tod6SVBx0TCvcVbgYy62c8HQTaQikEP_RP8ybJTj7RPsPYcL3dqJXL_jt0ZC_TZBymkZuy0m-JXM91bQHqqhXwApH5WvDlh93mnqfp0_BV/s1600/raspi-images.jpg" /></a></div>
So I bought a Raspberry Pi. Just in the unlikely case you have not heard of this credit card sized Linux computer at the incredible $35 price-point you can read all about it on <a href="http://en.wikipedia.org/wiki/Raspberry_Pi" target="_blank">the Wikipedia entry</a>. And since I will try to write down my experiences I decided to create a separate blog for it.:<br />
<br />
<a href="http://spymypi.blogspot.nl/" target="_blank">I Spy My Pi</a><br />
<br />
(which does not really mean anything, it just sounds nice..) <br />
<br />Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com3tag:blogger.com,1999:blog-26685537.post-80757097247339863532012-01-15T22:16:00.001+01:002012-01-15T22:29:46.983+01:00Back to The Valley. (in 8-bit country)<div class="separator" style="clear: both; text-align: center;"><a href="http://oldcomputers.net/trs80i.html" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" target="_blank"><img border="0" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKsrme-cyGGEZfbVGpjGmqeG6bdc4VVjc3or23ShKwrCmBfDGxDdV-X-8l_GtV0zjyp4LItVruwOt54PjJvXPoamZqQrGAhRyKtPUTuaHCGSAz3Sa78jbUmnKBqFKrts27bn6U/s320/trs80-i.jpg" width="320" /></a></div>August 3, 1977 was the public introduction of the TRS-80 home computer. Which is as I write this is more than 35 years ago. The most recent episode of this developers life (<a href="http://thisdeveloperslife.com/post/2-0-7-dinosaurs" target="_blank">'Dinosaurs'</a>) brought back memories to this first real computer I could get my hands on. The setup as shown here is exactly what my father bought about thirty years ago. A black and white 12" monitor (16 lines of 64 characters), a 1.77 MHz processor and 16KB of RAM. Program storage on a cassette tape recorder which meant loading a decent game would often take 10 minutes or more. And to me it was magic. From the very first time I switched it on and saw the READY> prompt I was hooked. To programming. I remember it started with the sample from the owners manual. No, not the obligatory 'hello world' but a Celsius to Fahrenheit conversion program. And after completing all samples I did a very simple Space Shooter. Written all in Level 1 basic, using all ASCII characters, so you can probably imagine it did not exactly look like "Skyrim' or 'Modern Warfare'...<br />
Then one day I bought the latest edition of 'computing today', mainly because of the cover. Today games actually look like that, but back then those images could only exist in your imagination. <br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjEXnQQiqhsocqIjaZH5lPRQoePwV8Bqv3c_V-uLEotFUUtF_BMuKqWHwszB8WP34yLHOp-Wp4QM5W-sJjKu9GKsT8Xg_rbFzXOZ3lsS6n6XWdpMLHeA-8sooG1LneCZgR0t75/s1600/Valley+CT+Frontpage.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjEXnQQiqhsocqIjaZH5lPRQoePwV8Bqv3c_V-uLEotFUUtF_BMuKqWHwszB8WP34yLHOp-Wp4QM5W-sJjKu9GKsT8Xg_rbFzXOZ3lsS6n6XWdpMLHeA-8sooG1LneCZgR0t75/s320/Valley+CT+Frontpage.png" width="228" /></a></div> And programming a real adventure game, with "goblins', 'wizards' and ''barbarians' sounded like an extraordinary challenge.<br />
So I spent weeks typing the the listings and converting the code from the original <a href="http://oldcomputers.net/pet4032.html" target="_blank">Commodere PET</a> basic until I had a real working game which eventually I hardly ever played. It showed me that for me the real fun was in the programming itself, which it has been ever since.<br />
The program as I written it has been long lost. It was stored on a cassette which we probably gave away when we sold the TRS-80, and I did not have a printer then to make a hard-copy. But guess what: it's on the internet. It took some searching but finally I found an <a href="http://www.robsons.org.uk/archive/www.classicgaming.com/studio2/valley/valley.htm" target="_blank">article by Paul Robson</a> and this one by <a href="http://www.reghardware.com/2009/11/27/back_into_the_valley/" target="_blank">Tony Smith on reghardware.com .</a><br />
Both more or less describe the same experience, and on the<a href="http://www.staff.ncl.ac.uk/fraser.charlton/otherstuff/Valley/valley_index.html" target="_blank"> site of Frank Fraser</a> there is even a full scan of the listings. Looking at the scans I suddenly realized that I probably still had a copy of the magazine somewhere and so I did. The scans shown here all come from my personal copy. Actually I thought my copy would be 'cleaner' than Franks scans. But memory tricked me and the weeks of intensive use also left their marks on the pages, as can be seen in the section where the different graphics are explained.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnM5Ct5__qbf2DQJyF6U7AphLlu0lIAyqI5g5qfy_3DCePQFtADOEvuiK183CgkGUbv2H6J4kXIoZ9PEAYNK8gjgIatyPkrzxSbbZfwuFi6voPX6U_NRbgMHURPFiSblvU5wCk/s1600/Valley+Character+table.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnM5Ct5__qbf2DQJyF6U7AphLlu0lIAyqI5g5qfy_3DCePQFtADOEvuiK183CgkGUbv2H6J4kXIoZ9PEAYNK8gjgIatyPkrzxSbbZfwuFi6voPX6U_NRbgMHURPFiSblvU5wCk/s1600/Valley+Character+table.png" /></a></div>For a moment I considered trying to rewrite the program using a TRS-80 Emulator. Just to see if I could re-live the excitement of that time. Probably not. And after playing the BBC version (which is included in the zip-file that contains the scans) I found this type of game is still not my favourite.<br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixCvEpJt_mb_EKJVSscc83h_PoB8gcQi1ORnKwDtvLlIzaOWTw6e8l_Pgyc_DnqgepZim3V3rgZ6Yz9L2mvxWhvg2uNN6fmm-XpzUuIidMH6amFJvkURvxRonuRuOpFBkYY88O/s1600/Valley+Barbarian+or+Wizard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="147" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixCvEpJt_mb_EKJVSscc83h_PoB8gcQi1ORnKwDtvLlIzaOWTw6e8l_Pgyc_DnqgepZim3V3rgZ6Yz9L2mvxWhvg2uNN6fmm-XpzUuIidMH6amFJvkURvxRonuRuOpFBkYY88O/s320/Valley+Barbarian+or+Wizard.png" width="320" /></a></div><br />
<br />
Lets face it, the most enjoyable part of recovering an old computer magazine are reading the ads. Like this one on the rear. 'Fully expandable to 32K of user RAM' and a 'Full set of upper and lower-case characters'. What else would you ever need ?<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZsNrKAQmvMgKKaYfdeQuaBajePYhbHYC9b5QmNqXPyga67HvO0fBH8PbVoDOwJPLa59tJG3MjlBxVp-K-66Whoij25HMAYcMzbufZwxTtsWTxj4HU3lKcaTWvi_8L3tRa-MP2/s1600/VIC-20+Advertisement.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZsNrKAQmvMgKKaYfdeQuaBajePYhbHYC9b5QmNqXPyga67HvO0fBH8PbVoDOwJPLa59tJG3MjlBxVp-K-66Whoij25HMAYcMzbufZwxTtsWTxj4HU3lKcaTWvi_8L3tRa-MP2/s1600/VIC-20+Advertisement.png" /></a></div>Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com1tag:blogger.com,1999:blog-26685537.post-2213690237345847442011-11-10T22:39:00.005+01:002011-11-11T08:02:33.172+01:00Holy Cow, I Wrote An App !<i>(Of course the title refers to <a href="http://blogs.msdn.com/b/oldnewthing/archive/2006/12/07/1233002.aspx" target="_blank">Raymond Chens post</a> about the only book he ever wrote..)</i><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnVV_3BqoYs9-fSJvJ7Om1oGt3QAl5xpSUYbGfQUIjmj_2m922AbTXBBr-SbHGivAOcAX6EA54pQ_kxYPzmJ3HWWJoSALGp9ffqKJTFRvh_MOapZZgFcWk-uFuUy28j4_HlWJW/s1600/archos_7_buienradar.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnVV_3BqoYs9-fSJvJ7Om1oGt3QAl5xpSUYbGfQUIjmj_2m922AbTXBBr-SbHGivAOcAX6EA54pQ_kxYPzmJ3HWWJoSALGp9ffqKJTFRvh_MOapZZgFcWk-uFuUy28j4_HlWJW/s320/archos_7_buienradar.png" width="172" /></a></div><br />
<br />
In 15 lines of code... And it's an unique one. And it does something that is probably useful to (a maximum of) 10 people in the whole world.<br />
Last year I bought an Archos 7HT Android Tablet. It was one of the cheapest tablets then and this means it has limited capabilities. One of the limitations is that it does not have an option to switch to portrait mode. It has no tilt sensor and there is no special button or built-in option for it. So if you display a webpage it is always in landscape mode which is sometimes inconvenient. Like when I want to view the a popular site that shows when and where it will rain in the coming hours. As I live in a small country, it could fit in one screen IF displayed in portrait mode.<br />
So I decided to look into the possibility to force the standard browser to start in portrait mode, which is (as far as I'm aware) not possible. Then I found a reference to the '<a href="http://developer.android.com/reference/android/webkit/WebView.html" target="_blank">WebView</a>' ("A View that displays web pages") component and guessed that this could be a way to solve the problem. And it is. I just created a standard Android application, followed the instructions on the <a href="http://developer.android.com/reference/android/webkit/WebView.html" target="_blank">WebView reference page</a> to place the component on the main page, and forced the view to portrait using the appropriate function (that I <a href="http://stackoverflow.com/questions/2150287/force-an-android-activity-to-always-use-landscape-mode" target="_blank">found on StackOverflow</a>).. That's all. Here is the code: <br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">package CScope.Buienradar;</span><br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">import android.app.Activity;</span><br />
<span style="font-family: "Courier New",Courier,monospace;">import android.content.pm.ActivityInfo;</span><br />
<span style="font-family: "Courier New",Courier,monospace;">import android.os.Bundle;</span><br />
<span style="color: blue; font-family: "Courier New",Courier,monospace;">import android.webkit.WebView;</span><br />
<span style="font-family: "Courier New",Courier,monospace;"></span><br />
<span style="font-family: "Courier New",Courier,monospace;">public class BuienRadarActivity extends Activity {</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> /** Called when the activity is first created. */</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> WebView mWebView; </span><br />
<span style="font-family: "Courier New",Courier,monospace;"> Button myButton;</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> @Override</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> public void onCreate(Bundle savedInstanceState) {</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> super.onCreate(savedInstanceState);</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> setContentView(R.layout.main);</span><br />
<span style="color: blue; font-family: "Courier New",Courier,monospace;"> mWebView = (WebView) findViewById(R.id.webview);</span><br />
<span style="color: blue; font-family: "Courier New",Courier,monospace;"> mWebView.getSettings().setJavaScriptEnabled(true);</span><br />
<span style="color: blue; font-family: "Courier New",Courier,monospace;"> mWebView.loadUrl("http://buienradar.mobi");</span><br />
<span style="color: blue; font-family: "Courier New",Courier,monospace;"> setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> }</span><br />
<span style="font-family: "Courier New",Courier,monospace;"> }</span><br />
<br />
The blue lines are actually the only code written by me, all the rest was generated by the Eclipse 'New Project' wizard. And when you press Run or Build a complete installation package is created in the 'bin' folder of the project that can be copied to the device. Let's face it, this is almost too simple.... So that even left me time to create a fancy icon.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK7eTNK_DoPoX318usSqPd8oE0eF6jMGuMsCIDgMe8XH33-aNzFXoq7LB-y_RZloDtuVKEfRbYJb5YE1vhFPLLhL3KOqW3ShtYAPXkXJPHYEPeQEX-HjAPISSxqKUcrv5SC2LK/s1600/buienradar.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK7eTNK_DoPoX318usSqPd8oE0eF6jMGuMsCIDgMe8XH33-aNzFXoq7LB-y_RZloDtuVKEfRbYJb5YE1vhFPLLhL3KOqW3ShtYAPXkXJPHYEPeQEX-HjAPISSxqKUcrv5SC2LK/s1600/buienradar.png" /></a><br />
(And if you by coincidence are one of these 10 people: you can download it it from here: <a href="http://www.ckns-meijer.demon.nl/download/BuienRadar.apk" target="_blank">BuienRadar,apk)</a>Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com2tag:blogger.com,1999:blog-26685537.post-89288412146653517582010-10-26T22:31:00.003+02:002010-10-26T22:39:25.902+02:003-D Television or television for 2 ?<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPJi1hMCFLeEuC7FHH-2iBd6-LhzPjgDjQhhaTq_kWrbmstimfYZYVoIeL4wASGTbloV6i1gQrJpoCEXuYsng5sVhlDz8bkRwedtSmSZifihzdG26BOfJfxatHr5EDLIRVPZPO/s1600/Old_television_set.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPJi1hMCFLeEuC7FHH-2iBd6-LhzPjgDjQhhaTq_kWrbmstimfYZYVoIeL4wASGTbloV6i1gQrJpoCEXuYsng5sVhlDz8bkRwedtSmSZifihzdG26BOfJfxatHr5EDLIRVPZPO/s320/Old_television_set.png" width="286" /></a></div>3D Television is hot. To talk about...<br />
Despite getting the impression from magazines, exhibitions and showcases that 3-D is coming fast to all of us, I have not actually seen one in the shops. And certainly I do not know anybody who has one. And most reviews I hear or <a href="http://www.guardian.co.uk/theobserver/2010/may/02/discover-3d-television-tom-lamont">see</a> all mention the fact that it is 'just not really there'. The 3-D images do not look 'real', and most televisions suffer from 'shading' or contrast problems. And the fact that everybody has to wear 'electric sunglasses' probably does not help either.<br />
Anyway, technology will improve fast and we'll probably see some decent screens at a reasonable price level by the end of next year. What I have not seen yet is a different application that might be more interesting to a lot of people: dual view. 3-D televisions repetitively show two different images. And the 'shutter glasses' just cover one eye at the time in so each eye sees only a slightly different image, thus creating the 3-D effect. But what if you fed the TV with two completely <i>different</i> programs and have the shutters cover <i>both </i>eyes at the time ? This way your wife can watch<a href="http://www.imdb.com/title/tt1672267/"> episode19745 of 'As the World Turns' </a>while you are watching tonight's major league football match !.<br />
(Yeah, I know you would both have to wear a headset as well, but I suppose that could be integrated in the glasses.)Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com1tag:blogger.com,1999:blog-26685537.post-39599667170920851492010-08-23T21:05:00.006+02:002010-09-28T09:25:55.696+02:00In Touch with the Tablet (or why I DO like the Archos 7 )<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcgIxXvdw5RfY9aDruakG7oJ7jYdqeaa_ymC4r2uKnRgArSgeuIEgqlk9GLf2q6JDYZhW6ew8WMlRL78PwfIgRWnz3c3WNQzVXtWxJMv1egYVWoht4Usq-ebSM3shjoOXJqaUz/s1600/EeePC1.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcgIxXvdw5RfY9aDruakG7oJ7jYdqeaa_ymC4r2uKnRgArSgeuIEgqlk9GLf2q6JDYZhW6ew8WMlRL78PwfIgRWnz3c3WNQzVXtWxJMv1egYVWoht4Usq-ebSM3shjoOXJqaUz/s200/EeePC1.JPG" width="200" /></a></div>Two years ago I was one of the first to buy a 'small form factor computer', the <a href="http://c-scope.blogspot.com/2008/07/eeepc-is-here.html">EeePc 4G</a>. Almost hard to believe nowadays with the omnipresent Netbook, it was the ultimate gadget at that time. The idea that you could have a fully functional PC with a solid state disk, a 7" screen and keyboard for only €250,- was just too exciting. However I've been struggling with the so-called 'use-case' ever since. To be honest, the keyboard is just too small and too flaky for decent typing, the screen is too small for real work and even playing YouTube videos is almost too much for it's little processor.<br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnLwsTtB5S_4oVFkJrWmqeqJ7PxwNV5p8Z6c3HVJVgrUalj-gcfFg3A6RiyW5o_bkuwVbAjz_aQiHQJDCoy8X8N5AHJpuj_H7AuVNBYs_-Wn8lBiZ2JWCUFSNa-CE0Qq10nYrA/s1600/archos_7.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnLwsTtB5S_4oVFkJrWmqeqJ7PxwNV5p8Z6c3HVJVgrUalj-gcfFg3A6RiyW5o_bkuwVbAjz_aQiHQJDCoy8X8N5AHJpuj_H7AuVNBYs_-Wn8lBiZ2JWCUFSNa-CE0Qq10nYrA/s320/archos_7.png" width="320" /></a></div>Today the Tablet PC is what the Netbook was then. Tablets in all shapes and sizes are already released faster than you can read their reviews and the expectation is that the real flood will start in second half of 2010. Combined with the explosion of smartphones, touch based UI's are suddenly everywhere. <br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi12VsoGvCnifXV4jvRZhAk4R0tvYF0MbNyAGwjmXSrCI9JOW3Lqf9cLuKc6Yp6Q2oqN2s6ixJuRUM8wWm-mhB3wKYNZKCB083lxsfNC9qk4QCK8Tfje1ftMsE7FdOR__w8ME24/s1600/88px-Apollo_11_liftoff_from_launch_tower_camera.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi12VsoGvCnifXV4jvRZhAk4R0tvYF0MbNyAGwjmXSrCI9JOW3Lqf9cLuKc6Yp6Q2oqN2s6ixJuRUM8wWm-mhB3wKYNZKCB083lxsfNC9qk4QCK8Tfje1ftMsE7FdOR__w8ME24/s200/88px-Apollo_11_liftoff_from_launch_tower_camera.jpg" width="146" /></a></div>Of course there is no doubt that the iPad is the ultimate touch tablet. But I have this aversion towards computers that you cannot program yourself.And I don't like paying €100,- bonus just for the name, so there is a chance I will never own one. So along comes the cheap <a href="http://www.archos.com/products/ht/archos_7/index.html?country=us&lang=en&p=">Archos 7 Home tablet</a>. An Android based 7" touch tablet with 2 Gig internal memory and about 10000 times the processing power required to <a href="http://www.downloadsquad.com/2009/07/20/how-powerful-was-the-apollo-11-computer/">send a rocket to the moon</a>.. All that for just €150,-! Actually there are a bunch of (even cheaper) Chinese tablets on the market like the <a href="http://www.youtube.com/watch?v=U9h1P5PpEH0&feature=player_embedded#%21">iRobot / aPad</a>, but they look cheap even on the promo-movies and most reviewers admit they are probably a bit <i>too </i>cheap. And of course there are 100 different tablets 'to be released soon/next quarter/beginning next year'...At least <a href="http://www.archos.com/">Archos </a>is a well known French company with a solid reputation for building good media players and their model is available <i>now </i>!.So I guessed it could never be that bad and at least you get what is specified.<br />
<br />
And I'm not disappointed.<br />
<br />
First: it looks great. It has got a solid 'brushed aluminium'-look on the base and a nice black edge. The formfactor is really good. It's really comfortable to hold with both hands while scrolling with your thumbs.<br />
<div style="text-align: right;"></div><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF3N-C8EJNEZdDGGMPTXaQJblElNWeeEtN15oNjrLYneU1A_lh-BwIPEzsZlHsO-weIsDqkyu5MgDuKq0Oj5-uT3wgrbjWQXkGeqZao4dpopbwQXUD55sBqoEvdDZi6Q_ZCR-I/s1600/iPaq_palmVx.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF3N-C8EJNEZdDGGMPTXaQJblElNWeeEtN15oNjrLYneU1A_lh-BwIPEzsZlHsO-weIsDqkyu5MgDuKq0Oj5-uT3wgrbjWQXkGeqZao4dpopbwQXUD55sBqoEvdDZi6Q_ZCR-I/s320/iPaq_palmVx.jpg" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">iPaq 3800 - Palm Vx - Back to the future of touch...</td></tr>
</tbody></table>The screen is pretty good too. At 800x480 resolution is just big enough to comfortably view websites without much scrolling. The colours are bright, the image is crisp and the brightness is good enough even when it's used outside (provided it is not <i>too </i>sunny). And the resistive touchscreen is.. ehm.. well...OK. This touchscreen is the usually the core of all negative reviews of the '7'. But I'm used to my <a href="http://en.wikipedia.org/wiki/Palm_Vx">Palm Vx</a>, <a href="http://www.pencomputing.com/frames/ipaq_3800.html">iPaq PDA</a> and <a href="http://reviews.cnet.com/car-gps-navigation/garmin-nuvi-255w/4505-3430_7-32902383.html">Garmin Nüvi GPS </a>so resistive touchscreens come natural to me. It's what you're used to. And I'm sure if the iPhone was your first touch experience you'll be disappointed with the Archos.<br />
But I am not.<br />
Although I'm not really sure whether it is the 'touch tablet experience' itself or the device I like. I've been using it for a few weeks now and I find myself regularly checking e-mail, reading websites, e-books and even comics. When fully charged it can be on standby for two days so I can just pick it up, touch it and check the latest news, local weather or just read some <a href="http://www.dilbert.com/">Dilbert strips.</a> And I can even program it ! Using the <a href="http://code.google.com/p/android-scripting/">Android scripting layer </a>you can write Ruby, Perl or Python scripts, right on the device. Not that I will probably ever use it to write any productive code but it's just the idea that you can do it makes me feel at ease.<br />
Anyway, if you're looking for a reasonably priced 'first try' tablet and you're not spoiled already by any Apple product it's worth checking out.<br />
<br />
UPDATE(27/10/2010): Much to my surprise Archos recently released a <a href="http://www.archos.com/support/support_tech/updates.html?country=gb&lang=en&#firm">firmware upgrade for the 7 HT </a>. And somehow they managed to really improve the touchscreen response so it is actually pretty good now !Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com0tag:blogger.com,1999:blog-26685537.post-37485681051563579812010-05-26T08:19:00.001+02:002010-06-25T09:02:43.343+02:00Too late for Windows Phone 7Things change. Some things change fast. Computer industry changes faster and mobile phone trends change at light-speed or beyond.<br />
Just a few months ago I was excited to learn about the the upcoming Windows Phone 7. The <a href="http://www.windowsphone7.com/">demo's</a> are awesome and it really looks like <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6NqRR4HmKYwvHdLrEbPB92pQ8hf1rXTNcAVrIz5G_Jc3V3cqSF_mYJtGaFHFW1SP9QQJ8KhoFs58MYGsoxhcDi2eUAK7Q7B-aNLCv9xJ6_zZ8b9kuAt6WSZ6uyf3Gkfw3BB1H/s1600/phone7_logo.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="3" id="BLOGGER_PHOTO_ID_5475463309324195682" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6NqRR4HmKYwvHdLrEbPB92pQ8hf1rXTNcAVrIz5G_Jc3V3cqSF_mYJtGaFHFW1SP9QQJ8KhoFs58MYGsoxhcDi2eUAK7Q7B-aNLCv9xJ6_zZ8b9kuAt6WSZ6uyf3Gkfw3BB1H/s320/phone7_logo.jpg" style="cursor: pointer; float: right; height: 80px; margin: 10pt 10pt 10px 10px; width: 153px;" /></a>Microsoft is serious about building a real phone OS. They actually gave up on backwards compatibility with the Windows Mobile OS (codename Dinosaur..) and chose a combination of the <a href="http://www.silverlight.net/">Silverlight </a>and <a href="http://msdn.microsoft.com/en-us/aa937791.aspx">XNA</a>. Technologies that are both targeted at rich content and game development. And they are giving the development tools away for free. Anyone can start building apps using the free <a href="http://www.microsoft.com/express/phone/">Visual Studio Express</a> . All very exciting.<br />
<br />
But..<br />
<br />
The first Phone 7 devices will not hit the market before September 2010..<br />
And that is much too late. Googles Android has just hit <a href="http://www.android.com/">release 2.2</a>, making it an almo<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk2YPUhE2hfh35gUeaYPaUIKLUd6uN8Ks_sYfjhQNcsq7LbQtrrMHUGyNWb7kPfPhDncw52elfULiVASmyvvrnPVCNVoW3x_MTeih-aiMwH3vwKxKW0gQ3ACcKf1NtFrL08q7C/s1600/android_developers.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5475475951943417314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk2YPUhE2hfh35gUeaYPaUIKLUd6uN8Ks_sYfjhQNcsq7LbQtrrMHUGyNWb7kPfPhDncw52elfULiVASmyvvrnPVCNVoW3x_MTeih-aiMwH3vwKxKW0gQ3ACcKf1NtFrL08q7C/s320/android_developers.gif" style="cursor: pointer; float: left; height: 76px; margin: 0pt 10px 10px 0pt; width: 76px;" /></a>st mature phone OS, and they will probably have release 3 by the time the first Windows phones are released. <a href="http://developer.android.com/index.html">Development tools for Android</a> are also for free, and maybe not as slick as Visual studio, Eclipse with the Android SDK comes pretty near. And it definitely beats the almost arcane development experience for the iPhone. But what is most important: the phones are already there. Some of the coolest phones of this moment (like the HTC Legend or Samsung Galaxy) run Android, and it is rumoured that the sales of Android based phones has just recently<a href="http://mobile.venturebeat.com/2010/05/10/google-android-outsells-apple-iphone-ranked-second-in-u-s-smartphone-market/"> surpassed those of the iPhone</a>. Which again makes clear how fast things are moving in mobile land. With the iPhone, Blackberry and Android firmly established when Windows Phone 7 arrives I give Microsoft very little chance of succeeding.<br />
<br />
And did I mention thinks change fast ? I just found that Paul Graham (who is supposed to know) mentioned in his <a href="http://www.paulgraham.com/apple.html">essay of November last year:</a><br />
<span class="Apple-style-span" style="font-family: verdana; font-size: small;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: verdana; font-size: small;"><i>The only credible contender [to the iPhone] is Android. But Android is an orphan; Google doesn't really care about it, not the way Apple cares about the iPhone.</i></span><br />
<span class="Apple-style-span" style="font-family: verdana; font-size: small;"><i><br />
</i></span><br />
<span class="Apple-style-span" style="font-family: verdana;"><span class="Apple-style-span" style="font-size: small;">I don't think that is true anymore...</span></span><br />
<span class="Apple-style-span" style="font-family: verdana; font-size: small;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: verdana; font-size: small;"><br />
</span>Cees Meijerhttp://www.blogger.com/profile/00805860727264392656noreply@blogger.com0