]> git.llucax.com Git - personal/website.git/blob - source/proj/etherled/index.rst
Update CouchSurfing B-corp video URL
[personal/website.git] / source / proj / etherled / index.rst
1
2 .. raw:: html
3
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>
6    </div>
7
8
9 ========
10 Etherled
11 ========
12
13 .. toctree::
14    :hidden:
15
16    photos
17
18
19 Introduction
20 ============
21
22 Etherled is remote controlled, programable stroboscopic image projector using
23 an 8051-family microcontroller.
24
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.
30
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.
34
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).
38
39 __ http://git.llucax.com.ar/w/z.facultad/66.09/etherled.git/tree/HEAD:/doc
40
41
42 Hardware
43 ========
44
45 The main hardware components are an AT89S8252__ microcontroller, a column of
46 8 leds , a latch and an ISA NE2000__ compatible ethernet adapter.
47
48 __ http://www.atmel.com/dyn/products/Product_card.asp?part_id=1920
49 __ http://en.wikipedia.org/wiki/NE2000
50
51
52
53 Firmware
54 ========
55
56 The firmware is divided in 2 modules: networking and led projection.
57
58 The networking module runs in the *main thread*, while the led projection is
59 interrupt-driven (using a timer to trigger the interruption).
60
61
62 Led Projection
63 --------------
64
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
68 beginning.
69
70 This module is written in assembly.
71
72
73 Networking
74 ----------
75
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.
84
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
88 matrix into memory.
89
90 This module is written in C.
91
92
93 NE2000 driver
94 ~~~~~~~~~~~~~
95
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.
103
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/
108
109
110
111 Software
112 ========
113
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).
118
119 This module is written in Python__ using PyGTK__ and SimpleGladeApp__.
120
121 __ http://www.python.org/
122 __ http://www.pygtk.org/
123 __ http://kefir.sourceforge.net/tepache/SimpleGladeApp.html
124
125
126
127 Download
128 ========
129
130 There are no releases for this project, but you can get the code from the Git_
131 repository__ (or a snapshot).
132
133 __ http://git.llucax.com.ar/w/facultad/66.09/etherled.git
134
135
136
137 .. _git: http://git.or.cz/
138
139
140 .. vim: set et sw=3 sts=3 tw=78 :