<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://elinux.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://elinux.org/api.php?action=feedcontributions&amp;user=Lix&amp;feedformat=atom</id>
		<title>eLinux.org - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://elinux.org/api.php?action=feedcontributions&amp;user=Lix&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://elinux.org/Special:Contributions/Lix"/>
		<updated>2013-05-22T06:17:25Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.21alpha</generator>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-11-14T04:38:17Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Demo of Animation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/ECE497_mini_project2 Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture&lt;br /&gt;
pin3 VDD3.3v   ----&amp;gt; breadboard's positive(red line)&lt;br /&gt;
&lt;br /&gt;
pin45 GND      ----&amp;gt; breadboard's negative(blue line)&lt;br /&gt;
&lt;br /&gt;
pin19 i2c2_SCL ----&amp;gt; LED matrix's c pin&lt;br /&gt;
&lt;br /&gt;
pin20 i2c2_SDA ----&amp;gt; LED matrix's d pin. &lt;br /&gt;
&lt;br /&gt;
'''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
LED matrix's + - pin ----&amp;gt; breadboard's positive and negative&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire connection.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Here is a hand by hand tutorial about I2C wrote by Dr. Yoder. If you need that [http://www.elinux.org/EBC_Exercise_12_I2C Click here].&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
=== Important facts===&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points which are very important. You may need to understand before you move on:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
=== Theory===&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;0 0 0 1 1 0 0 0(binary)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position of that line will be on, all the other leds will be off.&lt;br /&gt;
As long as you understand this, you can program your own patterns or animations.&lt;br /&gt;
&lt;br /&gt;
=== My Animations Analysis===&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar animation only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
=== Source Code===&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){    //nested loop to make it work&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/ECE497_mini_project2 Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. &lt;br /&gt;
&lt;br /&gt;
=== Adafruit: 8*8 Red LED Matrix ===&lt;br /&gt;
{{#ev:youtube|sZkMx70ZvbI}}&lt;br /&gt;
&lt;br /&gt;
The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI http://www.youtube.com/watch?v=sZkMx70ZvbI].&lt;br /&gt;
Enjoy it and have fun!&lt;br /&gt;
&lt;br /&gt;
Xia Li&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project:_Kinect</id>
		<title>ECE497 Project: Kinect</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project:_Kinect"/>
				<updated>2012-11-14T04:11:45Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Highlights */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497 |Project]]&lt;br /&gt;
&lt;br /&gt;
Team members: [[user:Astroricks|Yue Zhang]], [[user:Xinyu1991|Xinyu Cheng]], [[user:Lix|Xia Li]].&lt;br /&gt;
&lt;br /&gt;
== Grading Template ==&lt;br /&gt;
I'm using the following template to grade.  Each slot is 10 points.&lt;br /&gt;
0 = Missing, 5=OK, 10=Wow!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
00 Executive Summary&lt;br /&gt;
00 Installation Instructions&lt;br /&gt;
00 User Instructions&lt;br /&gt;
00 Highlights&lt;br /&gt;
00 Theory of Operation&lt;br /&gt;
00 Work Breakdown&lt;br /&gt;
00 Future Work&lt;br /&gt;
00 Conclusions&lt;br /&gt;
00 Demo&lt;br /&gt;
00 Late&lt;br /&gt;
Comments:&lt;br /&gt;
&lt;br /&gt;
Score:  00/100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;(Inline Comment)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
I believe that almost every college students have played a game called &amp;quot;Greedy Snake&amp;quot; in our childhood. At that time, we played it on the cellphone, on the computer or on the PSP. However, we are always using the keyboard to control the games we played. Now, our final project could bring you something new, that is a &amp;quot;Gesture Controlled Greedy Snake&amp;quot;. It means that, using the gesture, the keyboard is never required to play the game. Amazing? Read the following wiki to know how we make it happens!&lt;br /&gt;
&lt;br /&gt;
Basically, we are using the kinect from Microsoft and the Beagle Board XM from Texas Instrument to accomplish our gesture game. The program for the game is programmed on the QT-Linux. Besides, we use the cross compiling to compile the program to make the game run on the beagle board.&lt;br /&gt;
&lt;br /&gt;
After our previous work, our &amp;quot;Gesture Greedy Snake&amp;quot; is completed, and works pretty good. The snake can be controlled by our gestures smoothly. The game reminds us a different style of childhood memory.&lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
&lt;br /&gt;
'''Hardware'''&lt;br /&gt;
&lt;br /&gt;
1 x [http://www.microsoftstore.com/store/msstore/en_US/pd/ThemeID.27509700/Kinect-for-Xbox-360/productID.216507400 Kinect]&lt;br /&gt;
&lt;br /&gt;
1 x [http://www.digikey.com/product-highlights/us/en/texas-instruments-beagleboard/685 BeagleBoard xM]&lt;br /&gt;
&lt;br /&gt;
1 x DVI to HDMI wire&lt;br /&gt;
&lt;br /&gt;
1 x Monitor&lt;br /&gt;
&lt;br /&gt;
1 x Keyboard&lt;br /&gt;
&lt;br /&gt;
1 x Mouse&lt;br /&gt;
&lt;br /&gt;
'''Software'''&lt;br /&gt;
&lt;br /&gt;
The source files for the project can be downloaded from'''github'''. Once you have set up the developing environment as in the following instructions, you can download the files, playing with the game or making changes.  &lt;br /&gt;
&lt;br /&gt;
We are using the drivers provided by [http://www.omekinteractive.com/ Omek]. The driver files can be found at the Beckon™ SDK 2.4 – BeagleBoard-xM Edition [http://support.omekinteractive.com/index.php?/TI/managedownloads/Download/View/32/11/installation installation] page, and a developer's guide is provided at the [http://support.omekinteractive.com/index.php?/TI/managedownloads/Download/View/34/11/documentation documentation] page. (You may need to register first.) Instructions in this [http://treyweaver.blogspot.com/2010/10/setting-up-qt-development-environment.html blog] are also very useful.&lt;br /&gt;
&lt;br /&gt;
Although the developer's guide introduces how to do the installation and configuration, we have found that it takes much longer than we originally thought, and errors came out occasionally. It seems that the developer's guide is not very well organized and not detailed enought anyway. So we arranged our instruction and configuration procedures as below:&lt;br /&gt;
&lt;br /&gt;
1. Download the image package and burn it into the SD card&lt;br /&gt;
&lt;br /&gt;
Download the image package [http://support.omekinteractive.com/index.php?/TI/managedownloads/Download/View/32/11/installation Beckon-Image-2.4.19872.tar.gz] as mentioned above onto your Linux PC. Then extract it by entering&lt;br /&gt;
&lt;br /&gt;
 host$ tar -xvzf ''&amp;lt;ImageFileName&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
Run the following command to make sure you have bash installed.&lt;br /&gt;
&lt;br /&gt;
 host$ sudo apt-get install bash&lt;br /&gt;
&lt;br /&gt;
Insert your SD card using a card reader/writer. Run the following command:&lt;br /&gt;
&lt;br /&gt;
 host$ sudo bash mkcard.sh /dev/''&amp;lt;sdX&amp;gt;'' beagle-omek&lt;br /&gt;
&lt;br /&gt;
''Note: This action will wipe out and rewrite the SD card so make sure the files in it are backed up. The name of the SD card can be viewed in Disk Utility. If you mistakenly use the main OS device name this script can erase your entire OS.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Run the sample application&lt;br /&gt;
&lt;br /&gt;
Plug the sensor into the BeagleBoard-xM USB port. Ensure the mouse and keyboard are connected to the BeagleBoard-xM USB port. Connect the BeagleBoard-xM to the monitor with an HDMI cable. Connect the BeagleBoard-xM power supply and wait for the boot process to reach the login prompt, login as user root (no password is required). Now it's ready to run the sample applications on the BeagleBoard-xM.&lt;br /&gt;
&lt;br /&gt;
''Note: Details about running the samples can be found in the developer's guide from page 9 to 11. The Kinect will react properly only if the player is within an appropriate distance (about 1m - 5m). ''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: The following instruction is about how to set up the environment for developing. If you don't want to do the development, you can just skip that.&lt;br /&gt;
&lt;br /&gt;
3. Setting up your Linux development PC&lt;br /&gt;
&lt;br /&gt;
Download [http://support.omekinteractive.com/index.php?/TI/managedownloads/Download/View/32/11/installation Beckon-SDK-2.4.19872.tar.gz] and extract it onto your host PC (this is the actual SDK which contains headers, libraries, documentation, makefiles, etc...) The SDK provides the tools to develop a motion-tracking and gesture-based application that can run on the BeagleBoard-xM. After developing the application, cross-compile it onto the Linux PC and then copy the image onto the BeagleBoard-xM via external USB storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) Download the Linux ARM cross toolchain:&lt;br /&gt;
&lt;br /&gt;
For 32-bit Ubuntu you will want to download this file: http://www.angstrom-distribution.org/toolchains/angstrom-2011.03-i686-linux-armv7a-linux-gnueabi-toolchain-qte-4.6.3.tar.bz2&lt;br /&gt;
&lt;br /&gt;
For 64-bit Ubuntu you will want to download this file: http://www.angstrom-distribution.org/toolchains/angstrom-2011.03-x86_64-linux-armv7a-linux-gnueabi-toolchain-qte-4.6.3.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Extract the downloaded archive into your system root directory:&lt;br /&gt;
&lt;br /&gt;
 host$ sudo tar -xvjf ''&amp;lt;ToolchainFileName&amp;gt;'' -C /&lt;br /&gt;
&lt;br /&gt;
''Note: If you extract the archive into a different directory, you should adjust the following instructions as well as the samples' makefiles accordingly.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Install the Qt embedded SDK for Angstrom/BeagleBoard:&lt;br /&gt;
&lt;br /&gt;
Now that you have your cross compiler installed, you can compile Qt with it. First thing to do is to install zlib library:&lt;br /&gt;
&lt;br /&gt;
 host$ sudo apt-get install zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
Then download the Open Source LGPL version of Qt libraries 4.6.2 for Embedded Linux [http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.6.2.tar.gz here]. &lt;br /&gt;
&lt;br /&gt;
''Note: Newest version of Qt libraries can be found [http://qt-project.org/downloads/ here]. We didn't test it since the 4.6.2 version works fine.''&lt;br /&gt;
&lt;br /&gt;
Extract the file you just downloaded:&lt;br /&gt;
&lt;br /&gt;
 host$ tar -xvzf ''&amp;lt;DownloadFileName&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
You need to create a new make.conf. Run the following line to make a new mkspecs directory for the BeagleBoard Processor.&lt;br /&gt;
&lt;br /&gt;
 host$ cp -R ''&amp;lt;DownloadDirectory&amp;gt;''/mkspecs/qws/linux-arm-g++/ ''&amp;lt;DownloadDirectory&amp;gt;''/mkspecs/qws/linux-DM3730-g++/&lt;br /&gt;
&lt;br /&gt;
Edit the qmake.conf file found in ''&amp;lt;DownloadDirectory&amp;gt;''/mkspecs/qws/linux-DM3730-g++/ and overwrite it with the following lines.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# qmake configuration for building with arm-linux-g++&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
include(../../common/g++.conf)&lt;br /&gt;
include(../../common/linux.conf)&lt;br /&gt;
include(../../common/qws.conf)&lt;br /&gt;
&lt;br /&gt;
# modifications to g++.conf&lt;br /&gt;
#Toolchain&lt;br /&gt;
&lt;br /&gt;
#Compiler Flags to take advantage of the ARM architecture&lt;br /&gt;
QMAKE_CFLAGS_RELEASE =   -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp&lt;br /&gt;
QMAKE_CXXFLAGS_RELEASE = -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp&lt;br /&gt;
&lt;br /&gt;
QMAKE_CC = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/gcc&lt;br /&gt;
QMAKE_CXX = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/g++&lt;br /&gt;
QMAKE_LINK = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/g++&lt;br /&gt;
QMAKE_LINK_SHLIB = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/g++&lt;br /&gt;
&lt;br /&gt;
# modifications to linux.conf&lt;br /&gt;
QMAKE_AR = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/ar cqs&lt;br /&gt;
QMAKE_OBJCOPY = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/objcopy&lt;br /&gt;
QMAKE_STRIP = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/strip&lt;br /&gt;
&lt;br /&gt;
load(qt_config)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now run the configure command (see this [http://processors.wiki.ti.com/index.php/Building_Qt website] for more details if needed):&lt;br /&gt;
&lt;br /&gt;
 host$ cd ''&amp;lt;DownloadDirectory&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
For 32-bit Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 host$ ./configure -opensource -confirm-license -prefix /opt/qt-arm -no-qt3support -embedded arm -little-endian -xplatform qws/linux-DM3730-g++ -qtlibinfix E&lt;br /&gt;
&lt;br /&gt;
For 64-bit Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 host$ ./configure -opensource -confirm-license -prefix /opt/qt-arm -no-qt3support -embedded arm -little-endian -platform qws/linux-x86_64-g++ -xplatform qws/linux-DM3730-g++ -qtlibinfix E&lt;br /&gt;
&lt;br /&gt;
Once this is complete you can run make and make install (make may take some hours):&lt;br /&gt;
&lt;br /&gt;
 host$ make&lt;br /&gt;
 host$ sudo make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Install and set up Qt Creator:&lt;br /&gt;
&lt;br /&gt;
Go to http://qt-project.org/downloads to download Qt. Get the latest version of Qt for Linux/X11; be sure to get the appropriate 32bit or 64bit version. Once downloaded go to the download directory and execute the following using your download file name:&lt;br /&gt;
&lt;br /&gt;
 host$ chmod u+x ''&amp;lt;QtCreator.bin&amp;gt;''&lt;br /&gt;
 host$ ./''&amp;lt;QtCreator.bin&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
''Update:''The free version Qt Creator can not be used in this project since it doesn't have cross-compile option with it.&lt;br /&gt;
&lt;br /&gt;
After Qt Creator is successfully installed, start Qt Creator. Go to: Tools &amp;gt; Options &amp;gt; Build &amp;amp; Run &amp;gt; Tool Chains, select Add -&amp;gt; GCC and insert the full compiler path below:&lt;br /&gt;
&lt;br /&gt;
/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/g++&lt;br /&gt;
&lt;br /&gt;
Then go to: Tools &amp;gt; Options &amp;gt; Build &amp;amp; Run &amp;gt; Qt Versions, select Add and provide the following full path to qmake&lt;br /&gt;
&lt;br /&gt;
/opt/qt-arm/bin/qmake&lt;br /&gt;
&lt;br /&gt;
Press Apply and OK.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Setting up the BeagleBoard-xM &lt;br /&gt;
&lt;br /&gt;
All of the Qt files that you need to move to the BeagleBoard can be found in the /opt/qt-arm/lib directory on your Linux Build System. Copy all the files out of your build system's /opt/qt-arm/lib directory and put those into the BeagleBoard-xM's /opt/qt-arm/lib directory. You can get the files to the Beagleboard by either networking, using a usb drive or plug the SD card into your Linux Build System.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Include your [https://github.com/ github] path as a link like this:  [https://github.com/MarkAYoder/gitLearn https://github.com/MarkAYoder/gitLearn].  &lt;br /&gt;
* Include any additional packages installed via '''opkg'''.&lt;br /&gt;
* Include kernel mods.&lt;br /&gt;
* If there is extra hardware needed, include links to where it can be obtained.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
To build QtTracking Sample:&lt;br /&gt;
&lt;br /&gt;
1. Start Qt Creator.&lt;br /&gt;
&lt;br /&gt;
2. Go to: File &amp;gt; Open File or Project, select the QtTracking-SDK.pro project (from Beckon-SDK-{version}/samples/QtTracking) and click Open. Select Embedded Linux instead of Desktop.&lt;br /&gt;
&lt;br /&gt;
3. Click Finish.&lt;br /&gt;
&lt;br /&gt;
4. Go to Projects tab (on the left), In Qt version select Qt [4.x.x (qt-arm)]/.&lt;br /&gt;
&lt;br /&gt;
5. Run Build -&amp;gt; Build Project command.&lt;br /&gt;
&lt;br /&gt;
The result executable can be found in the Beckon-SDK-{version}/bin directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To run the QtTracking Sample:&lt;br /&gt;
&lt;br /&gt;
1. Mount or copy the bin directory to the BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
''Note: Run the reset.sh script inside the &amp;quot;bin&amp;quot; folder of the SDK before each sample run, to reset the DSP.''&lt;br /&gt;
&lt;br /&gt;
Run the following:&lt;br /&gt;
&lt;br /&gt;
 beagle$ ./QtTracking-SDK –qws&lt;br /&gt;
&lt;br /&gt;
''Note: Developer's guide has more instructions on running the sample''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Others are coming soon.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Our project is about how to use Microsoft Kinect Sensor to play snake game by the motion of you right hand(You can change to any part of your body if you would like to). We set a score section to record the highest score. Anybody who want to break our record are welcome(Currently the record is holding by Xinyu Cheng at 260). We've created a play demo and uploaded it to YouTube:&lt;br /&gt;
&lt;br /&gt;
=== Play snake game with Kinect sensor on BeagleboardxM ===&lt;br /&gt;
{{#ev:youtube|uBW6LkVUi9I}}&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
We are using the kinect as the sensor of our project. The provided algorithm of the kinect make it possible for us to get the coordinate of many joints of the body. In this case, we can judge the position and the motion of our hands or any other joints. Then, we can use the direction we get from the previous judgement to control the Greedy Snake. Our project is running with the idea.&lt;br /&gt;
&lt;br /&gt;
Tenically, we can use QT to design our program and then cross-complie our project to the beagle-board. The Greedy Snake is an open-source QT game, and the tracking of the joint can be accomplished from modifying the Omek SDK. We have to modify both of their codes to connect the two parts together. &lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
* '''Previous Work Breakdown:'''&lt;br /&gt;
''' Yue Zhang '''&lt;br /&gt;
* Researched how to Burn the correct Image to the Beagle Board.&lt;br /&gt;
* Configure the Beagle Board to control the kinect.&lt;br /&gt;
* Implemented the motion based algorithm which makes the application runs more smoothly.&lt;br /&gt;
* Programmed for the part of motion algorithm.&lt;br /&gt;
''' Xinyu Cheng '''&lt;br /&gt;
* Researched how to configure the QT programming environment. &lt;br /&gt;
* Accomplished the cross-compiling on QT.&lt;br /&gt;
* Programming for the connection between the Snake Game and the Kinect SDK.&lt;br /&gt;
* Designed and Implemented the coordinate based algorithm.&lt;br /&gt;
''' Xia Li '''&lt;br /&gt;
* Researched how to run the provided SDK demo.&lt;br /&gt;
* Speed up for the demo.&lt;br /&gt;
* Designed the motion based algorithm. &lt;br /&gt;
* Programmed to improved the accuracy and speed of the game.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Now, our game can work pretty good and smoothly. The future work for the project will mainly about how to improve the user interface and the game rules. We can also improve our algorithm for the direction judgement.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Conculsionly, our project works pretty good. Our Greedy Snake game runs very good and brings a lot of fun for us. During the develop process, we met lots of difficulties, we tried to solve them one by one. Finally, we solved almost all the problems and end up with a nice project.&lt;br /&gt;
&lt;br /&gt;
{{YoderFoot}}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project:_Kinect</id>
		<title>ECE497 Project: Kinect</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project:_Kinect"/>
				<updated>2012-11-11T01:40:39Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Installation Instructions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497 |Project]]&lt;br /&gt;
&lt;br /&gt;
Team members: [[user:Astroricks|Yue Zhang]], [[user:Xinyu1991|Xinyu Cheng]], [[user:Lix|Xia Li]].&lt;br /&gt;
&lt;br /&gt;
== Grading Template ==&lt;br /&gt;
I'm using the following template to grade.  Each slot is 10 points.&lt;br /&gt;
0 = Missing, 5=OK, 10=Wow!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
00 Executive Summary&lt;br /&gt;
00 Installation Instructions&lt;br /&gt;
00 User Instructions&lt;br /&gt;
00 Highlights&lt;br /&gt;
00 Theory of Operation&lt;br /&gt;
00 Work Breakdown&lt;br /&gt;
00 Future Work&lt;br /&gt;
00 Conclusions&lt;br /&gt;
00 Demo&lt;br /&gt;
00 Late&lt;br /&gt;
Comments:&lt;br /&gt;
&lt;br /&gt;
Score:  00/100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;(Inline Comment)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
Our project is using kinect to accomplish a kind of &amp;quot;Gesture Game&amp;quot;, which is operated through our gestures and motions. Compared to the traditional games, the gesture game can provide better interactive enjoy without the complex operation from the keyboard and mouse.&lt;br /&gt;
&lt;br /&gt;
Through our previous work, we have alread completed the configuration of our project successfully. The configuration work includes the configure of the Beagle Board and the configure of the QT IDE. Now, we can run the Tracking Demo and the Gesture Demo on the Beagle Board. We can also download our projects to the Beagle Board through cross-compiling.&lt;br /&gt;
&lt;br /&gt;
Our work ahead is looking for an interative game, and transplant the game to the QT platform. Then, download the game to the Beagle Board. In that case, the game can be played on the Kinect.&lt;br /&gt;
&lt;br /&gt;
Until now, we have a good begining with the demos runs succefully. We still need some time to finish the following work.&lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
&lt;br /&gt;
We are using the drivers provided by [http://www.omekinteractive.com/ Omek]. The driver files can be found at the Beckon™ SDK 2.4 – BeagleBoard-xM Edition [http://support.omekinteractive.com/index.php?/TI/managedownloads/Download/View/32/11/installation installation] page, and a developer's guide is provided at the [http://support.omekinteractive.com/index.php?/TI/managedownloads/Download/View/34/11/documentation documentation] page. (You may need to register first.) Instructions in this [http://treyweaver.blogspot.com/2010/10/setting-up-qt-development-environment.html blog] are also very useful.&lt;br /&gt;
&lt;br /&gt;
Although the developer's guide introduces how to do the installation and configuration, we have found that it takes much longer than we originally thought and errors came out occationally. It seems that the developer's guide is not very well organized and not detailed enought anyway. So we arranged our instruction and configuration procedures as below:&lt;br /&gt;
&lt;br /&gt;
1. Download the image package and burn it into the SD card&lt;br /&gt;
&lt;br /&gt;
Download the image package [http://support.omekinteractive.com/index.php?/TI/managedownloads/Download/View/32/11/installation Beckon-Image-2.4.19872.tar.gz] as mentioned above onto your Linux PC. Then extract it by entering&lt;br /&gt;
&lt;br /&gt;
 host$ tar -xvzf ''&amp;lt;ImageFileName&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
Run the following command to make sure you have bash installed.&lt;br /&gt;
&lt;br /&gt;
 host$ sudo apt-get install bash&lt;br /&gt;
&lt;br /&gt;
Insert your SD card using a card reader/writer. Run the following command:&lt;br /&gt;
&lt;br /&gt;
 host$ sudo bash mkcard.sh /dev/''&amp;lt;sdX&amp;gt;'' beagle-omek&lt;br /&gt;
&lt;br /&gt;
''Note: This action will wipe out and rewrite the SD card so make sure the files in it are backed up. The name of the SD card can be viewed in Disk Utility. If you mistakenly use the main OS device name this script can erase your entire OS.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Run the sample application&lt;br /&gt;
&lt;br /&gt;
Plug the sensor into the BeagleBoard-xM USB port. Ensure the mouse and keyboard are connected to the BeagleBoard-xM USB port. Connect the BeagleBoard-xM to the monitor with an HDMI cable. Connect the BeagleBoard-xM power supply and wait for the boot process to reach the login prompt, login as user root (no password is required). Now it's ready to run the sample applications on the BeagleBoard-xM.&lt;br /&gt;
&lt;br /&gt;
''Note: Details about running the samples can be found in the developer's guide from page 9 to 11. The Kinect will react properly only if the player is within an appropriate distance (about 1m - 5m). ''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Setting up your Linux development PC&lt;br /&gt;
&lt;br /&gt;
Download [http://support.omekinteractive.com/index.php?/TI/managedownloads/Download/View/32/11/installation Beckon-SDK-2.4.19872.tar.gz] and extract it onto your host PC (this is the actual SDK which contains headers, libraries, documentation, makefiles, etc...) The SDK provides the tools to develop a motion-tracking and gesture-based application that can run on the BeagleBoard-xM. After developing the application, cross-compile it onto the Linux PC and then copy the image onto the BeagleBoard-xM via external USB storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) Download the Linux ARM cross toolchain:&lt;br /&gt;
&lt;br /&gt;
For 32-bit Ubuntu you will want to download this file: http://www.angstrom-distribution.org/toolchains/angstrom-2011.03-i686-linux-armv7a-linux-gnueabi-toolchain-qte-4.6.3.tar.bz2&lt;br /&gt;
&lt;br /&gt;
For 64-bit Ubuntu you will want to download this file: http://www.angstrom-distribution.org/toolchains/angstrom-2011.03-x86_64-linux-armv7a-linux-gnueabi-toolchain-qte-4.6.3.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Extract the downloaded archive into your system root directory:&lt;br /&gt;
&lt;br /&gt;
 host$ sudo tar -xvjf ''&amp;lt;ToolchainFileName&amp;gt;'' -C /&lt;br /&gt;
&lt;br /&gt;
''Note: If you extract the archive into a different directory, you should adjust the following instructions as well as the samples' makefiles accordingly.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Install the Qt embedded SDK for Angstrom/BeagleBoard:&lt;br /&gt;
&lt;br /&gt;
Now that you have your cross compiler installed, you can compile Qt with it. First thing to do is to install zlib library:&lt;br /&gt;
&lt;br /&gt;
 host$ sudo apt-get install zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
Then download the Open Source LGPL version of Qt libraries 4.6.2 for Embedded Linux [http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.6.2.tar.gz here]. &lt;br /&gt;
&lt;br /&gt;
''Note: Newest version of Qt libraries can be found [http://qt-project.org/downloads/ here]. We didn't test it since the 4.6.2 version works fine.''&lt;br /&gt;
&lt;br /&gt;
Extract the file you just downloaded:&lt;br /&gt;
&lt;br /&gt;
 host$ tar -xvzf ''&amp;lt;DownloadFileName&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
You need to create a new make.conf. Run the following line to make a new mkspecs directory for the BeagleBoard Processor.&lt;br /&gt;
&lt;br /&gt;
 host$ cp -R ''&amp;lt;DownloadDirectory&amp;gt;''/mkspecs/qws/linux-arm-g++/ ''&amp;lt;DownloadDirectory&amp;gt;''/mkspecs/qws/linux-DM3730-g++/&lt;br /&gt;
&lt;br /&gt;
Edit the qmake.conf file found in ''&amp;lt;DownloadDirectory&amp;gt;''/mkspecs/qws/linux-DM3730-g++/ and overwrite it with the following lines.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# qmake configuration for building with arm-linux-g++&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
include(../../common/g++.conf)&lt;br /&gt;
include(../../common/linux.conf)&lt;br /&gt;
include(../../common/qws.conf)&lt;br /&gt;
&lt;br /&gt;
# modifications to g++.conf&lt;br /&gt;
#Toolchain&lt;br /&gt;
&lt;br /&gt;
#Compiler Flags to take advantage of the ARM architecture&lt;br /&gt;
QMAKE_CFLAGS_RELEASE =   -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp&lt;br /&gt;
QMAKE_CXXFLAGS_RELEASE = -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp&lt;br /&gt;
&lt;br /&gt;
QMAKE_CC = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/gcc&lt;br /&gt;
QMAKE_CXX = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/g++&lt;br /&gt;
QMAKE_LINK = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/g++&lt;br /&gt;
QMAKE_LINK_SHLIB = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/g++&lt;br /&gt;
&lt;br /&gt;
# modifications to linux.conf&lt;br /&gt;
QMAKE_AR = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/ar cqs&lt;br /&gt;
QMAKE_OBJCOPY = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/objcopy&lt;br /&gt;
QMAKE_STRIP = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/strip&lt;br /&gt;
&lt;br /&gt;
load(qt_config)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now run the configure command (see this [http://processors.wiki.ti.com/index.php/Building_Qt website] for more details if needed):&lt;br /&gt;
&lt;br /&gt;
 host$ cd ''&amp;lt;DownloadDirectory&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
For 32-bit Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 host$ ./configure -opensource -confirm-license -prefix /opt/qt-arm -no-qt3support -embedded arm -little-endian -xplatform qws/linux-DM3730-g++ -qtlibinfix E&lt;br /&gt;
&lt;br /&gt;
For 64-bit Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 host$ ./configure -opensource -confirm-license -prefix /opt/qt-arm -no-qt3support -embedded arm -little-endian -platform qws/linux-x86_64-g++ -xplatform qws/linux-DM3730-g++ -qtlibinfix E&lt;br /&gt;
&lt;br /&gt;
Once this is complete you can run make and make install (make may take some hours):&lt;br /&gt;
&lt;br /&gt;
 host$ make&lt;br /&gt;
 host$ sudo make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Install and set up Qt Creator:&lt;br /&gt;
&lt;br /&gt;
Go to http://qt-project.org/downloads to download Qt. Get the latest version of Qt for Linux/X11; be sure to get the appropriate 32bit or 64bit version. Once downloaded go to the download directory and execute the following using your download file name:&lt;br /&gt;
&lt;br /&gt;
 host$ chmod u+x ''&amp;lt;QtCreator.bin&amp;gt;''&lt;br /&gt;
 host$ ./''&amp;lt;QtCreator.bin&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
''Update:''The free version Qt Creator can not be used in this project since it doesn't have cross-compile option with it.&lt;br /&gt;
&lt;br /&gt;
After Qt Creator is successfully installed, start Qt Creator. Go to: Tools &amp;gt; Options &amp;gt; Build &amp;amp; Run &amp;gt; Tool Chains, select Add -&amp;gt; GCC and insert the full compiler path below:&lt;br /&gt;
&lt;br /&gt;
/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/g++&lt;br /&gt;
&lt;br /&gt;
Then go to: Tools &amp;gt; Options &amp;gt; Build &amp;amp; Run &amp;gt; Qt Versions, select Add and provide the following full path to qmake&lt;br /&gt;
&lt;br /&gt;
/opt/qt-arm/bin/qmake&lt;br /&gt;
&lt;br /&gt;
Press Apply and OK.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Setting up the BeagleBoard-xM &lt;br /&gt;
&lt;br /&gt;
All of the Qt files that you need to move to the BeagleBoard can be found in the /opt/qt-arm/lib directory on your Linux Build System. Copy all the files out of your build system's /opt/qt-arm/lib directory and put those into the BeagleBoard-xM's /opt/qt-arm/lib directory. You can get the files to the Beagleboard by either networking, using a usb drive or plug the SD card into your Linux Build System.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Include your [https://github.com/ github] path as a link like this:  [https://github.com/MarkAYoder/gitLearn https://github.com/MarkAYoder/gitLearn].  &lt;br /&gt;
* Include any additional packages installed via '''opkg'''.&lt;br /&gt;
* Include kernel mods.&lt;br /&gt;
* If there is extra hardware needed, include links to where it can be obtained.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
To build QtTracking Sample:&lt;br /&gt;
&lt;br /&gt;
1. Start Qt Creator.&lt;br /&gt;
&lt;br /&gt;
2. Go to: File &amp;gt; Open File or Project, select the QtTracking-SDK.pro project (from Beckon-SDK-{version}/samples/QtTracking) and click Open. Select Embedded Linux instead of Desktop.&lt;br /&gt;
&lt;br /&gt;
3. Click Finish.&lt;br /&gt;
&lt;br /&gt;
4. Go to Projects tab (on the left), In Qt version select Qt [4.x.x (qt-arm)]/.&lt;br /&gt;
&lt;br /&gt;
5. Run Build -&amp;gt; Build Project command.&lt;br /&gt;
&lt;br /&gt;
The result executable can be found in the Beckon-SDK-{version}/bin directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To run the QtTracking Sample:&lt;br /&gt;
&lt;br /&gt;
1. Mount or copy the bin directory to the BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
''Note: Run the reset.sh script inside the &amp;quot;bin&amp;quot; folder of the SDK before each sample run, to reset the DSP.''&lt;br /&gt;
&lt;br /&gt;
Run the following:&lt;br /&gt;
&lt;br /&gt;
 beagle$ ./QtTracking-SDK –qws&lt;br /&gt;
&lt;br /&gt;
''Note: Developer's guide has more instructions on running the sample''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Others are coming soon.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Coming soon.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
We are using the kinect as the sensor of our project. The provided algorithm of the kinect make it possible to recognize our gesture and motion. In this case, the gesture and motion can take the place of the mouse. Our project is running with the idea.&lt;br /&gt;
&lt;br /&gt;
We can use QT to design our program and then cross-complie our project to the beagle-board. According to the cross-compiling of the sample project: Tracking-SDK, we have got a pretty good demo. Hence, it is possible for us to design an interesting gesture game on the QT platform and then run it on the beagle board with the kinect.&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
* '''Previous Work Breakdown:'''&lt;br /&gt;
''' Yue Zhang '''&lt;br /&gt;
* Researched how to Burn the correct Image to the Beagle Board.&lt;br /&gt;
* Configure the Beagle Board to control the kinect.&lt;br /&gt;
''' Xinyu Cheng '''&lt;br /&gt;
* Researched how to configure the QT programming environment. &lt;br /&gt;
* Realize the cross-compiling on QT.&lt;br /&gt;
''' Xia Li '''&lt;br /&gt;
* Researched how to run the provided demo.&lt;br /&gt;
* How to speed up the demo.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Our future work is to design an interactive game which can be controlled through our gestures.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
{{YoderFoot}}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project:_Kinect</id>
		<title>ECE497 Project: Kinect</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project:_Kinect"/>
				<updated>2012-11-08T21:09:10Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Installation Instructions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497 |Project]]&lt;br /&gt;
&lt;br /&gt;
Team members: [[user:Astroricks|Yue Zhang]], [[user:Xinyu1991|Xinyu Cheng]], [[user:Lix|Xia Li]].&lt;br /&gt;
&lt;br /&gt;
== Grading Template ==&lt;br /&gt;
I'm using the following template to grade.  Each slot is 10 points.&lt;br /&gt;
0 = Missing, 5=OK, 10=Wow!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:red&amp;quot;&amp;gt;&lt;br /&gt;
00 Executive Summary&lt;br /&gt;
00 Installation Instructions&lt;br /&gt;
00 User Instructions&lt;br /&gt;
00 Highlights&lt;br /&gt;
00 Theory of Operation&lt;br /&gt;
00 Work Breakdown&lt;br /&gt;
00 Future Work&lt;br /&gt;
00 Conclusions&lt;br /&gt;
00 Demo&lt;br /&gt;
00 Late&lt;br /&gt;
Comments:&lt;br /&gt;
&lt;br /&gt;
Score:  00/100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;(Inline Comment)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
Our project is using kinect to accomplish a kind of &amp;quot;Gesture Game&amp;quot;, which is operated through our gestures and motions. Compared to the traditional games, the gesture game can provide better interactive enjoy without the complex operation from the keyboard and mouse.&lt;br /&gt;
&lt;br /&gt;
Through our previous work, we have alread completed the configuration of our project successfully. The configuration work includes the configure of the Beagle Board and the configure of the QT IDE. Now, we can run the Tracking Demo and the Gesture Demo on the Beagle Board. We can also download our projects to the Beagle Board through cross-compiling.&lt;br /&gt;
&lt;br /&gt;
Our work ahead is looking for an interative game, and transplant the game to the QT platform. Then, download the game to the Beagle Board. In that case, the game can be played on the Kinect.&lt;br /&gt;
&lt;br /&gt;
Until now, we have a good begining with the demos runs succefully. We still need some time to finish the following work.&lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
&lt;br /&gt;
We are using the drivers provided by [http://www.omekinteractive.com/ Omek]. The driver files can be found at the Beckon™ SDK 2.4 – BeagleBoard-xM Edition [http://support.omekinteractive.com/index.php?/TI/managedownloads/Download/View/32/11/installation installation] page, and a developer's guide is provided at the [http://support.omekinteractive.com/index.php?/TI/managedownloads/Download/View/34/11/documentation documentation] page. (You may need to register first.) Instructions in this [http://treyweaver.blogspot.com/2010/10/setting-up-qt-development-environment.html blog] are also very useful.&lt;br /&gt;
&lt;br /&gt;
Although the developer's guide introduces how to do the installation and configuration, we have found that it takes much longer than we originally thought and errors came out occationally. It seems that the developer's guide is not very well organized and not detailed enought anyway. So we arranged our instruction and configuration procedures as below:&lt;br /&gt;
&lt;br /&gt;
1. Download the image package and burn it into the SD card&lt;br /&gt;
&lt;br /&gt;
Download the image package [http://support.omekinteractive.com/index.php?/TI/managedownloads/Download/View/32/11/installation Beckon-Image-2.4.19872.tar.gz] as mentioned above onto your Linux PC. Then extract it by entering&lt;br /&gt;
&lt;br /&gt;
 host$ tar -xvzf ''&amp;lt;ImageFileName&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
Run the following command to make sure you have bash installed.&lt;br /&gt;
&lt;br /&gt;
 host$ sudo apt-get install bash&lt;br /&gt;
&lt;br /&gt;
Insert your SD card using a card reader/writer. Run the following command:&lt;br /&gt;
&lt;br /&gt;
 host$ sudo bash mkcard.sh /dev/''&amp;lt;sdX&amp;gt;'' beagle-omek&lt;br /&gt;
&lt;br /&gt;
''Note: This action will wipe out and rewrite the SD card so make sure the files in it are backed up. The name of the SD card can be viewed in Disk Utility. If you mistakenly use the main OS device name this script can erase your entire OS.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Run the sample application&lt;br /&gt;
&lt;br /&gt;
Plug the sensor into the BeagleBoard-xM USB port. Ensure the mouse and keyboard are connected to the BeagleBoard-xM USB port. Connect the BeagleBoard-xM to the monitor with an HDMI cable. Connect the BeagleBoard-xM power supply and wait for the boot process to reach the login prompt, login as user root (no password is required). Now it's ready to run the sample applications on the BeagleBoard-xM.&lt;br /&gt;
&lt;br /&gt;
''Note: Details about running the samples can be found in the developer's guide from page 9 to 11. The Kinect will react properly only if the player is within an appropriate distance (about 1m - 5m). ''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Setting up your Linux development PC&lt;br /&gt;
&lt;br /&gt;
Download [http://support.omekinteractive.com/index.php?/TI/managedownloads/Download/View/32/11/installation Beckon-SDK-2.4.19872.tar.gz] and extract it onto your host PC (this is the actual SDK which contains headers, libraries, documentation, makefiles, etc...) The SDK provides the tools to develop a motion-tracking and gesture-based application that can run on the BeagleBoard-xM. After developing the application, cross-compile it onto the Linux PC and then copy the image onto the BeagleBoard-xM via external USB storage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) Download the Linux ARM cross toolchain:&lt;br /&gt;
&lt;br /&gt;
For 32-bit Ubuntu you will want to download this file: http://www.angstrom-distribution.org/toolchains/angstrom-2011.03-i686-linux-armv7a-linux-gnueabi-toolchain-qte-4.6.3.tar.bz2&lt;br /&gt;
&lt;br /&gt;
For 64-bit Ubuntu you will want to download this file: http://www.angstrom-distribution.org/toolchains/angstrom-2011.03-x86_64-linux-armv7a-linux-gnueabi-toolchain-qte-4.6.3.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Extract the downloaded archive into your system root directory:&lt;br /&gt;
&lt;br /&gt;
 host$ sudo tar -xvjf ''&amp;lt;ToolchainFileName&amp;gt;'' -C /&lt;br /&gt;
&lt;br /&gt;
''Note: If you extract the archive into a different directory, you should adjust the following instructions as well as the samples' makefiles accordingly.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Install the Qt embedded SDK for Angstrom/BeagleBoard:&lt;br /&gt;
&lt;br /&gt;
Now that you have your cross compiler installed, you can compile Qt with it. First thing to do is to install zlib library:&lt;br /&gt;
&lt;br /&gt;
 host$ sudo apt-get install zlib1g-dev&lt;br /&gt;
&lt;br /&gt;
Then download the Open Source LGPL version of Qt libraries 4.6.2 for Embedded Linux [http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.6.2.tar.gz here]. &lt;br /&gt;
&lt;br /&gt;
''Note: Newest version of Qt libraries can be found [http://qt-project.org/downloads/ here]. We didn't test it since the 4.6.2 version works fine.''&lt;br /&gt;
&lt;br /&gt;
Extract the file you just downloaded:&lt;br /&gt;
&lt;br /&gt;
 host$ tar -xvzf ''&amp;lt;DownloadFileName&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
You need to create a new make.conf. Run the following line to make a new mkspecs directory for the BeagleBoard Processor.&lt;br /&gt;
&lt;br /&gt;
 host$ cp -R ''&amp;lt;DownloadDirectory&amp;gt;''/mkspecs/qws/linux-arm-g++/ ''&amp;lt;DownloadDirectory&amp;gt;''/mkspecs/qws/linux-DM3730-g++/&lt;br /&gt;
&lt;br /&gt;
Edit the qmake.conf file found in ''&amp;lt;DownloadDirectory&amp;gt;''/mkspecs/qws/linux-DM3730-g++/ and overwrite it with the following lines.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# qmake configuration for building with arm-linux-g++&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
include(../../common/g++.conf)&lt;br /&gt;
include(../../common/linux.conf)&lt;br /&gt;
include(../../common/qws.conf)&lt;br /&gt;
&lt;br /&gt;
# modifications to g++.conf&lt;br /&gt;
#Toolchain&lt;br /&gt;
&lt;br /&gt;
#Compiler Flags to take advantage of the ARM architecture&lt;br /&gt;
QMAKE_CFLAGS_RELEASE =   -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp&lt;br /&gt;
QMAKE_CXXFLAGS_RELEASE = -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp&lt;br /&gt;
&lt;br /&gt;
QMAKE_CC = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/gcc&lt;br /&gt;
QMAKE_CXX = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/g++&lt;br /&gt;
QMAKE_LINK = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/g++&lt;br /&gt;
QMAKE_LINK_SHLIB = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/g++&lt;br /&gt;
&lt;br /&gt;
# modifications to linux.conf&lt;br /&gt;
QMAKE_AR = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/ar cqs&lt;br /&gt;
QMAKE_OBJCOPY = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/objcopy&lt;br /&gt;
QMAKE_STRIP = /usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/strip&lt;br /&gt;
&lt;br /&gt;
load(qt_config)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now run the configure command (see this [http://processors.wiki.ti.com/index.php/Building_Qt website] for more details if needed):&lt;br /&gt;
&lt;br /&gt;
 host$ cd ''&amp;lt;DownloadDirectory&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
For 32-bit Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 host$ ./configure -opensource -confirm-license -prefix /opt/qt-arm -no-qt3support -embedded arm -little-endian -xplatform qws/linux-DM3730-g++ -qtlibinfix E&lt;br /&gt;
&lt;br /&gt;
For 64-bit Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 host$ ./configure -opensource -confirm-license -prefix /opt/qt-arm -no-qt3support -embedded arm -little-endian -platform qws/linux-x86_64-g++ -xplatform qws/linux-DM3730-g++ -qtlibinfix E&lt;br /&gt;
&lt;br /&gt;
Once this is complete you can run make and make install (make may take some hours):&lt;br /&gt;
&lt;br /&gt;
 host$ make&lt;br /&gt;
 host$ sudo make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Install and set up Qt Creator:&lt;br /&gt;
&lt;br /&gt;
Go to http://qt-project.org/downloads to download Qt. Get the latest version of Qt for Linux/X11; be sure to get the appropriate 32bit or 64bit version. Once downloaded go to the download directory and execute the following using your download file name:&lt;br /&gt;
&lt;br /&gt;
 host$ chmod u+x ''&amp;lt;QtCreator.bin&amp;gt;''&lt;br /&gt;
 host$ ./''&amp;lt;QtCreator.bin&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
''To '''Li Xia''': Qt Creator has commercial version on http://qt.nokia.com/downloads . I'm using it but I can only try it for 30 days. I just find the free version above but haven't tried it. Please try the free version and see if it works. If nothing's wrong, just simply remove this paragraph afterwards.''&lt;br /&gt;
&lt;br /&gt;
After Qt Creator is successfully installed, start Qt Creator. Go to: Tools &amp;gt; Options &amp;gt; Build &amp;amp; Run &amp;gt; Tool Chains, select Add -&amp;gt; GCC and insert the full compiler path below:&lt;br /&gt;
&lt;br /&gt;
/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/bin/g++&lt;br /&gt;
&lt;br /&gt;
Then go to: Tools &amp;gt; Options &amp;gt; Build &amp;amp; Run &amp;gt; Qt Versions, select Add and provide the following full path to qmake&lt;br /&gt;
&lt;br /&gt;
/opt/qt-arm/bin/qmake&lt;br /&gt;
&lt;br /&gt;
Press Apply and OK.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Setting up the BeagleBoard-xM &lt;br /&gt;
&lt;br /&gt;
All of the Qt files that you need to move to the BeagleBoard can be found in the /opt/qt-arm/lib directory on your Linux Build System. Copy all the files out of your build system's /opt/qt-arm/lib directory and put those into the BeagleBoard-xM's /opt/qt-arm/lib directory. You can get the files to the Beagleboard by either networking, using a usb drive or plug the SD card into your Linux Build System.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Include your [https://github.com/ github] path as a link like this:  [https://github.com/MarkAYoder/gitLearn https://github.com/MarkAYoder/gitLearn].  &lt;br /&gt;
* Include any additional packages installed via '''opkg'''.&lt;br /&gt;
* Include kernel mods.&lt;br /&gt;
* If there is extra hardware needed, include links to where it can be obtained.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
To build QtTracking Sample:&lt;br /&gt;
&lt;br /&gt;
1. Start Qt Creator.&lt;br /&gt;
&lt;br /&gt;
2. Go to: File &amp;gt; Open File or Project, select the QtTracking-SDK.pro project (from Beckon-SDK-{version}/samples/QtTracking) and click Open. Select Embedded Linux instead of Desktop.&lt;br /&gt;
&lt;br /&gt;
3. Click Finish.&lt;br /&gt;
&lt;br /&gt;
4. Go to Projects tab (on the left), In Qt version select Qt [4.x.x (qt-arm)]/.&lt;br /&gt;
&lt;br /&gt;
5. Run Build -&amp;gt; Build Project command.&lt;br /&gt;
&lt;br /&gt;
The result executable can be found in the Beckon-SDK-{version}/bin directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To run the QtTracking Sample:&lt;br /&gt;
&lt;br /&gt;
1. Mount or copy the bin directory to the BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
''Note: Run the reset.sh script inside the &amp;quot;bin&amp;quot; folder of the SDK before each sample run, to reset the DSP.''&lt;br /&gt;
&lt;br /&gt;
Run the following:&lt;br /&gt;
&lt;br /&gt;
 beagle$ ./QtTracking-SDK –qws&lt;br /&gt;
&lt;br /&gt;
''Note: Developer's guide has more instructions on running the sample''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Others are coming soon.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Coming soon.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
We are using the kinect as the sensor of our project. The provided algorithm of the kinect make it possible to recognize our gesture and motion. In this case, the gesture and motion can take the place of the mouse. Our project is running with the idea.&lt;br /&gt;
&lt;br /&gt;
We can use QT to design our program and then cross-complie our project to the beagle-board. According to the cross-compiling of the sample project: Tracking-SDK, we have got a pretty good demo. Hence, it is possible for us to design an interesting gesture game on the QT platform and then run it on the beagle board with the kinect.&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
* '''Previous Work Breakdown:'''&lt;br /&gt;
''' Yue Zhang '''&lt;br /&gt;
* Researched how to Burn the correct Image to the Beagle Board.&lt;br /&gt;
* Configure the Beagle Board to control the kinect.&lt;br /&gt;
''' Xinyu Cheng '''&lt;br /&gt;
* Researched how to configure the QT programming environment. &lt;br /&gt;
* Realize the cross-compiling on QT.&lt;br /&gt;
''' Xia Li '''&lt;br /&gt;
* Researched how to run the provided demo.&lt;br /&gt;
* How to speed up the demo.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Our future work is to design an interactive game which can be controlled through our gestures.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
{{YoderFoot}}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Lix_Project</id>
		<title>ECE497 Lix Project</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Lix_Project"/>
				<updated>2012-11-08T19:56:09Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Lix</id>
		<title>User:Lix</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Lix"/>
				<updated>2012-11-08T16:48:50Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497 |UL]]&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Contributions_and_Project_Status</id>
		<title>ECE497 Contributions and Project Status</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Contributions_and_Project_Status"/>
				<updated>2012-11-06T16:58:16Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Project Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497 |Contributions]]&lt;br /&gt;
{{YoderHead}}&lt;br /&gt;
&lt;br /&gt;
== Fall 2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Project Status ===&lt;br /&gt;
&lt;br /&gt;
Please edit this page and add your project to this list. Copy my [[ECE497 Project Template]] to your own eLinux page and include the title of your project in the name of the page.  &lt;br /&gt;
&lt;br /&gt;
Please make the list alphabetical by family name.&lt;br /&gt;
&lt;br /&gt;
Take a look at what you and others have contributed.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
! Contributions&lt;br /&gt;
! Project&lt;br /&gt;
! git repository&lt;br /&gt;
|-&lt;br /&gt;
| [[User:atniptw | Tom Atnip]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Beagle VNS | Beagle VNS]]&lt;br /&gt;
| [https://github.com/atniptw/ atniptw]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:larmorgs | Greg Larmore]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 SPI Project | SPI Project]]&lt;br /&gt;
| [https://github.com/larmorgs/ larmorgs]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:jessebrannon | Jesse Brannon]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Rover | Rover]]&lt;br /&gt;
| [https://github.com/brannojs/ brannojs]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Xinyu1991 | Xinyu Cheng]]&lt;br /&gt;
| [[Special:Contributions/Xinyu1991|contrib]]&lt;br /&gt;
| [[ECE497_Project:_Kinect | Kinect]]&lt;br /&gt;
| [https://github.com/xinyu1991/ Xinyu Cheng]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:correlbn | Bryan Correll]]&lt;br /&gt;
| [[Special:Contributions/correlbn|contrib]]&lt;br /&gt;
| [[BeagleBone PRU | BeagleBone PRU]]&lt;br /&gt;
| [https://github.com/correlbn/My-Beagle-Project/ Correlbn]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:draneaw | Alex Drane]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 draneaw Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/draneaw/My-Beagle-Project draneaw]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:duganje | Josh Dugan]]&lt;br /&gt;
| [[Special:Contributions/duganje|contrib]]&lt;br /&gt;
| [[ECE497 Project: XBee|XBee]]&lt;br /&gt;
| [https://github.com/duganje/ duganje]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Geislekj | Kevin Geisler]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Beagle VNS | Beagle VNS]]&lt;br /&gt;
| [https://github.com/geislekj/ geislekj]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:chris.good | Christopher A Good]]&lt;br /&gt;
| [[Special:Contributions/Chris.good|contrib]]&lt;br /&gt;
| [[ECE497 Project RoverGUI | RoverGUI]]&lt;br /&gt;
| [https://github.com/goodca/ goodca]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:hansenrl | Ross Hansen]]&lt;br /&gt;
| [[Special:Contributions/hansenrl|contrib]]&lt;br /&gt;
| [[ECE497 Project Rover | Rover]]&lt;br /&gt;
| [https://github.com/hansenrl/ Hansenrl]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:jungeml | Michael Junge]]&lt;br /&gt;
| [[Special:Contributions/jungeml|contrib]]&lt;br /&gt;
| [[ECE497 Project Rover | Rover]]&lt;br /&gt;
| [https://github.com/jungeml/ Jungeml]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Lix | Xia Li]]&lt;br /&gt;
| [[Special:Contributions/Lix|contrib]]&lt;br /&gt;
| [[ECE497 Project: Kinect | Kinect]]&lt;br /&gt;
| [https://github.com/1984xiali/ xiali]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:mmoravec | Matthew Moravec]]&lt;br /&gt;
| [[Special:Contributions/mmoravec|contrib]]&lt;br /&gt;
| [[ECE497 Project: XBee|XBee]]&lt;br /&gt;
| [https://github.com/mmoravec/ mmoravec]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ngop | Peter Ngo]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 ngop Project: Beaglebone PRU|Beaglebone PRU]]&lt;br /&gt;
| [https://github.com/ngop/ ngop]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:shinnsm|Stephen Shinn]]&lt;br /&gt;
| [[Special:Contributions/shinnsm|contrib]]&lt;br /&gt;
| [[ECE497 Project: XBee|XBee]]&lt;br /&gt;
| [https://github.com/shinnsm shinnsm]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Yoder | Mark A. Yoder]]&lt;br /&gt;
| [[Special:Contributions/Yoder | contrib]]&lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| [https://github.com/MarkAYoder MarkAYoder]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Popenhjc | James Popenhagen]]&lt;br /&gt;
| &lt;br /&gt;
| [[BeagleBone PRU | BeagleBone PRU]]&lt;br /&gt;
| [https://github.com/popenhjc/ popenhjc]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Whiteer | Elias White]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 SLAM via ROS | My Beagle Project]]&lt;br /&gt;
| [https://github.com/whiteer whiteer]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ruff | Ruffin White]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Beagle VNS | Beagle VNS]]&lt;br /&gt;
| [https://github.com/ruffsl/ ruffsl]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Richarsm | Sean Richardson]]&lt;br /&gt;
| [[Special:Contributions/Richarsm|contrib]]&lt;br /&gt;
| [[ECE497 SPI Project | SPI Project]]&lt;br /&gt;
| [https://github.com/seanrich Sean Richardson]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Millerap | Andrew Miller]]&lt;br /&gt;
|&lt;br /&gt;
| [[ECE 497 millerap Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/millerap millerap]&lt;br /&gt;
|-| &lt;br /&gt;
| [[User:Astroricks | Yue Zhang]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Yue Zhang Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/Astroricks/Beagle-Project Yue Zhang]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Lobdeljt | John Lobdell]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE 497 lobdeljt Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/jtlobdell jtlobdell]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Winter 2011-2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Contributions ===&lt;br /&gt;
&lt;br /&gt;
# [[Special:Contributions/Yuming | Yuming Cao]]&lt;br /&gt;
# [[Special:Contributions/Yifei | Yifei Li]]&lt;br /&gt;
# [[Special:Contributions/Harrisgw | Greg Harrison]]&lt;br /&gt;
# [[Special:Contributions/mac | Jack Ma]]&lt;br /&gt;
# [[Special:Contributions/Gemini91 | Guanqun Wang]]&lt;br /&gt;
# [[Special:Contributions/Yanj | Mona Yan]]&lt;br /&gt;
# [[Special:Contributions/Yoder | Mark A. Yoder]]&lt;br /&gt;
# [[Special:Contributions/Yuhasmj | Michael Yuhas]]&lt;br /&gt;
# [[Special:Contributions/Ziyi Zhang | Ziyi Zhang]]&lt;br /&gt;
# [[Special:Contributions/Zitnikdj | David Zitnik]]&lt;br /&gt;
# [[Special:Contributions/Zitnikdj | Alex Drane]]&lt;br /&gt;
# [[Special:Contributions/jessebrannon | Jesse Brannon]]&lt;br /&gt;
# [[Special:Contributions/larmorgs | Greg Larmore]]&lt;br /&gt;
# [[Special:Contributions/jungeml | Michael Junge]]&lt;br /&gt;
# [[Special:Contributions/millerap | Andrew Miller]]&lt;br /&gt;
# [[Special:Contributions/correlbn | Bryan Correll]]&lt;br /&gt;
&lt;br /&gt;
=== Project Status ===&lt;br /&gt;
&lt;br /&gt;
# [[User:Yoder | Mark A. Yoder]], [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
# [[user:Yanj|Mona Yan]] and [[user:Harrisgw| Greg Harrison]], [[PS EYE QT PROJECT | Playstation Eye Audio with Qt]]&lt;br /&gt;
# [[user:Caogecym | Yuming Cao]] and [[user:Ziyi Zhang | Ziyi Zhang]], [[Node.js Weather Station]]&lt;br /&gt;
# [[user:Yifei| Yifei Li]] and [[user:Gemini91| Guanqun Wang]], [[ Kinect Project | Play games using Kinect on Beagleboard]]&lt;br /&gt;
# [[user:Yuhasmj| Michael J. Yuhas]] and [[user:mac | Jack Ma]], [[ Multiple Partitions via U-boot | Multiple Partitions via U-boot ]]&lt;br /&gt;
# [[user:Zitnikdj| David Zitnik]], [[ ECE497 Project: Twitter Java Application | Twitter Java Application ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{YoderFoot}}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-11-06T05:32:24Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Source Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/ECE497_mini_project2 Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture&lt;br /&gt;
pin3 VDD3.3v   ----&amp;gt; breadboard's positive(red line)&lt;br /&gt;
&lt;br /&gt;
pin45 GND      ----&amp;gt; breadboard's negative(blue line)&lt;br /&gt;
&lt;br /&gt;
pin19 i2c2_SCL ----&amp;gt; LED matrix's c pin&lt;br /&gt;
&lt;br /&gt;
pin20 i2c2_SDA ----&amp;gt; LED matrix's d pin. &lt;br /&gt;
&lt;br /&gt;
'''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
LED matrix's + - pin ----&amp;gt; breadboard's positive and negative&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire connection.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Here is a hand by hand tutorial about I2C wrote by Dr. Yoder. If you need that [http://www.elinux.org/EBC_Exercise_12_I2C Click here].&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
=== Important facts===&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points which are very important. You may need to understand before you move on:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
=== Theory===&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;0 0 0 1 1 0 0 0(binary)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position of that line will be on, all the other leds will be off.&lt;br /&gt;
As long as you understand this, you can program your own patterns or animations.&lt;br /&gt;
&lt;br /&gt;
=== My Animations Analysis===&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar animation only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
=== Source Code===&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){    //nested loop to make it work&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/ECE497_mini_project2 Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI http://www.youtube.com/watch?v=sZkMx70ZvbI].&lt;br /&gt;
Enjoy it and have fun!&lt;br /&gt;
&lt;br /&gt;
Xia Li&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-11-06T05:31:02Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/ECE497_mini_project2 Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture&lt;br /&gt;
pin3 VDD3.3v   ----&amp;gt; breadboard's positive(red line)&lt;br /&gt;
&lt;br /&gt;
pin45 GND      ----&amp;gt; breadboard's negative(blue line)&lt;br /&gt;
&lt;br /&gt;
pin19 i2c2_SCL ----&amp;gt; LED matrix's c pin&lt;br /&gt;
&lt;br /&gt;
pin20 i2c2_SDA ----&amp;gt; LED matrix's d pin. &lt;br /&gt;
&lt;br /&gt;
'''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
LED matrix's + - pin ----&amp;gt; breadboard's positive and negative&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire connection.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Here is a hand by hand tutorial about I2C wrote by Dr. Yoder. If you need that [http://www.elinux.org/EBC_Exercise_12_I2C Click here].&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
=== Important facts===&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points which are very important. You may need to understand before you move on:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
=== Theory===&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;0 0 0 1 1 0 0 0(binary)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position of that line will be on, all the other leds will be off.&lt;br /&gt;
As long as you understand this, you can program your own patterns or animations.&lt;br /&gt;
&lt;br /&gt;
=== My Animations Analysis===&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar animation only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
=== Source Code===&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){    //nested loop to make it work&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI http://www.youtube.com/watch?v=sZkMx70ZvbI].&lt;br /&gt;
Enjoy it and have fun!&lt;br /&gt;
&lt;br /&gt;
Xia Li&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:54:41Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Demo of Animation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture&lt;br /&gt;
pin3 VDD3.3v   ----&amp;gt; breadboard's positive(red line)&lt;br /&gt;
&lt;br /&gt;
pin45 GND      ----&amp;gt; breadboard's negative(blue line)&lt;br /&gt;
&lt;br /&gt;
pin19 i2c2_SCL ----&amp;gt; LED matrix's c pin&lt;br /&gt;
&lt;br /&gt;
pin20 i2c2_SDA ----&amp;gt; LED matrix's d pin. &lt;br /&gt;
&lt;br /&gt;
'''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
LED matrix's + - pin ----&amp;gt; breadboard's positive and negative&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire connection.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Here is a hand by hand tutorial about I2C wrote by Dr. Yoder. If you need that [http://www.elinux.org/EBC_Exercise_12_I2C Click here].&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
=== Important facts===&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points which are very important. You may need to understand before you move on:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
=== Theory===&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;0 0 0 1 1 0 0 0(binary)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position of that line will be on, all the other leds will be off.&lt;br /&gt;
As long as you understand this, you can program your own patterns or animations.&lt;br /&gt;
&lt;br /&gt;
=== My Animations Analysis===&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar animation only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
=== Source Code===&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){    //nested loop to make it work&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI http://www.youtube.com/watch?v=sZkMx70ZvbI].&lt;br /&gt;
Enjoy it and have fun!&lt;br /&gt;
&lt;br /&gt;
Xia Li&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:42:05Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Wire Connection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture&lt;br /&gt;
pin3 VDD3.3v   ----&amp;gt; breadboard's positive(red line)&lt;br /&gt;
&lt;br /&gt;
pin45 GND      ----&amp;gt; breadboard's negative(blue line)&lt;br /&gt;
&lt;br /&gt;
pin19 i2c2_SCL ----&amp;gt; LED matrix's c pin&lt;br /&gt;
&lt;br /&gt;
pin20 i2c2_SDA ----&amp;gt; LED matrix's d pin. &lt;br /&gt;
&lt;br /&gt;
'''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
LED matrix's + - pin ----&amp;gt; breadboard's positive and negative&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire connection.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Here is a hand by hand tutorial about I2C wrote by Dr. Yoder. If you need that [http://www.elinux.org/EBC_Exercise_12_I2C Click here].&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
=== Important facts===&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points which are very important. You may need to understand before you move on:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
=== Theory===&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;0 0 0 1 1 0 0 0(binary)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position of that line will be on, all the other leds will be off.&lt;br /&gt;
As long as you understand this, you can program your own patterns or animations.&lt;br /&gt;
&lt;br /&gt;
=== My Animations Analysis===&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar animation only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
=== Source Code===&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){    //nested loop to make it work&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;br /&gt;
Enjoy it and have fun!&lt;br /&gt;
&lt;br /&gt;
Xia Li&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:41:00Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Wire Connection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture&lt;br /&gt;
pin3 VDD3.3v   ----&amp;gt; breadboard's positive(red line)&lt;br /&gt;
&lt;br /&gt;
pin45 GND      ----&amp;gt; breadboard's negative(blue line)&lt;br /&gt;
&lt;br /&gt;
pin19 i2c2_SCL ----&amp;gt; LED matrix's c pin&lt;br /&gt;
&lt;br /&gt;
pin20 i2c2_SDA ----&amp;gt; LED matrix's d pin. &lt;br /&gt;
&lt;br /&gt;
'''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
LED matrix's + - pin ----&amp;gt; breadboard's positive and negative&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire connection.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Here is a tutorial about I2C wrote by Dr. Yoder. [http://www.elinux.org/EBC_Exercise_12_I2C Click here]&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
=== Important facts===&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points which are very important. You may need to understand before you move on:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
=== Theory===&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;0 0 0 1 1 0 0 0(binary)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position of that line will be on, all the other leds will be off.&lt;br /&gt;
As long as you understand this, you can program your own patterns or animations.&lt;br /&gt;
&lt;br /&gt;
=== My Animations Analysis===&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar animation only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
=== Source Code===&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){    //nested loop to make it work&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;br /&gt;
Enjoy it and have fun!&lt;br /&gt;
&lt;br /&gt;
Xia Li&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:37:01Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Demo of Animation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture&lt;br /&gt;
pin3 VDD3.3v   ----&amp;gt; breadboard's positive(red line)&lt;br /&gt;
&lt;br /&gt;
pin45 GND      ----&amp;gt; breadboard's negative(blue line)&lt;br /&gt;
&lt;br /&gt;
pin19 i2c2_SCL ----&amp;gt; LED matrix's c pin&lt;br /&gt;
&lt;br /&gt;
pin20 i2c2_SDA ----&amp;gt; LED matrix's d pin. &lt;br /&gt;
&lt;br /&gt;
'''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
LED matrix's + - pin ----&amp;gt; breadboard's positive and negative&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire connection.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
=== Important facts===&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points which are very important. You may need to understand before you move on:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
=== Theory===&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;0 0 0 1 1 0 0 0(binary)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position of that line will be on, all the other leds will be off.&lt;br /&gt;
As long as you understand this, you can program your own patterns or animations.&lt;br /&gt;
&lt;br /&gt;
=== My Animations Analysis===&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar animation only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
=== Source Code===&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){    //nested loop to make it work&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;br /&gt;
Enjoy it and have fun!&lt;br /&gt;
&lt;br /&gt;
Xia Li&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:35:50Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Theory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture&lt;br /&gt;
pin3 VDD3.3v   ----&amp;gt; breadboard's positive(red line)&lt;br /&gt;
&lt;br /&gt;
pin45 GND      ----&amp;gt; breadboard's negative(blue line)&lt;br /&gt;
&lt;br /&gt;
pin19 i2c2_SCL ----&amp;gt; LED matrix's c pin&lt;br /&gt;
&lt;br /&gt;
pin20 i2c2_SDA ----&amp;gt; LED matrix's d pin. &lt;br /&gt;
&lt;br /&gt;
'''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
LED matrix's + - pin ----&amp;gt; breadboard's positive and negative&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire connection.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
=== Important facts===&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points which are very important. You may need to understand before you move on:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
=== Theory===&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;0 0 0 1 1 0 0 0(binary)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position of that line will be on, all the other leds will be off.&lt;br /&gt;
As long as you understand this, you can program your own patterns or animations.&lt;br /&gt;
&lt;br /&gt;
=== My Animations Analysis===&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar animation only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
=== Source Code===&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){    //nested loop to make it work&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:30:46Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Theory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture&lt;br /&gt;
pin3 VDD3.3v   ----&amp;gt; breadboard's positive(red line)&lt;br /&gt;
&lt;br /&gt;
pin45 GND      ----&amp;gt; breadboard's negative(blue line)&lt;br /&gt;
&lt;br /&gt;
pin19 i2c2_SCL ----&amp;gt; LED matrix's c pin&lt;br /&gt;
&lt;br /&gt;
pin20 i2c2_SDA ----&amp;gt; LED matrix's d pin. &lt;br /&gt;
&lt;br /&gt;
'''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
LED matrix's + - pin ----&amp;gt; breadboard's positive and negative&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire connection.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
=== Important facts===&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points which are very important. You may need to understand before you move on:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
=== Theory===&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;0 0 0 1 1 0 0 0(binary)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position of that line will be on, all the other leds will be off.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:29:45Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Theory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture&lt;br /&gt;
pin3 VDD3.3v   ----&amp;gt; breadboard's positive(red line)&lt;br /&gt;
&lt;br /&gt;
pin45 GND      ----&amp;gt; breadboard's negative(blue line)&lt;br /&gt;
&lt;br /&gt;
pin19 i2c2_SCL ----&amp;gt; LED matrix's c pin&lt;br /&gt;
&lt;br /&gt;
pin20 i2c2_SDA ----&amp;gt; LED matrix's d pin. &lt;br /&gt;
&lt;br /&gt;
'''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
LED matrix's + - pin ----&amp;gt; breadboard's positive and negative&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire connection.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
=== Important facts===&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points which are very important. You may need to understand before you move on:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
=== Theory===&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;0 0 0 1 1 0 0 0(binary)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:28:03Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Theory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture&lt;br /&gt;
pin3 VDD3.3v   ----&amp;gt; breadboard's positive(red line)&lt;br /&gt;
&lt;br /&gt;
pin45 GND      ----&amp;gt; breadboard's negative(blue line)&lt;br /&gt;
&lt;br /&gt;
pin19 i2c2_SCL ----&amp;gt; LED matrix's c pin&lt;br /&gt;
&lt;br /&gt;
pin20 i2c2_SDA ----&amp;gt; LED matrix's d pin. &lt;br /&gt;
&lt;br /&gt;
'''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
LED matrix's + - pin ----&amp;gt; breadboard's positive and negative&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire connection.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
=== Important facts===&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points which are very important. You may need to understand before you move on:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
=== Theory===&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;0 0 0 1 1 0 0 0(binary)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:27:00Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Important facts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture&lt;br /&gt;
pin3 VDD3.3v   ----&amp;gt; breadboard's positive(red line)&lt;br /&gt;
&lt;br /&gt;
pin45 GND      ----&amp;gt; breadboard's negative(blue line)&lt;br /&gt;
&lt;br /&gt;
pin19 i2c2_SCL ----&amp;gt; LED matrix's c pin&lt;br /&gt;
&lt;br /&gt;
pin20 i2c2_SDA ----&amp;gt; LED matrix's d pin. &lt;br /&gt;
&lt;br /&gt;
'''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
LED matrix's + - pin ----&amp;gt; breadboard's positive and negative&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire connection.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
=== Important facts===&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points which are very important. You may need to understand before you move on:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
=== Theory===&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:25:20Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Software Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture&lt;br /&gt;
pin3 VDD3.3v   ----&amp;gt; breadboard's positive(red line)&lt;br /&gt;
&lt;br /&gt;
pin45 GND      ----&amp;gt; breadboard's negative(blue line)&lt;br /&gt;
&lt;br /&gt;
pin19 i2c2_SCL ----&amp;gt; LED matrix's c pin&lt;br /&gt;
&lt;br /&gt;
pin20 i2c2_SDA ----&amp;gt; LED matrix's d pin. &lt;br /&gt;
&lt;br /&gt;
'''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
LED matrix's + - pin ----&amp;gt; breadboard's positive and negative&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire connection.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
=== Important facts===&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
=== Theory===&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:22:14Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Wire Connection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture&lt;br /&gt;
pin3 VDD3.3v   ----&amp;gt; breadboard's positive(red line)&lt;br /&gt;
&lt;br /&gt;
pin45 GND      ----&amp;gt; breadboard's negative(blue line)&lt;br /&gt;
&lt;br /&gt;
pin19 i2c2_SCL ----&amp;gt; LED matrix's c pin&lt;br /&gt;
&lt;br /&gt;
pin20 i2c2_SDA ----&amp;gt; LED matrix's d pin. &lt;br /&gt;
&lt;br /&gt;
'''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
LED matrix's + - pin ----&amp;gt; breadboard's positive and negative&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire connection.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:17:34Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Wire Connection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture, Pin3 VDD3.3v and pin45 connect to breadboard's positive and negative line which are red and blue. Pin19 and pin20 are i2c2_SCL and i2c2_SDA which will be connected to LED matrix's c pin and d pin. '''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire connection.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:15:57Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Wire Connection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture, Pin3 VDD3.3v and pin45 connect to breadboard's positive and negative line which are red and blue. Pin19 and pin20 are i2c2_SCL and i2c2_SDA which will be connected to LED matrix's c pin and d pin. '''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire_connection.JPG|500px]]&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:15:43Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Wire Connection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture, Pin3 VDD3.3v and pin45 connect to breadboard's positive and negative line which are red and blue. Pin19 and pin20 are i2c2_SCL and i2c2_SDA which will be connected to LED matrix's c pin and d pin. '''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:Wire connection.JPG|500px]]&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:15:33Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Wire Connection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture, Pin3 VDD3.3v and pin45 connect to breadboard's positive and negative line which are red and blue. Pin19 and pin20 are i2c2_SCL and i2c2_SDA which will be connected to LED matrix's c pin and d pin. '''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
The wire connection picture:&lt;br /&gt;
&lt;br /&gt;
[[File:wire connection.JPG|500px]]&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/File:Wire_connection.jpg</id>
		<title>File:Wire connection.jpg</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/File:Wire_connection.jpg"/>
				<updated>2012-10-18T03:14:00Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: Shows wire connection on mini project2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shows wire connection on mini project2&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:12:06Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Wire Connection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture, Pin3 VDD3.3v and pin45 connect to breadboard's positive and negative line which are red and blue. Pin19 and pin20 are i2c2_SCL and i2c2_SDA which will be connected to LED matrix's c pin and d pin. '''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
The wire connection picture&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T03:10:43Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Wire Connection ==&lt;br /&gt;
&lt;br /&gt;
The wire connection part is not very complex. As you can see in the picture, Pin3 VDD3.3v and pin45 connect to breadboard's positive and negative line which are red and blue. Pin19 and pin20 are i2c2_SCL and i2c2_SDA which will be connected to LED matrix's c pin and d pin. '''Don't forget the two 4.3KΩ pull-up resistors.'''&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T00:21:04Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Demo of Animation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to www.youtube.com. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T00:17:08Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Demo of Animation==&lt;br /&gt;
&lt;br /&gt;
I uploaded a video demo of my animation to youtube. The link is: [http://www.youtube.com/watch?v=sZkMx70ZvbI Demo link].&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T00:15:12Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The source code can be download from my github at: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T00:13:41Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T00:13:23Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
Below is the major part of the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T00:12:39Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static __u16 smile_bmp[]={0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 test_bmp[]={0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};&lt;br /&gt;
static __u16 frown_bmp[]={0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C};&lt;br /&gt;
static __u16 neutral_bmp[]={0x3C, 0x42, 0x95, 0x91, 0x91, 0x95, 0x42, 0x3C};&lt;br /&gt;
static __u16 pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18};&lt;br /&gt;
static __u16 pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};&lt;br /&gt;
&lt;br /&gt;
static __u16 line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};&lt;br /&gt;
&lt;br /&gt;
// Demo 1 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 1 is showing...\n&amp;quot;);&lt;br /&gt;
while(counter &amp;lt;= 1)&lt;br /&gt;
{&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic4_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic4_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic3_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic3_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic2_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic2_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (pic1_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(pic1_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
&lt;br /&gt;
counter += 1;&lt;br /&gt;
}&lt;br /&gt;
// Demo 2 is showing...&lt;br /&gt;
printf(&amp;quot;Demo 2 is showing...\n&amp;quot;);&lt;br /&gt;
while(q&amp;gt;=0){&lt;br /&gt;
j=0;&lt;br /&gt;
while(j&amp;lt;=q){&lt;br /&gt;
for(i=0; i&amp;lt;8; i++){&lt;br /&gt;
block[i] = (line_bmp[i]&amp;amp;0xfe) &amp;gt;&amp;gt; 1 |&lt;br /&gt;
(line_bmp[i]&amp;amp;0x01) &amp;lt;&amp;lt; 7;&lt;br /&gt;
}&lt;br /&gt;
res = i2c_smbus_write_i2c_block_data(file, daddress, 16,&lt;br /&gt;
(__u8 *)block);&lt;br /&gt;
&lt;br /&gt;
usleep(500000);&lt;br /&gt;
if(j&amp;lt;q){&lt;br /&gt;
tmp = line_bmp[j];&lt;br /&gt;
line_bmp[j] = line_bmp[j+1];&lt;br /&gt;
line_bmp[j+1] = tmp;&lt;br /&gt;
}&lt;br /&gt;
if(j==q){&lt;br /&gt;
line_bmp[0] = 0xFF;&lt;br /&gt;
}&lt;br /&gt;
j++;&lt;br /&gt;
}&lt;br /&gt;
q--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
daddress = 0x83;// Display off, blinking on&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&lt;br /&gt;
usleep(3000000);&lt;br /&gt;
daddress = 0x80;// Display off&lt;br /&gt;
printf(&amp;quot;writing: 0x%02x\n&amp;quot;, daddress);&lt;br /&gt;
res = i2c_smbus_write_byte(file, daddress);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T00:06:38Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T00:05:58Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
1. i2cbus is 3;&lt;br /&gt;
2. i2c address is 0x70;&lt;br /&gt;
3. oscillator daddress is 0x21;&lt;br /&gt;
4. display on daddress is 0x81;&lt;br /&gt;
5. Full brightness is 0xE7;&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix;&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T00:05:07Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-18T00:03:49Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
pic1_bmp[]={0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18}&lt;br /&gt;
pic2_bmp[]={0x18, 0x3C, 0x7E, 0xE7, 0xE7, 0x7E, 0x3C, 0x18}&lt;br /&gt;
pic3_bmp[]={0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18}&lt;br /&gt;
pic4_bmp[]={0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18}&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;br /&gt;
&lt;br /&gt;
line_bmp[]={0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel</id>
		<title>Adafruit: 8x8 Red LED Matrix Panel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Adafruit:_8x8_Red_LED_Matrix_Panel"/>
				<updated>2012-10-17T23:58:03Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: Created page with &amp;quot;Category:ECE497Category:Adafruit  == Overview ==  My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamon...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]][[Category:Adafruit]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
My mini project 2 is using an Adafriut 8*8 red LED matrix to show 2 animations. First animation is to composite a diamond and then fade out. The second animation is to drop down a horizontal bar to the bottom of the LED matrix until all the lines are being filled. When the two animations were done, the LED matrix will flash 5 times and shut down. &lt;br /&gt;
&lt;br /&gt;
The code that being used in this project is modified from the sample code provided by Dr. Mark A. Yoder. The new version of the code that contained my animation has been commited to my github which you can find at here: [https://github.com/1984xiali/lix_beaglebone Mini-project 2 by Xia Li].&lt;br /&gt;
&lt;br /&gt;
== Software Design ==&lt;br /&gt;
&lt;br /&gt;
After I went through the sample code. I found several points very important and you need to understand:&lt;br /&gt;
1. i2cbus is 3&lt;br /&gt;
2. i2c address is 0x70&lt;br /&gt;
3. oscillator daddress is 0x21&lt;br /&gt;
4. display on daddress is 0x81&lt;br /&gt;
5. Full brightness is 0xE7&lt;br /&gt;
6. array smile_bmp[], frown_bmp[], and neutral_bmp[] are save the hex-decimal value for each line on LED matrix&lt;br /&gt;
&lt;br /&gt;
The theory is when you convert the hex-decimal value of each line to binary value, you will get a 8 bit binary number for each line. Each bit will stand for each led point on the corresponding line. 0 for off, 1 for on.&lt;br /&gt;
&lt;br /&gt;
For example: 0x18 = 1 * 16 + 8 = 24(decimal) = 0 0 0 1 1 0 0 0(binary)&lt;br /&gt;
This value means the 4th and 5th led position will be on, all the others will be off on that line.&lt;br /&gt;
&lt;br /&gt;
After you understand this, you can program your pattern or animation.&lt;br /&gt;
I create 4 patterns for diamond animation:&lt;br /&gt;
&lt;br /&gt;
The horizontal bar only need 1 pattern:&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Lix_Project</id>
		<title>ECE497 Lix Project</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Lix_Project"/>
				<updated>2012-10-07T15:33:24Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Installation Instructions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497 |Project]]&lt;br /&gt;
{{YoderHead}}&lt;br /&gt;
&lt;br /&gt;
Team members: [[user:lix|Xia Li]], (List all the team members here with link to their eLinux User page.  Use my format.&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
Give two sentence intro to the project.&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what works.&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what isn't working.&lt;br /&gt;
&lt;br /&gt;
End with a two sentence conclusion.&lt;br /&gt;
&lt;br /&gt;
The sentence count is approximate and only to give an idea of the expected length.&lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
&lt;br /&gt;
Give step by step instructions on how to install your project on the SPEd2 image.  &lt;br /&gt;
&lt;br /&gt;
* Include your [https://github.com/ github] path as a link like this:  [https://github.com/1984xiali/ https://github.com/1984xiali/].  &lt;br /&gt;
* Include any additional packages installed via '''opkg'''.&lt;br /&gt;
* Include kernel mods.&lt;br /&gt;
* If there is extra hardware needed, include links to where it can be obtained.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Here is where you brag about what your project can do.&lt;br /&gt;
&lt;br /&gt;
Include a [http://www.youtube.com/ YouTube] demo.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
Give a high level overview of the structure of your software.  Are you using GStreamer?  Show a diagram of the pipeline.  Are you running multiple tasks?  Show what they do and how they interact.&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Suggest addition things that could be done with this project.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
{{YoderFoot}}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Lix_Project</id>
		<title>ECE497 Lix Project</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Lix_Project"/>
				<updated>2012-10-07T15:31:29Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: Created page with &amp;quot;Project {{YoderHead}}  Team members: Xia Li, (List all the team members here with link to their eLinux User page.  Use my format.  == Executive ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497 |Project]]&lt;br /&gt;
{{YoderHead}}&lt;br /&gt;
&lt;br /&gt;
Team members: [[user:lix|Xia Li]], (List all the team members here with link to their eLinux User page.  Use my format.&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
Give two sentence intro to the project.&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what works.&lt;br /&gt;
&lt;br /&gt;
Give two sentences telling what isn't working.&lt;br /&gt;
&lt;br /&gt;
End with a two sentence conclusion.&lt;br /&gt;
&lt;br /&gt;
The sentence count is approximate and only to give an idea of the expected length.&lt;br /&gt;
&lt;br /&gt;
== Installation Instructions ==&lt;br /&gt;
&lt;br /&gt;
Give step by step instructions on how to install your project on the SPEd2 image.  &lt;br /&gt;
&lt;br /&gt;
* Include your [https://github.com/ github] path as a link like this:  [https://github.com/MarkAYoder/gitLearn https://github.com/MarkAYoder/gitLearn].  &lt;br /&gt;
* Include any additional packages installed via '''opkg'''.&lt;br /&gt;
* Include kernel mods.&lt;br /&gt;
* If there is extra hardware needed, include links to where it can be obtained.&lt;br /&gt;
&lt;br /&gt;
== User Instructions ==&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, how do you use the program?  Give details here, so if you have a long user manual, link to it here.&lt;br /&gt;
&lt;br /&gt;
== Highlights ==&lt;br /&gt;
&lt;br /&gt;
Here is where you brag about what your project can do.&lt;br /&gt;
&lt;br /&gt;
Include a [http://www.youtube.com/ YouTube] demo.&lt;br /&gt;
&lt;br /&gt;
== Theory of Operation ==&lt;br /&gt;
&lt;br /&gt;
Give a high level overview of the structure of your software.  Are you using GStreamer?  Show a diagram of the pipeline.  Are you running multiple tasks?  Show what they do and how they interact.&lt;br /&gt;
&lt;br /&gt;
== Work Breakdown ==&lt;br /&gt;
&lt;br /&gt;
List the major tasks in your project and who did what.&lt;br /&gt;
&lt;br /&gt;
Also list here what doesn't work yet and when you think it will be finished and who is finishing it.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Suggest addition things that could be done with this project.&lt;br /&gt;
&lt;br /&gt;
== Conclusions ==&lt;br /&gt;
&lt;br /&gt;
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.&lt;br /&gt;
&lt;br /&gt;
{{YoderFoot}}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/EBC_Mini_Project_02</id>
		<title>EBC Mini Project 02</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/EBC_Mini_Project_02"/>
				<updated>2012-09-14T15:46:59Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Adafruit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497 |Mini02]]&lt;br /&gt;
{{YoderHead}}&lt;br /&gt;
&lt;br /&gt;
Pick one of the senors from the [https://www.sparkfun.com/products/11016 SparkFun Sensor Kit] or from [http://adafruit.com Adafruit] and interface it to the Bone. Create a wiki page describing how to use the sensor.&lt;br /&gt;
&lt;br /&gt;
Add your name next to the sensor/display you want to use and pick it up from me.&lt;br /&gt;
&lt;br /&gt;
== Sparkfun ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Name&lt;br /&gt;
! Sensor&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Josh Dugan&lt;br /&gt;
| HMC5883L - Triple-Axis Magnetometer Breakout Board&lt;br /&gt;
| An accurate, simple-to-use digital magnetometer with an I2C interface.&lt;br /&gt;
|-&lt;br /&gt;
| Ross Hansen &amp;amp; Ruffin White&lt;br /&gt;
| ADXL335 - Triple-Axis Accelerometer Breakout Board&lt;br /&gt;
| Senses acceleration along all three axes, with a range of up to ±3g. Fully analog interface.&lt;br /&gt;
ITG-3200&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Triple-Axis Gyro Breakout Board&lt;br /&gt;
| Senses angular velocity along three axes of rotation. Fully digital interface with a range of up to ±2000°/s.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Large Piezo Vibration Sensor - With Mass&lt;br /&gt;
| A flexible film able to sense for vibration, touch, shock, etc. When the film moves back and forth an AC wave is created, with a voltage of up to ±90.&lt;br /&gt;
|-&lt;br /&gt;
| Mark A. Yoder&lt;br /&gt;
| Reed Switch&lt;br /&gt;
| Senses magnetic fields, makes for a great non-contact switch.&lt;br /&gt;
|-&lt;br /&gt;
| Mark A. Yoder&lt;br /&gt;
| 0.25&amp;quot; Magnet Square&lt;br /&gt;
| Plays nicely with the reed switch. Embed the magnet into stuffed animals or inside a box to create a hidden actuator to the reed switch.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0.5&amp;quot; Force Sensitive Resistor&lt;br /&gt;
| A force sensing resistor with a 0.5&amp;quot; diameter sensing area. Great for sensing pressure (i.e. if it's being squeezed).&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| PIR Motion Sensor&lt;br /&gt;
| Easy-to-use motion detector with an analog interface. Power it with 5-12VDC, and you'll be alerted of any movement.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Ultrasonic Rangefinder - Maxbotix LV-EZ1&lt;br /&gt;
| Distance sensor with both analog and RS-232 interfaces, providing sonar range information from 6 to 254 inches.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| HIH-4030 Humidity Sensor&lt;br /&gt;
| A high precision humidity sensor with an analog output.&lt;br /&gt;
|-&lt;br /&gt;
| Andrew Miller&lt;br /&gt;
| IR Receiver Breakout Board&lt;br /&gt;
| An analog interfaced IR receiver, sensitive to a wide range of IR waves. Great for 'listening' to TV remotes.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Mini Photocell&lt;br /&gt;
| The photocell will vary its resistance based on how much light it's exposed to. Will vary from 1kΩ in the light to 10kΩ in the dark.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Optical Detector/Phototransistor&lt;br /&gt;
| An all-in-one infrared emitter and detector. Ideal for sensing black-to-white transitions or can be used to detect nearby objects.&lt;br /&gt;
|-&lt;br /&gt;
| Jesse Brannon&lt;br /&gt;
| BMP085 Barometric Pressure Sensor&lt;br /&gt;
| Low power, high precision barometric pressure sensor with I2C output.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Flex Sensor&lt;br /&gt;
| As the sensor is flexed, the resistance across the sensor increases. Useful for sensing motion or positioning&lt;br /&gt;
|-&lt;br /&gt;
| Chris Good&lt;br /&gt;
| SoftPot&lt;br /&gt;
| These are very thin variable potentiometers. By pressing on various positions along the strip, you vary the resistance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Adafruit ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Name&lt;br /&gt;
! Device&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Matthew Moravec&lt;br /&gt;
| [https://www.adafruit.com/products/512 Analog 2-axis Thumb Joystick]&lt;br /&gt;
| Analog 2-axis Thumb Joystick with Select Button + Breakout Board&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| [https://www.adafruit.com/products/377 Rotary Encoder]&lt;br /&gt;
| This rotary encoder is a high quality 24-pulse encoder, with detents and a nice feel. This encoder also has a push-button built into it so you can press onto the knob to close a separate switch. One side has a 3 pin connector (ground and two coding pins) and the other side has two pins for a normally-open switch.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| [https://www.adafruit.com/products/333 Touch screen (Nintendo DSL digitizer)]&lt;br /&gt;
| This resistive touch screen can be used with a stylus or fingertip and is easy to use with a microcontroller. &lt;br /&gt;
600 ohms across X pins, 300 ohms across Y pins&lt;br /&gt;
4 wire resistive display, on a 0.5mm FPC connector&lt;br /&gt;
|-&lt;br /&gt;
|Xinyu Cheng &lt;br /&gt;
| [https://www.adafruit.com/products/871 Mini 8x8 LED Matrix w/I2C - Yellow]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Mike Junge &amp;amp; Peter Ngo&lt;br /&gt;
|[https://www.adafruit.com/products/959 Mini 8x8 LED Matrix w/I2C - Blue]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Yue Zhang &amp;amp; Xia Li&lt;br /&gt;
|[https://www.adafruit.com/products/870 Mini 8x8 LED Matrix w/I2C - Red]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Alex Drane&lt;br /&gt;
|[https://www.adafruit.com/products/902 Bicolor LED Square Pixel Matrix]&lt;br /&gt;
| The matrices use a driver chip that does all the heavy lifting for you: They have a built in clock so they multiplex the display. They use constant-current drivers for ultra-bright, consistent color, 1/16 step display dimming, all via a simple I2C interface.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| [https://www.adafruit.com/products/812 Green 7-segment clock display]&lt;br /&gt;
| These displays are multiplexed, common-cathode. What that means it that you can use a 74HC595.  Sorry, I didn't order the version with i2c.&lt;br /&gt;
|-&lt;br /&gt;
| Sean Richardson&lt;br /&gt;
| [https://www.adafruit.com/products/306 Digital Addressable RGB LED]&lt;br /&gt;
| These LED strips are fun and glowy. There are 32 RGB LEDs per meter, and you can control each LED individually! We have 5 meters worth!&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|Greg Larmore&lt;br /&gt;
| [https://www.adafruit.com/products/555 16x24 Red LED Matrix Panel]&lt;br /&gt;
| These LED panels take care of all the work of making a big matrix display. Each panel has six 8x8 red matrix modules, for a 16x24 matrix. The panel has a HT1632C chip on the back with does all the multiplexing work for you and has a 3-pin SPI-like serial interface to talk to it and set LEDs on or off (you cannot set the LED to be individually dimmed, as in 'grayscale'). There's a few extras as well, such as being able to change the brightness of the entire display, or blink the entire display at 1 Hz.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{YoderFoot}}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/EBC_Mini_Project_02</id>
		<title>EBC Mini Project 02</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/EBC_Mini_Project_02"/>
				<updated>2012-09-14T15:46:03Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Adafruit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497 |Mini02]]&lt;br /&gt;
{{YoderHead}}&lt;br /&gt;
&lt;br /&gt;
Pick one of the senors from the [https://www.sparkfun.com/products/11016 SparkFun Sensor Kit] or from [http://adafruit.com Adafruit] and interface it to the Bone. Create a wiki page describing how to use the sensor.&lt;br /&gt;
&lt;br /&gt;
Add your name next to the sensor/display you want to use and pick it up from me.&lt;br /&gt;
&lt;br /&gt;
== Sparkfun ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Name&lt;br /&gt;
! Sensor&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Josh Dugan&lt;br /&gt;
| HMC5883L - Triple-Axis Magnetometer Breakout Board&lt;br /&gt;
| An accurate, simple-to-use digital magnetometer with an I2C interface.&lt;br /&gt;
|-&lt;br /&gt;
| Ross Hansen &amp;amp; Ruffin White&lt;br /&gt;
| ADXL335 - Triple-Axis Accelerometer Breakout Board&lt;br /&gt;
| Senses acceleration along all three axes, with a range of up to ±3g. Fully analog interface.&lt;br /&gt;
ITG-3200&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Triple-Axis Gyro Breakout Board&lt;br /&gt;
| Senses angular velocity along three axes of rotation. Fully digital interface with a range of up to ±2000°/s.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Large Piezo Vibration Sensor - With Mass&lt;br /&gt;
| A flexible film able to sense for vibration, touch, shock, etc. When the film moves back and forth an AC wave is created, with a voltage of up to ±90.&lt;br /&gt;
|-&lt;br /&gt;
| Mark A. Yoder&lt;br /&gt;
| Reed Switch&lt;br /&gt;
| Senses magnetic fields, makes for a great non-contact switch.&lt;br /&gt;
|-&lt;br /&gt;
| Mark A. Yoder&lt;br /&gt;
| 0.25&amp;quot; Magnet Square&lt;br /&gt;
| Plays nicely with the reed switch. Embed the magnet into stuffed animals or inside a box to create a hidden actuator to the reed switch.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0.5&amp;quot; Force Sensitive Resistor&lt;br /&gt;
| A force sensing resistor with a 0.5&amp;quot; diameter sensing area. Great for sensing pressure (i.e. if it's being squeezed).&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| PIR Motion Sensor&lt;br /&gt;
| Easy-to-use motion detector with an analog interface. Power it with 5-12VDC, and you'll be alerted of any movement.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Ultrasonic Rangefinder - Maxbotix LV-EZ1&lt;br /&gt;
| Distance sensor with both analog and RS-232 interfaces, providing sonar range information from 6 to 254 inches.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| HIH-4030 Humidity Sensor&lt;br /&gt;
| A high precision humidity sensor with an analog output.&lt;br /&gt;
|-&lt;br /&gt;
| Andrew Miller&lt;br /&gt;
| IR Receiver Breakout Board&lt;br /&gt;
| An analog interfaced IR receiver, sensitive to a wide range of IR waves. Great for 'listening' to TV remotes.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Mini Photocell&lt;br /&gt;
| The photocell will vary its resistance based on how much light it's exposed to. Will vary from 1kΩ in the light to 10kΩ in the dark.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Optical Detector/Phototransistor&lt;br /&gt;
| An all-in-one infrared emitter and detector. Ideal for sensing black-to-white transitions or can be used to detect nearby objects.&lt;br /&gt;
|-&lt;br /&gt;
| Jesse Brannon&lt;br /&gt;
| BMP085 Barometric Pressure Sensor&lt;br /&gt;
| Low power, high precision barometric pressure sensor with I2C output.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Flex Sensor&lt;br /&gt;
| As the sensor is flexed, the resistance across the sensor increases. Useful for sensing motion or positioning&lt;br /&gt;
|-&lt;br /&gt;
| Chris Good&lt;br /&gt;
| SoftPot&lt;br /&gt;
| These are very thin variable potentiometers. By pressing on various positions along the strip, you vary the resistance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Adafruit ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Name&lt;br /&gt;
! Device&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Matthew Moravec&lt;br /&gt;
| [https://www.adafruit.com/products/512 Analog 2-axis Thumb Joystick]&lt;br /&gt;
| Analog 2-axis Thumb Joystick with Select Button + Breakout Board&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| [https://www.adafruit.com/products/377 Rotary Encoder]&lt;br /&gt;
| This rotary encoder is a high quality 24-pulse encoder, with detents and a nice feel. This encoder also has a push-button built into it so you can press onto the knob to close a separate switch. One side has a 3 pin connector (ground and two coding pins) and the other side has two pins for a normally-open switch.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| [https://www.adafruit.com/products/333 Touch screen (Nintendo DSL digitizer)]&lt;br /&gt;
| This resistive touch screen can be used with a stylus or fingertip and is easy to use with a microcontroller. &lt;br /&gt;
600 ohms across X pins, 300 ohms across Y pins&lt;br /&gt;
4 wire resistive display, on a 0.5mm FPC connector&lt;br /&gt;
|-&lt;br /&gt;
|Xinyu Cheng &lt;br /&gt;
| [https://www.adafruit.com/products/871 Mini 8x8 LED Matrix w/I2C - Yellow]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Mike Junge &amp;amp; Peter Ngo&lt;br /&gt;
|[https://www.adafruit.com/products/959 Mini 8x8 LED Matrix w/I2C - Blue]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Yue Zhang&lt;br /&gt;
|Xia Li&lt;br /&gt;
|[https://www.adafruit.com/products/870 Mini 8x8 LED Matrix w/I2C - Red]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Alex Drane&lt;br /&gt;
|[https://www.adafruit.com/products/902 Bicolor LED Square Pixel Matrix]&lt;br /&gt;
| The matrices use a driver chip that does all the heavy lifting for you: They have a built in clock so they multiplex the display. They use constant-current drivers for ultra-bright, consistent color, 1/16 step display dimming, all via a simple I2C interface.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| [https://www.adafruit.com/products/812 Green 7-segment clock display]&lt;br /&gt;
| These displays are multiplexed, common-cathode. What that means it that you can use a 74HC595.  Sorry, I didn't order the version with i2c.&lt;br /&gt;
|-&lt;br /&gt;
| Sean Richardson&lt;br /&gt;
| [https://www.adafruit.com/products/306 Digital Addressable RGB LED]&lt;br /&gt;
| These LED strips are fun and glowy. There are 32 RGB LEDs per meter, and you can control each LED individually! We have 5 meters worth!&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|Greg Larmore&lt;br /&gt;
| [https://www.adafruit.com/products/555 16x24 Red LED Matrix Panel]&lt;br /&gt;
| These LED panels take care of all the work of making a big matrix display. Each panel has six 8x8 red matrix modules, for a 16x24 matrix. The panel has a HT1632C chip on the back with does all the multiplexing work for you and has a 3-pin SPI-like serial interface to talk to it and set LEDs on or off (you cannot set the LED to be individually dimmed, as in 'grayscale'). There's a few extras as well, such as being able to change the brightness of the entire display, or blink the entire display at 1 Hz.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{YoderFoot}}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/EBC_Mini_Project_02</id>
		<title>EBC Mini Project 02</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/EBC_Mini_Project_02"/>
				<updated>2012-09-13T16:35:02Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Adafruit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497 |Mini02]]&lt;br /&gt;
{{YoderHead}}&lt;br /&gt;
&lt;br /&gt;
Pick one of the senors from the [https://www.sparkfun.com/products/11016 SparkFun Sensor Kit] or from [http://adafruit.com Adafruit] and interface it to the Bone. Create a wiki page describing how to use the sensor.&lt;br /&gt;
&lt;br /&gt;
Add your name next to the sensor/display you want to use and pick it up from me.&lt;br /&gt;
&lt;br /&gt;
== Sparkfun ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Name&lt;br /&gt;
! Sensor&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| HMC5883L - Triple-Axis Magnetometer Breakout Board&lt;br /&gt;
| An accurate, simple-to-use digital magnetometer with an I2C interface.&lt;br /&gt;
|-&lt;br /&gt;
| Ross Hansen&lt;br /&gt;
| ADXL335 - Triple-Axis Accelerometer Breakout Board&lt;br /&gt;
| Senses acceleration along all three axes, with a range of up to ±3g. Fully analog interface.&lt;br /&gt;
ITG-3200&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Triple-Axis Gyro Breakout Board&lt;br /&gt;
| Senses angular velocity along three axes of rotation. Fully digital interface with a range of up to ±2000°/s.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Large Piezo Vibration Sensor - With Mass&lt;br /&gt;
| A flexible film able to sense for vibration, touch, shock, etc. When the film moves back and forth an AC wave is created, with a voltage of up to ±90.&lt;br /&gt;
|-&lt;br /&gt;
| Mark A. Yoder&lt;br /&gt;
| Reed Switch&lt;br /&gt;
| Senses magnetic fields, makes for a great non-contact switch.&lt;br /&gt;
|-&lt;br /&gt;
| Mark A. Yoder&lt;br /&gt;
| 0.25&amp;quot; Magnet Square&lt;br /&gt;
| Plays nicely with the reed switch. Embed the magnet into stuffed animals or inside a box to create a hidden actuator to the reed switch.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0.5&amp;quot; Force Sensitive Resistor&lt;br /&gt;
| A force sensing resistor with a 0.5&amp;quot; diameter sensing area. Great for sensing pressure (i.e. if it's being squeezed).&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| PIR Motion Sensor&lt;br /&gt;
| Easy-to-use motion detector with an analog interface. Power it with 5-12VDC, and you'll be alerted of any movement.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Ultrasonic Rangefinder - Maxbotix LV-EZ1&lt;br /&gt;
| Distance sensor with both analog and RS-232 interfaces, providing sonar range information from 6 to 254 inches.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| HIH-4030 Humidity Sensor&lt;br /&gt;
| A high precision humidity sensor with an analog output.&lt;br /&gt;
|-&lt;br /&gt;
| Andrew Miller&lt;br /&gt;
| IR Receiver Breakout Board&lt;br /&gt;
| An analog interfaced IR receiver, sensitive to a wide range of IR waves. Great for 'listening' to TV remotes.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Mini Photocell&lt;br /&gt;
| The photocell will vary its resistance based on how much light it's exposed to. Will vary from 1kΩ in the light to 10kΩ in the dark.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Optical Detector/Phototransistor&lt;br /&gt;
| An all-in-one infrared emitter and detector. Ideal for sensing black-to-white transitions or can be used to detect nearby objects.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| BMP085 Barometric Pressure Sensor&lt;br /&gt;
| Low power, high precision barometric pressure sensor with I2C output.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| Flex Sensor&lt;br /&gt;
| As the sensor is flexed, the resistance across the sensor increases. Useful for sensing motion or positioning&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| SoftPot&lt;br /&gt;
| These are very thin variable potentiometers. By pressing on various positions along the strip, you vary the resistance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Adafruit ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Name&lt;br /&gt;
! Device&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Matthew Moravec&lt;br /&gt;
| [https://www.adafruit.com/products/512 Analog 2-axis Thumb Joystick]&lt;br /&gt;
| Analog 2-axis Thumb Joystick with Select Button + Breakout Board&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| [https://www.adafruit.com/products/377 Rotary Encoder]&lt;br /&gt;
| This rotary encoder is a high quality 24-pulse encoder, with detents and a nice feel. This encoder also has a push-button built into it so you can press onto the knob to close a separate switch. One side has a 3 pin connector (ground and two coding pins) and the other side has two pins for a normally-open switch.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| [https://www.adafruit.com/products/333 Touch screen (Nintendo DSL digitizer)]&lt;br /&gt;
| This resistive touch screen can be used with a stylus or fingertip and is easy to use with a microcontroller. &lt;br /&gt;
600 ohms across X pins, 300 ohms across Y pins&lt;br /&gt;
4 wire resistive display, on a 0.5mm FPC connector&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| [https://www.adafruit.com/products/871 Mini 8x8 LED Matrix w/I2C - Yellow]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Mike Junge&lt;br /&gt;
|[https://www.adafruit.com/products/959 Mini 8x8 LED Matrix w/I2C - Blue]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|[https://www.adafruit.com/products/870 Mini 8x8 LED Matrix w/I2C - Red]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Alex Drane&lt;br /&gt;
|[https://www.adafruit.com/products/902 Bicolor LED Square Pixel Matrix]&lt;br /&gt;
| The matrices use a driver chip that does all the heavy lifting for you: They have a built in clock so they multiplex the display. They use constant-current drivers for ultra-bright, consistent color, 1/16 step display dimming, all via a simple I2C interface.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| [https://www.adafruit.com/products/812 Green 7-segment clock display]&lt;br /&gt;
| These displays are multiplexed, common-cathode. What that means it that you can use a 74HC595.  Sorry, I didn't order the version with i2c.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| [https://www.adafruit.com/products/306 Digital Addressable RGB LED]&lt;br /&gt;
| These LED strips are fun and glowy. There are 32 RGB LEDs per meter, and you can control each LED individually! We have 5 meters worth!&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|Xia Li&lt;br /&gt;
| [https://www.adafruit.com/products/555 16x24 Red LED Matrix Panel]&lt;br /&gt;
| These LED panels take care of all the work of making a big matrix display. Each panel has six 8x8 red matrix modules, for a 16x24 matrix. The panel has a HT1632C chip on the back with does all the multiplexing work for you and has a 3-pin SPI-like serial interface to talk to it and set LEDs on or off (you cannot set the LED to be individually dimmed, as in 'grayscale'). There's a few extras as well, such as being able to change the brightness of the entire display, or blink the entire display at 1 Hz.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{YoderFoot}}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Contributions_and_Project_Status</id>
		<title>ECE497 Contributions and Project Status</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Contributions_and_Project_Status"/>
				<updated>2012-09-06T12:12:25Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Project Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497 |Contributions]]&lt;br /&gt;
{{YoderHead}}&lt;br /&gt;
&lt;br /&gt;
== Fall 2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Project Status ===&lt;br /&gt;
&lt;br /&gt;
Please edit this page and add your project to this list. Copy my [[ECE497 Project Template]] to your own eLinux page and include the title of your project in the name of the page.  &lt;br /&gt;
&lt;br /&gt;
Please make the list alphabetical by family name.&lt;br /&gt;
&lt;br /&gt;
Take a look at what you and others have contributed.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
! Contributions&lt;br /&gt;
! Project&lt;br /&gt;
! git repository&lt;br /&gt;
|-&lt;br /&gt;
| [[User:atniptw | Tom Atnip]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| [https://github.com/atniptw/ atniptw]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:larmorgs | Greg Larmore]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:jessebrannon | Jesse Brannon]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:Xinyu1991 | Xinyu Cheng]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| [https://github.com/xinyu1991]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:draneaw | Alex Drane]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 draneaw Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/draneaw/My-Beagle-Project draneaw]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:duganje | Josh Dugan]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 duganje Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/duganje/ duganje]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Geislekj | Kevin Geisler]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| [https://github.com/geislekj/ geislekj]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:chris.good | Christopher A Good]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:hansenrl | Ross Hansen]]&lt;br /&gt;
| [[Special:Contributions/hansenrl|contrib]]&lt;br /&gt;
| [[ECE497 hansenrl Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/hansenrl/ Hansenrl]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:jungeml | Michael Junge]]&lt;br /&gt;
| [[Special:Contributions/jungeml|contrib]]&lt;br /&gt;
| [[ECE497 jungeml Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/jungeml/ Jungeml]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Lix | Xia Li]]&lt;br /&gt;
| [[Special:Contributions/Lix|contrib]]&lt;br /&gt;
| [[ECE497 Lix Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/1984xiali/ xiali]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:mmoravec | Matthew Moravec]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 mmoravec Project | My Beagle Project]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ngop | Peter Ngo]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 ngop Project | My Beagle Project]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:shinnsm|Stephen Shinn]]&lt;br /&gt;
| [[Special:Contributions/shinnsm|contrib]]&lt;br /&gt;
| Project TBD&lt;br /&gt;
| [https://github.com/shinnsm shinnsm]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ruff | Ruffin White]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 ruff Project | My Beagle Project]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Yoder | Mark A. Yoder]]&lt;br /&gt;
| [[Special:Contributions/Yoder | contrib]]&lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| [https://github.com/MarkAYoder MarkAYoder]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Popenhjc | James Popenhagen]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 popenhjc Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/popenhjc/ popenhjc]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Whiteer | Elias White]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 whiteer Project | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:Richarsm | Sean Richardson]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 richarsm Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/seanrich Sean Richardson]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Millerap | Andrew Miller]]&lt;br /&gt;
|&lt;br /&gt;
| [[ECE 497 millerap Project | My Beagle Project]]&lt;br /&gt;
|-| &lt;br /&gt;
| [[User:Astroricks | Yue Zhang]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Yue Zhang Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/Astroricks/Beagle-Project Yue Zhang]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Winter 2011-2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Contributions ===&lt;br /&gt;
&lt;br /&gt;
# [[Special:Contributions/Yuming | Yuming Cao]]&lt;br /&gt;
# [[Special:Contributions/Yifei | Yifei Li]]&lt;br /&gt;
# [[Special:Contributions/Harrisgw | Greg Harrison]]&lt;br /&gt;
# [[Special:Contributions/mac | Jack Ma]]&lt;br /&gt;
# [[Special:Contributions/Gemini91 | Guanqun Wang]]&lt;br /&gt;
# [[Special:Contributions/Yanj | Mona Yan]]&lt;br /&gt;
# [[Special:Contributions/Yoder | Mark A. Yoder]]&lt;br /&gt;
# [[Special:Contributions/Yuhasmj | Michael Yuhas]]&lt;br /&gt;
# [[Special:Contributions/Ziyi Zhang | Ziyi Zhang]]&lt;br /&gt;
# [[Special:Contributions/Zitnikdj | David Zitnik]]&lt;br /&gt;
# [[Special:Contributions/Zitnikdj | Alex Drane]]&lt;br /&gt;
# [[Special:Contributions/jessebrannon | Jesse Brannon]]&lt;br /&gt;
# [[Special:Contributions/jungeml | Michael Junge]]&lt;br /&gt;
&lt;br /&gt;
=== Project Status ===&lt;br /&gt;
&lt;br /&gt;
# [[User:Yoder | Mark A. Yoder]], [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
# [[user:Yanj|Mona Yan]] and [[user:Harrisgw| Greg Harrison]], [[PS EYE QT PROJECT | Playstation Eye Audio with Qt]]&lt;br /&gt;
# [[user:Caogecym | Yuming Cao]] and [[user:Ziyi Zhang | Ziyi Zhang]], [[Node.js Weather Station]]&lt;br /&gt;
# [[user:Yifei| Yifei Li]] and [[user:Gemini91| Guanqun Wang]], [[ Kinect Project | Play games using Kinect on Beagleboard]]&lt;br /&gt;
# [[user:Yuhasmj| Michael J. Yuhas]] and [[user:mac | Jack Ma]], [[ Multiple Partitions via U-boot | Multiple Partitions via U-boot ]]&lt;br /&gt;
# [[user:Zitnikdj| David Zitnik]], [[ ECE497 Project: Twitter Java Application | Twitter Java Application ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{YoderFoot}}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Contributions_and_Project_Status</id>
		<title>ECE497 Contributions and Project Status</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Contributions_and_Project_Status"/>
				<updated>2012-09-06T12:09:48Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497 |Contributions]]&lt;br /&gt;
{{YoderHead}}&lt;br /&gt;
&lt;br /&gt;
== Fall 2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Project Status ===&lt;br /&gt;
&lt;br /&gt;
Please edit this page and add your project to this list. Copy my [[ECE497 Project Template]] to your own eLinux page and include the title of your project in the name of the page.  &lt;br /&gt;
&lt;br /&gt;
Please make the list alphabetical by family name.&lt;br /&gt;
&lt;br /&gt;
Take a look at what you and others have contributed.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
! Contributions&lt;br /&gt;
! Project&lt;br /&gt;
! git repository&lt;br /&gt;
|-&lt;br /&gt;
| [[User:atniptw | Tom Atnip]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| [https://github.com/atniptw/ atniptw]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:larmorgs | Greg Larmore]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:jessebrannon | Jesse Brannon]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:Xinyu1991 | Xinyu Cheng]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| [https://github.com/xinyu1991]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:draneaw | Alex Drane]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 draneaw Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/draneaw/My-Beagle-Project draneaw]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:duganje | Josh Dugan]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 duganje Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/duganje/ duganje]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Geislekj | Kevin Geisler]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| [https://github.com/geislekj/ geislekj]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:chris.good | Christopher A Good]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:hansenrl | Ross Hansen]]&lt;br /&gt;
| [[Special:Contributions/hansenrl|contrib]]&lt;br /&gt;
| [[ECE497 hansenrl Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/hansenrl/ Hansenrl]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:jungeml | Michael Junge]]&lt;br /&gt;
| [[Special:Contributions/jungeml|contrib]]&lt;br /&gt;
| [[ECE497 jungeml Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/jungeml/ Jungeml]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Lix | Xia Li]]&lt;br /&gt;
| [[Special:Contributions/Lix|contrib]]&lt;br /&gt;
| [[ECE497 Lix Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/1984xiali/ xiali]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| [[User:mmoravec | Matthew Moravec]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 mmoravec Project | My Beagle Project]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ngop | Peter Ngo]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 ngop Project | My Beagle Project]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:shinnsm|Stephen Shinn]]&lt;br /&gt;
| [[Special:Contributions/shinnsm|contrib]]&lt;br /&gt;
| Project TBD&lt;br /&gt;
| [https://github.com/shinnsm shinnsm]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ruff | Ruffin White]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 ruff Project | My Beagle Project]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Yoder | Mark A. Yoder]]&lt;br /&gt;
| [[Special:Contributions/Yoder | contrib]]&lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| [https://github.com/MarkAYoder MarkAYoder]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Popenhjc | James Popenhagen]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 popenhjc Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/popenhjc/ popenhjc]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Whiteer | Elias White]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 whiteer Project | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:Richarsm | Sean Richardson]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 richarsm Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/seanrich Sean Richardson]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Millerap | Andrew Miller]]&lt;br /&gt;
|&lt;br /&gt;
| [[ECE 497 millerap Project | My Beagle Project]]&lt;br /&gt;
|-| &lt;br /&gt;
| [[User:Astroricks | Yue Zhang]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Yue Zhang Project | My Beagle Project]]&lt;br /&gt;
| [https://github.com/Astroricks/Beagle-Project Yue Zhang]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Winter 2011-2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Contributions ===&lt;br /&gt;
&lt;br /&gt;
# [[Special:Contributions/Yuming | Yuming Cao]]&lt;br /&gt;
# [[Special:Contributions/Yifei | Yifei Li]]&lt;br /&gt;
# [[Special:Contributions/Harrisgw | Greg Harrison]]&lt;br /&gt;
# [[Special:Contributions/mac | Jack Ma]]&lt;br /&gt;
# [[Special:Contributions/Gemini91 | Guanqun Wang]]&lt;br /&gt;
# [[Special:Contributions/Yanj | Mona Yan]]&lt;br /&gt;
# [[Special:Contributions/Yoder | Mark A. Yoder]]&lt;br /&gt;
# [[Special:Contributions/Yuhasmj | Michael Yuhas]]&lt;br /&gt;
# [[Special:Contributions/Ziyi Zhang | Ziyi Zhang]]&lt;br /&gt;
# [[Special:Contributions/Zitnikdj | David Zitnik]]&lt;br /&gt;
# [[Special:Contributions/Zitnikdj | Alex Drane]]&lt;br /&gt;
# [[Special:Contributions/jessebrannon | Jesse Brannon]]&lt;br /&gt;
# [[Special:Contributions/jungeml | Michael Junge]]&lt;br /&gt;
&lt;br /&gt;
=== Project Status ===&lt;br /&gt;
&lt;br /&gt;
# [[User:Yoder | Mark A. Yoder]], [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
# [[user:Yanj|Mona Yan]] and [[user:Harrisgw| Greg Harrison]], [[PS EYE QT PROJECT | Playstation Eye Audio with Qt]]&lt;br /&gt;
# [[user:Caogecym | Yuming Cao]] and [[user:Ziyi Zhang | Ziyi Zhang]], [[Node.js Weather Station]]&lt;br /&gt;
# [[user:Yifei| Yifei Li]] and [[user:Gemini91| Guanqun Wang]], [[ Kinect Project | Play games using Kinect on Beagleboard]]&lt;br /&gt;
# [[user:Yuhasmj| Michael J. Yuhas]] and [[user:mac | Jack Ma]], [[ Multiple Partitions via U-boot | Multiple Partitions via U-boot ]]&lt;br /&gt;
# [[user:Zitnikdj| David Zitnik]], [[ ECE497 Project: Twitter Java Application | Twitter Java Application ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{YoderFoot}}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/EBC_Exercise_08_Installing_Development_Tools</id>
		<title>EBC Exercise 08 Installing Development Tools</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/EBC_Exercise_08_Installing_Development_Tools"/>
				<updated>2012-09-06T10:53:29Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Finding the Correct Kernel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]]&lt;br /&gt;
{{YoderHead}}&lt;br /&gt;
&lt;br /&gt;
Early in the class most of the exercises we will do will all run on the BeagleBoard. You'll be able to edit ([http://projects.gnome.org/gedit/ gedit]), compile ([http://gcc.gnu.org/ gcc]) and run all on the Beagle.  Later, when we start compiling the kernel [http://www.kernel.org/] or the boot loader, ([http://www.denx.de/wiki/U-Boot U-boot]) you will need to cross compile on a Linux machine and copy the results to the Beagle.&lt;br /&gt;
&lt;br /&gt;
The purpose of this exercise is to install all the tools needed for compiling on your host so they will be ready when you need them.&lt;br /&gt;
&lt;br /&gt;
Instructions for building Ångström are given [http://www.angstrom-distribution.org/building-angstrom here]; however there are a few changes you have to make.  Here's what I did.&lt;br /&gt;
&lt;br /&gt;
'''Tip:''' Run this exercise using a wired connection if you can. The Ubuntu wireless driver can be finicky, and if it stops working you'll have to restart some of this.&lt;br /&gt;
&lt;br /&gt;
== Install development environment ==&lt;br /&gt;
&lt;br /&gt;
The step is to get the crosscompilers, etc. installed. Generally you do this install on your local copy of Linux.  Some of these installs can take a long time (one took me 12 hours, slow download times), so you may want to install on a remote server that's always connected to the internet. If so, see the tips [[ | below]]&lt;br /&gt;
&lt;br /&gt;
=== Get the setup scripts ===&lt;br /&gt;
&lt;br /&gt;
First install &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; by running the following on your host computer.&lt;br /&gt;
&lt;br /&gt;
 host$ '''sudo apt-get install git-core'''&lt;br /&gt;
&lt;br /&gt;
(Here is a nice [http://progit.org/book/ git tutorial].  Take a look at it if you want to understand the commands that follow. We'll explore it in more depth in a later exercise.)&lt;br /&gt;
&lt;br /&gt;
Then run the following to load the meta data.&lt;br /&gt;
&lt;br /&gt;
I have everything in a &amp;lt;code&amp;gt;~/BeagleBoard&amp;lt;/code&amp;gt;, so here is how I setup things:&lt;br /&gt;
&lt;br /&gt;
 host$ '''cd'''&lt;br /&gt;
 host$ '''mkdir -p BeagleBoard'''&lt;br /&gt;
 host$ '''cd BeagleBoard'''&lt;br /&gt;
 host$ '''git clone git://github.com/Angstrom-distribution/setup-scripts.git oe'''&lt;br /&gt;
 host$ '''cd oe'''&lt;br /&gt;
&lt;br /&gt;
(The git took 4.5 seconds.)&lt;br /&gt;
This creates a directory for open embedded (&amp;lt;code&amp;gt;oe&amp;lt;/code&amp;gt;) and gets the script to download Ångström.  What files do you see?&lt;br /&gt;
&lt;br /&gt;
=== Setting up for the BeagleBoard ===&lt;br /&gt;
&lt;br /&gt;
Now let's setup &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; for our needs:&lt;br /&gt;
 $ gedit conf/local.conf&lt;br /&gt;
Add the following to the '''end''' of the file.&lt;br /&gt;
 MACHINE ?= &amp;quot;beagleboard&amp;quot; &lt;br /&gt;
Look at this block of lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Make use of SMP and fast disks&lt;br /&gt;
PARALLEL_MAKE = &amp;quot;-j2&amp;quot;&lt;br /&gt;
BB_NUMBER_THREADS = &amp;quot;2&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here you can tell it how many parallel threads to run.  If you have several cores on your machine, make this number big.  If you have only one core, you might be better performance setting it to 1. If you have no clue which value to pick, Gentoo users suggest 1 more than the number of cores in your computer. More details are [http://wiki.openembedded.org/index.php/Advanced_configuration here].&lt;br /&gt;
* PARALLEL_MAKE sets the number &amp;quot;gcc&amp;quot; threads (same as make -j4 at compile time&lt;br /&gt;
* BB_NUMBER_THREADS sets the number of bitbake threads, (one thread can be downloading, while another compiles)&lt;br /&gt;
&lt;br /&gt;
To save you a lot of time, it is useful to disable locale generation for all but the one you need.  Add this to local.conf&lt;br /&gt;
 GLIBC_GENERATE_LOCALES = &amp;quot;en_US.UTF-8 en_GB.UTF-8 de_DE.UTF-8 fr_FR.UTF-8 pt_BR.UTF-8 es_ES.UTF-8 kn_IN.UTF-8 ml_IN.UTF-8 ta_IN.UTF-8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now run:&lt;br /&gt;
&lt;br /&gt;
 host$ '''./oebb.sh config beagleboard'''&lt;br /&gt;
&lt;br /&gt;
I got some errors; some things are missing&lt;br /&gt;
 host$ '''ls -ls /bin/sh'''&lt;br /&gt;
 0 lrwxrwxrwx 1 root root 4 Mar 29 14:53 /bin/sh -&amp;gt; dash&lt;br /&gt;
 host$ '''sudo rm /bin/sh'''&lt;br /&gt;
 host$ '''sudo ln -s /bin/bash /bin/sh'''&lt;br /&gt;
 host$ '''ls -ls /bin/sh'''&lt;br /&gt;
 0 lrwxrwxrwx 1 root root 9 Aug 30 10:38 /bin/sh -&amp;gt; /bin/bash&lt;br /&gt;
 host$ '''sudo apt-get install gawk'''&lt;br /&gt;
&lt;br /&gt;
Now try again&lt;br /&gt;
 host$ '''./oebb.sh config beagleboard'''&lt;br /&gt;
 host$ '''./oebb.sh update'''&lt;br /&gt;
&lt;br /&gt;
This will bring in all the tools you need.  The config took about 3.5 minutes on my machine, update took about 1 minute.&lt;br /&gt;
&lt;br /&gt;
=== Build a small program ===&lt;br /&gt;
&lt;br /&gt;
Before the first time you run bitbake you need to do the following to set up the environmental variables:&lt;br /&gt;
 host$ '''source ~/.oe/environment-angstromv2012.05'''&lt;br /&gt;
&lt;br /&gt;
Take a look in the file and see what it is doing.&lt;br /&gt;
 host$ '''less ~/.oe/environment-angstromv2012.05'''&lt;br /&gt;
&lt;br /&gt;
To see if everything is ready, run the following&lt;br /&gt;
&lt;br /&gt;
 host$ '''bitbake nano'''&lt;br /&gt;
&lt;br /&gt;
nano is a small editor.  We really don't need nano, but if it can be compiled we know we have everything in place.  I get the following error when I run the bitbake:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Pseudo is not present but is required, building this first before the main build&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
ERROR:  Poky's config sanity checker detected a potential misconfiguration.&lt;br /&gt;
    Either fix the cause of this error or at your own risk disable the checker (see sanity.conf).&lt;br /&gt;
    Following is the list of potential problems / advisories:&lt;br /&gt;
&lt;br /&gt;
    Please install following missing utilities: diffstat,texi2html,makeinfo,cvs,svn,chrpath&lt;br /&gt;
&lt;br /&gt;
ERROR: Execution of event handler 'check_sanity_eventhandler' failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
So, some programs are missing.  Install them with:&lt;br /&gt;
 host$ '''sudo apt-get install diffstat texi2html texinfo subversion chrpath gettext'''&lt;br /&gt;
This took just a few minutes.&lt;br /&gt;
&lt;br /&gt;
Now run:&lt;br /&gt;
 host$ '''bitbake nano'''&lt;br /&gt;
This will take a while. Mine first said it has 77 tasks to do.  Once those were done it had 1113 tasks.&lt;br /&gt;
&lt;br /&gt;
Below is a table of the times from last year.  Add your bitbake time to this year's table.&lt;br /&gt;
{| style=&amp;quot;color:green; background-color:#ffffcc;&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ Initial &amp;lt;tt&amp;gt;bitbake nano&amp;lt;/tt&amp;gt; Winter 2011-2012 runtimes&lt;br /&gt;
! Processor&lt;br /&gt;
! Settings&lt;br /&gt;
! Run Time&lt;br /&gt;
|-&lt;br /&gt;
| 8 Core virtual machine&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j8&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;8&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
| 2.5 hours&lt;br /&gt;
|-&lt;br /&gt;
| Intel Core 2 Duo T7800, 2.60 GHz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j2&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;2&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
| 1:55 &lt;br /&gt;
|-&lt;br /&gt;
| AMD Phenom(tm) II X3 720 Processor, 2.80 GHz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j3&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;3&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
| 1:44 &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ Initial &amp;lt;tt&amp;gt;bitbake nano&amp;lt;/tt&amp;gt; 2011 runtimes&lt;br /&gt;
! Processor&lt;br /&gt;
! Settings&lt;br /&gt;
! Run Time&lt;br /&gt;
|-&lt;br /&gt;
| Dell E521 with AMD Athlon 64 dual-core&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j4&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&amp;lt;br&amp;gt;Psyco? Yes.&lt;br /&gt;
| 1.5 hours&lt;br /&gt;
|-&lt;br /&gt;
| Intel Core 2 Duo T7800, 2.60 GHz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j1&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;1&amp;quot;&amp;lt;br&amp;gt;Psyco? No.&lt;br /&gt;
| 1:46&lt;br /&gt;
|-&lt;br /&gt;
| Intel Core 2 Duo T7800, 2.60 GHz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j4&amp;quot;&amp;lt;br /&amp;gt;BB_NUMBER_THREADS = &amp;quot;3&amp;quot;&amp;lt;br /&amp;gt;Psyco? Yes.&amp;lt;br /&amp;gt;Ubuntu 10.04 Running in VMWare Workstation 7.1.3 Under Windows 7 32-bit&lt;br /&gt;
| 1:42&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once nano is done building you can find it with:&lt;br /&gt;
 host$ '''find . -name nano'''&lt;br /&gt;
Can you figure out which one is the nano that will run on your Beagle?  I found it here:&lt;br /&gt;
&lt;br /&gt;
 build/tmp-angstrom_v2012_05-eglibc/work/armv7a-angstrom-linux-gnueabi/nano-2.2.5-r2.0/package/usr/bin/nano&lt;br /&gt;
&lt;br /&gt;
== Download and Compile the Kernel ==&lt;br /&gt;
&lt;br /&gt;
The next step is to download and compile the kernel.&lt;br /&gt;
&lt;br /&gt;
We want to keep the kernel source code around so we can experiment with it.  Do this:&lt;br /&gt;
 host$ '''gedit conf/local.conf'''&lt;br /&gt;
Find the line near the '''top''' that says &amp;lt;code&amp;gt;INHERIT += &amp;quot; rm_work &amp;quot;&amp;lt;/code&amp;gt; and comment it out.  This will save the source code.&lt;br /&gt;
 # INHERIT += &amp;quot; rm_work&lt;br /&gt;
&lt;br /&gt;
Exit gedit and do the following:&lt;br /&gt;
&lt;br /&gt;
 host$ '''source ~/.oe/environment-angstromv2012.05'''&lt;br /&gt;
 host$ '''cd ~/BeagleBoard/oe'''&lt;br /&gt;
 host$ '''bitbake virtual/kernel'''&lt;br /&gt;
&lt;br /&gt;
Mine says it has 769 tasks to do.  It took about 1 hour to do them.  Once done you should get a kernel that will work.&lt;br /&gt;
&lt;br /&gt;
If you accidentally run bitbake without commenting out the above line, after it runs you can comment out the INHERIT line and then run&lt;br /&gt;
&lt;br /&gt;
 host$ '''bitbake -c clean virtual/kernel'''&lt;br /&gt;
 host$ '''bitbake -f -c compile virtual/kernel'''&lt;br /&gt;
&lt;br /&gt;
This second run should take less time (one timing: first run took 3.5 hours; the recompiling took 25 minutes).&lt;br /&gt;
&lt;br /&gt;
=== Finding the Correct Kernel ===&lt;br /&gt;
&lt;br /&gt;
When you do the '''bitbake virtual/kernel''' you get the most recent kernel. How do you know which version you got?  Look in the source directory.&lt;br /&gt;
&lt;br /&gt;
 host$ '''cd ~/BeagleBoard/oe; ls -F'''&lt;br /&gt;
 build/  conf/  oebb.sh*  pseudodone  scripts/  sources/&lt;br /&gt;
&lt;br /&gt;
Take a look in the '''sources''' directory.&lt;br /&gt;
&lt;br /&gt;
 host:~/BeagleBoard/oe$ '''ls -F sources'''&lt;br /&gt;
 bitbake/        meta-ettus/     meta-nslu2/         meta-ti/&lt;br /&gt;
 downloads/      meta-handheld/  meta-openembedded/  meta-xilinx/&lt;br /&gt;
 layers.txt      meta-intel/     meta-openpandora/   openembedded-core/&lt;br /&gt;
 meta-angstrom/  meta-java/      meta-opie/&lt;br /&gt;
 meta-browser/   meta-kde/       meta-raspberrypi/&lt;br /&gt;
 meta-efikamx/   meta-mono/      meta-smartphone/&lt;br /&gt;
&lt;br /&gt;
Here you see directories that contain information about various repositories that were used in pulling together all the sources used to build the kernel, u-boot, and the cross-compilers. Look around a bit an see what you can learn.&lt;br /&gt;
&lt;br /&gt;
Let's see what was built when we made the kernel.&lt;br /&gt;
&lt;br /&gt;
 host:~/BeagleBoard/oe$ '''cd build; ls -F'''&lt;br /&gt;
 sstate-cache/  tmp-angstrom_v2012_05-eglibc/&lt;br /&gt;
&lt;br /&gt;
We are interested in the second directory. This is where the Angstrom build is kept, it's the 2012 version.  Open Embedded can support other distributions and the software is set up so you can work with more than one distribution as the time. We're only working with Angstrom though.&lt;br /&gt;
&lt;br /&gt;
The '''-eglibc''' tells us what libraries were used in making the build. We'll talk about libraries later.  Look further:&lt;br /&gt;
&lt;br /&gt;
 host:~/BeagleBoard/oe/build$ '''cd tmp-angstrom_v2012_05-eglibc/; ls -F'''&lt;br /&gt;
 abi_version    ccache/   qa.log           stamps/    work-shared/&lt;br /&gt;
 buildhistory/  deploy/   saved_tmpdir     sysroots/&lt;br /&gt;
 cache/         pkgdata/  sstate-control/  work/&lt;br /&gt;
&lt;br /&gt;
I'm not sure what all of these are for, but I know the cross-compilers are kept in '''sysroots'''. Go and explore.  See if you can find them.  We'll work with them in a later exercise. What we want is in the '''work''' directory:&lt;br /&gt;
&lt;br /&gt;
 host:~/BeagleBoard/oe/build/tmp-angstrom_v2012_05-eglibc$ '''cd work; ls -F'''&lt;br /&gt;
 all-angstrom-linux/             beagleboard-angstrom-linux-gnueabi/&lt;br /&gt;
 armv7a-angstrom-linux-gnueabi/  x86_64-linux/&lt;br /&gt;
&lt;br /&gt;
These directories contain tools based on what they work on.  '''x86_64-linux''', for example, has the tools that run on your host computer.  '''armv7a-angstrom-linux-gnueabi''' has things that run on all arm processors.  '''beagleboard-angstrom-linux-gnueabi''' has things that are Beagle specific, and that's where we find the kernel.&lt;br /&gt;
&lt;br /&gt;
 host:~/BeagleBoard/oe/build/tmp-angstrom_v2012_05-eglibc/work$ '''cd beagleboard-angstrom-linux-gnueabi/; ls -F'''&lt;br /&gt;
 linux-mainline-3.2.18-r121b/&lt;br /&gt;
&lt;br /&gt;
It looks like we have the 3.2.18 version of the kernel.  Here's how you find out what kernel version have we've been running on the Beagle.  On the Beagle run:&lt;br /&gt;
&lt;br /&gt;
 beagle$ '''uname -a'''&lt;br /&gt;
 Linux beaglebone 3.2.5+ #1 Mon Feb 13 19:22:44 CET 2012 armv7l GNU/Linux&lt;br /&gt;
&lt;br /&gt;
It looks like we're running the 3.2.5+ kernel. But what if you don't want the most recent kernel? You need to find the bitbake recipe for the kernel you are running.  Here's how I did it, back to the host:&lt;br /&gt;
&lt;br /&gt;
 host$ '''cd ~/BeagleBoard/oe'''&lt;br /&gt;
 host$ '''find . -name &amp;quot;*2.6.32*&amp;quot; | grep recipe'''&lt;br /&gt;
 ./sources/meta-ti/recipes-kernel/linux/linux-omap-psp-2.6.32&lt;br /&gt;
 ./sources/meta-ti/recipes-kernel/linux/linux-omap-psp_2.6.32.bb&lt;br /&gt;
&lt;br /&gt;
The '''find''' command looks for files and directories that contain the string '''2.6.32''', the '''grep''' command then displays only those that contain the string '''recipe''' in the name. What you find is the the name of the recipe for building the kernel we're interested in.  Now all you have to do is bitbake it.  Be sure the '''conf/local.conf''' file is set as described earlier so that the sources aren't deleted.&lt;br /&gt;
&lt;br /&gt;
Note: '''Don't do this just yet.  I'm not sure which version we need.'''&lt;br /&gt;
&lt;br /&gt;
 host$ '''source ~/.oe/environment-angstromv2012.05'''&lt;br /&gt;
 host$ '''bitbake linux-omap-psp-2.6.32'''&lt;br /&gt;
&lt;br /&gt;
I think mine took a couple of hours.&lt;br /&gt;
&lt;br /&gt;
== Download and Compile U-boot ==&lt;br /&gt;
&lt;br /&gt;
While were' at it, let's get the boot loader we'll be using...&lt;br /&gt;
&lt;br /&gt;
 host$ '''bitbake u-boot'''&lt;br /&gt;
&lt;br /&gt;
Mine took about 8 minutes.&lt;br /&gt;
&lt;br /&gt;
Once installed you are ready for kernel work.&lt;br /&gt;
&lt;br /&gt;
== Installing on a Remote Machine ==&lt;br /&gt;
&lt;br /&gt;
Installing the cross development tools and the kernel on a laptop is nice, but sometimes the downloads are too long for such a portable device.  I've had a bitbake run some 12 hours.  Another option is to use a remote machine.  In my case our CSSE department has created a virtual machine with Ubuntu 12.04 installed on it.  &lt;br /&gt;
&lt;br /&gt;
To install on a remote machine are the same as above;  However here's a couple of tips to make it easier.  &lt;br /&gt;
&lt;br /&gt;
First, ssh to the remote machine.  Assume the machine is called '''csse''' and your login name is '''beagle'''.&lt;br /&gt;
&lt;br /&gt;
 local$ ssh -CX beagle@csse&lt;br /&gt;
&lt;br /&gt;
You can leave the '''beagle@''' off if you have the same login on both machine.  The '''-C''' says to compress everything that's moved between the machines over the network.  This is good for slow connections.  The '''X''' says to pass the X11 display information to the remote machine.  This way you can run graphical programs, such as gedit, on the remote machine and the graphics will display on your local machine (assuming you are running X11 on your local machine).&lt;br /&gt;
&lt;br /&gt;
If you are '''ssh'''ing a lot check out the tip [[ECE497_Tips_and_Tricks#Suspending_ssh | here]] about suspending ssh and the tip [[ECE497_Tips_and_Tricks#Authorizing_ssh | here]] about authorizing ssh so you don't have to enter your password every time.&lt;br /&gt;
&lt;br /&gt;
Once logged on to the removed machine run&lt;br /&gt;
&lt;br /&gt;
 remote$ sudo apt-get install byobu&lt;br /&gt;
&lt;br /&gt;
This installs '''byobu''' which is a program that lets you connect to the same shell from multiple machines.  Once installed run&lt;br /&gt;
&lt;br /&gt;
 remote$ byobu&lt;br /&gt;
&lt;br /&gt;
You'll see something like:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot-beagle@ubu-may_-_byobu.png | 300px]]&lt;br /&gt;
&lt;br /&gt;
So what?  Run a couple of commands, like '''ls''' or '''who''', then hit '''F6'''.  This will suspend your session.  Now run '''byobu''' again. You'll be back in the same session. The session keeps running, even when you aren't connected.&lt;br /&gt;
&lt;br /&gt;
Do you see the use?&lt;br /&gt;
* Fire up byobu&lt;br /&gt;
* Start a long bitbake&lt;br /&gt;
* Once you are sure it running OK, hit F6 and go home.&lt;br /&gt;
* From home fire up byobu and you'll see your bitbake (probably still running).  &lt;br /&gt;
* You can F6 and check on it later.&lt;br /&gt;
&lt;br /&gt;
Try opening another terminal and running byobu in both terminals.  You'll see the same thing in both.&lt;br /&gt;
&lt;br /&gt;
Run &lt;br /&gt;
&lt;br /&gt;
 $ man byobu&lt;br /&gt;
&lt;br /&gt;
to see what it can do.  Here's a list of shortcuts:&lt;br /&gt;
&lt;br /&gt;
       F2 - Create a new window&lt;br /&gt;
       F3 - Move to previous window&lt;br /&gt;
       F4 - Move to next window&lt;br /&gt;
       F5 - Reload profile&lt;br /&gt;
       F6 - Detach from this session&lt;br /&gt;
       F7 - Enter copy/scrollback mode&lt;br /&gt;
       F8 - Re-title a window&lt;br /&gt;
       F9 - Configuration Menu&lt;br /&gt;
       F12 -  Lock this terminal&lt;br /&gt;
       Ctrl-a $ - show detailed status&lt;br /&gt;
       Ctrl-a R - Reload profile&lt;br /&gt;
       Ctrl-a ! - Toggle key bindings on and off&lt;br /&gt;
       Ctrl-a k - Kill the current window&lt;br /&gt;
&lt;br /&gt;
But there is much more. Go and explore.&lt;br /&gt;
&lt;br /&gt;
{{YoderFoot}}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Editing_a_Wiki</id>
		<title>ECE497 Editing a Wiki</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Editing_a_Wiki"/>
				<updated>2012-08-31T05:04:18Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Fall 2012 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]]&lt;br /&gt;
{{YoderHead}}&lt;br /&gt;
&lt;br /&gt;
Here is a wiki you can practice editing.  Before you can edit it you will have to create an login.  Pick something that will make it easy for me to identify you as part of my class.  Then just add your name and date on the end of the table.&lt;br /&gt;
&lt;br /&gt;
You can get help here: [[Help:Contents]].&lt;br /&gt;
&lt;br /&gt;
If you need help with syntax check out the [[Editing Quickstart Guide|eLinux guide]] or the [http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet Wikipedia Cheatsheet].&lt;br /&gt;
&lt;br /&gt;
== Fall 2012 ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| [[user:Yoder | Mark A. Yoder]]&lt;br /&gt;
| 18-July-2012&lt;br /&gt;
|-&lt;br /&gt;
| [[user:atniptw | Tom Atnip]]&lt;br /&gt;
| 20-July-2012&lt;br /&gt;
|-&lt;br /&gt;
| [[user:bssachin45 | B S Sachin]]&lt;br /&gt;
| 25-July-2012&lt;br /&gt;
|-&lt;br /&gt;
| [[user:ruff | Ruffin White]]&lt;br /&gt;
| 16-August-2012&lt;br /&gt;
|-&lt;br /&gt;
| [[user:Popenhjc | James Popenhagen]]&lt;br /&gt;
| 30-August-2012&lt;br /&gt;
|-&lt;br /&gt;
| [[user:mmoravec | Matthew Moravec]]&lt;br /&gt;
| 30-August-2012&lt;br /&gt;
|-&lt;br /&gt;
| [[user:ngop | Peter Ngo]]&lt;br /&gt;
| 30-August-2012&lt;br /&gt;
|-&lt;br /&gt;
| [[user:duganje | Josh Dugan]]&lt;br /&gt;
| 30-August-2012&lt;br /&gt;
|-&lt;br /&gt;
| [[user:hansenrl | Ross Hansen]]&lt;br /&gt;
| 30-August-2012&lt;br /&gt;
|-&lt;br /&gt;
| [[User:shinnsm|Stephen Shinn]]&lt;br /&gt;
| 30-August-2012&lt;br /&gt;
|-&lt;br /&gt;
| [[User:draneaw|Alex Drane]]&lt;br /&gt;
| 30-August-2012&lt;br /&gt;
|-&lt;br /&gt;
| [[User:larmorgs|Greg Larmore]]&lt;br /&gt;
| 31-August-2012&lt;br /&gt;
|-&lt;br /&gt;
| [[User:jessebrannon|Jesse Brannon]]&lt;br /&gt;
| 31-August-2012&lt;br /&gt;
|-&lt;br /&gt;
| [[User:lix|Xia Li]]&lt;br /&gt;
| 31-August-2012&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Winter 2011-2012 ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| [[user:Yoder | Mark A. Yoder]]&lt;br /&gt;
| 21-Nov-2011&lt;br /&gt;
|-&lt;br /&gt;
| [[user:Yuming | Yuming Cao]]&lt;br /&gt;
| 21-Nov-2011&lt;br /&gt;
|-&lt;br /&gt;
| [[user:Yuhasmj | Michael Yuhas]]&lt;br /&gt;
| 21-Nov-2011&lt;br /&gt;
|-&lt;br /&gt;
| [[user:Yifei | Yifei Li]]&lt;br /&gt;
| 22-Nov-2011&lt;br /&gt;
|-&lt;br /&gt;
| [[user:Ziyi Zhang | Ziyi Zhang]]&lt;br /&gt;
| 24-Nov-2011&lt;br /&gt;
|-&lt;br /&gt;
|[[user: mac | Jack Ma]]&lt;br /&gt;
| 28-Nov-2011&lt;br /&gt;
|-&lt;br /&gt;
| [[user:Zitnikdj | David Zitnik]]&lt;br /&gt;
| 25-Nov-2011&lt;br /&gt;
|-&lt;br /&gt;
| [[user:Harrisgw | Greg Harrison]]&lt;br /&gt;
| 26-Nov-2011&lt;br /&gt;
|-&lt;br /&gt;
| [[user:Yanj | Mona J Yan]]&lt;br /&gt;
| 27-Nov-2011&lt;br /&gt;
|-&lt;br /&gt;
| [[user:Gemini91 | Guanqun Wang]]&lt;br /&gt;
| 28-Nov-2011&lt;br /&gt;
|-&lt;br /&gt;
| [[user:vsn1985 | Narayanan VS]]&lt;br /&gt;
| 28-Nov-2011&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{YoderFoot}}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Lix</id>
		<title>User:Lix</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Lix"/>
				<updated>2012-08-31T04:56:39Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: Created page with &amp;quot;Category:ECE497&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497]]&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Contributions_and_Project_Status</id>
		<title>ECE497 Contributions and Project Status</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Contributions_and_Project_Status"/>
				<updated>2012-08-31T04:51:31Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Contributions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497 |Contributions]]&lt;br /&gt;
{{YoderHead}}&lt;br /&gt;
&lt;br /&gt;
== Fall 2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Project Status ===&lt;br /&gt;
&lt;br /&gt;
Please edit this page and add your project to this list. Copy my [[ECE497 Project Template]] to your own eLinux page and include the title of your project in the name of the page.  &lt;br /&gt;
&lt;br /&gt;
Please make the list alphabetical by family name.&lt;br /&gt;
&lt;br /&gt;
Take a look at what you and others have contributed.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
! Contributions&lt;br /&gt;
! Project&lt;br /&gt;
! git repository&lt;br /&gt;
|-&lt;br /&gt;
| [[User:atniptw | Tom Atnip]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:larmorgs | Greg Larmore]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:jessebrannon | Jesse Brannon]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:duganje | Josh Dugan]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 duganje Project | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:hansenrl | Ross Hansen]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 hansenrl Project | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:mmoravec | Matthew Moravec]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 mmoravec Project | My Beagle Project]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ngop | Peter Ngo]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 ngop Project | My Beagle Project]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:shinnsm|Stephen Shinn]]&lt;br /&gt;
| [[Special:Contributions/shinnsm|contrib]]&lt;br /&gt;
| Project TBD&lt;br /&gt;
| [https://github.com/shinnsm shinnsm]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ruff | Ruffin White]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 ruff Project | My Beagle Project]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Yoder | Mark A. Yoder]]&lt;br /&gt;
| [[Special:Contributions/Yoder | contrib]]&lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| [https://github.com/MarkAYoder MarkAYoder]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Popenhjc | James Popenhagen]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 popenhjc Project | My Beagle Project]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Winter 2011-2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Contributions ===&lt;br /&gt;
&lt;br /&gt;
# [[Special:Contributions/Yuming | Yuming Cao]]&lt;br /&gt;
# [[Special:Contributions/Yifei | Yifei Li]]&lt;br /&gt;
# [[Special:Contributions/Harrisgw | Greg Harrison]]&lt;br /&gt;
# [[Special:Contributions/mac | Jack Ma]]&lt;br /&gt;
# [[Special:Contributions/Gemini91 | Guanqun Wang]]&lt;br /&gt;
# [[Special:Contributions/Yanj | Mona Yan]]&lt;br /&gt;
# [[Special:Contributions/Yoder | Mark A. Yoder]]&lt;br /&gt;
# [[Special:Contributions/Yuhasmj | Michael Yuhas]]&lt;br /&gt;
# [[Special:Contributions/Ziyi Zhang | Ziyi Zhang]]&lt;br /&gt;
# [[Special:Contributions/Zitnikdj | David Zitnik]]&lt;br /&gt;
# [[Special:Contributions/Zitnikdj | Alex Drane]]&lt;br /&gt;
# [[Special:Contributions/jessebrannon | Jesse Brannon]]&lt;br /&gt;
&lt;br /&gt;
=== Project Status ===&lt;br /&gt;
&lt;br /&gt;
# [[User:Yoder | Mark A. Yoder]], [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
# [[user:Yanj|Mona Yan]] and [[user:Harrisgw| Greg Harrison]], [[PS EYE QT PROJECT | Playstation Eye Audio with Qt]]&lt;br /&gt;
# [[user:Caogecym | Yuming Cao]] and [[user:Ziyi Zhang | Ziyi Zhang]], [[Node.js Weather Station]]&lt;br /&gt;
# [[user:Yifei| Yifei Li]] and [[user:Gemini91| Guanqun Wang]], [[ Kinect Project | Play games using Kinect on Beagleboard]]&lt;br /&gt;
# [[user:Yuhasmj| Michael J. Yuhas]] and [[user:mac | Jack Ma]], [[ Multiple Partitions via U-boot | Multiple Partitions via U-boot ]]&lt;br /&gt;
# [[user:Zitnikdj| David Zitnik]], [[ ECE497 Project: Twitter Java Application | Twitter Java Application ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{YoderFoot}}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Contributions_and_Project_Status</id>
		<title>ECE497 Contributions and Project Status</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Contributions_and_Project_Status"/>
				<updated>2012-08-31T04:48:22Z</updated>
		
		<summary type="html">&lt;p&gt;Lix: /* Contributions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE497 |Contributions]]&lt;br /&gt;
{{YoderHead}}&lt;br /&gt;
&lt;br /&gt;
== Fall 2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Project Status ===&lt;br /&gt;
&lt;br /&gt;
Please edit this page and add your project to this list. Copy my [[ECE497 Project Template]] to your own eLinux page and include the title of your project in the name of the page.  &lt;br /&gt;
&lt;br /&gt;
Please make the list alphabetical by family name.&lt;br /&gt;
&lt;br /&gt;
Take a look at what you and others have contributed.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|- &lt;br /&gt;
! Name&lt;br /&gt;
! Contributions&lt;br /&gt;
! Project&lt;br /&gt;
! git repository&lt;br /&gt;
|-&lt;br /&gt;
| [[User:atniptw | Tom Atnip]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:larmorgs | Greg Larmore]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:jessebrannon | Jesse Brannon]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:duganje | Josh Dugan]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 duganje Project | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:hansenrl | Ross Hansen]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 hansenrl Project | My Beagle Project]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[User:mmoravec | Matthew Moravec]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 mmoravec Project | My Beagle Project]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ngop | Peter Ngo]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 ngop Project | My Beagle Project]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:shinnsm|Stephen Shinn]]&lt;br /&gt;
| [[Special:Contributions/shinnsm|contrib]]&lt;br /&gt;
| Project TBD&lt;br /&gt;
| [https://github.com/shinnsm shinnsm]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ruff | Ruffin White]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 ruff Project | My Beagle Project]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Yoder | Mark A. Yoder]]&lt;br /&gt;
| [[Special:Contributions/Yoder | contrib]]&lt;br /&gt;
| [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
| [https://github.com/MarkAYoder MarkAYoder]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Popenhjc | James Popenhagen]]&lt;br /&gt;
| &lt;br /&gt;
| [[ECE497 popenhjc Project | My Beagle Project]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Winter 2011-2012 ==&lt;br /&gt;
&lt;br /&gt;
=== Contributions ===&lt;br /&gt;
&lt;br /&gt;
# [[Special:Contributions/Yuming | Yuming Cao]]&lt;br /&gt;
# [[Special:Contributions/Yifei | Yifei Li]]&lt;br /&gt;
# [[Special:Contributions/Harrisgw | Greg Harrison]]&lt;br /&gt;
# [[Special:Contributions/mac | Jack Ma]]&lt;br /&gt;
# [[Special:Contributions/Gemini91 | Guanqun Wang]]&lt;br /&gt;
# [[Special:Contributions/Yanj | Mona Yan]]&lt;br /&gt;
# [[Special:Contributions/Yoder | Mark A. Yoder]]&lt;br /&gt;
# [[Special:Contributions/Yuhasmj | Michael Yuhas]]&lt;br /&gt;
# [[Special:Contributions/Ziyi Zhang | Ziyi Zhang]]&lt;br /&gt;
# [[Special:Contributions/Zitnikdj | David Zitnik]]&lt;br /&gt;
# [[Special:Contributions/Zitnikdj | Alex Drane]]&lt;br /&gt;
# [[Special:Contributions/jessebrannon | Jesse Brannon]]&lt;br /&gt;
# [[Special:Contributions/lix | Xia Li]]&lt;br /&gt;
&lt;br /&gt;
=== Project Status ===&lt;br /&gt;
&lt;br /&gt;
# [[User:Yoder | Mark A. Yoder]], [[ECE497 Project Template | My Beagle Project]]&lt;br /&gt;
# [[user:Yanj|Mona Yan]] and [[user:Harrisgw| Greg Harrison]], [[PS EYE QT PROJECT | Playstation Eye Audio with Qt]]&lt;br /&gt;
# [[user:Caogecym | Yuming Cao]] and [[user:Ziyi Zhang | Ziyi Zhang]], [[Node.js Weather Station]]&lt;br /&gt;
# [[user:Yifei| Yifei Li]] and [[user:Gemini91| Guanqun Wang]], [[ Kinect Project | Play games using Kinect on Beagleboard]]&lt;br /&gt;
# [[user:Yuhasmj| Michael J. Yuhas]] and [[user:mac | Jack Ma]], [[ Multiple Partitions via U-boot | Multiple Partitions via U-boot ]]&lt;br /&gt;
# [[user:Zitnikdj| David Zitnik]], [[ ECE497 Project: Twitter Java Application | Twitter Java Application ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{YoderFoot}}&lt;/div&gt;</summary>
		<author><name>Lix</name></author>	</entry>

	</feed>