Utschig_Senior_Project_2 - eee

advertisement
Open System Design for Multi-touch
Interface Using LEDs as Light Sensors
A Senior Project Presented to the Computer Engineering Department
California Polytechnic State University
1 Grand Avenue; San Luis Obispo CA, 93407
In Partial Fulfillment
of the Requirements for the Degree
Bachelor of Science in Computer Engineering
By Nicholas J. Utschig
December 2010
Abstract
This report covers the design and development of a microcontroller-driven interactive display
using copyright-free applications. The real time operating system FreeRTOS runs on a PIC24 MCU
which measures light-intensities using LEDs on a RGB 8x8 matrix display. Utilizing an LED as a photodetector is explained by a physical theory of operation, algorithm and electrical formula. A cross-section
of currently available software suites for hobbyist computer engineering is presented.
Table of Contents
Pithos, Open .................................................................................................................................................. 1
Collective Objective.................................................................................................................................. 1
Disciplines Implemented .......................................................................................................................... 1
Preface and Gratitude ................................................................................................................................ 3
Introduction ................................................................................................................................................... 4
Open .......................................................................................................................................................... 4
Objectives ................................................................................................................................................. 4
Complete Hardware Design and Fabrication ........................................................................................ 4
Real Time Operating System (RTOS) .................................................................................................. 5
Constant-time light sensing for multi-touch ......................................................................................... 5
64 RGB LED Display ........................................................................................................................... 6
Lux Sensus .................................................................................................................................................... 8
Theory of Operation .................................................................................................................................. 8
Embedded Implementation ....................................................................................................................... 9
Mathematical Model ............................................................................................................................... 10
Development Process .................................................................................................................................. 11
Technology review.................................................................................................................................. 11
Microcontroller Selection ................................................................................................................... 12
Real Time Operating System Selection .............................................................................................. 14
Board design ........................................................................................................................................... 17
CAD Selection .................................................................................................................................... 17
EAGLE ............................................................................................................................................... 18
Component Library ............................................................................................................................. 18
Schematic Layout................................................................................................................................ 19
Board Layout ...................................................................................................................................... 21
Gerber-fication .................................................................................................................................... 24
Panelization ......................................................................................................................................... 24
Manufacturing ..................................................................................................................................... 25
Software Design ...................................................................................................................................... 26
Software Tools Selection .................................................................................................................... 26
Tasks ................................................................................................................................................... 26
Integration ................................................................................................................................................... 29
Assembly ................................................................................................................................................ 29
Conclusion .................................................................................................................................................. 30
i|Page
Appendix ..................................................................................................................................................... 31
GNU General Public License.................................................................................................................. 31
Table of Tables
Table 1 - Acronyms in alphabetical order. ................................................................................................... iv
Table 2 - MCU Peripheral Requirements ................................................................................................... 12
ii | P a g e
Table of Figures
Figure 1 - Demonstration photo of the 8x8 RGB LED matrix capabilities with the common cathode
electrical schematic. The display is illuminated one row at a time, with the color assigned by
column. ............................................................................................................................................ 7
Figure 2 - Lux Sensus equation, relating LED junction voltage as the exponential decay from VDD at a
time constant determined by the quantity of incident photons. ..................................................... 10
Figure 3 - The constant time light sensing by ADC is more reliable and accurate than the variable time
digital input, measured against an incrementing counter. .............................................................. 11
Figure 4 - CadSoft EAGLE -Schematic with bus lines, power capacitors and labels. ............................... 20
Figure 5 - Top copper pour is VDD, with silkscreen, pads, vias and holes. ............................................... 21
Figure 6 - Bottom layer VSS copper pour. No SMD, just pins and vias. ................................................... 22
Figure 7 - All layers visible. ....................................................................................................................... 23
Figure 8 - Panelized view of all layers on 7.65" x 7.65". ........................................................................... 25
iii | P a g e
Acronyms
Table 1 - Acronyms in alphabetical order.
ADC
API
AVR
CAD
CPE
DMA
GPL
IDE
KiB
LED
MCU
MIPS
PCB
PIC
Analog to Digital Converter. A peripheral which measures an analog signal and returns a finite
value, for example, measuring 1 V of 3V by an 8-bit, 255-value ADC will return 85.
Application Programming Interface. A design document describing exterior/interface functions
of a software program, for use by other programs.
Atmel introduced this MCU with flash memory in 1996. The creators give no answer on the
meaning of AVR.
Computer-aided Design. A software suite which drafts manufacturing designs.
Computer Engineering. B.S. program and department of California Polytechnic State
University, San Luis Obispo.
Direct Memory Access. A MCU peripheral which automates the transfer of data between
memory addresses.
GNU is not UNIX General Public License. A copy-left agreement that assures open use of my
development with others.
Integrated Development Environment. A single software application which combines a source
code editor, compiler, linker, and often a programmer and debugger for development.
2^10 bytes = 1024 = 1 KiB, a unit of binary information storage. A strict definition, as the
kilobit (kB) SI unit may be 1024 or 1000 bits. Most MCUs are byte-addressable, with flash
memory segmented into pages of a few KiB each.
Light Emitting Diode. A semiconductor device which emits light.
Microcontroller Unit. An inexpensive, low power processor with full system-on-a-chip
capabilities. Most units include flash, RAM, internal oscillator and many peripherals.
Millions of instructions per second. Processing rate measurement unit.
Printed Circuit Board. Electronics board used for the secure mounting and electrical
connections of complex circuits in an affordable design.
Microchip’s MCU lines all refer to Peripheral Interface Controller.
Portable Operating System Interface [for UNIX]. An IEEE set of API standards and utilities
for portable use of UNIX programs.
PSYCD Psychology and Child Development. Two majors and a department of California Polytechnic
State University.
Pulse-width modulation. Varying the duration of pulses at a high-frequency to modulate the
PWM
power delivery rate. Averaged over time, a PWM signal can approximate any analog signal.
Random Access Memory. Fast and typically volatile storage for program data at run time.
RAM
POSIX
ROM
RTOS
SMD
Read Only Memory. Typically Flash memory, storing program instructions and initialized
variables.
Real Time Operating System. A small task-management program that offers priority control,
multiple tasks, event-driven processing and more in a small memory footprint.
Surface Mount Devices. Small circuit components with small pads which solder directly to the
surface of the PCB. Does not waste PCB area with through-holes, but hard to assemble.
iv | P a g e
Pithos, Open
Collective Objective
Pithos is the complete design of a microcontroller embedded system to accomplish light-sensing
using LEDs. It is created using open-source and free tools wherever possible. The open-source tool
selection, hardware selection, RTOS selection, LED as light sensors theory of operation, hardware design
and software design are key sections of this report.
The Pithos (Greek: jar) project demonstrates the wide scope of knowledge gained during my
years of computer engineering studies. This jar contains a full system: electrical schematic, surface
mounted device PCB layout, 16-bit microcontroller, a real time operating system, multiple tasks, and the
implementation of advanced solid state physics knowledge.
Lux Sensus (Latin: light feeling) is a compound name for multi-touch interactive display
technology using LEDs. It was developed by the CPE Capstone Winter 2009 – Spring 2010 Smart
Playground group from public domain knowledge regarding the use of LEDs as photodetectors.
Disciplines Implemented
From electrical engineering, Pithos requires circuitry for a relatively simple embedded system.
This includes the application-specific power supply for the MCU, current-limiting resistors for each LED
in the display, and pull-up resistors for in-circuit programming and debugging control of the MCU.
From computer engineering, Pithos is an embedded, microcontroller system with multiple tasks.
There are design advantages to understanding the costs of RTOS context switching and using floating
point on an integer arithmetic logic unit. Power use is decreased by disconnecting unused peripherals
from the clock propagation tree.
1|Page
From computer science, Pithos implements an open source real time operating system,
FreeRTOS. Thread-safe code is managed by the online software revision control system Google Code and
Subversion. Within the RTOS, there is a queue server for inter-process communication and each task is an
event-driven finite state machine. A touch processing task judges past and current values to detect touch
and sends instructions via the server to update the display data.
From solid state physics, Pithos uses LEDs as light sensors. The concept occurred during
Semiconductor Device Electronics with Dr. Braun, and was then implemented by the Smart Playground
CPE Capstone group1, funded by the CPE and PSYCD departments. LEDs as light sensors are prior art
since 20052. Usage as an interactive display fixture is also prior art3. The patent by Jeff Han covers LED
matrix displays, but uses an algorithm measuring reflectance off alternating lit rows, where Lux Sensus
uses ambient light.
“It is not once, nor twice, but times without number that the same ideas
make their appearance in the world.” – Aristotle.
From mathematics, this report models the current/voltage/time/light relationships necessary for
engineering with Lux Sensus. An exponential decay of junction voltage is based on junction volume,
temperature, doping, magnitude of the reverse bias, and intensity of the ambient light.
1
Smart Playground, CPE Capstone Winter 2009 to Spring 2010 http://smartplayground.wordpress.com/
2
Multi-touch sensing light emitting diode display and method for using the same, Jefferson Y. Han and
NYU, US Patent 7598949 http://www.google.com/patents/about?id=9AXJAAAAEBAJ
3
Fischtisch Intelligent Surface Lab http://www.fischtisch.de/index.php/Main/Lab
2|Page
From philosophy and biology, Pithos demonstrates the low cost and benefits of an open dispersal
of information. Open systems allow for the selection of creative solutions and the replacement of invalid
answers. They prevent stagnation of progress and monopolies on creative ideas. This project stresses its
open instruments of design, open medium of transmission and storage, and opened the implementation to
future modification by releasing information under GPL.
Preface and Gratitude
I chose computer engineering for the talents needed in solving future challenges. As computers
become smaller, smarter and cheaper; more solutions will become possible. Perhaps every local area or
object may soon communicate on networks of many levels - per user, per room, per building, per campus,
per town, per state, per country, per continent, per planet, per system, etc.
If I followed love, I would have studied aeronautical engineering. If I followed natural ability, it
would be physics. I do not see either study having a future comparable to computing. Physical limits for
computing are decades away, but other disciplines hit hard limits decades ago. Physics leads to a sharp
concentration on modeling a subset of reality, but the opportunity to implement future change is strongest
in computing.
In Winter of 2007, I enrolled in digital design under Professor Bryan Mealy. He introduced the
fundamental circuitry behind useful peripherals – astable multivibrator clocks, bistable flip-flops and
more. One day, he discussed the use of embedded systems in art and the gizmo variety of hobbyist
communities. The creativity necessary for designing a system from end to end feeds an insatiable thirst
for new knowledge and progress.
I now see computing machines as high-powered and purposeful artistic instruments, and
embedded systems as paving the path up to and beyond a trillion interconnected machines.
Nicholas J. Utschig
3|Page
Introduction
Open
Pithos is free as in freedom, so that mistakes, missteps or poorly implemented pieces may be
reviewed and corrected. This design process requires complete transparency and creation instruments free
of cost and licenses of use.
CadSoft EAGLE was used in hardware design. It is frequently used by hobbyists to produce
schematics, component packages and lay out PCBs. A plethora of component libraries, scripts and
tutorials exist to bring new users up to speed.
Microchip MPLAB compiled, programmed, and debugged the PIC24 MCU code. MPLAB is
provided for free and works with many in-circuit programmers and debuggers. The latest beta is Javabased and runs on Linux, OS X, and Windows.
Google Code held Pithos’ software revisions and development website. It is a portable, cloudbased and free service to organize group work on open source code. Hosting, version control, wiki page,
collaborative group aliases and issue tracking are included.
Objectives
Complete Hardware Design and Fabrication
In history, every significant computer system implemented new instructions or peripherals that
increased productivity and changed how software could be written. Stack machines trumped register
machines, and wire-wrapped transistors fell to integrated circuits.
As a tribute to the past, Pithos was designed with its own hardware from the components up. It is
more interesting than using a development board and offers more opportunities for artistic merit.
4|Page
Real Time Operating System (RTOS)
MCUs offer low power processing at low costs. Many MCUs process hundreds of MIPS,
interface with external memory using DMA or inter-chip protocols like SPI and I2C. This great power
would be squandered on polling loops and blocking calls without a simple operating system.
Embedded systems are largely event driven. Events with critical response times, such as a display
refresh or user prompts, cannot be reliably polled. Typical processing includes long waits punctuated by
short interrupt service routines. A real time operating system provides embedded systems with the ability
to context switch threads of processing to best utilize available resources by priority.
A sufficiently simple real time operating system would allow multiple priority tasks, semaphores
and mutexes, message queues, events and timers. Pithos implements the widely-ported FreeRTOS,
released under GNU’s Not Unix General Public License4. The associated FreeRTOS website5 and eBook
documentation6 covers the OS design from an introductory level to a high level, and introduces proper use
of embedded RTOS in MCUs. FreeRTOS has footprints of ~4 KiB code and ~1 KiB memory which can
fit on the tiniest 8-bit MCU ROMs and RAMs.
Constant-time light sensing for multi-touch
Smart Playground, a Computer Engineering Department Senior Capstone project, used LEDs as
light sensors under my technical guidance. The implementation was only a proof of concept, with just
enough technology to get it working. The worst issue with the simple implementation was a non-constant
4
The GNU General Public License http://www.gnu.org/licenses/gpl.html, also found in the Appendix.
5
The FreeRTOS Project http://www.freertos.org/
6
FreeRTOS Documentation http://www.freertos.org/Documentation/FreeRTOS-documentation-and-
book.html
5|Page
duration of light sensing. In low light, longer measurement periods occur and cause noticeably slower
refresh rates.
Pithos implements a great improvement for Lux Sensus. Constant-time sensing is achieved by
using eight ADC channels on the PIC24 to measure the junction voltage decay by photon-stimulated
recombination. (See the detailed theory of operation in the Lux Sensus section on page 7.)
64 RGB LED Display
The RGB display engages all visible spectrum sensors in humans. Although it is low resolution,
the sixty-four pixel display is bright, packaged small, and inexpensive. The prices are as low as $10 from
an Asian distributor.
The display is common-cathode, where all twenty-four LEDs (R,G,B x 8) in a row are shared.
Each color’s anode is shared by column. This design reduces the number of package pins from 384 to 32,
but requires multiplexing by quickly cycling among rows to sustain the persistence of vision.
Pithos is designed to provide each LED a maximum of 20 mA for the best tradeoff between
brightness and total lifetime. When every color of every LED in one row is enabled at 20 mA and 3.3
VDD, the total display power usage is 1.58 W. When all LEDs are on 12.64 W is lost to entropy.
Pulse-width-modulation on the PIC24 allows the variation of average power delivered to the LED
and resistor circuit. Varying the intensities of the red, green, and blue channels allows emulation of the
visible spectrum between the peak wavelengths of the red and blue LEDs.
6|Page
Figure 1 - Demonstration photo of the 8x8 RGB LED matrix capabilities with the common
cathode electrical schematic. The display is illuminated one row at a time, with the color assigned
by column.
7|Page
Lux Sensus
LEDs may be used as photodiodes, allowing the single component to serve two purposes. This
ability has been implemented in bi-directional half-duplex communication between devices7, proximity
detectors, and matrix displays. The following paragraphs describe the theory and application of Lux
Sensus in detail.
Theory of Operation
Light Emitting Diodes are made from solid semiconducting material, which by their nature
require a threshold of energy for charge carriers to freely travel amongst the atomic lattice. This section is
heavy with analogy that qualitatively relates the solid-state physics of semiconductors.
The periodic positions of atoms in the lattice and the distances between fellow atoms follow
quantum rules and limit the available energy states for electrons into bands, separated by a gap of
impossible states. The electrons must receive or emit this amount of energy to cross the gap and be freed
or captured. When an electron is freed, it leaves a hole in its prior atomic bond. These holes are opposite
in charge but otherwise perform the same as electrons, traveling amongst the lattice by replacing the
hole’s missing electron with one from a neighbor atom’s bond. Extra electrons may be introduced by
donor impurity atoms which have more than enough electrons to bond with neighbor atoms, and extra
holes from acceptor impurities with too few electrons to share. Thus, we have the charge carriers: holes
and electrons, the dopants: donors and acceptors, the energy band gap, and the atomic lattice.
7
Dietz, Paul, William Yerazunis, Darren Leigh (2003). "Very Low-Cost Sensing and Communication
Using Bidirectional LEDs". Mitsubishi electric research laboratories.
http://www.merl.com/papers/docs/TR2003-35.pdf
8|Page
When emitting light, the junction operates with forward voltage bias, driving negative electrons
from the n-doped cathode to the p-doped anode and positive holes from the anode to cathode. These holes
and electrons may recombine at the junction and release their energy as photons and phonons – light and
heat.
When the junction is reverse-biased, the depletion region expands on both sides of the junction.
In the depletion region, it is energetically preferable (to counteract the reverse bias) for the majority
charge carrier to diffuse away and leave the ionized impurities behind, stuck in the lattice. This separation
of charge creates a capacitor. The expansion of the depletion region expands the cross-section of the
junction as a photon target. The terminals of the LED are then disconnected from the circuit using the
high-impedance mode of the microcontroller pin. The trap is armed.
When a photon with sufficient energy to free a charge carrier is collected in the depletion region,
the charge carrier accelerates to join the other side of the junction. Red LEDs have the smallest energy
band gap and thus capture more photons than higher energy green or blue junctions. Photons cause the
capacitor to leak charge, a measure of voltage across the LED. A higher intensity of photons causes a
higher recombination current and faster voltage drop. A low intensity of photons causes a lower current
and slower voltage drop. This is measurable using a MCU’s ADC or an I/O pin with a timer.
Lux Sensus uses the energetic properties of semiconductors: temperature, light, heat, and chargecarrier potential with the knowledgeable application of microcontrollers to measure the intensity of
photons that intercept the semiconductor junction.
Embedded Implementation
The following algorithm describes the constant-time Lux Sensus theory of operation. It is
executes faster than 10 Hz to decrease response delay.
1. Hold the common cathode at VDD.
9|Page
2. Hold each red LED anode at VSS for at least a microsecond, so that the junction fully
depletes of charge carriers in reverse bias.
3. Set the output pin on the red LED anode to high-impedance mode.
4. Make a measurement of the voltage using the ADC.
5. After an adjustable time period – long enough to capture the decay in voltage that can be
measured by the ADC, short enough to capture the voltage still decaying – measure the
voltage again.
6. Calculate the photo-current. This capacitance is small, but so is the photo current.
7. Store measurement and yield.
Every pixel may have a different capacitance / sensitivity, so per-pixel calibration in software is a
necessary filtering step. When used for multi-touch, the shadows of hands/arms must be filtered to use
only the most shadowed pixels.
Mathematical Model
The junction voltage measurement is performed by the ADC as a function of time, t. To save
power, only two measurements need to be made. The first measures the full VDD voltage before step 3,
when the reverse bias has saturated. The second measures the junction voltage at a later time, typically 110 microseconds, to establish the decay rate of the voltage.
The model is equivalent to an RC circuit in exponential decay, where the capacitor is the LED
junction capacitance C and the resistor to ground is the equivalent of the inverse of light intensity L. See
the equation in Figure 1 for the junction potential as a function of time and light intensity.
−𝒕𝑳⁄
π‘ͺ
𝝋(𝒕) = 𝑽𝑫𝑫 𝒆
Figure 2 - Lux Sensus equation, relating LED junction voltage as the exponential decay
from VDD at a time constant determined by the quantity of incident photons.
10 | P a g e
The voltage threshold of digital input pins, VIL, will trigger after a variable amount of time. This
the horizontal line in Figure 2, intersecting the covered and uncovered decay voltages at two times. A
constant-time measurement uses the MCU’s ADC to measure the junction voltage after a specified time.
This is the vertical line at the sample time in Figure 2.
Figure 3 - The constant time light sensing by ADC is more reliable and accurate than the
variable time digital input, measured against an incrementing counter.
Development Process
Technology review
Components, manufacturers and hobbyist software all cater to projects on the scale of Pithos. The
“Makers” community has a knowledge base of many tutorials8 on creating embedded system projects.
8
SparkFun Tutorials – Lecture 8- Eagle: Schematics http://www.sparkfun.com/tutorials/108
11 | P a g e
Microcontroller Selection
Multiple companies offer thousands of MCU varieties. The selection-space of all MCUs is vast
and dense. The careful selection of the Pithos MCU is critical to achieving all objectives.
Peripherals
Multiple MCU peripherals are necessary for Lux Sensus and FreeRTOS implementation. These
requirements constrained the search space when selecting the MCU.
Table 2 - MCU Peripheral Requirements
Peripheral
Quantity
Reason
PWM
24 outputs
Variable control of light output on each column’s RGB.
ADC
16 inputs
Constant-time measurement of photonic absorptive recombination.
Timers
>0
RC Clock
> 1 MHz
LDO Regulator
5V
Code Space
>10 KiB
FreeRTOS requires a Tick timer to moderate tasks.
Internal and inexpensive, fast enough to handle the RTOS overhead and
interactive calculations of Lux Sensus.
Low drop out regulator for power input regulation. On-chip, supports
wide range of common logic voltages.
RTOS overhead is ~4 KiB, and display/graphics memory.
Alternative MCU Sources
Atmel is a well known MCU manufacturer, with many inexpensive and low-power 8, 16 and 32bit MCUs. Their AVR processor was the first with on-chip flash memory, which eases development by
using a boot loader that starts code from the flash instead of a programmer and ROM. The widespread
Italian Arduino project uses the 8-bit AVR as a simple hobbyist development board. Atmel offers startup
board kits and consumer-supported internal software development environments.
STMicroelectronics is a European company with a wide range of MCUs, from 8-bit to the ARM
Cortex M3. Many devices matched the necessary requirements of this project but their cost was twice that
of Microchip’s PICs. The STM32 line of ARM Cortex M3s has superfluous processing power for the
12 | P a g e
design of Pithos, and the 8-bit line does not have enough of the required peripherals. The STM32F103 has
sixteen ADC channels and is the best choice from STM.
Atmel and STM’s offerings require an independent programmer/debugger interface like
OpenOCD9 with JTAG-supporting hardware. These are interesting projects worthy of consideration, and
in a fully open-source design, they should have been implemented. The added time-costs of producing the
JTAG hardware and assembling the chain of software to program/debug is prohibitive compared to
Microchip’s MPLAB and PICKit integrative suite.
Microchip PIC24FJ256GB210
Microchip is a semiconductor company based in Arizona, known for their PIC series of MCUs.
They are known in the hobbyist community for creating intermediate to advanced MCUs. Microchip
offers MPLAB, a full development environment including compiling, revision control, device
programming and debugging via Microchip PICKit in-circuit serial programmers. MPLAB X is now in
public beta, written entirely in portable Java.
Selection of a chip which meets all my design requirements was completed in three minutes with
a flash tool on Microchip’s website. 10 Other manufacturers had me searching through multiple branches
of MCU lines and manuals, taking almost an hour to conclude that the perfect MCU was not offered.
I recommend Microchip’s MPLAB software, documentation and design. Their weakest points are
the cost of MCU development boards at over one hundred dollars each, and their lack of a portfolio of
example projects. Microchip would be a contender for the embedded MCU market if they produced
9
10
Open On-Chip Debugger http://openocd.berlios.de/web/
Microcontroller Product Selector (MPS)
http://www.microchip.com/productselector/MCUProductSelector.html
13 | P a g e
development boards at a competitive cost to development boards offered by Texas Instruments ($5), and
were better integrated with a RTOS.
Real Time Operating System Selection
The selection of the RTOS was not as difficult as selecting the PIC24. Any RTOS that could run
on the PIC24 could achieve the Lux Sensus objectives. There are a surprising number of embedded, open
sourced RTOS available. All are roughly POSIX-compliant in regard to multiple tasks, the lifecycle of a
task, and inter-task communication and cooperation. All use a ‘tick’ timer for system events and blockallocated memory to minimize the time spend for dynamic allocation.
The search began with the Wikipedia list of RTOSs11, where I found each of the three I had prior
knowledge of. I narrowed the list to the most promising candidates: OSD TNKernel, SDPOS, Real Time
Linux, ERIKA Enterprise and FreeRTOS.
TNKernel
TNKernel (Tiomkin Kernel) is released under a simple and open-source license by the author,
Yuri Tiomkin. It offers the full array of message queues, threaded tasks and priorities. A task is a function
with a continuous loop that yields to the task scheduler at least once on every iteration. The collective
objective of this project is to forever be an open design; therefore I am timid to integrate an OS with a
copyright which may be recalled in the future. This factor weighed against the well-developed TNKernel.
Small Devices Portable OS
Small Devices Portable OS12 (SDPOS) is non-POSIX, but this is only a mental stumbling block
on learning the architecture. It uses inter-task signals to block/wake other tasks, and tasks can recursively
11
List of real-time operating systems, Wikipedia, http://en.wikipedia.org/wiki/List_of_real-
time_operating_systems
14 | P a g e
call themselves. Community support is small and sedentary. There is no forum, and only a help email
address. The non-POSIX design may create difficult questions and require technical support. SDPOS is
not a highly active project, and I fear long response times for my questions will delay code development
in an RTOS environment.
Real-Time Linux
Real-Time Linux13 is a modified preemptable version 2.6 of the eponymous kernel. Comfort with
this POSIX system is high, as the terminology and OS objects are familiar. This may be the most memory
bloated of all the reviewed RTOS, as the style of high-power multi-core multi-user programming does not
suit low-power embedded systems. Many system calls like fopen and fork will break the system. Kernel
and user spaces still exist in the code priority, all of which make RTLinux too large of a port to
comfortably load on the PIC24.
ERIKA Enterprise
ERIKA Enterprise14 is a well-supported and well-ported RTOS. It is based on the OSEK API, a
European open-standard on RTOS for the automotive industry. The most significant advantage of ERIKA
is the Eclipse IDE extension. Eclipse is Java based, like Microchip’s MPLAB, allowing portable
development. It also handles multi-threaded multi-cores, which boggles my mind. This allows critical
tasks to be partitioned onto their own processor! All 16-bit PICs are supported, as well as the Atmel
AVR5 and a handful of ARM-based microcontrollers. ERIKA also supports MPLAB, Microchip’s IDE.
12
Small Devices Portable Operating System http://www.sdpos.org
13
Real-Time Linux https://rt.wiki.kernel.org/index.php/Main_Page
14
ERIKA Enterprise http://erika.tuxfamily.org/
15 | P a g e
ERIKA came in a close second place. It lost only due to the quality of FreeRTOS’s documentation and
tutorials.
FreeRTOS
Both FreeRTOS and ERIKA were optimal RTOS solutions, and left the other operating systems
far behind. There were many small advantages to selecting FreeRTOS. Most important was the
documentation and introduction to RTOS design and theory of operation. Multi-threaded embedded
systems cannot be picked up after hello world – ticks, queues and events must be well understood to be
implemented properly.
FreeRTOS has been ported to the most MCUs of any comparative RTOS. The community rallies
around creating example programs and ports for development boards, and a full example program exists
for every IDE/MCU combination. The whole of the kernel is only three source files.
The documentation is excellent at every level of detail. A full searchable API exists online, as
well as an RTOS introduction, tutorials to get started, and implementation of advanced tasks. I can reach
information on the advanced topics of tracing the MCU performance and supported network stacks in a
click that would take minutes to find in other RTOS docs. PDF and eBook manuals are available for a
reasonable textbook fee.
16 | P a g e
Board design
CAD Selection
Cal Poly manufacturing courses offer experience with NOVARM DipTrace15, Cadence16 OrCAD
and Cadence Allegro. I have used CadSoft Eagle17 briefly on a quick-spin project, loading existing
schematics and layout to output Gerber files for fabrication. All PCB CAD programs have large learning
curves, but perform the same functions:
ο‚·
Build component libraries.
ο‚·
Draw electrical schematics.
ο‚·
Design board dimensions and holes.
ο‚·
Place components.
ο‚·
Route circuitry.
ο‚·
Output manufacturing files.
Most full-featured PCB CAD suites are prohibitively expensive, costing tens of thousands of
dollars in whole. As Pithos only requires a six square inch board, more free options are available.
DipTrace and EAGLE are the two frequently used hobbyist CAD suites. EAGLE’s free, non-profit
version allows two layers and a 4”x3” board. A $125 version allows six layers and a 6”x4” board.
DipTrace’s free, academic version allows two layers and 500 pins. The best offer is DipTrace’s full
15
DipTrace http://www.diptrace.com
16
Cadence http://www.cadence.com/products/orcad/Pages/default.aspx
17
CadSoft EAGLE http://www.cadsoftusa.com/
17 | P a g e
featured suite for thirty days. One month is enough time to complete two spins of a board. EAGLE was
chosen over DipTrace due to the amount of contemporary component libraries and tutorials available.
The gEDA project18 is an electronic design automation suite released under GPL with a twelve
year history. The community has collected a library of components19 including the package for this PIC24
but not the schematic connections. I have used the independent applications of gEDA but not the full suite
from beginning to end. In the past, installation and building process was difficult for amateurs. gEDA is
now commonly included in Linux distribution’s application repositories. I did not select gEDA because of
prior difficulty with its tools and the smaller number and quality of community created component
libraries. It is a maturing suite which should be considered in the future.
EAGLE
EAGLE has a simple graphical user interface with command line for lengthy commands. Shortcut
keys can be customized. I learned the user interface in less than an hour, but the tricks for proper PCB
layout took three complete board revisions from schematic to routing. This section walks through all
stages of PCB design with EAGLE.
Component Library
The most time-intensive stage of fabricating a PCB can be designing components and their solder
footprints. The great advantage to EAGLE is a truckload of community-created libraries which include
modern components. The PIC24 footprint and schematic drawing by Dodotronic20 is on CadSoft’s library
18
gEDA Project, Electronic Design Automation http://www.gpleda.org/
19
gEDA Symbols and Footprints and Stuff http://www.gedasymbols.org
20
Dototronic, Italian Hobbyist, http://www.dodotronic.com/
18 | P a g e
archive21, saving an hour of tedious work. I used SparkFun’s library for 0402 capacitors and resistors, and
the 0.1” connectors for power and programming/debugging. The connector pins are each slightly offset to
lock the connectors in place during assembly.
Schematic Layout
In this step, all connections are made between the components. Begin with stubbing power lines
to all devices by attaching a short wire to a power supply symbol. Naming net lists VDD and VSS and
adding a label is preferred over laying power lines across the landscape. Neatness helps errors stand out,
such as incorrect or missing connections. The schematic has no relationship to how the parts will be
physically arranged. Run electrical rule checks often to keep track of missing net lists, unattached power
lines and more. There should be no errors before board layout begins.
The MCU has specific power needs. Datasheets contain application notes on circuit design rules
with instructions on noise-filtering capacitors placed close to the VDD/VSS pins on the MCU, pull up or
down resistors, maximum voltages on pins, brown out voltages, etc.
The LEDs vary in turn-on voltages, from red at 1.7V to blue at 3.2V. Current limiting resistors
are placed in series with the LEDs to match the 3.3V VDD to the recommended 20 mA current. Three
colors per column create many connections to the MCU. Buses connect these sets of lines, because the
output/input ports are grouped together on the MCU. When a bus or any disjoint signal is connected to the
MCU, it should be labeled with the signal.
The ADC inputs connect to the common cathodes of each row. These are used for the voltage
measurement across the reverse biased junction. When they are not measuring, they output VSS to drain
the LED current.
21
CadSoft EAGLE’s Library Archive http://www.cadsoft.de/download.htm
19 | P a g e
The PICKit 3 in-circuit serial programmer is Microchips proprietary programmer. It drives the
MCLR pin to reset the MCU, two programming lines, and VDD, VSS to control logic levels between the
USB 5 V power and the MCU’s 3.3 V.
Figure 4 - CadSoft EAGLE -Schematic with bus lines, power capacitors and labels.
20 | P a g e
Board Layout
Figure 5 - Top copper pour is VDD, with silkscreen, pads, vias and holes.
Board layout combines artistic merit, experience gained from poor judgment, and patience. It
begins with placing the bottleneck component – the MCU. It has the most connections and the smallest
pad size, so it must be centrally located. Airwires show the direct connections between pads, for the
purpose of rotating components to minimize traces crossing over traces. The power stabilizing capacitors
must be placed as close as possible to the VSS/VDD chip inputs, but vias are cumbersome and large.
21 | P a g e
Auto-routing in EAGLE is poor to bad. Too many vias are created as the algorithm tries to march
right to its destination, and then toggles sides as it tries to shorten the trace length. Power capacitors must
be hand routed, and the design rules adjusted to match the pitch of fine-leaded SMD. SparkFun has
created a decent design rule file, but the drill and trace sizes were too large to start with. These design
rules can be saved, shared, and automatically applied during auto-routing.
Figure 6 - Bottom layer VSS copper pour. No SMD, just pins and vias.
The final step in board design is ground and power plane copper pours. These minimize the cost
to the manufacturer by protecting most of the copper on the board. Copper etching chemicals are
expensive to recycle. The copper pours also make for a professional appearing board. Islands of copper
22 | P a g e
may remain unconnected to their signal, and float. Caution should be exercised if the design may be
impacted by these floating planes, such as capacitive touch zones.
Figure 7 - All layers visible.
EAGLE’s auto-router requires fine tuning for fine surface mount boards. It is recommended to set
the minimum width and distance to a few mils above the manufacturer’s limits, for the best
manufacturability. Using a 1 mil routing grid allows the trace to flexibly flow around components and
vias but increases the processing time. Using moderately sized vias far apart from each other improves
drill hit accuracy and decreases expensive broken drill bits. Vias made too large will block traces during
23 | P a g e
auto-routing. The EAGLE smash tool will move the silkscreen name and value of components to
locations free from vias and solder for visible printing.
Gerber-fication
EAGLE comes with automated scripts to produce every type of manufacturing file with a few
clicks. Generally, Excellon drill tables and gerber formats are the most widely accepted. I had no errors or
trouble outputting my board for fabrication on either of my board revisions.
Panelization
PCB manufacturers will take all of your money if given the opportunity. If you mention that
school or work is paying for your boards, they may charge you hundreds of dollars for just a few dozen
square inches. The best way to save money on fabrication is to find deals like www.4pcb.com, who offer
$33 a board for four boards, with the fifth board “free”. When the board use area is maximized by
panelizing 3 x 3 on an 8”x8” board, then the divided total cost per board is $3.50. See Figure 8 for the
panelized Pithos Gerber files.
Use GerbMerge22 to panelize PCB layouts, released under GPL. GerbMerge is a python program
that automatically tries to fit your requested number of boards in the requested area, and it is made to
work with EAGLE output. The free version of EAGLE has a tiny allowable board area, otherwise it is
possible to copy and paste the boards in place. GerbMerge requires ten minutes to install the necessary
build environments on a UNIX system, ten minutes manually editing a configuration file, and ten minutes
to fine tune the process to create perfect Gerber files. It takes seconds to run a pre-written layout, or never
halts while it tries random configurations to maximize the placement efficiency.
22
GerbMerge, a gerber combination tool. http://claymore.engineer.gvsu.edu/~steriana/Python/gerbmerge/
24 | P a g e
Figure 8 - Panelized view of all layers on 7.65" x 7.65".
Manufacturing
Print out the board designs at 1:1 scale and confirm each component matches its footprint. On my
first spin of the Pithos board, I accidentally used a 14mm x 14mm TQFP100 instead of a 12mm x 12mm.
Fortunately, I only made a sample and it lives on as an intricate beer coaster.
There are many recommended PCB manufacturers available at a moderate cost. I have compiled
this list from my own experiences and the recommendations of colleagues:
ο‚·
Advanced Circuits, Colorado, www.4pcb.com
ο‚·
Silver Circuits, Malaysia, www.custompcb.com
ο‚·
Pad2Pad, New Jersey, www.pad2pad.com
25 | P a g e
ο‚·
PCB-POOL, Ireland, www.pcb-pool.com
Software Design
Software Tools Selection
Software development occurs in the IDE. An ideal IDE will assist code development,
organization, and ease of use. Microchip offers the complete IDE suite for their MCU line, MPLAB. The
latest beta is a Java application, which is portable code and it has been tested on an OS X 10.6 laptop,
Ubuntu 10.10 desktop, and Windows XP in a virtual machine on OS X. There is no problem compiling or
programming on different platforms.
MPLAB ties in with the software version control system Subversion, all part of the Google Code
package. All added source files can be committed and updated directly from the IDE. I also used terminal
SVN in Ubuntu and OS X and TortoiseSVN in Windows. Google Code allowed me a constant and
remote backup location for my code, and is ideal for peer development with a wiki and email aliases for
the project.
Tasks
This RTOS multi-threaded software design flow is layered and flexible for future additions. The
scheduler is cooperative which allows a task to run until it blocks, yields, or the system responds to an
interrupt. When the execution returns to the scheduler, it switches to the highest priority task that is ready
to run.
The highest priority tasks are operating system fundamentals: the scheduler and timer
manager/delegate. System service tasks are in the middle of all priorities: communication server, display
driver and light measurement. The lowest priority tasks consume processing power for long intervals, and
should run last. They are applications like games. Every task communicates via the server task, which
easily expands to send common data to multiple tasks.
26 | P a g e
Scheduler Task
The OS scheduler has the first priority, and always preempts other tasks to choose the next task
that is ready to run.
Timer Task
The second priority task is the timer, which manages all OS timers and callbacks. Callbacks are
as brief as possible, posting events or messages to queues for the consuming tasks to handle. The callback
functions may neither call subfunctions that block, nor block themselves. If the high priority timer task
blocks, high latency or deadlock may occur as no other timer callback may execute until the block is
resolved.
Display Task
The display task is a medium priority service task, driven by a timer. The rows must be cycled
fast enough to maintain the persistence of vision (>120 Hz) and a high PWM switching frequency (>1
kHz) for creating videos of Pithos without strobe-light effects. The display task does not churn and burn
while refreshing the screen. Instead, a display refresh occurs using a finite state machine which changes
states (illuminating the next row with the current data) by an event posted to the display message queue
by a timer. As the LEDs are used to display and detect light, a shared mutex is acquired before a row is
illuminated and released afterwards.
The display task maintains an 8x8 array of pixel colors as unsigned 32 bit integers. Each R,G,B
color gets 8-bits of intensity for pulse-width-modulation. 255 is 100% and 0 is 0% duty cycle. This pixel
color data type displays approximately16 million colors. The display subscribes to the server task for
updates of pixel color data, and processes the change via its message queue.
LuxSensusTask
Touch interpretation is a medium priority service task that is event driven by two timers and
blocks on a mutex. The display LEDs can either sense light or display, so a mutex is shared by the display
27 | P a g e
task and Lux Sensus task. These tasks acquire the mutex before starting their timers and release after light
measurement or after drawing one row of lights.
A 10Hz timer posts a SENSE_LIGHT event to the LuxSensus’s queue. This wakes up the task,
and it attempts to acquire the shared mutex. When successful, the output pins are configured to reverse
bias the LED junctions and the first timer is started. This operation charges the LED junction.
The first timer callback triggers an ADC measurement and posts the value to the server task as a
VDD reference. The callback then configures the outputs for high impedance, starts the second timer, and
exits. This operation stores a known voltage because VDD changes with the battery charge, and then
begins the junction’s exponential decay by incident photos.
The second timer callback captures the decayed voltage and posts it to the server task, then
releases the shared display mutex so that the display task may continue drawing.
The body of the task is subscribed to the light measurement values from the server, and blocks
while waiting on that queue. When values are available, it processes the zones to find the points of multi
touch and returns these touch points to the server for distribution.
Server Task
The server task handles producer/consumer tasks, allowing tasks to subscribe and/or publish data.
All data types and their block sizes are defined for the server. Each consumer task allocates a block
memory pool with blocks the size of a message. The consumer then subscribes this block pool address
and the requested data type to the server. When the server obtains the data, it passes it to the queues of all
subscribers. This expandable inter-task communication method is responsible for setting new pixel colors
and returning the current light intensities of each pixel for processing.
If the server task was not implemented, every new broadcasted data would require adding its API
to each related task. Instead, we subscribe producers/consumers with a single call.
28 | P a g e
Application Task
Pithos is a platform for using light-sensing LEDs. This cumulates in applications which process
touch data to apply a game or display transition. Applications may be graphically intensive, or use
floating point arithmetic which drains processing cycles. Most applications will likely execute once on a
touch event or full screen-refresh event. An application may use multiple tasks, and all tasks are to be
sorted by their relative priority at the lowest overall priority, due to the rarity of their execution and
probable high processing costs.
Idle Task
The lowest priority idle task is always running and never blocks. Pithos is very power intensive,
using up to 1.6 W by the LED display alone. Power savings on the MCU will not be a significant benefit,
but power saving modes are easy to implement.
When there are no other tasks ready to run, the idle task returns to execution. Its task loop
repeatedly sets the MCU into Idle Mode. The CPU will stop executing, but all peripherals and clocks will
continue running unless the “Stop in idle” bit is set. There is no delay in responding to any interrupt from
Idle Mode.
Integration
Assembly
Digi-Key and Mouser stocks all resistors, capacitors and PIC24 MCUs. Futurlec stocks all 8x8
RGB LED matrices. Advanced Circuits at 4pcb.com has approved and manufactured the designed boards.
Capacitors and resistors were chosen in 0402 packages for their small footprint and cheapness.
All SMD are installed under a microscope with SMD soldering tips and tweezers.
29 | P a g e
Conclusion
The open-source design and development of an MCU-based RTOS system which characterizes
and achieves constant-time multi-touch is documented. Critical software components such as CadSoft
EAGLE and Microchip MPLAB are not licensed under GPL or similar copy-left licenses. They are free
as in beer but not free as in freedom, but were selected for their wide use in the community of hobbyist
embedded systems. Alternatives such as gEDA and Eclipse\OpenOCD are explored.
The scope of this project is large. Many tasks should be delegated among localized experts. The
most valuable knowledge I have learned from designing this device is insight in program management.
Once a solution is designed, it can be subdivided into independent tasks. The design process lays down
the trunk, roots and branches of the product tree. The branches naturally subdivide the project into
independent domains. A full project incorporates all the work from cradle to shipping box. Members are
selected for the team to best complete this project, then their efforts are directed and tasks completion
dates projected to keep the work flow at the same pace. Costs must be managed and the group needs to
make a net profit before funds run out. Without project control, there is nothing to show at the end of a
great deal of hard work.
To demonstrate hypothetical delegation in this project, two hardware engineers select the
necessary components to meet project requirements, then design and peer-review the schematic and PCB
layout. They order the boards and schedule delivery of components as production managers. Three
software engineers design the data types, data flow and algorithms to achieve the defined application.
They become local experts in constructing independant tasks, and defining APIs between tasks. Two
computer engineers write drivers to wrap each peripheral and tune the light-sensing algorithm timing. A
marketing and sales representative uses funds to advertise and build sales contracts. A chief technology
officer maintains the product vision and smoothes out design irregularities while managing the
development team. This is only the innermost layer of development in an onion of complexities that
companies construct as they grow.
30 | P a g e
Appendix
GNU General Public License
This project is released under GPL, from http://www.gnu.org/licenses/gpl.html. The license is a
great read for legal, philosophical and computer science reasons. I am compelled to include it in my
written report.
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this license document, but
changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for software and other kinds of
works.
The licenses for most software and other practical works are designed to take away your freedom
to share and change the works. By contrast, the GNU General Public License is intended to guarantee
your freedom to share and change all versions of a program--to make sure it remains free software for all
its users. We, the Free Software Foundation, use the GNU General Public License for most of our
software; it applies also to any other work released this way by its authors. You can apply it to your
programs, too.
When we speak of free software, we are referring to freedom, not price. Our General Public
Licenses are designed to make sure that you have the freedom to distribute copies of free software (and
charge for them if you wish), that you receive source code or can get it if you want it, that you can change
the software or use pieces of it in new free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you these rights or asking you to
surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software,
or if you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass
on to the recipients the same freedoms that you received. You must make sure that they, too, receive or
can get the source code. And you must show them these terms so they know their rights.
Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the
software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains that there is no warranty for
this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to authors of previous versions.
Some devices are designed to deny users access to install or run modified versions of the software
inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area
31 | P a g e
of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have
designed this version of the GPL to prohibit the practice for those products. If such problems arise
substantially in other domains, we stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents. States should not allow
patents to restrict development and use of software on general-purpose computers, but in those that do, we
wish to avoid the special danger that patents applied to a free program could make it effectively
proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and modification follow.
TERMS AND CONDITIONS
0. Definitions.
“This License” refers to version 3 of the GNU General Public License.
“Copyright” also means copyright-like laws that apply to other kinds of works, such as
semiconductor masks.
“The Program” refers to any copyrightable work licensed under this License. Each licensee is
addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.
To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring
copyright permission, other than the making of an exact copy. The resulting work is called a “modified
version” of the earlier work or a work “based on” the earlier work.
A “covered work” means either the unmodified Program or a work based on the Program.
To “propagate” a work means to do anything with it that, without permission, would make you
directly or secondarily liable for infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying, distribution (with or without
modification), making available to the public, and in some countries other activities as well.
To “convey” a work means any kind of propagation that enables other parties to make or receive
copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not
conveying.
An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a
convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells
the user that there is no warranty for the work (except to the extent that warranties are provided), that
licensees may convey the work under this License, and how to view a copy of this License. If the
interface presents a list of user commands or options, such as a menu, a prominent item in the list meets
this criterion.
1. Source Code.
The “source code” for a work means the preferred form of the work for making modifications to
it. “Object code” means any non-source form of a work.
32 | P a g e
A “Standard Interface” means an interface that either is an official standard defined by a
recognized standards body, or, in the case of interfaces specified for a particular programming language,
one that is widely used among developers working in that language.
The “System Libraries” of an executable work include anything, other than the work as a whole,
that (a) is included in the normal form of packaging a Major Component, but which is not part of that
Major Component, and (b) serves only to enable use of the work with that Major Component, or to
implement a Standard Interface for which an implementation is available to the public in source code
form. A “Major Component”, in this context, means a major essential component (kernel, window
system, and so on) of the specific operating system (if any) on which the executable work runs, or a
compiler used to produce the work, or an object code interpreter used to run it.
The “Corresponding Source” for a work in object code form means all the source code needed to
generate, install, and (for an executable work) run the object code and to modify the work, including
scripts to control those activities. However, it does not include the work's System Libraries, or generalpurpose tools or generally available free programs which are used unmodified in performing those
activities but which are not part of the work. For example, Corresponding Source includes interface
definition files associated with source files for the work, and the source code for shared libraries and
dynamically linked subprograms that the work is specifically designed to require, such as by intimate data
communication or control flow between those subprograms and other parts of the work.
The Corresponding Source need not include anything that users can regenerate automatically
from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of copyright on the Program, and
are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a covered work is covered by this
License only if the output, given its content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey, without conditions so
long as your license otherwise remains in force. You may convey covered works to others for the sole
purpose of having them make modifications exclusively for you, or provide you with facilities for running
those works, provided that you comply with the terms of this License in conveying all material for which
you do not control copyright. Those thus making or running the covered works for you must do so
exclusively on your behalf, under your direction and control, on terms that prohibit them from making
any copies of your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the conditions stated below.
Sublicensing is not allowed; section 10 makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological measure under any applicable
law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such measures.
33 | P a g e
When you convey a covered work, you waive any legal power to forbid circumvention of
technological measures to the extent such circumvention is effected by exercising rights under this
License with respect to the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's users, your or third parties' legal
rights to forbid circumvention of technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you receive it, in any medium,
provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any non-permissive terms added in accord with section
7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy
of this License along with the Program.
You may charge any price or no price for each copy that you convey, and you may offer support
or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to produce it from the
Program, in the form of source code under the terms of section 4, provided that you also meet all of these
conditions:
a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
b) The work must carry prominent notices stating that it is released under this License and any
conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact
all notices”.
c) You must license the entire work, as a whole, under this License to anyone who comes into
possession of a copy. This License will therefore apply, along with any applicable section 7 additional
terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives
no permission to license the work in any other way, but it does not invalidate such permission if you have
separately received it.
d) If the work has interactive user interfaces, each must display Appropriate Legal Notices;
however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent works, which are not by
their nature extensions of the covered work, and which are not combined with it such as to form a larger
program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the
compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's
users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not
cause this License to apply to the other parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of sections 4 and 5,
provided that you also convey the machine-readable Corresponding Source under the terms of this
License, in one of these ways:
34 | P a g e
a) Convey the object code in, or embodied in, a physical product (including a physical
distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product (including a physical
distribution medium), accompanied by a written offer, valid for at least three years and valid for as long
as you offer spare parts or customer support for that product model, to give anyone who possesses the
object code either (1) a copy of the Corresponding Source for all the software in the product that is
covered by this License, on a durable physical medium customarily used for software interchange, for a
price no more than your reasonable cost of physically performing this conveying of source, or (2) access
to copy the Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the written offer to provide the
Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if
you received the object code with such an offer, in accord with subsection 6b.
d) Convey the object code by offering access from a designated place (gratis or for a charge), and
offer equivalent access to the Corresponding Source in the same way through the same place at no further
charge. You need not require recipients to copy the Corresponding Source along with the object code. If
the place to copy the object code is a network server, the Corresponding Source may be on a different
server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the Corresponding Source. Regardless of
what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long
as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided you inform other peers
where the object code and Corresponding Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded from the Corresponding
Source as a System Library, need not be included in conveying the object code work.
A “User Product” is either (1) a “consumer product”, which means any tangible personal property
which is normally used for personal, family, or household purposes, or (2) anything designed or sold for
incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases
shall be resolved in favor of coverage. For a particular product received by a particular user, “normally
used” refers to a typical or common use of that class of product, regardless of the status of the particular
user or of the way in which the particular user actually uses, or expects or is expected to use, the product.
A product is a consumer product regardless of whether the product has substantial commercial, industrial
or non-consumer uses, unless such uses represent the only significant mode of use of the product.
“Installation Information” for a User Product means any methods, procedures, authorization keys,
or other information required to install and execute modified versions of a covered work in that User
Product from a modified version of its Corresponding Source. The information must suffice to ensure that
the continued functioning of the modified object code is in no case prevented or interfered with solely
because modification has been made.
If you convey an object code work under this section in, or with, or specifically for use in, a User
Product, and the conveying occurs as part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the
transaction is characterized), the Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply if neither you nor any third party
35 | P a g e
retains the ability to install modified object code on the User Product (for example, the work has been
installed in ROM).
The requirement to provide Installation Information does not include a requirement to continue to
provide support service, warranty, or updates for a work that has been modified or installed by the
recipient, or for the User Product in which it has been modified or installed. Access to a network may be
denied when the modification itself materially and adversely affects the operation of the network or
violates the rules and protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided, in accord with this
section must be in a format that is publicly documented (and with an implementation available to the
public in source code form), and must require no special password or key for unpacking, reading or
copying.
7. Additional Terms.
“Additional permissions” are terms that supplement the terms of this License by making
exceptions from one or more of its conditions. Additional permissions that are applicable to the entire
Program shall be treated as though they were included in this License, to the extent that they are valid
under applicable law. If additional permissions apply only to part of the Program, that part may be used
separately under those permissions, but the entire Program remains governed by this License without
regard to the additional permissions.
When you convey a copy of a covered work, you may at your option remove any additional
permissions from that copy, or from any part of it. (Additional permissions may be written to require their
own removal in certain cases when you modify the work.) You may place additional permissions on
material, added by you to a covered work, for which you have or can give appropriate copyright
permission.
Notwithstanding any other provision of this License, for material you add to a covered work, you
may (if authorized by the copyright holders of that material) supplement the terms of this License with
terms:
a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of
this License; or
b) Requiring preservation of specified reasonable legal notices or author attributions in that
material or in the Appropriate Legal Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions
of such material be marked in reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
e) Declining to grant rights under trademark law for use of some trade names, trademarks, or
service marks; or
f) Requiring indemnification of licensors and authors of that material by anyone who conveys the
material (or modified versions of it) with contractual assumptions of liability to the recipient, for any
liability that these contractual assumptions directly impose on those licensors and authors.
All other non-permissive additional terms are considered “further restrictions” within the
meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it
36 | P a g e
is governed by this License along with a term that is a further restriction, you may remove that term. If a
license document contains a further restriction but permits relicensing or conveying under this License,
you may add to a covered work material governed by the terms of that license document, provided that
the further restriction does not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you must place, in the relevant
source files, a statement of the additional terms that apply to those files, or a notice indicating where to
find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the form of a separately written
license, or stated as exceptions; the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly provided under this
License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your
rights under this License (including any patent licenses granted under the third paragraph of section 11).
However, if you cease all violation of this License, then your license from a particular copyright
holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by
some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the
copyright holder notifies you of the violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that copyright holder, and you cure the
violation prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties who have
received copies or rights from you under this License. If your rights have been terminated and not
permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run a copy of the Program.
Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer
transmission to receive a copy likewise does not require acceptance. However, nothing other than this
License grants you permission to propagate or modify any covered work. These actions infringe copyright
if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate
your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically receives a license from the
original licensors, to run, modify and propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An “entity transaction” is a transaction transferring control of an organization, or substantially all
assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work
results from an entity transaction, each party to that transaction who receives a copy of the work also
receives whatever licenses to the work the party's predecessor in interest had or could give under the
37 | P a g e
previous paragraph, plus a right to possession of the Corresponding Source of the work from the
predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the rights granted or affirmed
under this License. For example, you may not impose a license fee, royalty, or other charge for exercise
of rights granted under this License, and you may not initiate litigation (including a cross-claim or
counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering
for sale, or importing the Program or any portion of it.
11. Patents.
A “contributor” is a copyright holder who authorizes use under this License of the Program or a
work on which the Program is based. The work thus licensed is called the contributor's “contributor
version”.
A contributor's “essential patent claims” are all patent claims owned or controlled by the
contributor, whether already acquired or hereafter acquired, that would be infringed by some manner,
permitted by this License, of making, using, or selling its contributor version, but do not include claims
that would be infringed only as a consequence of further modification of the contributor version. For
purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent
with the requirements of this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the
contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify
and propagate the contents of its contributor version.
In the following three paragraphs, a “patent license” is any express agreement or commitment,
however denominated, not to enforce a patent (such as an express permission to practice a patent or
covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make
such an agreement or commitment not to enforce a patent against the party.
If you convey a covered work, knowingly relying on a patent license, and the Corresponding
Source of the work is not available for anyone to copy, free of charge and under the terms of this License,
through a publicly available network server or other readily accessible means, then you must either (1)
cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this
License, to extend the patent license to downstream recipients. “Knowingly relying” means you have
actual knowledge that, but for the patent license, your conveying the covered work in a country, or your
recipient's use of the covered work in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or arrangement, you convey, or
propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the
covered work, then the patent license you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is “discriminatory” if it does not include within the scope of its coverage,
prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered work if you are a party to an
arrangement with a third party that is in the business of distributing software, under which you make
payment to the third party based on the extent of your activity of conveying the work, and under which
38 | P a g e
the third party grants, to any of the parties who would receive the covered work from you, a
discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or
copies made from those copies), or (b) primarily for and in connection with specific products or
compilations that contain the covered work, unless you entered into that arrangement, or that patent
license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting any implied license or other
defenses to infringement that may otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict
the conditions of this License, they do not excuse you from the conditions of this License. If you cannot
convey a covered work so as to satisfy simultaneously your obligations under this License and any other
pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to
terms that obligate you to collect a royalty for further conveying from those to whom you convey the
Program, the only way you could satisfy both those terms and this License would be to refrain entirely
from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have permission to link or combine any
covered work with a work licensed under version 3 of the GNU Affero General Public License into a
single combined work, and to convey the resulting work. The terms of this License will continue to apply
to the part which is the covered work, but the special requirements of the GNU Affero General Public
License, section 13, concerning interaction through a network will apply to the combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of the GNU General
Public License from time to time. Such new versions will be similar in spirit to the present version, but
may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program specifies that a certain
numbered version of the GNU General Public License “or any later version” applies to it, you have the
option of following the terms and conditions either of that numbered version or of any later version
published by the Free Software Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published by the Free Software
Foundation.
If the Program specifies that a proxy can decide which future versions of the GNU General Public
License can be used, that proxy's public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different permissions. However, no additional
obligations are imposed on any author or copyright holder as a result of your choosing to follow a later
version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
39 | P a g e
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF
THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING
BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO
OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal
effect according to their terms, reviewing courts shall apply local law that most closely approximates an
absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of
liability accompanies a copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
40 | P a g e
Download