Not sure if this is the best place to put this, but I couldn't find a better place with all of the subforums here.
Anway, I have a CNC mill and have been using LinuxCNC for several ears using the parallel port. It has worked well, but I occasionally get real time warnings that are a little concerning to me. It has never caused a problem, but I began searching for a solution that I could implement on a shoestring. I thought about the mesa cards, switching to another motion control software, etc.
I had been keeping an eye on GRBL which is a motion control firmware that is installed on a little Arduino microcontroller. GRBL is interesting because all of the time sensitive tasks are run on the Arduino, and it is doing nothing else but running GRBL. It is not running an operating system, or background programs, or other tasks. It is solely running GRBL, meaning that the real time tasks of operating the machine should be very stable. I have found this to be true. Since the board design is open source there are many places to buy them cheap. I decided to give it a try. Heck for the $7 it cost me I figured if nothing else it would be an interesting diversion. Well, I got that first board and I was hooked. GRBL is the firmware on the Arduino and it accepts a simple USB serial port stream of text (G-code) to run. The available G-codes are limited but all of the basics are there. you can simply open a serial monitor and start typing g-code, but since the input to GRBL is a stream of text, the user has to have an interface on a computer to use GRBL effectively. There are many interfaces out there, and I tried many of them. In one way or another I found each of them lacking and I decided to roll my own interface. At the time I started, none supported G81-G89 canned cycles and this was a major reason I started my own. I believe that some other have implemented limited canned cycle support, but I wanted the canned cycles to work the same as they do in LinuxCNC, and for that matter the Cincinnati VMC's I ran in my previous career. So that is what I did. I have decided to also release my interface as a free application to others who might like it. I have worked hard to get it where it is. Between GRBL and my interface, there is support for the following:
Non-modal codes (Group 0) G4, G10 G28, G28.1, G30, G30.1, G53 G92, G92.1
Motion (Group 1) G0, G1, G2, G3, G33, G38.2, G38.3, G38.4, G38.5, G80, G81, G82, G83, G85, G89
(G2 and G3 support helical motion too)
Plane selection (Group 2) G17, G18, G19
Distance Mode (Group 3) G90, G91
Arc IJK Distance Mode (Group 4) G91.1
Feed Rate Mode (Group 5) G93, G94
Units (Group 6) G20, G21
CDC (Group 7) G40 - (I'm working on G41/G42 now)
Tool Length Offset (Group 8) G43.1, G49
Canned Cycles Return Mode (Group 10) G98, G99
Coordinate System (Group 12) G54, G55, G56, G57, G58, G59
Control Mode (Group 13) G61
Spindle Speed Mode (Group 14) G96, G97
Lathe Diameter Mode (Group 15) G7, G8
Stopping (Group 4) M0, M2, M30
Tool Change (Group 6) M6 Tn
Spindle (Group 7) M3, M4, M5
Coolant (Group 8) M7 M8 M9
Override Switches (Group 9)
User Defined (Group 10)
As you can see, the list is pretty complete. Some of the above are not supported natively in GRBL and are handled in the GUI. For example, A canned cycle (G81-G89) is interpreted b the GUI and the individual linear moves that make up the canned cycle are what is sent to GRBL. This is how the cutter compensation I am working on will be handled as well. the heavy lifting will be done by the computer with GRBL focusing on moving where it is supposed to when it is supposed to.
Here is a look at the main window of my GUI and you can get an idea of what it has. There is unfortunately no graphical backplot, but as I get better at programming I hope to be able to do that some day. I used MS Visual Studio 2005 to write the interface so that I could try to use it on an old Windows 98 laptop. I have confirmed that it does work on that windows 98 machine, but performance is a bit lacking. There are no errant motions, but for large files with lots of little bity moves, the machine can sometimes not stream fast enough and you can get a brief pause between moves. This isn't a problem for anything more modern though.
Attachment 294452
As i said, the GUI is available for free download at this link
https://dl.orangedox.com/e8hUY9RuEsEJHYCX6o/109JB's%20GRBL%20Interface%201-0-0-0.zip
If you are running a parallel port based machine you can try it pretty easily. Here is how I did it on my machine. I didn't want to mess with anything that couldn't be easily reversed until I knew GRBL was going to work, so I built the following adapter that simply plugs into the parallel port breakout board on one end, and the USB port of the computer on the other end. I used an Arduino Nano for its small size and just cut the end off of an old parallel port cable, soldering the wires to the Nano. A small project box finished it off. This has worked so well that I haven't changed a thing and don't think I will, but if you would like to you can completely eliminate the breakout board and wire the Arduino directly to the stepper drivers, switches, etc. It essentially works as a breakout board.
Attachment 294456
Attachment 294458
Attachment 294460
Enjoy.
John B.