Skip to content
Snippets Groups Projects
Commit b3e3bcef authored by EduardoChamorro's avatar EduardoChamorro Committed by GitHub
Browse files

Merge pull request #13 from EDUARDOCHAMORRO/master

Update new tutorials
parents 6eaee400 094518b4
No related branches found
No related tags found
No related merge requests found
Showing
with 496 additions and 5 deletions
......@@ -20,11 +20,8 @@ A living collection of tutorials to support Fab Academy, hosted in the [Academan
**GUIDE OF TUTORIAL DOCUMENTING**
* If you want to add a tutorial, go to the [github](https://github.com/Academany/FabAcademy-Tutorials) to add it and ask to merge.
* If you want to add a tutorial, go to the [github](https://github.com/Academany/FabAcademy-Tutorials) to add it and ask to merge.
* You will find a folder for each week/assignment tutorial.
* Use the template for creating a new tutorial and keep it simple. LESS IS MORE.
......
......@@ -38,7 +38,7 @@
* [PCB with a fiber laser cutter](week4_electronic_production/fiber_laser_pcb.md)
* [Flexible_PCB_windows_english](week4_electronic_production/flexible_pcb_windows_mac.md)
* [Fab Isp-Other models](week4_electronic_production/fabisp_models.md)
* [ATtiny44 fuses]()
### Week 5: 3D scanning and printing
......@@ -62,6 +62,9 @@
* [What is Make and Makefiles](week8_embedded_programming/makefile.md)
* [Timing an AVR microcontroller](week8_embedded_programming/timing.md)
* [ATtiny44 fuses](week8_electronic_production/attiny44_fuses.md)
* [ATtiny Using C](week8_electronic_production/attiny_c.md)
* [ATtiny Using Arduino](week8_electronic_production/attiny_arduino.md)
### Week 9: Machine Building
......@@ -83,6 +86,7 @@
### Week 15: Networking and communications
* [ESP8266 Introduction](week15_networking_and_communications/esp8266.md)
* [Hello Serial Bus C](week15_networking_and_communications/helloserialbus-c.md)
### Week 16: Interface and application Programming
......
# Hello Serial Bus - Using C
![bus](http://blog.kaziunas.com/wp-content/uploads/2011/05/IMG_4737.jpg "IMG_4737")
The purpose of this hello world example is to network several boards together in the form of a serial bus. The bridge board is connected to a computer via a FTDI cable. The two node boards are connected to the bridge board.
#### To replicate this example:
1. [Download the Fab Academy board diagrams / pngs and code.](http://academy.cba.mit.edu/classes/networking_communications/index.html)
2. For each node in your network, you will need to modify the modify the "hello.bus.45.c" code.
3. You need to change the line: #define node_id '0' --> each node needs to have a different number (0, 1, 2, 3 - for each additional node you add.
4. After flashing boards with 3 different node numbers:
5. Open a Arduino IDE
6. Open the serial monitor
7. Enter number of note into serial monitor - press "enter"
8. The node name (ex: node 1) should echo in on the serial monitor and the LED on the board that was flashed with the node id of 1 should flash.
Alternately- If you don't have / want to use the Arduino IDE,
1. After flashing boards with 3 different node numbers:
2. [ Download term.py(righ click save as)](helloserialbus-c/term.py)
3. Run term.py
In Ubuntu this is:
The node name (ex: node 1) should echo in on the serial monitor and the LED on the board that was flashed with the node id of 1 should flash.
**Original tutorial by:**
* Tutorial by [Anna Kaziunas France](http://www.kaziunas.com) - [Fab Academy AS220 Providence, RI](http://www.as220.org/fabacademy) - March 2012
Licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 3.0](https://creativecommons.org/licenses/by-nc-sa/3.0/) Unported License
week15_networking_and_communications/helloserialbus-c/helloserialbus.jpg

45.2 KiB

#!/usr/bin/env python
#
# term.py
#
# term.py serial_port port_speed
#
# Neil Gershenfeld
# CBA MIT 7/27/07
#
# (c) Massachusetts Institute of Technology 2007
# Permission granted for experimental and personal use;
# license for commercial sale available from MIT.
#
import sys,time,serial
from Tkinter import *
from select import *
NROWS = 25
NCOLS = 80
def key(event):
#
# key press event handles
#
key = event.char
#print 'send',ord(key)
if (ord(key) == 13):
key = chr(10)
ser.write(key)
def quit():
#
# clean up and quit
#
sys.exit()
def idle(parent):
#
# idle loop
#
wait = ser.inWaiting()
if (wait != 0):
#
# read character
#
byte = ser.read()
widget_text.config(state=NORMAL)
#print byte,ord(byte)
if (ord(byte) == 10):
#
# CR
#
widget_text.insert(INSERT,'\n')
if (int(float(widget_text.index(END))) > (NROWS+1)):
widget_text.delete(1.0,2.0)
#if (ord(byte) == 13):
#
# CR
#
#widget_text.insert(INSERT,'\n')
#if (int(float(widget_text.index(END))) > (NROWS+1)):
# widget_text.delete(1.0,2.0)
elif (byte == 8):
#
# BS
#
widget_text.delete(INSERT+"-1c",INSERT)
else:
#
# character
#
widget_text.insert(INSERT,byte)
widget_text.config(state=DISABLED)
time.sleep(0.001)
parent.after_idle(idle,parent)
#
# check command line arguments
#
if (len(sys.argv) != 3):
print "command line: term.py serial_port speed"
sys.exit()
port = sys.argv[1]
speed = int(sys.argv[2])
#
# open serial port
#
ser = serial.Serial(port,speed)
ser.setDTR()
#
# set up UI
#
root = Tk()
root.bind('<Key>',key)
root.title('term.py')
#
widget_quit = Button(root, text="quit",command=quit)
widget_quit.pack()
#
address_frame = Frame(root)
Label(address_frame,text="port: "+port).pack(side='left')
Label(address_frame,text=" speed: "+str(speed)).pack(side='left')
address_frame.pack()
#
widget_text = Text(root, bg='white', bd=5, width=NCOLS, height=NROWS, font=('arial',10,'bold'))
#widget_text.bind('<Key>',key)
widget_text.config(state=DISABLED)
widget_text.pack()
#
# begin event loop
#
root.after(100,idle,root)
root.mainloop()
# ATtiny44A Fuses
![Fab ISP](attiny44_fuses/full_board.jpg)
## What are the fuses?
There are 3 bytes of permanent storage in the chip called 'fuse low byte', 'fuse high byte' and 'fuse extended byte'. These bytes are called fuses and can be reprogrammed as many times as you want and determines the behaviour of the chip. To do that, their value is not erased when the chip is powered off or reprogrammed.
Each microchip has its own definition for the values that must have the fuses. In this tutorial, we are going to work with the fuses of the Atmel Attiny44A.
## Fuses for the Attiny44A
<table><thead><tr><th>Name</th><th>Description</th><th>Default Value</th><th>Byte</th><th>Bit range</th><th>Datasheet page</th></tr></thead><tbody><tr><th>CKDIV8</th><td>The prescaler feature can be used to change the power consumption when not high performance is required. This feature can be used with any clock source. The prescaler divides the clock frecuency by a defined factor that can be configured using the CLKPS(3...0) register (Datasheet - Table 6-11), being its default value "0011" (divistion factor of 8).</td><td>0</td><td>LOW</td><td>(7)</td><td>30</td></tr><tr><th>CKOUT</th><td>This fuse allows us to use the chip clock as a clock source to drive other circuits. Once this bit is programmed, the PIN B2 will output the clock.</td><td>1</td><td>LOW</td><td>(6)</td><td>30</td></tr><tr><th>SUT</th><td>This fuses determine the Start-up Times for the external clock selection. This time must be long enough to ensure that the MCU is kept in reset mode while the clock is changing (is not stable). Its default value defines the longest Start-up time.</td><td>10</td><td>LOW</td><td>(5,4)</td><td>26</td></tr><tr><th>CKSEL</th><td>The AMTEL Attiny44A can use several clock sources. By default, the clock used is the internal 8MHz oscillator. The available configurations can be found in the datasheet, in table 6-1.</td><td>0010</td><td>LOW</td><td>(3...0)</td><td>25</td></tr><tr><th>RSTDISBL</th><td>When programmed (0), the PB3, instead of being used as a reset pin, it can be used as an I/O pin.</td><td>1</td><td>HIGH</td><td>(7)</td><td>3</td></tr><tr><th>DWEN</th><td>This fuse allows the activation of the 'debug' mode. Once it is programmed, the RESET port is configured as a bidirectional I/O pin with pull-up enabled.</td><td>1</td><td>HIGH</td><td>(6)</td><td>150</td></tr><tr><th>SPIEN</th><td>Fuse that enables serial program and data downloading. Once unprogrammed this fuse, in order to reset its value, you will need a 12V programmer.</td><td>0</td><td>HIGH</td><td>(5)</td><td>159</td></tr><tr><th>WDTON</th><td>A watchdog timer is a mechanism to prevent closed loops and errors in the microchip. It consists on a decreasing counter. If it reaches 0, it generates a timeout signal that triggers an action to restore the system. To avoid this, the program must restart the timer before it times out.</td><td>1</td><td>HIGH</td><td>bit range</td><td>41</td></tr><tr><th>EESAVE</th><td>If programmed (0) the EEPROM memory will be preserved through chip erase.</td><td>1</td><td>HIGH</td><td>(4)</td><td>159</td></tr><tr><th>BODLEVEL</th><td>This fuse controles the Brown-out detector. A Broun-out detector is a circuit that monitors the supply voltage while operating. It compares the supplied voltage to a fixed one. If the supplied voltage decreases blow a fixed one (V<sub>BOT-</sub>), the Brown-out reset is enabled until the voltage raises above a V<sub>BOT+</sub>. Then a timer starts; if it times out, the reset is disabled. By default, the Brown-out detector is disabled. In table 20-6 of the Datasheet all the modes are specified.</td><td>111</td><td>HIGH</td><td>(2...0)</td><td>159 & 176</td></tr><tr><th>SELDPRGEN</th><td>This fuse, if programmed, allows to the device the ability to upload a program to the MCU by itself.</td><td>1</td><td>EXTENDED</td><td>(0)</td><td>152</td></tr></tbody></table>
As seen, there is just one bit in the Extended byte of the fuses whose value will change the microchip behaviour. The bytes 7...1 should be set with a value of 1.
# Fuse Calculator
For using the fuse calculator you need to download [this folder](attiny44_fuses/attiny44_fuses.rar) (right click on the link and "save as")and open the html inside.
**Original tutorial by:**
* [Alejandro Escario Ménde](http://fabacademy.org/archives/2015/eu/students/escario_mendez.alejandro/index.html)
[about me](https://www.linkedin.com/in/aescariom/)
Licensed under a [MIT License](https://opensource.org/licenses/MIT)
File added
# ATtiny Embedded Programming with the Arduino IDE
The assignment for this week is to read a microcontroller [datasheet](http://academy.cba.mit.edu/classes/embedded_programming/doc8183.pdf) and to program your [Hello Button + LED board](http://academy.cba.mit.edu/classes/embedded_programming/index.html) to do something, in as many different programming languages as possible.
## <a name="LED_board" id="LED_board"></a>Arduino: Program your Hello Button + LED Board
This tutorial shows you how to program an
ATtiny44A microcontroller on your Hello Button + LED board that we made during the [Electronics Design week](http://academy.cba.mit.edu/classes/electronics_design/index.html) using the Arduino software. The ATtiny44A is a small, cheap microcontrollers that are
convenient for running simple programs.
_This content is extracted from: [http://hlt.media.mit.edu/?p=1695](http://hlt.media.mit.edu/?p=1695)__and revised to work with the Hello Button + LED board example._
### Materials and Tools
You need an in-system programmer (ISP) use the[ FabISP](http://academy.cba.mit.edu/classes/electronics_production/index.html) we made in class.
### Get the Software
##### Download the Arduino IDE Software
You'll need the Arduino software,. You can [download Arduino ](http://arduino.cc/en/Main/Software) from the Arduino site. Installation instructions are available [for Windows](http://arduino.cc/en/Guide/Windows) and [for Mac OS X](http://arduino.cc/en/Guide/MacOSX).
##### Make Sure You Have the FTDI Drivers Installed
Get the drivers for your OS here: [http://www.ftdichip.com/Drivers/VCP.htm](http://www.ftdichip.com/Drivers/VCP.htm)
### ATtiny 44A Microcontroller Pin-Outs
Note that the pinouts on the microcontroller are not the same numbers in the Arduino code. The microcontroller pin number is listed on the microcontroller body below. The corresponding Arduino pin is listed on the outside - to the right or left.
#### ATtiny 44A vs. Arduino Pin-Out Numbering
<table cellspacing="3" cellpadding="3" border="1" width="607"><tbody><tr><td align="center" width="129">**ATtiny 44A
Pin Number**</td><td align="center" width="208">**Corresponding Arduino
Pin Number**</td><td align="center" width="238">**Details**</td></tr><tr><td align="center">1</td><td align="center">No number, no access?</td><td align="center">VCC (+) </td></tr><tr><td align="center">2</td><td align="center">Pin 10</td><td align="center"></td></tr><tr><td align="center">3</td><td align="center">Pin 9</td><td align="center"></td></tr><tr><td align="center">4</td><td align="center">No number, no access?</td><td align="center">Reset</td></tr><tr><td align="center">5</td><td align="center">Pin 8</td><td align="center">PWM</td></tr><tr><td align="center">6</td><td align="center">Pin 7 </td><td align="center">PWM, Analog Input 7</td></tr><tr><td align="center">7</td><td align="center">Pin 6</td><td align="center">MOSI, PWM, Analog Input 6 </td></tr><tr><td align="center">8</td><td align="center">Pin 5 </td><td align="center">Analog Input 5, PWM, MISO</td></tr><tr><td align="center">9</td><td align="center">Pin 4 </td><td align="center">Analog Input 4, SCK</td></tr><tr><td align="center">10</td><td align="center">Pin 3</td><td align="center">Analog Input 3</td></tr><tr><td align="center">11</td><td align="center">Pin 2 </td><td align="center">Analog Input 2</td></tr><tr><td align="center">12</td><td align="center">Pin 1</td><td align="center">Analog Input 1</td></tr><tr><td align="center">13</td><td align="center">Pin 0</td><td align="center">Analog Input 0, AREF</td></tr><tr><td align="center">14</td><td align="center"> No number, no access?</td><td align="center">GND (-) </td></tr></tbody></table>
##### Download the ATtiny Board (Board Manager)
To make arduino ATtiny compatible we need to install the ATtiny support.
Everything is clearly explained in [High-Low Tech](http://highlowtech.org/?p=1695)
### Installing ATtiny support in Arduino (skip this step if you already used the Arduino Boards Manager for installing the support)
* Download: [ATtiny](https://github.com/damellis/attiny/zipball/Arduino1) (from [this GitHub repository](https://github.com/damellis/attiny/tree/Arduino1))
* Locate your Arduino sketchbook folder (you can find its location in the preferences dialog in the Arduino software)
* Create a new sub-folder called "hardware" in the sketchbook folder.
* Copy the attiny folder from inside the .zip to the hardware folder.
* Restart the Arduino development environment.
* You should see ATtiny entries in the Tools > Board menu.
### Connecting the ATtiny
* You'll need to provide power to the ATtiny and connect it to your programmer (FabISP). That is, connecting MISO, MOSI, SCK, RESET, VCC, and GND of the programmer to the corresponding pins on the ATtiny.
* Connect the programmer to the ISP header on the LED + Button board
* You will also need to power the LED + Button board with an FTDI cable **in case your FabIsp doesn't supply current**.
### Configuring the ATtiny to run at 20 MHz
* By default, the ATtiny's run at 1 MHz (the setting used by the unmodified "ATtiny44)
* You need to do an extra step to configure the microcontroller to run at 20 MHz – as we have an external 20 MHZ resonator on the Hello Button + LED board.
* Once you have the LED + Button board connected to your FabISP, select the "**ATtiny44 (external 20 MHz clock)**" from the Boards menu.
### If You are Using Linux (Ubuntu)
Avrdude needs sudo access in order to send your Arduino code to the board. You will need to run avrdude as sudo. *Mac users do not need to do this.*
To enable this: We need to create a file called 10-usbtinyisp.rules in the directory /etc/udev/rules.d.
Here is how to do it (in terminal):
Type:
>cd ~/Desktop
Then:
>nano 10-usbtinyisp.rules
A blank file will open up in a text editor. Enter the following text. Paste code is all in one line.
>SUBSYSTEM=="usb", SYSFS{idVendor}=="1781", SYSFS{idProduct}=="0c9f",
GROUP="adm", MODE="0666"
Save the file by pressing: <CONTOL> + O. Hit <ENTER>
Close the file by pressing: <CONTROL> + X
Move the file from the desktop to /etc/udev/rules.d by typing:
>sudo mv 10-usbtinyisp.rules /etc/udev/rules.d
Then type:
>sudo restart udev
Then you should be able to burn the bootloader.
### Burn the Bootloader
Then, run the
**"Burn Bootloader"** command from the Tools menu. This configures the fuse bits of the microcontroller.
* Note that:
* the fuse bits keep their value until you explicitly change them,
* so you'll only need to do this step once for each microcontroller. **
* this doesn't actually burn a program code onto the board; you'll still need to upload new programs using an external programmer.)
### Programming the ATtiny
Next, we can use the Arduino IDE to upload a program to the ATtiny.
#### Modify the Code
* Open the Button sketch from the examples menu. File > Examples > Digital > Button
* Change the pin numbers from to correspond to the pins used for the LED and the button our your Hello Button + LED board.
**Locate this section of code:**
// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin
**Change it to match the pins on your Hello Button + LED Board:**
// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 3; // the number of the pushbutton pin
const int ledPin = 7; // the number of the LED pin
#### Select a Programmer
* Select the appropriate item from the Tools > Board menu (leave the serial port set to that of your Arduino board).
* Select the appropriate item from the Tools > Programmer menu
> USBtinyISP
### Upload the Sketch
Make sure your board is plugged into the computer via the FTDI cable and that your FabISP is connected to the 6 pin programming header on the Hello Button + LED board.
To upload the sketch to your Hello Button + LED board - select the arrow button in the Arduino IDE.
> You should see "Done uploading." in the Arduino software and no error messages.
**Your LED should be glowing on the board. When you press the button, the LED should turn off.**
### Code Example
Here is a code example with lots of comments for explanation of what is happening in the code.(Just cut and paste the code below)
/*
LED Off Until Button Pressed
Blinks a light emitting diode(LED) connected to digital
pin 7, when pressing a pushbutton attached to pin 3.
The circuit:
* LED attached from pin 7 to ground
* pushbutton attached to pin 3 from +5V
* 10K resistor attached to pin 3 to +5V
* 10K resistor pulls pin 3 and the button to HIGH by default
created 2005
by DojoDave
modified 30 Aug 2011
by Tom Igoe
modified for Hello Button + LED Board - 19 Mar 2012
by Anna Kaziunas France
*/
// constants won't change.
// They're used here to set pin numbers:
const int buttonPin = 3; // the number of the pushbutton pin
const int ledPin = 7; // the number of the LED pin
// initialize variables:
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop(){
// read the state of the pin the pushbutton is connected to:
buttonState = digitalRead(buttonPin);
// is the push button pressed?
// if not pressed - the button state is HIGH
// the pull up resistor the button / pin 3 makes the button state HIGH by default.
if (buttonState == HIGH) {
// turn LED off (LED is off by default)
digitalWrite(ledPin, LOW);
}
//otherwise.....
// button is pressed
else {
// turn LED on:
digitalWrite(ledPin, HIGH);
}
}
### Try Modifing the Code
Modify the code so that the LED blinks when you press the button. Hint - use the delay() function. See the "Blink" example for details.
The blink example comes with your Arduino IDE - It is under File > examples > basics > blink
### Supported Arduino Commands / Limitations
Due to the memory limitations of this microcontroller, not all of the Arduino commands are supported.
>For more info [High-Low Tech](http://highlowtech.org/?p=1695) gives a nice explanation
The following Arduino commands are supported:
* [pinMode()](http://arduino.cc/en/Reference/PinMode)
* [digitalWrite()](http://arduino.cc/en/Reference/DigitalWrite)
* [digitalRead()](http://arduino.cc/en/Reference/DigitalRead)
* [analogRead()](http://arduino.cc/en/Reference/AnalogRead)
* [analogWrite()](http://arduino.cc/en/Reference/AnalogWrite)
* [shiftOut()](http://arduino.cc/en/Reference/ShiftOut)
* [pulseIn()](http://arduino.cc/en/Reference/PulseIn)
* [millis()](http://arduino.cc/en/Reference/Millis)
* [micros()](http://arduino.cc/en/Reference/Micros)
* [delay()](http://arduino.cc/en/Reference/Delay)
* [delayMicroseconds()](http://arduino.cc/en/Reference/DelayMicroseconds)
* [SoftwareSerial](http://arduino.cc/en/Reference/SoftwareSerial) (has been updated in Arduino 1.0)
**Original tutorial by:**
* [Anna Kaziunas France](http://www.kaziunas.com) - [Fab Academy AS220 Providence, RI](http://www.as220.org/fabacademy) - March 2012
# Echo Keyboard Input Using C
## Program Your Board in C to Echo Back Keyboard Input
This tutorial shows you how to program an
ATtiny44A microcontroller on your Hello Button + LED board that we made during the [Electronics Design week](http://academy.cba.mit.edu/classes/electronics_design/index.html) using Neil's C code to echo back keyboard input.
### Necessary Toolchain Software
If you completed the electronics production assignment and programmed your FabISP - *you should ALREADY HAVE the necessary toolchain.* If you missed this week - [see the Electronics Production page](http://academy.cba.mit.edu/classes/electronics_production/index.html) for how to get the necessary software for your OS.
### Get the C Code From the Academy Site
Download Neil's C code and makefile from the [week 9 lessons page, under "host communication"](http://academy.cba.mit.edu/classes/embedded_programming/index.html).
##### You will need the following files:
* [hello.ftdi.44.echo.c](http://academy.cba.mit.edu/classes/embedded_programming/hello.ftdi.44.echo.c)
* [hello.ftdi.44.echo.c.make](http://academy.cba.mit.edu/classes/embedded_programming/hello.ftdi.44.echo.c.make)
You will need open terminal and navigate to the location where you saved these files in order for the commands below to work. You must be in the same directory (or provide a path to the file).
### Connecting the Your Board and Programmer
* You'll need to provide power to both your board and your
programmer (FabISP).
* Connect the programmer to the ISP
header on the LED + Button board
### Configuring the ATtiny to run at 20 MHz (setting the fuses)
* If you have already completed the first tutorial - [Using the Arduino IDE to program your board ](attiny_arduino.md)- you have already set the fuses to run at 20 MHz when you "burned the bootloader" and DO NOT need to do it again.
* **If you have not completed this step** or by passe this tutorial then you need to set the fuses. To do this using the C code you downloaded:
### Programming the ATtiny with the Echo C Code
To program your board - open terminal and navigate to where you saved the C code and makefile. Type:
### To See the Code in Action:
We can use the **serial monitor** in the Arduino IDE to enter a single character and the hello echo program on your board will store the character and then echo (repeat it back) to the serial monitor. The program will store each character and repeat the series back to you each time.
#### Using the Arduino IDE:
##### Step 1: Open Arduino and then enable the Serial Monitor
The serial monitor window will open.
Make sure the "115200 baud" setting is selected.
##### Step 2: Type a single character into the top text entry area.
Press "send" or hit the <ENTER> key.
The character you type on the keyboard will be sent to the board via the serial port on your computer. **The C code on the board will echo back the character that you typed.**
Type another character into the top text entry area and hit "send" or hit the <ENTER> key. The characters you have typed so far are stored and echoed back along with the new character that you typed.
Keep typing characters and letting them echo back until you reach the limit.
**Original tutorial by:**
* [Anna Kaziunas France](http://www.kaziunas.com) - [Fab Academy AS220 Providence, RI](http://www.as220.org/fabacademy) - March 2012
# A collection of Gestalt and machine resources
# A collection of Gestalt/Grbl and machine resources
* [A tested example using 3 nodes](gestalt/xyz_test.py)
* [Gestalt documentation, from the code](gestalt_doc/index.html)
* [Grbl,what is](http://dank.bengler.no/-/page/show/5470_grbl)
* [Getting Grbl](http://dank.bengler.no/-/page/show/5471_gettinggrbl?ref=checkpoint)
* [Grbl, from the code](https://github.com/damellis/grbl)
* [Grbl in Arduino Ubuntu](http://fabacademy.org/archives/content/tutorials/16_Machine_Design/grbl2arduinUno/grbl2arduinoUnoF.html)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment