<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>SulhanSetiawan.com &#187; Simulation</title> <atom:link href="http://www.sulhansetiawan.com/tag/simulation/feed" rel="self" type="application/rss+xml" /><link>http://www.sulhansetiawan.com</link> <description></description> <lastBuildDate>Sun, 05 Feb 2012 17:08:53 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>MXLED &#8211; LED Matrix Simulator</title><link>http://www.sulhansetiawan.com/mxled</link> <comments>http://www.sulhansetiawan.com/mxled#comments</comments> <pubDate>Sat, 04 Feb 2012 14:16:04 +0000</pubDate> <dc:creator>Sulhan</dc:creator> <category><![CDATA[Microcontroller]]></category> <category><![CDATA[All]]></category> <category><![CDATA[Simulator]]></category> <category><![CDATA[LED matrix]]></category> <category><![CDATA[Moving Sign]]></category> <category><![CDATA[Simulation]]></category><guid isPermaLink="false">http://sulhansetiawan.com/?p=1127</guid> <description><![CDATA[MXLED version 1.6 MXLED is a simulation of the LED matrix that can be used with a microcontroller simulator on Micro .exe. With MXLED, the system design of LED matrix, commonly referred to as Running Text, or many also call it Moving Sign, be more easily implemented. MXLED on this version provides the size up [...]]]></description> <content:encoded><![CDATA[<h3>MXLED version 1.6</h3><div id="window" class="wp-caption aligncenter" style="width: 508px"><a href="http://resource.sulhansetiawan.com/img/MXLED.1.6.jpg"><img class=" " title="MXLED.exe" src="http://resource.sulhansetiawan.com/img/MXLED.1.6.jpg" alt="MXLED.exe" width="498" height="158" /></a><p class="wp-caption-text">MXLED.exe</p></div><p>MXLED is a simulation of the LED matrix that can be used with a microcontroller simulator on <a href="http://www.sulhansetiawan.com/en/microcontroller-project">Micro .exe</a>. With MXLED, the system design of LED matrix, commonly referred to as Running Text, or many also call it Moving Sign, be more easily implemented.</p><p>MXLED on this version provides the size up to 200 columns x 80 lines. With this size, we can perform simulations for the LED matrix which suffice to needs that more real.</p><p>Enlarge the size of the matrix on this version is done by reducing the size of the LED to be only of 10 x 10 pixels. However, if we use monitors with size 1360 x 768, then size that can be displayed only about 135 columns x 64 lines.</p><div id="download" class="wp-caption aligncenter" style="width: 97px"><a href="http://resource.sulhansetiawan.com/mikrokontroler/MXLED.7z"><img class="  " title="MXLED" src="http://resource.sulhansetiawan.com/img/download.gif" alt="MXLED" width="87" height="30" /></a><p class="wp-caption-text">MXLED</p></div> ]]></content:encoded> <wfw:commentRss>http://www.sulhansetiawan.com/mxled/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Running Text on LED Matrix</title><link>http://www.sulhansetiawan.com/teks-berjalan-pada-matriks-led</link> <comments>http://www.sulhansetiawan.com/teks-berjalan-pada-matriks-led#comments</comments> <pubDate>Tue, 02 Mar 2010 10:57:32 +0000</pubDate> <dc:creator>Sulhan</dc:creator> <category><![CDATA[Experiments]]></category> <category><![CDATA[All]]></category> <category><![CDATA[Microcontroller Learning]]></category> <category><![CDATA[LED matrix]]></category> <category><![CDATA[Microcontroller]]></category> <category><![CDATA[Moving Sign]]></category> <category><![CDATA[Simulation]]></category> <category><![CDATA[Running Text]]></category><guid isPermaLink="false">http://sulhansetiawan.com/teks-berjalan-pada-matriks-led</guid> <description><![CDATA[In the example in Showing images on LED matrix using simulator, the note is displayed as an image. First we create a text image, then we create a constant from the text image. After that it displayed as an image. Displaying text in this way is only appropriate if the text to be displayed is [...]]]></description> <content:encoded><![CDATA[<p style="TEXT-ALIGN: center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="494" height="178" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="menu" value="false" /><param name="quality" value="medium" /><param name="scale" value="exactfit" /><param name="src" value="http://resource.sulhansetiawan.com/swf/MXLED-2.swf" /><embed type="application/x-shockwave-flash" width="494" height="178" src="http://resource.sulhansetiawan.com/swf/MXLED-2.swf" menu="false" scale="exactfit" quality="medium"></embed></object></p><p>In the example in <a href="http://sulhansetiawan.com/menampilkan-gambar-pada-led-matriks-menggunakan-simulator">Showing images on LED matrix using simulator</a>, the note is displayed as an image. First we create a text image, then we create a constant from the text image. After that it displayed as an image.</p><p>Displaying text in this way is only appropriate if the text to be displayed is short. In addition, the displayed text will not be changed anymore. If the note to be displayed is a long text, or text that is displayed will be changed, then there is a better way than that way.</p><p>A better way is as follows: First, we create a character constant. In the example here, we make a character constant of 8 rows x 5 columns character size. The character constant was created using Karakter.bmp that you can edit to fit your desires.</p><p>Once we get a constant character, by compile the Karakter.bmp using <a title="ImgTable.zip" href="http://sulhansetiawan.com/mikrokontroler/ImgTable.zip"><strong>ImgTable.exe</strong></a>, then every time we will display the text, we do it by reading the text character-by-character. Each character is read, then displayed by looking at the character table. In this way, we can display any article and can be changed while the program is running. Of course you have to create a procedure to change the text to be displayed if you want to replace it.</p><p>Unfortunately <a title="the program listing" href="http://sulhansetiawan.com/microsource/RunningText.zip"><strong>the program listing</strong></a> only writen in assembly language. So, if you prefer to use the C language, please do the conversion yourself <img src='http://www.sulhansetiawan.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><p>If you want to try the example program using MXLED, do the simulator settings as in <a href="http://sulhansetiawan.com/menampilkan-gambar-pada-led-matriks-menggunakan-simulator">Showing images on LED matrix using simulator</a></p><p>Good luck <img src='http://www.sulhansetiawan.com/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' /></p> ]]></content:encoded> <wfw:commentRss>http://www.sulhansetiawan.com/teks-berjalan-pada-matriks-led/feed</wfw:commentRss> <slash:comments>64</slash:comments> </item> <item><title>Using MXLED.EXE for LED matrix simulation</title><link>http://www.sulhansetiawan.com/menggunakan-mxledexe-untuk-simulasi-matriks-led</link> <comments>http://www.sulhansetiawan.com/menggunakan-mxledexe-untuk-simulasi-matriks-led#comments</comments> <pubDate>Sat, 31 Jan 2009 23:37:14 +0000</pubDate> <dc:creator>Sulhan</dc:creator> <category><![CDATA[All]]></category> <category><![CDATA[Simulator]]></category> <category><![CDATA[Microcontroller Learning]]></category> <category><![CDATA[LED matrix]]></category> <category><![CDATA[Microcontroller]]></category> <category><![CDATA[Simulation]]></category><guid isPermaLink="false">http://sulhansetiawan.com/?p=467</guid> <description><![CDATA[MXLED controlled using two ports, a port as a data port and another as a control port. Both the data port and control port are received as a WM_USER message at the wParam. To determine that the received signal is a data or control, MXLED will look at the lParam. If lParam = 2, then [...]]]></description> <content:encoded><![CDATA[<p>MXLED controlled using two ports, a port as a data port and another as a control port. Both the data port and control port are received as a WM_USER message at the wParam. To determine that the received signal is a data or control, MXLED will look at the lParam. If lParam = 2, then the received signal is a signal to the data. Whereas if lParam = 1, then the received signal is a control signal.</p><p>There are six sizes provided by MXLED, ie 8 × 16, 8 × 32, 8 × 48, 16 × 16, 16 × 32, and 16 × 48. For each size there are two choices of orientation, ie landscape and portrait.</p><p>Control signals only use bit.0 and bit.1. Bit.0 used to reset the counter, while bit.1 used to increase the counter.</p><p>Data signal used to determine which LED where lit and LED where off. For each time, there were only eight LED that are controlled, which LED on the current column. To determine which columns is active, we use a counter. At the time counter is reset, then the column 0 is active. then if we provide the clock signal, the signal on bit.1, then the active column will move to column 1. Then if given the clock signal again, the active column will be column 2. and so on.</p><p>There are two choices of the clock signal, ie the L to H transition or the H to L transition.</p><p>The arrangement of the columns of LEDs depends on the size and orientation. For landscape orientation, then the left column is a lower column and the right column is a higher column. This applies to the size of 8x. As for the size of 16x, then the LED array is divided into two blocks of rows. The first column number of the second row block is the column number of the last column of the first row block plus 1.</p><p>More details are as follows:</p><pre class='notrnaslate'>16 x 16

Row 0..7 : 0  1  2  ......15

Row 8..15: 16 17 18 ......31

16 x 32

Row 0..7 : 0  1  2  ......31

Row 8..15: 32 33 34 ......63

16 x 48

Row 0..7 : 0  1  2  ......47

Row 8..15: 48 49 50 ......95
</pre><p>For each block row, bit.0 will control the LED at the top, while bit.7 will control the LED at the bottom.</p><p>For portrait orientation, we divide the LED into a column or a block of columns and rows. Counter will determine which row is active. Top row is row 0, and will be active if the reset signal is activated. The active row increase along with the clock signal acquisition.</p><p>For the 8x size, column 0 is the leftmost column and activated by bit.0. Whereas column 7 is the rightmost column and activated by bit.7</p><p>Rule for the 16x size could be analogous to the position of landscape orientation.</p><p>MXLED simulated on the system to work like a real matrix. If we managed to change the active row or column  slowly, then it can be seen only eight moving lights jumping around. However, if the changes is fast enough, then the lit changes of the LED will be seen steady not blinking. So the simulation MXLED will feel like a real LED matrix.</p><p>You can see examples of the use of this MXLED in the example <a href="http://www.sulhansetiawan.com/menampilkan-gambar-pada-led-matriks-menggunakan-simulator">Showing Images on LED Matrix using Simulator</a></p></p> ]]></content:encoded> <wfw:commentRss>http://www.sulhansetiawan.com/menggunakan-mxledexe-untuk-simulasi-matriks-led/feed</wfw:commentRss> <slash:comments>35</slash:comments> </item> <item><title>Showing Images on LED Matrix using Simulator</title><link>http://www.sulhansetiawan.com/menampilkan-gambar-pada-led-matriks-menggunakan-simulator</link> <comments>http://www.sulhansetiawan.com/menampilkan-gambar-pada-led-matriks-menggunakan-simulator#comments</comments> <pubDate>Tue, 04 Nov 2008 06:59:46 +0000</pubDate> <dc:creator>Sulhan</dc:creator> <category><![CDATA[Experiments]]></category> <category><![CDATA[All]]></category> <category><![CDATA[Microcontroller Learning]]></category> <category><![CDATA[LED matrix]]></category> <category><![CDATA[Microcontroller]]></category> <category><![CDATA[Moving Sign]]></category> <category><![CDATA[Simulation]]></category><guid isPermaLink="false">http://sulhansetiawan.com/?p=257</guid> <description><![CDATA[Controlling the LED matrix is actually almost the same as controlling seven segment. The difference is that the LEDs of seven segment are organized into seven sections which could form the figures. While the LED matrix, LEDs are arranged into a matrix that can be referenced by column and row. The columns on the LED [...]]]></description> <content:encoded><![CDATA[<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="494" height="178" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="menu" value="false" /><param name="quality" value="high" /><param name="src" value="http://resource.sulhansetiawan.com/swf/MXLED.swf" /><param name="vspace" value="10" /><param name="hspace" value="10" /><embed type="application/x-shockwave-flash" width="494" height="178" src="http://resource.sulhansetiawan.com/swf/MXLED.swf" hspace="10" vspace="10" quality="high" menu="false"></embed></object></p><p>Controlling the LED matrix is actually almost the same as controlling seven segment. The difference is that the LEDs of seven segment are organized into seven sections which could form the figures. While the LED matrix, LEDs are arranged into a matrix that can be referenced by column and row. The columns on the LED matrix can be equated with the digits on the seven segment. While the lines on the LED matrix can be equated with LED a through LED g plus a decimal point LED on seven segment. Thus between the seven segment and LED matrix is basically the same, especially if the number of rows are only eight.</p><p>Then how to display images on the LED matrix? Yes basically the same as displaying the numbers on the seven segment. If you are already familiar with how to display data on the seven segment display using the buffer as is done in discussion about seven segment in the <strong><a title="Easy and Fun Learning Microcontroller" href="http://www.sulhansetiawan.com/mudah-dan-menyenangkan-belajar-mikrokontroler/">Easy and Fun Learning Microcontroller</a></strong> book, in which to display data on the seven segment, all we have to do is fill the display buffers, then to display image on the LED matrix, all we need to do is also just fill data on corresponding display buffers.</p><p>In the picture above, the size of the LED matrix that we use is 8 rows x 32 columns. This size is equivalent to seven segment which the number of digits are 32 digits. Thus basically we need a total of 32 bytes of display buffers. The LEDs on the top line we associate with bit 0 of port and successively LEDs on the lines below to bit 1, bit 2, and so on until bit 7. To make a LED lit on a particular line, then we need only fill the correlated bits with 0 or 1 depending on the configuration of the matrix that we use, active low or active high. For ease of understanding, we usually use active high so to lit the LED on the top line then we have to make the bit 0 to has the value of 1.</p><p>As an example, consider the logo below. The logo size is 32 x 32. Therefore, the logo may not be displayed on the LED matrix with the size of 32 x 8 at once. To display it, we have to split the logo into four parts. After that we have to show four parts one by one.</p><p>To the left of the logo there is a number from 0 to 7 and repeated up to four times. While above the logo are the numbers from 0 to 31. These figures will show us how to display the parts of the logo on the LED matrix. The figure above the logo shows the buffer index, while the figure at left of the logo shows the bit position. Thus, to show the first part of the logo (the top), then the buffer [0] must be filled with data 11111111b, buffer [1] = 00000001b, buffer [10] = 00011001b, and so on.</p><pre style="TEXT-ALIGN: center" class='notranslate'>  0.        1.        2.        3.
  01234567890123456789012345678901<span style="color:red;">
0 ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©
1 © .............................©
2 ©..........©©©©..©©©©..........©
3 ©........©©©©©©..©©©©©©........©
4 ©......©©©©©©©©..©©©©©©©©......©
5 ©.....©©©©...©©..©©...©©©©.....©
6 ©....©©©.....©©..©©.....©©©....©
7 ©...©©©......©©..©©......©©©...©</span><span style="color:brown;">
0 ©..©©©.......©©..©©.......©©©..©
1 ©..©©........©©..©©........©©..©
2 ©.©©©............©©............©
3 ©.©©.............©©............©
4 ©.©©©©©©©©©©©©©..©©©©©©©©©©©©©.©
5 ©.©©©©©©©©©©©©©..©©©©©©©©©©©©©.©
6 ©............©©.............©©.©
7 ©............©©............©©©.©</span><span style="color:green;">
0 ©..©©........©©..©©........©©..©
1 ©..©©©.......©©..©©.......©©©..©
2 ©...©©©......©©..©©......©©©...©
3 ©....©©©.....©©..©©.....©©©....©
4 ©.....©©©©...©©..©©...©©©©.....©
5 ©......©©©©©©©©..©©©©©©©©......©
6 ©........©©©©©©..©©©©©©........©
7 ©..........©©©©..©©©©..........©</span><span style="color:blue;">
0 ©..............................©
1 ©..©©©.©..©..©©..©...©.©..©©©©.©
2 ©.©....©..©.©..©.©©..©.©.©.....©
3 ©.©....©©©©.©©©©.©.©.©....©©©..©
4 ©.©....©..©.©..©.©..©©.......©.©
5 ©..©©©.©..©.©..©.©...©...©©©©..©
6 ©..............................©
7 ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©</span>
The Logo.</pre><p>To be able to fill these data to the buffer with ease, then we can create an image data table. This technique is similar to how to show the variation of Running LED on exercise 5 of the <strong><a title="Easy and Fun Learning Microcontroller" href="http://www.sulhansetiawan.com/mudah-dan-menyenangkan-belajar-mikrokontroler/">Easy and Fun Learning Microcontroller</a></strong> book or on the <strong><a title="Running LED simulation on Microcontroller" href="http://www.sulhansetiawan.com/simulasi-led">LED Simulation</a></strong> article. Each image table has the same size with the size of the buffer. And for the case of the logo above, we need four 32 bytes size image tables.</p><p>Like on the Running LED exercise, the work of preparing the table is a tedious job and requires precision. But you should not be discouraged if you want to make the table of the large and complicated image because you can use the aid program <a title="ImgTable.zip" href="http://resource.sulhansetiawan.com/mikrokontroler/ImgTable.zip"><strong>ImgTable.exe</strong></a>. The program will help you to convert bmp format images into an image table that we can use it in the program using either the M51 format or using the SDCC format. So to get an image table, you simply create an image using MSPaint, and then do the conversion using ImgTable.exe.</p><p>ImgTable.exe can do the conversion from bmp file with a monochrome format up to 24 bits format. But because the table will be used to lit the LED which of course is equivalent to a monochrome format, the 24 bits format would be first converted by ImgTable.exe into the monochrome format. Therefore, it is better if you save the images you create with monochrome format to save on file size.</p><p>Rules applied by ImgTable is that the pixels that are black will be converted into 1, while the white pixels into 0. For colors other than black and white, then the three basic color elements will be summed first, then divided by three. After that, if the value is closer to the black will be interpreted as black, and if it is closer to white will be interpreted as white.</p><p>Table creation sequence is from left to right and from top to bottom. From top to bottom means every eight pixels will be taken as one byte. For example, an image with a size of 32 x 32, it will be four tables with the size of 32 bytes. The first table stores the data of the coordinates (0,0) to (31,7) by the rule that the upper left pixel is (0,0) and the lower right pixel is (31.31). The second table is (0,8) to (31,15). So forth.</p><p>In this example, all tables store the entire image data appropriately because the high of the image size is a multiples of eight. If the size of the image is not a multiples of eight, then the final table will have the remaining bits. For example if the image size is 32 (width) x 33 (height), then the number of tables are five tables with size of 32 bytes. And the last table only use bit 0. While bit 1 to bit 7 will be filled with 0.</p><p>Return to the LED matrix, we must display the four parts of the logo one by one. But if we display them alternately, then the shape of the logo will not be seen clearly. We will only see the incomplete images that appear alternately. Therefore we have to show by shifting it up or down. However, we have created tables that contains the data of the image blocks. So we can not retrieve data from the image coordinates (0,1) to (31,8) directly. For that, we need one more buffer with the same size as the first buffer. If we call the first buffer as the display buffer, then we call the second buffer as hidden buffer because it was not for displaying data to the LED matrix. This buffer is only used as an aid in manipulating the display data.</p><p>In case we want to shift the image up, then we can describe the arrangement as if the buffer is as follows:</p><pre style="TEXT-ALIGN: center" class='notranslate'>01245...
abcde...
Numbers = the display buffer, alfabets = hidden buffer.</pre><p>The first time, we fill the display buffer with data 0, so that all the LEDs will be turned off. Then we put the first image block table on hidden buffer. After that do a bit shifting between a and 0, b and 1, c and 2, and so on. Do these shifts of up to eight times, which means that all parts of the image block has been on display buffer. And before doing the ninth shift, we must place the second image block into the hidden buffer. And the next step is an iteration of the previous step.</p><p>For more details, you can see the <strong><a title="LedMatriks.zip" href="http://resource.sulhansetiawan.com/microsource/LedMatriks.zip">program listing</a></strong> for the demo above that is written in the format of M51 and c. In the listing, there is DelayTime constants that you can replace to change the speed of picture motions.</p><p>To try on the simulator, then you must set the port link so that both Port0 and Port1 are linked to MXLED.exe by the message link with the WM_USER message, and lParam of Port0 is 2 and lParam of Port1 is 1. You also have to set the configuration of MXLED size as 8 x 32 landscape.</p><p>Happy trying and please do not hesitate to ask if there are less clear. Hopefully useful.</p> ]]></content:encoded> <wfw:commentRss>http://www.sulhansetiawan.com/menampilkan-gambar-pada-led-matriks-menggunakan-simulator/feed</wfw:commentRss> <slash:comments>102</slash:comments> </item> <item><title>Seven segment simulation for digital clock program with hours-minutes-seconds display</title><link>http://www.sulhansetiawan.com/simulasi-seven-segment-untuk-program-jam-digital-dengan-tampilan-jam-menit-detik</link> <comments>http://www.sulhansetiawan.com/simulasi-seven-segment-untuk-program-jam-digital-dengan-tampilan-jam-menit-detik#comments</comments> <pubDate>Mon, 22 Sep 2008 03:25:41 +0000</pubDate> <dc:creator>Sulhan</dc:creator> <category><![CDATA[Experiments]]></category> <category><![CDATA[All]]></category> <category><![CDATA[Microcontroller Learning]]></category> <category><![CDATA[Digital Clock]]></category> <category><![CDATA[Microcontroller]]></category> <category><![CDATA[Seven Segment]]></category> <category><![CDATA[Simulation]]></category><guid isPermaLink="false">http://sulhansetiawan.com/?p=222</guid> <description><![CDATA[Seven Segment is one of the most common components used primarily to display data in the form of numbers. For that, Microcontroller Project also provides a simulation for seven segment, namely SSLED.exe. Seven segment simulation provided by the SSLED.exe has eight-digit in multiplex manner. Multiplex technique is the most commonly used because of its compact [...]]]></description> <content:encoded><![CDATA[<p style="TEXT-ALIGN: center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="339" height="159" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="menu" value="false" /><param name="quality" value="high" /><param name="scale" value="exactfit" /><param name="src" value="http://resource.sulhansetiawan.com/swf/SSLED.swf" /><embed type="application/x-shockwave-flash" width="339" height="159" src="http://resource.sulhansetiawan.com/swf/SSLED.swf" menu="false" scale="exactfit" quality="high"></embed></object></p><p>Seven Segment is one of the most common components used primarily to display data in the form of numbers. For that, <strong><a title="Micro Project Versi Terbaru" href="http://www.sulhansetiawan.com/microcontroller-project">Microcontroller Project</a></strong> also provides a simulation for seven segment, namely SSLED.exe.</p><p>Seven segment simulation provided by the SSLED.exe has eight-digit in multiplex manner. Multiplex technique is the most commonly used because of its compact wiring and requires only a few ports to control it. How to control the seven segment arranged in multiplex is by dividing two kinds of line, i.e. the data line and digits control line. Data line is used to determine which LED are lit, while the digits controller line is used to set which digits are lit.</p><p>Data line and digits control line of SSLED.exe received using window message as WM_USER. If lParam is 1, then the received signal will be considered as a signal for digits control line. Whereas if the lParam value is 2, then the received signal will be considered as a signal for the data line.</p><p>On the data line, bit 0 will be used for LED a, bit 1 to turn on the LED b, and so on until bit 6 to turn on the LED g. While the bit 7 is used to lit the decimal point LED. If a bit is 1, then the corresponding LED will lit. This would fit with the common cathode type. However, we can also reverse the data so that if the data sent value is FF, then the data would be considered 00. This capability is useful for adjustment with seven segment types to be used.</p><p>SSLED.exe provides two ways of controlling the digits, i.e. the parallel way and the counter way. In the parallel way, each digit can be individually activated depending on the bit of the line controller. Bit 0 in the line controller will control the rightmost digit and bit 7 will control the leftmost digit. If a bit is 1, then the corresponding digits will be active. And just as in the data line, the line controller digits can also be reversed.</p><p>In counter mode, only bit 0 and bit 1 in the line controller digit is used. Bit 0 is used to reset the counter, so the active digit will be the rightmost digit. While the bit 1 is used to shift the active digit to be the next left digit, or name it as raising the counter count. There are two kinds of how to raise the counter count, i.e. L to H transition or H to L transition. If we use the L to H transition, then the counter will be increased if bit 1 state changed from 0 to 1. Conversely, if the transition used are H to L, then counter would be raised if the bit condition changed from 1 to 0.</p><p>If the current digit is the leftmost digit and count raised, the active digit will return to the rightmost digit.</p><p>The picture above is an example of how simulation if operated for seven segment display digital clock program. Above program is actually a modification of the program on Interrupts chapter of the <a title="Mudah dan Menyenangkan Belajar Mikrokontroler" href="http://www.sulhansetiawan.com/buku/mudah-dan-menyenangkan-belajar-mikrokontroler/"><strong>Easy and Fun Learning Microcontroller</strong></a> book, ie on Timer.A51 program. But in the book we will try to program the actual seven segment, so we need to save money just by using four digits only. While in this simulation, we have simulated seven segment that provides eight digits. Therefore, we can show not only hours and minutes but also seconds. In fact we still have the remaining two digits. The remaining digits are used to separate hours to minutes and minutes to seconds, i.e. by displaying a (-) sign. Therefore, we need a little modification of the Timer.A51 program in order to display the seconds and the separation mark.</p><p><a title="Jam8Digit.zip" href="http://resource.sulhansetiawan.com/microsource/Jam8Digit.zip"><strong>The source code</strong></a> is written with the format of M51 and c where the data signal transmitted using P0, and the digit control signal using P1. Thus, we must set P0 to link by the Link Message with a WM_USER message, and lParam value is 2 and fill the Handle with the Handle of running SSLED.exe using Capture Handle button. Do this to P1 too. But in P1, lParam value is 1. And remember, remove the check mark on the <strong>Update Display</strong> menu on the simulator.</p><p>But keep in mind that the program is written to run on a microcontroller with a 11.592 MHz crystal. So the second change speed during the simulation may be is not correct. And its speed depends on the speed of the computer you use.</p><p>Well, interesting isn&#8217;t it? Happy trying <img src='http://www.sulhansetiawan.com/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' /></p><div id="download" class="wp-caption aligncenter" style="width: 97px"><a href="http://resource.sulhansetiawan.com/microsource/Jam8Digit.zip"><img class="  " title="Source" src="http://resource.sulhansetiawan.com/img/download.gif" alt="Source" width="87" height="30" /></a><p class="wp-caption-text">Source</p></div> ]]></content:encoded> <wfw:commentRss>http://www.sulhansetiawan.com/simulasi-seven-segment-untuk-program-jam-digital-dengan-tampilan-jam-menit-detik/feed</wfw:commentRss> <slash:comments>98</slash:comments> </item> <item><title>Running LED simulation on Microcontroller</title><link>http://www.sulhansetiawan.com/simulasi-led</link> <comments>http://www.sulhansetiawan.com/simulasi-led#comments</comments> <pubDate>Tue, 09 Sep 2008 23:46:07 +0000</pubDate> <dc:creator>Sulhan</dc:creator> <category><![CDATA[Experiments]]></category> <category><![CDATA[All]]></category> <category><![CDATA[Microcontroller Learning]]></category> <category><![CDATA[Microcontroller]]></category> <category><![CDATA[Simulation]]></category><guid isPermaLink="false">http://sulhansetiawan.com/?p=182</guid> <description><![CDATA[Early game which is always done by people who are just learning the microcontroller is lit the LED. Although the first time we usually just turn on the LEDs moving to the right or left only, and usually things like that would be boring, but it is very important to understand how to program the [...]]]></description> <content:encoded><![CDATA[<p style="TEXT-ALIGN: center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="217" height="115" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="menu" value="false" /><param name="quality" value="high" /><param name="scale" value="exactfit" /><param name="src" value="http://resource.sulhansetiawan.com/swf/VirLED.swf" /><embed type="application/x-shockwave-flash" width="217" height="115" src="http://resource.sulhansetiawan.com/swf/VirLED.swf" menu="false" scale="exactfit" quality="high"></embed></object></p><p>Early game which is always done by people who are just learning the microcontroller is lit the LED. Although the first time we usually just turn on the LEDs moving to the right or left only, and usually things like that would be boring, but it is very important to understand how to program the microcontroller. Besides, if we want to develop programs that not only lit the LED which is lit only shifted to the right or left, then this game could get very interesting.</p><p>For example, the LED experiment using the table ie LED5.A51 in the <a title="Mudah dan Menyenangkan Belajar Mikrokontroler" href="http://www.sulhansetiawan.com/buku/mudah-dan-menyenangkan-belajar-mikrokontroler/"><strong>Easy and Fun Learning microcontroller</strong></a> book, is a very interesting LED game. The picture above shows how the LED game if run on the simulator which is connected to VLED.</p><p>All you need to do to use VLED.exe when running simulations for LED5.A51 is connecting the P1 by Link Message with Message to be sent = WM_USER (1024), then fill Handle by Capture Handle to the running VLED.</p><p>Link setting is done by clicking the <strong>Option-Port</strong> menu of the simulator window. After that, the Port Settings window will appear. In this window, there are four tabs, the tab for Port 0 to Port 3. The contents of each tab are the same, that govern how the ports are connected. If you do not want to connect the ports anywhere, then choose None Link. Then Link Port is chosen if simulation port will be linked with the physical ports, such as parallel port or installed PPI port. Meanwhile, Link Message is used if the simulator is connected to another program via the Window Message. And the last is the Link File, that is if the port will be connected to a file.</p><p>If the Link Message selected, you must specify the Message to be sent, lParam to be sent, also Handle of the Window of the program receives the message. This parameter depends on the program that you want to link. For example, VLED received a WM_USER message, i.e. 1024. So the Message to be sent will also have to be 1024. While the lParam is not taken into account by VLED, so let it be what it is. And that should not be forgotten is to fill the Window Handle of the linked program.</p><p id="capturehandle">To fill this Handle value can be done by clicking on the <strong>Capture Handle</strong> button, then click on the program that you want to link. Remember! After you click on the Capture Handle button should not click on anything other than the program that you want to link. Because the Capture Handle will fetch the handle of any clicked after this button is clicked. If the handle filling was done, then the Caption will usually appear the words as in the linked program. For example if the linked is VLED, then it would appear the words &#8220;Virtual LED&#8221;. After that, close the Port Setting window and enjoy the simulation.</p><p>You can also see how the LEDs run on the real LED by linking Port1 using the Link Port, then fill out the Address to 378, i.e. the address for the port. And you must install the LEDs on the parallel port as shown here:</p><div class="wp-caption aligncenter" style="width: 212px"><img title="Installation of the LED display on the parallel port" src="http://resource.sulhansetiawan.com/img/LEDPortPLL.gif" alt="Installation of the LED display on the parallel port." width="202" height="313" /><p class="wp-caption-text">Installation of the LED display on the parallel port.</p></div><p>To try the program, you can <a title="LED5.zip" href="http://resource.sulhansetiawan.com/microsource/LED5.zip"><strong>download the source code</strong></a> written either using assembly language and c language. And remember! You should discard the checkmark on the <strong>Option-Update Display</strong> menu in the simulator to make the simulator run faster. LED running speed may be not the same between your computer with the animation above. The speed of simulation depends on the speed of your computer.</p><p>Happy trying.</p><div id="download" class="wp-caption aligncenter" style="width: 97px"><a href="http://resource.sulhansetiawan.com/microsource/LED5.zip"><img class="  " title="Source" src="http://resource.sulhansetiawan.com/img/download.gif" alt="Source" width="87" height="30" /></a><p class="wp-caption-text">Source</p></div> ]]></content:encoded> <wfw:commentRss>http://www.sulhansetiawan.com/simulasi-led/feed</wfw:commentRss> <slash:comments>44</slash:comments> </item> <item><title>SimulatorInDLL &#8211; MCS-51 Microcontroller Simulator</title><link>http://www.sulhansetiawan.com/simulatorindll-simulator-mikrokontroler-mcs-51</link> <comments>http://www.sulhansetiawan.com/simulatorindll-simulator-mikrokontroler-mcs-51#comments</comments> <pubDate>Sun, 31 Aug 2008 07:16:17 +0000</pubDate> <dc:creator>Sulhan</dc:creator> <category><![CDATA[All]]></category> <category><![CDATA[Simulator]]></category> <category><![CDATA[Microcontroller Learning]]></category> <category><![CDATA[Microcontroller IDE]]></category> <category><![CDATA[Microcontroller]]></category> <category><![CDATA[Simulation]]></category> <category><![CDATA[FREE! Software]]></category><guid isPermaLink="false">http://sulhansetiawan.com/?p=129</guid> <description><![CDATA[Simulator in this version is made separately from the IDE, which is made into the file &#8220;SimulatorInDLL.dll&#8221;. This way you can develop a simulator in order to work in your favor. Actually, this simulator only support assembly. But you can set limits to the simulator as if working for C. Condition, you need to know [...]]]></description> <content:encoded><![CDATA[<p>Simulator in this version is made separately from the IDE, which is made into the file &#8220;SimulatorInDLL.dll&#8221;. This way you can develop a simulator in order to work in your favor.</p><p>Actually, this simulator only support assembly. But you can set limits to the simulator as if working for C. Condition, you need to know exactly how C make a program. This is possible if you are a multi-programmer, meaning not only understand microcontroller programming, but also other programming. You also need quite understand how the SDCC works. If not, you can only use the simulator for assembly.</p><p>Wait, do not worry, although the simulator is only able to work in assembly language, but <a title="Microcontroller Project" href="http://www.sulhansetiawan.com/microcontroller-project">Microcontroller Project</a> will convert the program you are writing with SDCC into assembly. So your C program can be tested with the simulator. Well now we will discuss the use of simulators in general.</p><div class="wp-caption aligncenter" style="width: 524px"><a href="http://resource.sulhansetiawan.com/img/SimulatorMainMenu.jpg"><img title="The SimulatorInDLL main menu" src="http://resource.sulhansetiawan.com/img/SimulatorMainMenu.jpg" alt="The SimulatorInDLL main menu" width="514" height="72" /></a><p class="wp-caption-text">The SimulatorInDLL main menu</p></div><p>Seven main menu on the simulator:</p><ol style="text-align: justify;" type="1"><li><strong>Start</strong>. Of course, this menu function is to run the simulation. This menu will change to Stop if it is running, so of course serves to stop the simulation.</li><li><strong>Single Step (F7)</strong>. This menu function is to execute just one line of instructions.</li><li><strong>Step Over (F8)</strong>. The menu is almost the same as Single Step. The difference appears if the executed instruction is a call instruction. Single Step will jump to the invoked subprogram, whereas Step Over will execute subprogram to its completion.</li><li><strong>Reset</strong>. This menu serves as we hit the reset button on the microcontroller circuit. Usually when you first run the simulator, you can not run the simulation until you click on this menu. Likewise, after you make changes to options.</li><li><strong>View</strong>. This menu serves to select a window which will be displayed. i.e window of internal RAM, external RAM, Ports, SFR, and Registers.</li><li><strong>Option</strong>. Well, this really must be considered in order to optimally use the simulator.<ul style="text-align: justify;"><li><strong>External Updates</strong>. If the menu is marked with a check, then any access to external ram will cause the contents of registers in the external ram windows will automatically be updated.</li><li><strong>Update Display</strong>. If the menu is given a check mark, then every execution of the program will immediately cause all the windows updated. You should uncheck the menu if you want to see every change of the data on each program execution. But this will cause the speed of the simulation becomes much slower. So if you just want to see the final result or just want to see the work shown in the port, you should remove the check mark.</li><li><strong>Separate 4-bit binary</strong>. Well if the menu is marked with a check, then the binary number on the window of port, sfr, registers, or external ram will be split in two nibble.</li><li><strong>Com</strong>. Well this menu is very important menu if you are trying the program for serial communication. You can select COM1 through COM4 if you want any assignment to the SBUF register actually sent to the serial port on your computer. In addition you can also connect SBUF with other simulator through the window message. If you select this link, then the data loaded into the SBUF will be sent to the destination window with the data in wParam. First you must set the required parameters. The first is the handle of the target window. To fill this value, you simply click on the Capture Handle button, then point the mouse pointer to the destination window, then click on the window. Next is the Message to be sent. If the simulator window target need a WM_USER, then you simply click on the button to get the constants for the WM_USER. Likewise, if the window target want a WM_CHAR, then you simply click on the WM_CHAR button. You can use notepad to capture the character data sent via SBUF if it is a WM_CHAR message. The latter is the lParam. These parameters are not always used. This may be important if you make your own simulator and require additional information, such as if you also want your simulator to communicate directly with this simulator. You can just check the &#8220;Handle of this application&#8221; to get the handle of the running simulator. Of course this information will only be understood if you are accustomed to make a program in Windows.</li><li><strong>Thread priority</strong>. Well, you have to carefully select them. If you choose the highest priority, then all the CPU time will be spent almost just to run this simulation. So sometimes you will even be difficult to move the mouse.</li><li><strong>Port</strong>. Which is useful to set a link from P0 to P1. If you click on this menu, then you will be taken to a window to set the link of these ports. There are four options for each port link, i.e. link is none, if you don&#8217;t want to connect the port anywhere; link port, if you want to connect the port to physical ports, such as parallel port, PPI or other physical ports installed on your computer; link message, if you want to link the data on the port to the running application or to other simulators, and the last is the link file, ie if the data sent to the port will be sent to a file. Link message settings can be considered the same with the settings on COM link message.</li><li><strong>Reset Port+Com setting on close</strong>. If the menu is marked with a check, then the settings on the port and com will be returned to the &#8220;link none&#8221; state after the simulation is closed. Conversely, the setting will be stored in the registry and will be used to set the simulator when the simulator is run again.</li><li><strong>Simulation speed</strong>. This is the last menu in the Options menu. This will determine the delay of any simulated execution. Of course, this menu will only be meaningful if the Display Update menu marked with a check.</li></ul></li><li><strong>About</strong>. Which is not so important, just sometimes when we make a program, then we also want to be known. Well if you click on this menu, you&#8217;ll see the logo of my pride.</li></ol><h4>Break point</h4><p>There are times when we want to run the simulation without having to watch every step. We just want to know the circumstances of the particular line, eg state of the registers just before a subprogram return back (on the RET command). If so, you simply mark a break point on the line that you want as the cessation of the simulation. The trick, double-click on the line where you want the simulation to stop. To remove the break point, you just double click again on that line.</p><h4>Update Point</h4><p>If we want to run simulations quickly, then we must remove the check mark on the Option-Update Display menu. Unfortunately if we do, then all display at the windows will only be updated after we stop the simulation. So we can not observe the changes that occur in the registers. We can make so that at certain points, the values of registers will be updated without having to stop the simulation. Well, if this is what you want, then you can add the update point on certain line. For example on the line after a port is modified so that we can observe changes in the value of the port. The trick is to double click while pressing the Ctrl key on the line you want to add the update point.</p><div class="wp-caption aligncenter" style="width: 381px"><a href="http://resource.sulhansetiawan.com/img/Break_Update.jpg"><img title="Breakpoint and Updatepoint" src="http://resource.sulhansetiawan.com/img/Break_Update.jpg" alt="Breakpoint and Updatepoint" width="371" height="153" /></a><p class="wp-caption-text">Breakpoint (red) and Updatepoint (yellow)</p></div> ]]></content:encoded> <wfw:commentRss>http://www.sulhansetiawan.com/simulatorindll-simulator-mikrokontroler-mcs-51/feed</wfw:commentRss> <slash:comments>10</slash:comments> </item> </channel> </rss>
