Well, if this project wasn't in "hack territory" before – despite an actual hacksaw already having been part of the process ;) – it's definitely there now!
Yesterday, I removed all 32 "anti-ghosting" diodes, and reinstalled them the other way round (except for the one I broke, which I replaced with one from the ol' junk bin). I did this for a couple of reasons:
- Due to the AVR only having pull-up resistors available on the inputs, the diodes forced me to scan the eight columns, and read the four row inputs, meaning each complete scan took eight iterations of a for loop. Now that the columns are connected to inputs, I can scan the rows, which results in a loop with only four iterations – a 50% speed-up!
- Using the simplest wiring layout, the keyboard is logically laid out as rows of columns. By scanning the columns and reading the rows, I received every eighth key, compressed into a nybble. I didn't technically have to, but to make the key-code map easier to edit, I was unpacking these nybbles to represent consecutive keys as consecutive bits. I suspected that this was the source of my "shifted-columns" problem (although I still have no idea what, exactly, was causing it).
With the above changes to the hard- and firmware complete, it works great! As for the source, I think I'll skip github and just share an archive of the four files that differ from the LUFA keyboard demo (Demos/Device/ClassDriver/Keyboard in the LUFA package, at time of writing) and the .hex file (although, according to various web searches, I appear to be the only person on the planet still using an AT90USB162 at all, much less this particular carrier board :P).
Since I can't attach (non-image) files to the Hackaday.io project, and I don't want to maintain the file on an external hosting service, and the file is so small, I'm going to include a Base64 encoded version of "usbiano.zip" at the end of this post.
To use it:
- Build the hardware
- Download and install WinAVR
- Download LUFA
- Unzip it into a folder called "LUFA"
- Copy the keyboard demo folder mentioned above into the folder containing the above "LUFA" folder
- Covert the Base64 data back into a .ZIP file, and unzip it into the new Keyboard folder, preserving its folder structure and overwriting existing files.
- Open a terminal (I use the Mingw32 terminal installed as part of the RubyInstaller.org devkit), change to the project folder, and run "make"
- Flash the resulting .hex to your device and reset it to make it show up as a "USBiano Keyboard"
- Run OpenMPT and rock out!
The Code:
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
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.