Project

General

Profile

LAOS I2C Panel v04 » History » Version 23

jaap, 2016-05-02 16:24

1 2 jaap
h1. LAOS I2C Panel v0.4
2 1 jaap
3 1 jaap
{{>toc}}
4 1 jaap
5 3 jaap
!>display-rev0.4.jpg!
6 1 jaap
7 1 jaap
h2. Basics
8 1 jaap
9 1 jaap
We designed a panel with a 2x16 LCD, 4 buttons and a joystick. The heart of the panel is a ATMEGA168-20PU running a small Arduino program. The panel uses I2C communication to the MBED board, but there is also a connection for a standard USB->TTL cable. You can use such a cable to upgrade the program in the Arduino chip.
10 1 jaap
All the source files of this project are available in the i2c panel project on Github: https://github.com/LaosLaser/AddOns
11 1 jaap
12 1 jaap
h2. Functionality
13 1 jaap
14 1 jaap
The user interface functionality is not implemented in this board, but in the program on the MBED. The on board ATMEGA with Arduino code only receives data for displaying on the screen and sends key press codes via I2C, basically this works as a tiny terminal. The functionality as stated here is just to show what the main LaOS controller board uses it for.
15 1 jaap
16 1 jaap
While no job is running:
17 1 jaap
18 1 jaap
* Manual focus, using up and down buttons (for some machines this will mean that the Z-axis is moving, others will move the lens-holder up and down)
19 1 jaap
* Moving the head to a specific location (jog in the X and Y axis)
20 1 jaap
* Select the current location and make that the origin (x=0, y=0, z=0)
21 1 jaap
* Select print job
22 1 jaap
23 1 jaap
While a job is printing:
24 1 jaap
25 1 jaap
* Pause current job
26 1 jaap
* Resume paused job
27 1 jaap
* Cancel current job
28 1 jaap
29 1 jaap
h2. Electronics
30 1 jaap
31 1 jaap
We designed our own board and software (Arduino based) to connect the display board to the mainboard (via I2C interface). The schematics (in KiCAD) are located ["here":https://github.com/LaosLaser/AddOns]. 
32 1 jaap
33 1 jaap
Most important parts:
34 1 jaap
35 5 jaap
"Full part list is available in GIT":https://github.com/LaosLaser/AddOns/blob/master/i2c-panel/pcb-0.4/bom.ods
36 1 jaap
37 1 jaap
* 16x2 LCD Display, RS stocknummer 532-6408
38 1 jaap
* ATMega168P-20PU, RS stocknummer 696-2430
39 1 jaap
* 4 Pushbuttons
40 1 jaap
* 1 Joystick button
41 1 jaap
* and of course, the PCB
42 1 jaap
43 1 jaap
!173px-Panel-rev0.3front.jpg!
44 1 jaap
45 1 jaap
h3. Bill of Materials
46 1 jaap
47 1 jaap
|_.Number|_.Component|_.RS Part No.|_.RS Price|_.Farnell Part No.|_.Farnell Price|_.Comment|
48 23 jaap
|1|LCD display, green, 16x2 characters|532-6408 / 720-0207 / 5326436|€ 5,14| | ||
49 23 jaap
|1|-OR- LCD display, blue,  16x2 characters|5326436|€ 7,23| | ||
50 1 jaap
|1|ATMega168P-20PU|738-0375|€ 5,22|1636933|€ 4,81||
51 23 jaap
|1|-OR- ATMega328P-20PU|696-2260 / ||1715487|-|either 168 or 328, not both|
52 1 jaap
|4|Thru hole tactileswitch12x12x7.3mm|378-6763|€ 0,46| | ||
53 1 jaap
|1|PCB Stick switch, 4 dir + centre push|516-316|€ 2,46|1435775|€ 2,47||
54 1 jaap
|1|Ceramic resonator THT CSTLS 16.00MHz|526-6154|€ 0,56|1448129|€ 0,46||
55 1 jaap
|1|28way low profile DIL socket,0.3in pitch|801-768|€ 0,24| | ||
56 1 jaap
|1|100uF capacitor|711-0703|€ 0,03| | ||
57 1 jaap
|2|100nF capacitor|721-5240|€ 0,07| | ||
58 1 jaap
|1|10K resistor|707-7745|€ 0,02| | ||
59 12 jaap
|1|36 way straight header,7mm top 3mm below|251-8632|€ 1,034|1824426|€ 0,92||
60 6 jaap
|2|BS270|| 1017689|€ 0,15||
61 6 jaap
|1|Kingstate KPEG242 buzzer| | |1502726|€ 2,03| |
62 1 jaap
|3|plastic buttoncap black|378-6943|€ 0,11| | ||
63 1 jaap
|1|plastic buttoncap red|378-6937|€ 0,11| | ||
64 22 jaap
|1|JST 4 pin PCB connector B4B-XH-A (LF)(SN)|543-2733|€ 0,16|1516278|€ 0,20|I2C (optional)|
65 16 jaap
|1|lasercut cardboard||||||
66 6 jaap
|1|PCB E218213| |€ 7,50| | |Available from LaOS (see "WebShop":http://tuxic.nl/webshop )|
67 1 jaap
68 1 jaap
h2. Mechanical construction
69 1 jaap
70 1 jaap
* PCB is positioned directly under the display
71 1 jaap
* I2C communication is through a 4-pin flatcable with pin-header
72 1 jaap
* A 6-pin (USB->TTL) connector is available for easy updates of the Arduino
73 1 jaap
* 4 standard pushbuttons
74 1 jaap
* 1 Joystick button (with 3D printed key cap)
75 1 jaap
76 1 jaap
The design files for a frontpanel and buttons can be found here: ["Frontplates":https://github.com/LaosLaser/AddOns/tree/master/i2c-panel/frontplates]
77 10 jaap
Peter Uitenhoven posted a Joystick thumb on Thingiverse: http://www.thingiverse.com/thing:87346
78 21 jaap
Mowi designed a Joystick knob: https://www.youmagine.com/designs/joystick-knob-for-laos-laser
79 1 jaap
80 1 jaap
h2. Implementation
81 1 jaap
82 9 jaap
The Arduino software on the ATMEGA chip is "available on github":https://github.com/LaosLaser/AddOns/raw/master/i2c-panel/firmware/lasercutterpanelv0_4.ino
83 1 jaap
84 1 jaap
The electronics are based on "John Crouchley's ATTiny2313":http://john.crouchley.com/blog/archives/612 implementation. The Arduino (or Ottantotto) electronics come from "Edwin Dertien":http://wiki.edwindertien.nl/doku.php?id=boards:ottantotto:start#pin_description.
85 1 jaap
86 1 jaap
Relevant Arduino libraries:
87 1 jaap
88 1 jaap
* LCD driver: "http://www.arduino.cc/en/Reference/LiquidCrystal":http://www.arduino.cc/en/Reference/LiquidCrystal
89 1 jaap
* i2c: "http://www.arduino.cc/en/Reference/Wire":http://www.arduino.cc/en/Reference/Wire
90 1 jaap
* Keypad: "http://www.arduino.cc/playground/Code/Keypad":http://www.arduino.cc/playground/Code/Keypad
91 1 jaap
92 11 peteruithoven
I2C on the Mbed: "http://mbed.org/handbook/I2C":http://mbed.org/handbook/I2C "Have a look at this very enlightning drawing!":http://mbed.org/media/uploads/ColonelPewter/i2c_001004.gif
93 1 jaap
94 1 jaap
For debugging, you can use any PC with a home-made I2C adapter:
95 1 jaap
96 1 jaap
p(((. http://www.instructables.com/id/Worlds-Cheapest-I2C-I-Squared-C-Adapter/
97 1 jaap
http://www.paintyourdragon.com/?p=43
98 1 jaap
99 1 jaap
100 1 jaap
h2. Building your own
101 1 jaap
102 1 jaap
To make life easier, we sell premade PCB's and this panel as a kit. See the "WebShop":http://tuxic.nl/webshop.
103 1 jaap
104 1 jaap
The kit contains:
105 1 jaap
106 1 jaap
* PCB
107 1 jaap
* ATMEGA168-20PU, pre-programmed with the Arduino bootloader and this I2C program (so you can install it even if you do not own a USB->TTL cable).
108 1 jaap
* LCD
109 1 jaap
* other electronic parts
110 1 jaap
* Buttons
111 1 jaap
* I2C wire to motherboard
112 1 jaap
113 1 jaap
Parts it does not contain:
114 1 jaap
115 1 jaap
* Laser cut panel. You can make one on your laser, maybe? Probably you want one to fit into your machine, anyway. See below for the panel the MiniFabLab made for its HPC LS3020
116 1 jaap
* 3D Printed joystick button. When I design one I'm really proud of, I might include it.
117 1 jaap
118 1 jaap
Feel free to make the user interface panel yourself if you prefer. No need to buy stuff if you have an Arduino lying around with LCD and some buttons!
119 1 jaap
120 1 jaap
h2. Soldering
121 1 jaap
122 6 jaap
This board has parts on BOTH sides! The display and buttons go on one side, all the other electronic parts go on the other.
123 6 jaap
124 6 jaap
Non-display side: the side where it says "LAOS I2C rev 0.4".
125 6 jaap
* Start by soldering the  the socket for the Atmel IC, making sure the notch is on the same side as the one on the silkscreen legend. 
126 6 jaap
* Place the resistors. There is only one, that's why it's labeled R2
127 6 jaap
* Solder the two 100nF capacitors in U1 and U4.
128 6 jaap
* Solder the 100uF electrolytic capacitor with the plus (longer) wire in the hole with square solder pad (U2).
129 6 jaap
* Solder in the two BS270 in Q1 and Q4.
130 6 jaap
* Solder the 3 pin ceramic resonator (F1)
131 6 jaap
* Solder the piezzo buzzer (SP1).
132 17 jaap
* Solder the I2C pins. Make sure the 4-pin header matches with the cable you're going to use.
133 17 jaap
* Place a regular 2-pin header in P3 and P7 and a 6-pin header in P1 (TTL). Place two 3-pin headers in P4.
134 1 jaap
* Now take a 16-pin header and push it with the longer pin ends in the PCB from the bottom (solder) side of the board. The long pins will stick out on the top side of the board. The black plastic of the header in now on the bottom of the PCB. Measure with the display module to see if the pins are long enough to go just through the module. Solder the 16-pin header to the board on the TOP (component) side.
135 16 jaap
Front (display side):
136 1 jaap
* Place a strong piece of tape or (lasercut) cardboard on the bottom side of the board, covering the part of the board that will be under the display module, so that there cannot be any shortcircuit between the board and the display module. You can use electric shielding tape or gaffer tape.
137 1 jaap
* Solder the 4 buttons to the board (not the joystick yet!) with the buttons on the side of the display (solder side). 
138 6 jaap
* The joystick has a very small dent in the top metal layer. If you put the joystick in, this dent should be on the right side, where there is a small mark on the print. Solder it in.
139 17 jaap
* Solder the display module on the back side board, with the black strip of the 16-pin header in between.
140 1 jaap
141 8 jaap
Front side of the panel.
142 7 jaap
!display-rev0.4.jpg!
143 1 jaap
144 6 jaap
Back side of the panel.
145 7 jaap
!display-back-rev0.4.jpg!
146 1 jaap
 
147 1 jaap
148 1 jaap
h2. Software installation
149 1 jaap
150 1 jaap
h3. Installing a bootloader
151 1 jaap
152 14 jaap
These instructions are for ATMEGA168P-PU
153 14 jaap
<pre>
154 14 jaap
cd /opt/arduino-1.6.4/hardware/arduino/avr/bootloaders/atmega
155 19 jaap
avrdude -p m168p -c usbasp -F -U lock:w:0x3F:m -U hfuse:w:0xDE:m -U flash:w:ATmegaBOOT_168_diecimila.hex -U efuse:w:0xF8:m
156 18 jaap
avrdude -p m168p -c usbasp -F -U lfuse:w:0xff:m
157 15 jaap
</pre>
158 1 jaap
Error message while installing:
159 1 jaap
160 1 jaap
    avrdude: safemode: efuse changed! Was f8, and is now 0
161 1 jaap
Would you like this fuse to be changed back? [y/n]
162 1 jaap
163 1 jaap
Answer n !
164 14 jaap
165 14 jaap
and for the ATMEGA328P-PU
166 14 jaap
<pre>
167 14 jaap
<cd /opt/arduino-1.6.4/hardware/arduino/avr/bootloaders/optiboot
168 14 jaap
avrdude -p m328p -c usbasp -F -U lock:w:0x3F:m -U efuse:w:0x05:m -U hfuse:w:0xDE:m -U flash:w:optiboot_atmega328.hex -U lfuse:w:0xFF:m
169 14 jaap
</pre>
170 1 jaap
171 1 jaap
h3. Arduino Sketch
172 1 jaap
173 1 jaap
Use a USB=&gt;TTL cable to connect the board to your computer. Install "Arduino":http://www.arduino.cc software. Get "lasercutterpanelv0&#95;3.pde from GIT": https://github.com/LaosLaser/AddOns/raw/master/i2c-panel/firmware/lasercutterpanelv0_3.pde
174 1 jaap
175 1 jaap
To test your panel, change:
176 1 jaap
177 1 jaap
    #define DEBUG 0 
178 1 jaap
179 1 jaap
180 1 jaap
to
181 1 jaap
182 1 jaap
    #define DEBUG 1
183 1 jaap
184 1 jaap
185 1 jaap
Arduino settings: Board: Arduino NG or older with Atmega168
186 1 jaap
187 1 jaap
Upload the file to the board. This will give you a welcome text. After the text has disappeared, all buttons should show a number on the screen. The joystick should show 5 different values for each direction and middle push.
188 1 jaap
189 1 jaap
If it works, upload the code again with *DEBUG 0*. The panel is now ready to be connected to the mainboard.
190 1 jaap
191 20 jaap
h2. Joystick knob and panel
192 1 jaap
193 21 jaap
To integrate your display in the laser, download Monique's design for a knob + display panel: https://www.youmagine.com/designs/joystick-knob-for-laos-laser
194 20 jaap
195 20 jaap
!https://d36c0vbvwjb9cx.cloudfront.net/uploads/image/file/86573/medium_IMG_20150611_194223.jpg!
196 20 jaap
197 1 jaap
h2. Control Panel on the HPC LS3020
198 1 jaap
199 1 jaap
200 1 jaap
To accomodate the display you can cut a replacement for the control panel. 
201 1 jaap
202 1 jaap
!greenpanel-bart.jpg!
203 1 jaap
204 1 jaap
The button laser switch was replaced by a toggle for better on/off reference. So the right serial test button could be omitted. Also the lighting switch was removed, now the light is always on. No modifications are required for the cabletree, just connect the wires from the removed switches. The air pump switch was kept as a compressor can be noisy. It is advised to use a shielded cable between the I2C panel and the board. A cutting file (.svg) of this panel is available on "miniFabLab":http://minifablab.nl/uploads/LaOS3020panel.svg.
205 1 jaap
206 1 jaap
207 1 jaap
h2. More
208 8 jaap
209 8 jaap
Previous version: https://redmine.laoslaser.org/projects/laos/wiki/LAOS_I2C_Panel_v03
210 1 jaap
211 1 jaap
For links on previous versions and to get started on designing your own display, see the [[Display-alternatives]] page.
212 13 jaap
213 13 jaap
Cable conn:  Preci-dip, RS: 702-0095