4 <div style="width: 220px; height: 270px; float: right; margin-left: 1em; margin-top: 1em">
5 <iframe width="220" height="270" style="border: none; outline: none" src="http://tools.flattr.net/widgets/thing.html?thing=1141689"></iframe>
22 Etherled is remote controlled, programable stroboscopic image projector using
23 an 8051-family microcontroller.
25 The image is projected based in the eye delay to recognize the light. It
26 *draws* a *virtual* led matrix using a single led column, which shows each
27 column of the matrix at the time with a relative high frequency, fast enough to
28 make it look like a blinking column of leds when it's still. When the viewer
29 moves his sight away from the leds column, the image is suddenly projected.
31 It has a simple image editor that can send and receive images (pixel matrix)
32 from the device using a compact binary protocol (called ELP, Etherled Protocol)
33 over a small and simplified ethernet/IP/UDP stack.
35 There are some :doc:`photos` available. There is more detailed documentation
36 in the `doc repository directory`__, but it's all in spanish (unfortunately if
37 you don't speak the language).
39 __ http://git.llucax.com.ar/w/z.facultad/66.09/etherled.git/tree/HEAD:/doc
45 The main hardware components are an AT89S8252__ microcontroller, a column of
46 8 leds , a latch and an ISA NE2000__ compatible ethernet adapter.
48 __ http://www.atmel.com/dyn/products/Product_card.asp?part_id=1920
49 __ http://en.wikipedia.org/wiki/NE2000
56 The firmware is divided in 2 modules: networking and led projection.
58 The networking module runs in the *main thread*, while the led projection is
59 interrupt-driven (using a timer to trigger the interruption).
65 The led projection is simple: when the timer expires, the next column is
66 *printed* using the leds. The *next column* is calculated using modulo number
67 of columns so when the matrix it's fully printed, it starts again from the
70 This module is written in assembly.
76 This module is more complex and it runs as the *main thread* of the firmware,
77 in an infinite loop that polls the network adapter to see if a new frame
78 arrived (we had problems using interrupts for this too, which is the ideal).
79 When a new frame arrives, it's parsed to see if it's an ARP or IP packet. If
80 it's ARP, it's answered with the device IP. If it's IP, it's parsed to see if
81 it's UDP. If it is, it's parsed again to see if it's a valid ELP packet, and
82 if it is, the *get* or *set* action is performed. If any of the parsing fails
83 or other type of packet is detected, it's dropped silently.
85 A simple locking mechanism was used to prevent the matrix to advance to the
86 next column when the column is being set (to avoid the projection of an
87 inconsistent image). The lock was simple, stop the timer while writing the new
90 This module is written in C.
96 The NE2000 driver was based on uIP__ + `8051 integration project`__, but that
97 driver had a lot of bugs and was very poor so the driver was almost rewritten
98 to fix the bugs, make it modular, splitting the send, receive and buffer
99 management into different modules, and using the adapter buffers as external
100 memory to minimize the lack of RAM memory in the microcontroller. This
101 improvements were possible thanks to `similar project using a PIC`__ instead of
102 a microcontroller and the Linux__ DP8390 driver.
104 __ http://www.sics.se/~adam/uip/index.php/Main_Page
105 __ http://members.iinet.net.au/~vanluynm/#Downloads
106 __ http://elserver.forknet-ar.org/harpo/uch/seminario/
107 __ http://www.kernel.org/
114 There is a client application to create and edit images (as a led matrix) and
115 to store them in the device via network. Both CLI and GUI are provided. The CLI
116 can be used to set some other device parameters (like the refresh frequency) or
117 send commands to it (like turn of the leds).
119 This module is written in Python__ using PyGTK__ and SimpleGladeApp__.
121 __ http://www.python.org/
122 __ http://www.pygtk.org/
123 __ http://kefir.sourceforge.net/tepache/SimpleGladeApp.html
130 There are no releases for this project, but you can get the code from the Git_
131 repository__ (or a snapshot).
133 __ http://git.llucax.com.ar/w/facultad/66.09/etherled.git
137 .. _git: http://git.or.cz/
140 .. vim: set et sw=3 sts=3 tw=78 :