<?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; Belajar Mikrokontroler</title>
	<atom:link href="http://sulhansetiawan.com/tag/microcontroller-learning/feed" rel="self" type="application/rss+xml" />
	<link>http://sulhansetiawan.com</link>
	<description>alias Yoko Chan</description>
	<lastBuildDate>Thu, 02 Sep 2010 00:23:19 +0000</lastBuildDate>
	<language>id</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>SSMaker, tool untuk membuat konstanta seven segment</title>
		<link>http://sulhansetiawan.com/ssmaker</link>
		<comments>http://sulhansetiawan.com/ssmaker#comments</comments>
		<pubDate>Sat, 26 Jun 2010 09:36:50 +0000</pubDate>
		<dc:creator>Sulhan</dc:creator>
				<category><![CDATA[IDE (Integrated Development Environment)]]></category>
		<category><![CDATA[Mikrokontroler]]></category>
		<category><![CDATA[Belajar Mikrokontroler]]></category>
		<category><![CDATA[IDE Mikrokontroler]]></category>

		<guid isPermaLink="false">http://sulhansetiawan.com/?p=1017</guid>
		<description><![CDATA[SSMaker.exe adalah program untuk membantu membuat tabel penyalaan seven segment. Klik pada segment yang akan dinyalakan atau dimatikan. Setelah itu, tabel untuk bentuk nyala tersebut akan langsung ditampilkan. Lampu yang menyala diwakili oleh bit bernilai 0. Untuk membuat lampu menyala diwakili oleh bit bernilai 1, beri tanda cek pada Active High. Secara default, bit 0 [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption aligncenter" style="width: 214px"><img title="SSMaker.exe" src="/img/SSMaker.PNG" alt="SSMaker.exe" width="204" height="286" /><p class="wp-caption-text">SSMaker.exe</p></div>
<p style="text-align: justify;">SSMaker.exe adalah program untuk membantu membuat tabel penyalaan seven  segment.</p>
<p style="text-align: justify;">Klik pada segment yang akan dinyalakan atau dimatikan. Setelah itu, tabel  untuk bentuk nyala tersebut akan langsung ditampilkan. Lampu yang menyala  diwakili oleh bit bernilai 0. Untuk membuat lampu menyala diwakili oleh bit  bernilai 1, beri tanda cek pada <strong>Active High</strong>.</p>
<div class="wp-caption aligncenter" style="width: 422px"><img title="SSMaker.exe" src="/img/SSMaker.PNG" alt="SSMaker5.exe" width="204" height="286" /> <img title="SSMaker.exe" src="/img/SSMaker.PNG" alt="SSMaker5A.exe" width="204" height="286" /><p class="wp-caption-text">Konstanta untuk angka 5 adalah 92H (nyala=0) atau 6DH (nyala=1)</p></div>
<p style="text-align: justify;">Secara default, bit 0 untuk segment a, bit 1 untuk segment b, dan seterusnya. Akan tetapi Anda juga bisa mengubah urutannya. Tentu saja hal ini disesuaikan dengan susunan hardware. Untuk menentukan bit-bit untuk segment-sengmentnya, klik kanan pada segment yang akan ditentukan bitnya, kemudian dari menu pupop yang muncul, pilihlan nomor bitnya.</p>
<div class="wp-caption aligncenter" style="width: 214px"><img title="SSMaker.exe" src="/img/SSMakerBit.PNG" alt="SSMaker.exe" width="204" height="286" /><p class="wp-caption-text">Klik kanan pada segment a untuk memilih bit untuk segment tersebut.</p></div>
<p style="text-align: justify;">Jika kita menggunakan bit yang sedang digunakan oleh segment lain, maka segment yang bitnya tersebut digunakan akan dibuat tidak terhubung ke bit manapun. Tanda bahwa segment tidak terhubung ke bit adalah segment yang ditandai dengan huruf X.</p>
<p style="text-align: justify;">Program ini merupakan paket dari <a href="http://sulhansetiawan.com/microcontroller-project">Microcontroller Project</a></p>
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://sulhansetiawan.com/ssmaker/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Teks Berjalan pada Matriks LED</title>
		<link>http://sulhansetiawan.com/teks-berjalan-pada-matriks-led</link>
		<comments>http://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[Eksperimen]]></category>
		<category><![CDATA[Belajar Mikrokontroler]]></category>
		<category><![CDATA[Matriks LED]]></category>
		<category><![CDATA[Mikrokontroler]]></category>
		<category><![CDATA[Simulasi]]></category>
		<category><![CDATA[Teks Berjalan]]></category>

		<guid isPermaLink="false">http://sulhansetiawan.com/teks-berjalan-pada-matriks-led</guid>
		<description><![CDATA[Pada contoh di Menampilkan Gambar pada LED Matriks Menggunakan Simulator, tulisan ditampilkan sebagai gambar. Pertama kita membuat gambar tulisan, kemudian gambar tulisan tersebut kita buat konstantanya. Setelah itu ditampilkan seperti menampilkan gambar. Menampilkan tulisan dengan cara tersebut hanya cocok jika tulisan yang ditampilkan pendek. Disamping itu, tulisan yang ditampilkan tidak akan diubah lagi. Jika tulisan [...]]]></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="/swf/MXLED-2.swf" /><embed type="application/x-shockwave-flash" width="494" height="178" src="/swf/MXLED-2.swf" menu="false" scale="exactfit" quality="medium"></embed></object></p>
<p style="text-align: justify;">Pada contoh di <a href="http://sulhansetiawan.com/menampilkan-gambar-pada-led-matriks-menggunakan-simulator">Menampilkan Gambar pada LED Matriks Menggunakan Simulator</a>, tulisan ditampilkan sebagai gambar. Pertama kita membuat gambar tulisan, kemudian gambar tulisan tersebut kita buat konstantanya. Setelah itu ditampilkan seperti menampilkan gambar.</p>
<p style="text-align: justify;">Menampilkan tulisan dengan cara tersebut hanya cocok jika tulisan yang ditampilkan pendek. Disamping itu, tulisan yang ditampilkan tidak akan diubah lagi. Jika tulisan yang akan ditampilkan adalah tulisan yang panjang, atau tulisan yang ditampilkan akan diganti-ganti, maka ada cara yang lebih baik dibandingkan dengan cara tersebut.</p>
<p style="text-align: justify;">Cara yang lebih baik adalah sebagai berikut: Pertama, kita membuat konstanta karakter. Pada contoh di sini, kita membuat konstanta karakter dengan ukuran karakter adalah 8 baris x 5 kolom. Konstanta karakter ini dibuat menggunakan Karakter.bmp  yang bisa Anda edit untuk menyesuaikan keinginan Anda.</p>
<p style="text-align: justify;">Setelah kita mendapatkan konstanta karakter, yaitu dengan mengkompilasi Karakter.bmp menggunakan <a title="ImgTable.zip" href="http://sulhansetiawan.com/mikrokontroler/ImgTable.zip"><strong>ImgTable.exe</strong></a>, maka setiap kita akan menampilkan teks, kita melakukannya dengan membaca teks tersebut karakter-per-karakter. Setiap karakter yang dibaca, kemudian ditampilkan dengan melihat pada tabel karakter. Dengan cara seperti ini, kita bisa menampilkan tulisan apa saja dan bisa diganti-ganti pada saat program sedang berjalan. Tentu saja Anda harus membuat prosedur untuk mengganti text yang akan ditampilkan tersebut jika Anda ingin menggantinya.</p>
<p style="text-align: justify;">Sayang sekali <a title="Listing program" href="http://sulhansetiawan.com/microsource/RunningText.zip"><strong>Listing program</strong></a> hanya saya tulis untuk bahasa assembly. Jadi, jika Anda lebih suka menggunakan bahasa C, silakan lakukan konversi sendiri <img src='http://sulhansetiawan.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p style="text-align: justify;">Jika Anda ingin mencoba program contoh menggunakan MXLED, lakukanlah pengaturan simulator seperti pada <a href="http://sulhansetiawan.com/menampilkan-gambar-pada-led-matriks-menggunakan-simulator">Menampilkan Gambar pada LED Matriks Menggunakan Simulator</a></p>
<p style="text-align: justify;">Selamat mencoba <img src='http://sulhansetiawan.com/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://sulhansetiawan.com/teks-berjalan-pada-matriks-led/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Tutorial belajar mikrokontroler</title>
		<link>http://sulhansetiawan.com/tutorial-belajar-mikrokontroler</link>
		<comments>http://sulhansetiawan.com/tutorial-belajar-mikrokontroler#comments</comments>
		<pubDate>Fri, 20 Feb 2009 13:55:31 +0000</pubDate>
		<dc:creator>Sulhan</dc:creator>
				<category><![CDATA[buku Mikrokontroler]]></category>
		<category><![CDATA[Belajar Mikrokontroler]]></category>
		<category><![CDATA[Mikrokontroler]]></category>

		<guid isPermaLink="false">http://sulhansetiawan.com/?p=564</guid>
		<description><![CDATA[Dibandingkan beberapa waktu yang lalu, sekarang harga chip mikrokontroler sudah relatif murah. Bahkan untuk sekadar membuat lampu berjalan, mikrokontroler pantas dipilih. Namun ternyata murahnya harga tidak serta merta membuat penggemar elektronika menggunakan mikrokontroler dalam rancangannya. Bukannya apa-apa, tapi karena mereka tidak dapat memprogramnya! Pakai trik apa? Harus diakui bahwa merancang sistem bermikrokontroler memang membutuhkan dasar [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Dibandingkan beberapa waktu yang lalu, sekarang harga chip mikrokontroler sudah relatif murah. Bahkan untuk sekadar membuat lampu berjalan, mikrokontroler pantas dipilih. Namun ternyata murahnya harga tidak serta merta membuat penggemar elektronika menggunakan mikrokontroler dalam rancangannya. Bukannya apa-apa, tapi karena mereka tidak dapat memprogramnya!</p>
<h4 style="text-align: justify;">Pakai trik apa?</h4>
<p style="text-align: justify;">Harus diakui bahwa merancang sistem bermikrokontroler memang membutuhkan dasar ilmu yang cukup kompleks. Banyak orang jadi menyerah sebelum mencoba. Mereka dibingungkan oleh lingkaran setan, dari mana harus memulai?</p>
<p style="text-align: justify;">Yang penting, Anda harus banyak berlatih, baik teori maupun praktik. Oleh karena itu, sebaiknya terlebih dahulu Anda mempersiapkan alat dan bahan, yaitu sistem minimal mikrokontroler (terdiri dari sebuah chip mikrokontroler, resistor, kapasitor, dan kristal), downloader, dan Integrated System Environment (IDE).</p>
<p style="text-align: justify;">Komponen-komponen bisa Anda beli di toko elektronika. Downloader bisa Anda buat sendiri atau beli. IDE bisa Anda dapatkan <a title="IDE mikrokontroler" href="http://sulhansetiawan.com/category/mikrokontroler/integrated-development-environment">di sini</a>. Jangan lupa, sandinglah buku <a title="Mudah dan Menyenangkan Belajar Mikrokontroler" href="http://sulhansetiawan.com/mudah-dan-menyenangkan-belajar-mikrokontroler">Mudah dan Menyenangkan Belajar Mikrokontroler</a> <img src='http://sulhansetiawan.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p style="text-align: justify;">Memang, untuk menjadi ahli, butuh waktu lumayan lama. Tapi, kalau hanya untuk sekadar bisa menggunakan mikrokontroler, satu atau dua hari saja sudah cukup! Mulailah dari yang paling sederhana, terus sedikit demi sedikit meningkat sampai yang rumit. Nanti, Jika Anda merasa mentok menghadapi masalah yang rumit, buatlah masalah menjadi sederhana. Jika Anda menghadapi masalah yang besar, buatlah masalah menjadi kecil. Jika Anda menemui bab yang sulit, jangan paksakan diri. Percayalah, suatu saat Anda pasti dapat memahaminya.</p>
<h4 style="text-align: justify;">Pakai mikrokontroler apa?</h4>
<p style="text-align: justify;">Sekali Anda menguasai salah satu jenis mikrokontroler, akan mudah bagi Anda untuk berpindah ke mikrokontroler jenis lainnya. Jadi, tidak penting pakai mikrokontroler apa, tapi teknik pemrogramannya.</p>
<p style="text-align: justify;">AT89C51 atau AT89C2051 dari keluarga MCS-51 bisa dijadikan pilihan yang bagus. Mikrokontroler ini mudah-murah-meriah. Anda tidak akan terlalu bersedih jika Anda membuatnya hancur. Sebaliknya, Anda akan sangat gembira jika ternyata bisa menguasai ilmu mikrokontroler dengan biaya yang rendah.</p>
<h4 style="text-align: justify;">Pakai bahasa pemrograman apa?</h4>
<p style="text-align: justify;">Ada banyak pilihan bahasa pemrograman. Ada yang menyarankan untuk menguasai bahasa pemrograman tingkat tinggi terlebih dahulu, seperti Basic, Pascal, C, dan lain-lain. Namun demikian, bahasa pemrograman terbaik yang benar-benar akan membuat Anda mengerti akan mikrokontroler adalah <em>assembly</em> karena bahasa ini menuntut Anda untuk membuat instruksi secara teliti.</p>
<p style="text-align: justify;">Selamat belajar!</p>
]]></content:encoded>
			<wfw:commentRss>http://sulhansetiawan.com/tutorial-belajar-mikrokontroler/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Pertanyaan seputar buku &#8220;Mudah dan Menyenangkan Belajar Mikrokontroler&#8221;</title>
		<link>http://sulhansetiawan.com/pertanyaan-seputar-buku-mudah-dan-menyenangkan-belajar-mikrokontroler</link>
		<comments>http://sulhansetiawan.com/pertanyaan-seputar-buku-mudah-dan-menyenangkan-belajar-mikrokontroler#comments</comments>
		<pubDate>Sat, 31 Jan 2009 23:47:50 +0000</pubDate>
		<dc:creator>Sulhan</dc:creator>
				<category><![CDATA[buku Mikrokontroler]]></category>
		<category><![CDATA[Belajar Mikrokontroler]]></category>
		<category><![CDATA[Mikrokontroler]]></category>

		<guid isPermaLink="false">http://sulhansetiawan.com/?p=469</guid>
		<description><![CDATA[Seorang pembaca buku Mudah dan Menyenangkan Belajar Mikrokontroler bertanya sebagai berikut: Pada listing program jam digital yang sudah ada tombol (hal. 91), tolong jelaskan lebih lanjut tentang penggunaan dan perhitungan Timer 0 Mode 2 sehingga menghasilkan timer 1 detik yang akurat. Tolong jelaskan lebih lanjut tentang cara kerja listing pengambilan data tombol (hal. 119). Bagaimana [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://sulhansetiawan.com/img/BkMdhMnynangknTnyKnp.jpg"><img class="aligncenter" title="BkMdhMnynangknTnyKnp" src="http://sulhansetiawan.com/img/BkMdhMnynangknTnyKnp.jpg" alt="" width="73" height="97" /></a></p>
<p style="text-align: justify;">Seorang pembaca buku <a title="Mudah dan Menyenangkan Belajar Mikrokontroler" href="http://sulhansetiawan.com/buku/mudah-dan-menyenangkan-belajar-mikrokontroler/">Mudah dan Menyenangkan Belajar Mikrokontroler</a> bertanya sebagai berikut:</p>
<p><a name="Top"></a></p>
<ol style="text-align: justify;">
<li style="text-align: justify;"><a href="#1">Pada listing program jam digital yang sudah ada tombol (hal. 91), tolong jelaskan lebih lanjut tentang penggunaan dan perhitungan Timer 0 Mode 2 sehingga menghasilkan timer 1 detik yang akurat.</a></li>
<li style="text-align: justify;"><a href="#2">Tolong jelaskan lebih lanjut tentang cara kerja listing pengambilan data tombol (hal. 119).</a></li>
<li style="text-align: justify;"><a href="#3">Bagaimana cara menggunakan deklarasi variabel dalam listing berekstensi *.M51 seperti: ~byte, ~bit,~word, dan ~array?</a></li>
<li style="text-align: justify;"><a href="#4">Bagaimana cara menggunakan tool: virtual LCD, tombol, MXLED, dalam simulator?</a></li>
<li style="text-align: justify;"><a href="#5">Nah, pertanyaan  selanjutnya mungkin tidak berhubungan dengan buku, namun masih seputar mikrokontroler. Bagaimana membuat 1 tombol menjadi 2 fungsi? Misalnya kita pasang tombol di P3.0. Jika ditekan 1x maka  akan  menjalankan subprogram A dan jika ditekan 2x akan menjalankan subprogram B.</a></li>
<li style="text-align: justify;"><a href="#6">Mas, saya mencoba membuat rangkaian PCB jam  dan  saya memasukan listing program debouncing 2.HEX. Hasilnya memang berjalan dengan sempurna. Tapi saat tombol pengubah menit atau jam ditekan, 7segment tidak langsung berubah angkanya tapi menunggu dulu program menyelesaikan  hitungan  menit. Bagaimana cara agar langsung berubah?</a></li>
</ol>
<p style="text-align: justify;">Dan inilah jawabannya:</p>
<ol><a name="1"></a></p>
<li style="text-align: justify;">
<h4>Timer 1 detik yang akurat.</h4>
<p>Sebenarnya keterangan di buku sudah cukup jelas. Pertama, kristal yang digunakan adalah 11,0592MHz. Dengan demikian kecepatan siklus mesin adalah 921,6KHz (11,0592MHz/12). Kedua, TH0 diisi #0, yang artinya interupsi timer0 akan dipanggil setiap 256 siklus mesin. Ingat bahwa TH=256-interval atau interval=256-TH. Dengan demikian interval pemanggilan adalah 256 siklus mesin.</p>
<p>Dari kedua data tadi kita bisa menghitung kecepatan pemanggilan terhadap interupsi timer0 adalah 3600Hz (921,6KHz/256). Nah, untuk memperoleh 1 detik, kita harus membagi lagi interval ini dengan 3600. Jadi kita melakukannya dengan dua tingkatan, yaitu dibagi dengan 225 (3600/225=16), kemudian kita bisa langsung membagi hasilnya dengan 16 untuk memperoleh frekuensi 1Hz. Akan tetapi karena kita membutuhkan frekuensi 2Hz untuk mengatur kedipan titik, maka kita tidak membagi dengan 16 tetapi dengan 8.</p>
<p>Frekuensi 1Hz diperoleh dengan flip-flop yang merupakan pembagi 2. Flip-flop ini diperoleh dengan menggunakan perintah cpl pada sebuah bendera (Bendera1Detik). Semoga cukup jelas.</p>
<p><a href="#Top">Kembali ke atas</a></p>
<p><a name="2"></a></li>
<li style="text-align: justify;">
<h4>Teknik mengambil data tombol dengan debouncing.</h4>
<p>Potongan program tersebut akan mengambil data beberapa tombol secara bersamaan dan telah dilakukan debouncing. Jadi kita bisa menggunakan sembarang tombol dan tidak perlu kuatir dengan yang namanya bounce. Cara menggunakannya tinggal dipanggil saja nama prosedurnya, yaitu &#8220;AmbilTombol&#8221;.</p>
<p>Setelah pemanggilan terhadap prosedur ini, maka Acc akan berisi data tombol. Sebagai contoh, jika tombol dipasang pada bit0 dan bit1, maka setelah pemanggilan prosedur ini, A akan berisi 0 jika tidak ada tombol yang ditekan, 1 jika tombol pada bit0 saja yang ditekan, 2 jika tombol pada bit1 saja yang ditekan, dan 3 jika kedua tombol ditekan.</p>
<p>Tentu saja nilai yang dihasilkan tergantung di mana saja tombol dipasang. Kita tinggal melihat pada nilai bitnya. bit0 bernilai 1 dan bit2 bernilai 2. Tentang bagaimana hal itu terjadi, coba perhatikan pada flowchart yang disertakan. Pelajari baik-baik flowchart tersebut. Semoga cukup jelas.</p>
<p><a href="#Top">Kembali ke atas</a></p>
<p><a name="3"></a></li>
<li style="text-align: justify;">
<h4>Alokasi memori untuk variabel dengan teknik yang memudahkan jika terjadi perubahan.</h4>
<p>Variabel ~byte, ~bit, ~word, dan ~array adalah cara yang relatif mudah untuk mengatur lokasi memory dibanding dengan mengatur lokasi memori dengan cara seperti:</p>
<pre>  Buffer  equ 8  ;misalkan butuh 4 byte

  Angka   equ 12

  Puluhan equ 13

  Satuan  equ 14</pre>
<p>Akan lebih mudah jika kita menggunakan:</p>
<pre>  ~Array 4 Buffer

  ~byte Angka Puluhan Satuan</pre>
<p>Dengan cara yang kedua, kita akan menempatkan Buffer pada lokasi 8, Angka pada lokasi 12, Puluhan pada lokasi 13, dan Satuan pada lokasi 14. Dan secara otomatis akan ada sebuah konstanta yang menyimpan posisi tertinggi dari lokasi memori yang tidak digunakan. Pada posisi inilah sebaiknya stack disimpan untuk inisiasinya. Konstanta ini diberi nama SaveStack. Dengan demikian, kita bisa menginisiasi stack dengan:</p>
<pre>  mov SP,#SaveStack</pre>
<p>dan itu akan sama artinya dengan:</p>
<pre>  mov SP,#14</pre>
<p>karena lokasi tertinggi yang digunakan adalah 14.</p>
<p>Jika kita menggunakan cara yang pertama dan kita hendak mengubah kebutuhan memori untuk Buffer menjadi hanya 2 byte saja, kita akan mengaturnya menjadi:</p>
<pre>  Buffer  equ 8

  Angka   equ 10

  Puluhan equ 11

  Satuan  equ 12</pre>
<p>dan pada inisiasi stack menjadi:</p>
<pre>  mov SP,#12</pre>
<p>Nah, kita harus mengubah semua angka pada pengaturan lokasi memorinya. Tapi jika kita menggunakan cara yang kedua, maka kita cukup mengganti bilangan 4 menjadi 2 pada deklarasi ~array seperti:</p>
<pre>  ~Array 2 Buffer

  ~byte Angka Puluhan Satuan</pre>
<p>atau karena Buffer hanya membutuhkan 2 byte, maka kita bisa menggantinya dengan tipe ~word seperti:</p>
<pre>  ~word Buffer

  ~byte Angka Puluhan Satuan</pre>
<p>Perhatikan bahwa kita hanya mengubah bagian deklarasi Buffer dan tidak ada bagian lain yang kita ubah.</p>
<p>Sedangkan variabel ~bit merupakan variabel berukuran 1 bit yang ditempatkan pada lokasi 20H.0 hingga 3FH.7.</p>
<p>Penempatan semua variabel tersebut selalu akan mencari lokasi terbawah yang masih kosong dimulai dari alamat 8 (default) atau bisa dipindah ke posisi tertentu menggunakan ~basequ.</p>
<p>Dan sebenarnya tentang ini juga sudah ada di lampiran pada buku. Semoga cukup jelas.</p>
<p><a href="#Top">Kembali ke atas</a></p>
<p><a name="4"></a></li>
<li style="text-align: justify;">
<h4>&#8220;Virtual LCD&#8221; (Simulasi LCD), &#8220;MXLED&#8221; (Simulasi Matriks LED), dan &#8220;Tombol&#8221; (Simulasi tombol dengan keyboard).</h4>
<ul>
<li>&#8220;Virtual LCD&#8221; bisa digunakan untuk percobaan yang membutuhkan tampilan karakter yang cukup banyak. Simulasi ini bisa dihubungkan dengan rangkaian nyata menggunakan koneksi serial. Lihat Bab 19 buku &#8220;Mudah dan Menyenangkan Belajar Mikrokontroler&#8221;. Akan tetapi simulasi ini juga bisa digunakan dari simulator dengan &#8220;Link Message&#8221;. Untuk melakukan hal tersebut, pilih Com yang digunakan berupa &#8220;Message&#8221;. Jika Data penekanan tombol keyboard hendak dikirim ke simulator melalui komunikasi serial (diterima di SBUF), maka &#8220;Message yang dikirim&#8221; harus diisi dengan 1035. Sedangkan jika data diinginkan untuk diterima oleh port, maka &#8220;Message yang dikirim&#8221; adalah 1034 dan &#8220;lParam yang dikirim&#8221; diisi dengan nomor port, yaitu 0, 1, 2, atau 3. Disamping itu &#8220;Handle&#8221; harus mengarah ke simulator yang aktif. Kita bisa menggunakan tombol &#8220;Capture Handle&#8221; kemudian klik pada jendela simulator yang dituju. Selain melakukan pengaturan pada &#8220;Virtual LCD&#8221;, port simulator juga harus disesuaikan. Jika simulator ingin mengirimkan data ke &#8220;Virtual LCD&#8221; melalui simulasi serial, maka Com harus menggunakan &#8220;Message&#8221; dan mengatur &#8220;Handle&#8221; agar mengarah ke &#8220;Virtual LCD&#8221; yang dituju dengan &#8220;Message yang dikirim&#8221; berupa WM_USER (1024). Sedangkan jika simulator hendak mengirim datanya melalui port, maka yang diatur adalah port untuk di &#8220;Link Message&#8221; ke arah &#8220;Virtual LCD&#8221; tersebut.</li>
<li>&#8220;MXLED&#8221; merupakan simulasi Matriks LED. Simulasi ini juga menerima data melalui &#8220;Link Message&#8221; dari pengaturan port pada simulator. Karena penjelesalannya agak panjang, maka saya tempatkan pada post tersendiri yaitu di <a href="http://sulhansetiawan.com/mikrokontroler/experiment/menampilkan-gambar-pada-led-matriks-menggunakan-simulator/">Menampilkan Gambar pada LED Matriks Menggunakan Simulator.</a></li>
<li>Untuk &#8220;Tombol&#8221;, jika pengaturan port pada simulator menggunakan &#8220;Link Message&#8221;, maka penekanan keyboard pada &#8220;Tombol&#8221; akan dikirim ke simulator. &#8220;Tombol&#8221; sendiri tidak membutuhkan pengaturan, karena secara otomatis dia akan mencari simulator yang sedang aktif.</li>
</ul>
<p><a href="#Top">Kembali ke atas</a></p>
<p><a name="5"></a></li>
<li style="text-align: justify;">
<h4>Satu tombol untuk banyak fungsi.</h4>
<p>Pemrograman tombol yang seperti itu membutuhkan pewaktuan yang cukup teliti. Pertama adalah melakukan pengecekkan apakah tombol ditekan atau tidak. Jika ya, maka dimulailah proses pendeteksian tombol.</p>
<p>Pendeteksian tombol ini pada dasarnya adalah sama dengan debouncing lainnya, yaitu menunggu sampai tombol dilepas lagi, tapi jika tombol telah dilepas tidak langsung menganggap bahwa tombol telah dilepas. Ada sebuah waktu minimum sehingga tombol yang telah dilepas benar-benar dianggap telah dilepas. Jika waktu tersebut tidak tercapai, maka penekanan tombol berikutnya masih akan dianggap sebagai bagian dari penekanan tombol sebelumnya.</p>
<p>Sekarang jika tombol telah memenuhi syarat untuk dianggap telah dilepas, artinya waktu tunggu minimum (debouncing timeout) terlampaui. Program tidak langsung melakukan aksi tertentu tetapi hanya menaikkan variabel yang menyatakan jumlah penekanan tombol, kemudian menunggu lagi adanya penekanan tombol berikutnya. Hal ini dilakukan dengan membuat bendera yang menyatakan bahwa program sedang menunggu penekanan tombol lagi. Waktu tunggu ini sekarang kita sebut sebagai &#8220;next press timeout&#8221;. Jika tombol ditekan lagi sebelum waktu tunggu terlampaui, maka penekanan tersebut hanya akan menaikkan perhitungan jumlah penekanan. Program hanya akan memproses data penekanan tombol hanya jika &#8220;next press timeout&#8221; terlampaui.</p>
<p>Anda bisa mendownload <a title="SatuTombol.zip 3,03KB" href="http://sulhansetiawan.com/microsource/SatuTombol.zip">program contoh</a> yang merupakan penghitung dua digit 0 &#8211; 99. Port0 digunakan untuk mengirimkan data segment, Port1 untuk kendali digit, sedangkan Port3.0 digunakan sebagai tombol. Untuk menaikkan hitungan, kita harus menekan tombol sekali. Sedangkan untuk menurunkan hitungan, kita harus menekan tombol dua kali dengan interval yang cepat. Kita juga bisa langsung mencapai nilai 99 dengan cara menekan tombol empat kali dengan cepat. Sedangkan untuk lansung mengembalikan ke 0, maka kita harus menekan tombol tiga kali dengan cepat.</p>
<p>Dari contoh ini, kita bisa menggunakan satu tombol untuk banyak aksi. Akan tetapi ingat, jika Anda membuat program dan ada fungsi yang dijalankan dengan cara menekan tombol secara cepat hingga sepuluh kali, bisa dipastikan akan tidak nyaman dalam penggunaannya <img src='http://sulhansetiawan.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p><a href="#Top">Kembali ke atas</a></p>
<p><a name="6"></a></li>
<li style="text-align: justify;">
<h4>Revisi contoh program jam digital dengan tombol yang di <em>debouncing.</em></h4>
<p>Setelah saya cek kembali, mamang ada yang kurang dan ada beberapa yang salah. Seharusnya pada MainLoop susunannya adalah seperti:</p>
<pre>              mov   R4,#NoMode     ;R4 =status mode

   MainLoop0: acall IsiBuffer

   MainLoop:  acall AmbilTombol</pre>
<p>Dan setiap selesai melakukan perubahan pada data baik menit ataupun jam, maka melompatnya adalah ke arah MainLoop0 dan bukan ke MainLoop. Selain itu, konstanta untuk penekanan tombol seharusnya adalah:</p>
<pre>   S1ditekan   equ   00010000b ;aslinya =00001000b

   S2ditekan   equ   00100000b ;aslinya =00010000b

   S1S2ditekan equ   00110000b ;aslinya =00011000b</pre>
<p>Dan penyaringan tombol pada &#8220;AmbilTombol&#8221; seharusnya:</p>
<pre>   AmbilTombol_:

               mov   A,P3

               cpl   a            ;pembalikan data

               anl   A,#00110000b ;aslinya =00011000b

               ret</pre>
<p>Kesalahan tersebut mengakibatkan pembacaan tombol menjadi keliru karena posisi tombol berada pada P3.4 dan P3.5 bukan pada P3.3 dan P3.4. Akan tetapi saya telah membuat versi revisinya dengan sedikit tambahan sehingga saat status mode berada pada ModeJam, maka digit jam akan dikedipkan. Demikian juga saat status mode berada pada ModeMenit, maka digit menit juga akan dikedipkan. Dengan demikian pemakai tahu apa yang akan terjadi jika tombol ditekan. Listing program revisi bisa didownload <a title="Debouncing2rev.zip 1,53KB" href="http://sulhansetiawan.com/microsource/Debouncing2rev.zip">di sini</a>.</p>
<p><a href="#Top">Kembali ke atas</a></li>
</ol>
<p style="text-align: justify;">Yang bisa didownload dari post ini:</p>
<ol>
<li><a title="SatuTombol.zip 3,03KB" href="http://sulhansetiawan.com/microsource/SatuTombol.zip">Contoh program satu tombol banyak fungsi</a></li>
<li><a title="Debouncing2rev.zip 1,53KB" href="http://sulhansetiawan.com/microsource/Debouncing2rev.zip">Revisi program Debouncing 2</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://sulhansetiawan.com/pertanyaan-seputar-buku-mudah-dan-menyenangkan-belajar-mikrokontroler/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Menggunakan MXLED.EXE untuk simulasi matriks LED</title>
		<link>http://sulhansetiawan.com/menggunakan-mxledexe-untuk-simulasi-matriks-led</link>
		<comments>http://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[Simulator]]></category>
		<category><![CDATA[Belajar Mikrokontroler]]></category>
		<category><![CDATA[Matriks LED]]></category>
		<category><![CDATA[Mikrokontroler]]></category>
		<category><![CDATA[Simulasi]]></category>

		<guid isPermaLink="false">http://sulhansetiawan.com/?p=467</guid>
		<description><![CDATA[MXLED dikendalikan menggunakan dua buah port, yaitu sebuah Port sebagai port data dan sebuah lagi sebagai port kendali. Baik port data maupun port kendali diterima sebagai message pada WM_USER dengan sinyal pada wParam. Untuk menentukan bahwa sinyal yang diterima merupakan data atau kendali, MXLED akan melihat pada lParam. Jika lParam=2, maka sinyal yang diterima merupakan [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">MXLED dikendalikan menggunakan dua buah port, yaitu sebuah Port sebagai port data dan sebuah lagi sebagai port kendali. Baik port data maupun port kendali diterima sebagai message pada WM_USER dengan sinyal pada wParam. Untuk menentukan bahwa sinyal yang diterima merupakan data atau kendali, MXLED akan melihat pada lParam. Jika lParam=2, maka sinyal yang diterima merupakan sinyal untuk data. Sedangkan jika lParam=1, maka sinyal yang diterima merupakan sinyal kendali.</p>
<p style="text-align: justify;">Ada enam buah ukuran yang disediakan oleh MXLED, yaitu 8&#215;16, 8&#215;32, 8&#215;48, 16&#215;16, 16&#215;32, dan 16&#215;48. Untuk setiap ukuran tersebut ada dua pilihan orientasi, yaitu landscape dan portrait.</p>
<p style="text-align: justify;">Sinyal kendali hanya menggunakan bit.0 dan bit.1 saja. bit.0 digunakan untuk mereset counter, sedangkan bit.1 digunakan untuk menaikkan counter.</p>
<p style="text-align: justify;">Sinyal data digunakan untuk menentukan led mana yang menyala dan led mana yang padam. Untuk setiap saatnya, hanya ada delapan buah led yang dikendalikan, yaitu led pada kolom yang sedang aktif. Untuk menentukan kolom mana yang aktif, kita menggunakan counter. Pada saat counter direset, maka kolom 0 aktif. kemudian jika kita memberikan sinyal clock, yaitu sinyal pada bit.1, maka kolom aktif akan berpindah ke kolom 1. Kemudian jika diberikan sinyal clock lagi, maka kolom yang aktif menjadi kolom 2. begitu seterusnya.</p>
<p style="text-align: justify;">Ada dua pilihan sinyal clock, yaitu transisi L ke H atau sebaliknya, yaitu transisi H ke L.</p>
<p style="text-align: justify;">Susunan kolom-kolom LED tergantung dari ukuran maupun orientasi. Untuk orientasi landscape, maka kolom sebelah kiri merupakan kolom bawah dan semakin ke kanan semakin naik. Ini berlaku untuk ukuran 8x. Sedangkan untuk ukuran 16x, maka susunan LED dibagi menjadi dua blok baris. Nomor kolom pertama pada blok baris kedua adalah nomor kolom terakhir blok baris pertama ditambah 1.</p>
<p>Lebih jelasnya adalah sebagai berikut:</p>
<pre>16x16

Baris0..7 : 0  1  2  ......15

Baris8..15: 16 17 18 ......31

16x32

Baris0..7 : 0  1  2  ......31

Baris8..15: 32 33 34 ......63

16x48

Baris0..7 : 0  1  2  ......47

Baris8..15: 48 49 50 ......95</pre>
<p style="text-align: justify;">Untuk setiap block baris, bit.0 akan mengendalikan LED paling atas, sedangkan bit.7 akan mengendalikan LED paling bawah.</p>
<p style="text-align: justify;">Untuk orientasi portrait, kita membagi LED menjadi kolom atau blok kolom dan baris. Counter akan menentukan baris yang aktif. Baris paling atas adalah baris 0, dan akan aktif jika sinyal reset diaktifkan. Baris aktif akan menaik seiring dengan didapatnya sinyal clock.</p>
<p style="text-align: justify;">Untuk ukuran 8x, kolom 0 adalah kolom paling kiri dan diaktifkan oleh bit.0. Sedangkan kolom 7 adalah kolom paling kanan dan diaktifkan oleh bit.7</p>
<p style="text-align: justify;">Ketentuan untuk ukuran 16x bisa dianalogikan dari posisi pada orientasi landscape.</p>
<p style="text-align: justify;">MXLED disimulasikan untuk bekerja seperti pada sistem matriks yang sesungguhnya. Jika kita mengatur perubahan baris atau kolom aktifnya dengan lambat, maka hanya akan terlihat delapan lampu yang bergerak melompat-lompat. Akan tetapi jika perubahannya cukup cepat, maka perubahan nyala lampu-lampunya akan terlihat mantap tidak berkedip. Jadi simulasi MXLED akan terasa seperti matriks led sungguhan.</p>
<p style="text-align: justify;">Anda bisa melihat contoh penggunaan MXLED ini pada contoh <a href="http://sulhansetiawan.com/menampilkan-gambar-pada-led-matriks-menggunakan-simulator">Menampilkan Gambar pada LED Matriks Menggunakan Simulator</a></p>
<p style="text-align: justify;">
]]></content:encoded>
			<wfw:commentRss>http://sulhansetiawan.com/menggunakan-mxledexe-untuk-simulasi-matriks-led/feed</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Menampilkan gambar pada LED matriks menggunakan simulator</title>
		<link>http://sulhansetiawan.com/menampilkan-gambar-pada-led-matriks-menggunakan-simulator</link>
		<comments>http://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[Eksperimen]]></category>
		<category><![CDATA[Belajar Mikrokontroler]]></category>
		<category><![CDATA[Matriks LED]]></category>
		<category><![CDATA[Mikrokontroler]]></category>
		<category><![CDATA[Simulasi]]></category>

		<guid isPermaLink="false">http://sulhansetiawan.com/?p=257</guid>
		<description><![CDATA[Mengendalikan LED matriks sebenarnya hampir sama dengan mengendalikan seven segment. Bedanya adalah bahwa pada seven segment lampu-lampu disusun menjadi 7 ruas yang bisa membentuk angka-angka. Sedangkan pada LED matriks lampu-lampu disusun menjadi matriks yang bisa diacu dengan kolom dan baris. Kolom-kolom pada LED matriks bisa disamakan dengan digit-digit pada seven segment. Sedangkan baris-baris pada 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="/swf/MXLED.swf" /><param name="vspace" value="10" /><param name="hspace" value="10" /><embed type="application/x-shockwave-flash" width="494" height="178" src="/swf/MXLED.swf" hspace="10" vspace="10" quality="high" menu="false"></embed></object></p>
<p style="text-align: justify;">Mengendalikan LED matriks sebenarnya hampir sama dengan mengendalikan seven segment. Bedanya adalah bahwa pada seven segment lampu-lampu disusun menjadi 7 ruas yang bisa membentuk angka-angka. Sedangkan pada LED matriks lampu-lampu disusun menjadi matriks yang bisa diacu dengan kolom dan baris. Kolom-kolom pada LED matriks bisa disamakan dengan digit-digit pada seven segment. Sedangkan baris-baris pada LED matriks bisa disamakan dengan lampu a hingga lampu g ditambah lampu titik pada seven segment. Dengan demikian antara seven segment dengan LED matriks pada dasarnya adalah sama, terutama jika jumlah barisnya hanya ada delapan.</p>
<p style="text-align: justify;">Terus bagaimana cara menampilkan gambar pada LED matriks? Pada dasarnya ya sama dengan menampilkan angka-angka pada seven segment. Jika Anda telah terbiasa dengan cara menampilkan data pada seven segment dengan menggunakan buffer display seperti yang dilakukan pada pembahasan tentang seven segment pada buku <strong><a title="Mudah dan Menyenangkan Belajar Mikrokontroler" href="http://sulhansetiawan.com/buku/mudah-dan-menyenangkan-belajar-mikrokontroler/">Mudah dan Menyenagkan Belajar Mikrokontroler</a></strong>, dimana untuk menampilkan data pada seven segment yang harus kita lakukan hanyalah mengisi buffer-buffer display, maka untuk menampilkan gambar pada LED matriks, yang perlu kita lakukan juga hanyalah mengisikan data pada buffer-buffer display yang bersangkutan.</p>
<p style="text-align: justify;">Pada gambar di atas, ukuran LED matriks yang kita gunakan adalah 8 baris x 32 kolom. Ukuran ini setara dengan seven segment dengan jumlah digit sebanyak 32 digit. Dengan demikian pada dasarnya kita membutuhkan buffer display sebanyak 32 byte. Lampu-lampu pada baris paling atas kita hubungkan dengan bit 0 dari port dan berturut-turut lampu pada beris di bawahnya dengan bit 1, bit 2, dan seterusnya hingga bit 7. Untuk membuat sebuah lampu pada baris tertentu menyala, maka yang kita perlukan hanya mengisi bit yang berkorelasi dengannya dengan 0 atau 1 tergantung konfigurasi matriks yang kita gunakan, aktif rendah atau aktif tinggi. Untuk memudahkan pemahaman, biasanya kita menggunakan aktif tinggi sehingga untuk menyalakan lampu pada baris paling atas maka kita harus membuat bit 0 bernilai 1.</p>
<p style="text-align: justify;">Sebagai contoh, perhatikan logo di bawah ini. Logo tersebut berukuran 32 x 32. Oleh karena itu logo tersebut tidak mungkin ditampilkan pada LED matriks dengan ukuran 32 x 8 sekaligus. Untuk menampilkannya, kita harus membagi logo tersebut menjadi empat bagian. Setelah itu kita harus menampilkan keempat bagian tersebut satu-persatu.</p>
<p style="text-align: justify;">Di sebelah kiri logo terdapat angka dari 0 hingga 7 dan berulang hingga empat kali. Sedangkan di atas logo terdapat angka 0 hingga 31. Angka-angka tersebut akan menunjukkan pada kita bagaimana menampilkan bagian-bagian logo tersebut pada LED matriks. Angka di atas logo menunjukkan indeks dari buffer, sedangkan angka disebelah kiri logo menunjukkan posisi bit. Dengan demikian, untuk menampilkan bagian pertama dari logo (bagian paling atas), maka buffer[0] harus diisi dengan data 11111111b, buffer[1]=00000001b, buffer[2]=00000001b, dan seterusnya.</p>
<pre style="TEXT-ALIGN: center">  01234567890123456789012345678901
  0         1         2         3
0 ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©
1 ©                              ©
2 ©          ©©©©  ©©©©          ©
3 ©        ©©©©©©  ©©©©©©        ©
4 ©      ©©©©©©©©  ©©©©©©©©      ©
5 ©     ©©©©   ©©  ©©   ©©©©     ©
6 ©    ©©©     ©©  ©©     ©©©    ©
7 ©   ©©©      ©©  ©©      ©©©   ©
0 ©  ©©©       ©©  ©©       ©©©  ©
1 ©  ©©        ©©  ©©        ©©  ©
2 © ©©©            ©©            ©
3 © ©©             ©©            ©
4 © ©©©©©©©©©©©©©  ©©©©©©©©©©©©© ©
5 © ©©©©©©©©©©©©©  ©©©©©©©©©©©©© ©
6 ©            ©©             ©© ©
7 ©            ©©            ©©© ©
0 ©  ©©        ©©  ©©        ©©  ©
1 ©  ©©©       ©©  ©©       ©©©  ©
2 ©   ©©©      ©©  ©©      ©©©   ©
3 ©    ©©©     ©©  ©©     ©©©    ©
4 ©     ©©©©   ©©  ©©   ©©©©     ©
5 ©      ©©©©©©©©  ©©©©©©©©      ©
6 ©        ©©©©©©  ©©©©©©        ©
7 ©          ©©©©  ©©©©          ©
0 ©                              ©
1 ©  ©©© ©  ©  ©©  ©   © ©  ©©©© ©
2 © ©    ©  © ©  © ©©  © © ©     ©
3 © ©    ©©©© ©©©© © © ©    ©©©  ©
4 © ©    ©  © ©  © ©  ©©       © ©
5 ©  ©©© ©  © ©  © ©   ©   ©©©©  ©
6 ©                              ©
7 ©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©©
Gambar Logo.</pre>
<p style="TEXT-ALIGN: justify">Untuk bisa mengisikan data-data tersebut ke buffer dengan mudah, maka kita bisa membuat tabel data gambar. Teknik ini mirip dengan cara yang dilakukan untuk menampilkan variasi nyala LED pada percobaan LED berjalan 5 dari buku <strong><a title="Mudah dan Menyenangkan Belajar Mikrokontroler" href="http://sulhansetiawan.com/buku/mudah-dan-menyenangkan-belajar-mikrokontroler/">Mudah dan Menyenangkan Belajar Mikrokontroler</a></strong> atau pada artikel <strong><a title="Simulasi LED Berjalan pada Mikrokontroler" href="http://sulhansetiawan.com/mikrokontroler/experiment/simulasi-led/">Simulasi LED</a></strong>. Setiap tabel gambar memiliki ukuran yang sama dengan ukuran buffer. Dan untuk kasus logo di atas, kita membutuhkan empat buah tabel gambar yang ukurannya adalah 32 byte.</p>
<p style="TEXT-ALIGN: justify">Seperti pada percobaan LED berjalan tersebut, pekerjaan menyusun tabel adalah pekerjaan yang membosankan dan membutuhkan ketelitian. Akan tetapi Anda tidak perlu berkecil hati jika ingin membuat tabel untuk gambar-gambar yang besar dan rumit karena Anda bisa menggunakan bantuan program <a title="ImgTable.zip" href="http://sulhansetiawan.com/mikrokontroler/ImgTable.zip"><strong>ImgTable.exe</strong></a>. Program tersebut akan membantu Anda untuk mengubah gambar dengan format bmp menjadi tabel yang bisa kita gunakan pada program baik menggunakan format M51 ataupun menggunakan format sdcc. Jadi untuk mendapatkan tabel gambarnya, Anda cukup membuat gambar menggunakan MSPaint, kemudian lakukan konversi menggunakan ImgTable.exe.</p>
<p style="TEXT-ALIGN: justify">ImgTable.exe dapat melakukan konversi dari file bmp dengan format monochrome hingga format 24bit. akan tetapi karena tabel tersebut akan digunakan untuk menyalakan LED yang tentu saja setara dengan format monochrome, maka format 24bit pun akan diubah terlebih dahulu oleh ImgTable.exe menjadi format monochrome. Oleh karena itu lebih baik jika Anda menyimpan gambar yang Anda buat dengan format monochrome untuk menghemat ukuran file.</p>
<p style="TEXT-ALIGN: justify">Aturan yang diterapkan oleh ImgTable adalah bahwa pixel-pixel yang berwarna hitam akan diubah menjadi bit-bit 1, sedangkan pixel-pixel berwarna putih menjadi bit-bit 0. Untuk warna-warna selain hitam dan putih, maka terlebih dahulu akan dijumlahkan ketiga unsur warna dasarnya, kemudian dibagi dengan tiga. Setelah itu, jika nilainya lebih dekat ke hitam akan diartikan sebagai hitam, dan jika lebih dekat dengan putih akan diartiken dengan putih.</p>
<p style="TEXT-ALIGN: justify">Urut-urutan pembuatan tabelnya dalah dari kiri ke kanan dan dari atas ke bawah. Dari atas ke bawah artinya setiap delapan pixel kebawah akan diambil sebagai satu byte. Sebagai contoh, gambar dengan ukuran 32 x 32, maka akan dibuat empat buah tabel dengan ukuran 32 byte. Tabel pertama menyimpan data dari koordinat (0,0) hingga (31,7) dengan aturan pixel pada kiri atas adalah (0,0) dan pixel di kanan bawah adalah (31,31). Tabel kedua adalah (0,8) hingga (31,15). Demikian seterusnya.</p>
<p style="TEXT-ALIGN: justify">Pada contoh tersebut semua tabel menyimpan seluruh data gambar dengan tepat karena ukuran tinggi gambar merupakan kelipatan delapan. Jika ukuran gambar bukan merupakan kelipatan delapan, maka tabel terakhir akan memiliki bit-bit sisa. Sebagai contoh jika ukuran gambar adalah 32 (lebar) x 33 (tinggi), maka jumlah tabel adalah lima tabel dengan ukuran 32 byte. Dan tabel terakhir hanya bit 0 saja yang terpakai. Sedangkan bit 1 hingga bit 7 akan diisi dengan 0.</p>
<p style="TEXT-ALIGN: justify">Kembali ke LED matriks, kita harus menampilkan keempat bagian logo satu-persatu. Akan tetapi jika kita menampilkannya secara bergantian, maka bentuk logo tidak akan terlihat dengan jelas. Kita hanya akan melihat gambar-gambar tak lengkap yang muncul bergantian. Oleh karena itu kita harus menampilkannya secara bergeser ke atas atau ke bawah. Akan tetapi tabel yang telah kita buat adalah tabel yang berisi data blok-blok gambar. Jadi kita tidak bisa mengambil data gambar dari koordinat (0,1) hingga (31,8) secara langsung. Untuk itu kita membutuhkan sebuah buffer lagi dengan ukuran yang sama dengan buffer pertama. Jika buffer pertama kita sebut dengan buffer display, maka buffer kedua kita sebut dengan buffer hiden karena buffer ini memang bukan untuk menampilkan data ke LED matriks. Buffer ini hanya kita gunakan sebagai bantuan dalam memanipulasi data tampilan.</p>
<p style="TEXT-ALIGN: justify">Dalam kasus kita hendak melakukan penggeseran gambar ke atas, maka kita bisa menggambarkan seolah-olah susunan buffer adalah seperti berikut:</p>
<pre style="TEXT-ALIGN: center">01245...
abcde...
 Angka=buffer display, huruf=buffer hiden.</pre>
<p style="TEXT-ALIGN: justify">Pertama kali kita mengisi buffer display dengan data 0, sehingga semua LED akan padam. Kemudian kita menempatkan tabel gambar blok pertama pada buffer hiden. Setelah itu lakukan pergeseran bit antara a dengan 0, b dengan 1, c dengan 2, dan seterusnya. Lakukan pergeseran ini hingga delapan kali, yang artinya semua bagian blok gambar telah berada pada buffer display. Dan sebelum melakukan pergeseran yang kesembilan, kita harus menempatkan blok gambar yang kedua ke buffer hiden. Dan langkah selanjutnya merupakan perulangan dari langkah sebelumnya.</p>
<p style="TEXT-ALIGN: justify">Untuk lebih jelasnya, Anda bisa melihat pada <strong><a title="LedMatriks.zip" href="http://sulhansetiawan.com/microsource/LedMatriks.zip">listing program</a></strong> untuk demo di atas yang ditulis dalam format M51 maupun c. Pada listing tersebut terdapat konstanta DelayTime yang dapat Anda ganti untuk mengubah kecepatan gerak gambar.</p>
<p style="TEXT-ALIGN: justify">Untuk mencoba pada simulator, maka Anda harus mengatur link port agar Port0 dan Port1 sama-sama me<em>link</em> secara message ke MXLED.exe dengan message berupa WM_USER dan lParam untuk Port0 adalah 2 dan lParam untuk Port1 adalah 1. Anda juga harus mengatur konfigurasi MXLED agar berukuran 8 x 32 landscape.</p>
<p style="TEXT-ALIGN: justify">Selamat Mencoba dan jangan ragu untuk bertanya jika ada yang kurang jelas. Semoga bermanfaat.</p>
]]></content:encoded>
			<wfw:commentRss>http://sulhansetiawan.com/menampilkan-gambar-pada-led-matriks-menggunakan-simulator/feed</wfw:commentRss>
		<slash:comments>53</slash:comments>
		</item>
		<item>
		<title>Counter 3 digit</title>
		<link>http://sulhansetiawan.com/counter-3-digit</link>
		<comments>http://sulhansetiawan.com/counter-3-digit#comments</comments>
		<pubDate>Mon, 22 Sep 2008 03:27:44 +0000</pubDate>
		<dc:creator>Sulhan</dc:creator>
				<category><![CDATA[Eksperimen]]></category>
		<category><![CDATA[Belajar Mikrokontroler]]></category>
		<category><![CDATA[Counter]]></category>
		<category><![CDATA[Mikrokontroler]]></category>

		<guid isPermaLink="false">http://sulhansetiawan.com/?p=224</guid>
		<description><![CDATA[Seorang teman meminta tolong kepada saya untuk membuat program untuk melakukan perhitungan yang bisa naik atau turun. Data ditampilkan pada seven segment tiga digit. Sedangkan untuk menaikkan atau menurunkan hitungan dipasang tombol pada port 3. Sebenarnya dia meminta saya untuk menempatkan pengaturan digit menggunakan P0 dan P2 sebagai data segment. Akan tetapi karena sebelumnya saya [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Seorang teman meminta tolong kepada saya untuk membuat program untuk melakukan perhitungan yang bisa naik atau turun. Data ditampilkan pada seven segment tiga digit. Sedangkan untuk menaikkan atau menurunkan hitungan dipasang tombol pada port 3.</p>
<p style="text-align: justify;">Sebenarnya dia meminta saya untuk menempatkan pengaturan digit menggunakan P0 dan P2 sebagai data segment. Akan tetapi karena sebelumnya saya telah membuat program dengan P0 sebagai data segment dan P1 sebagai pengaturan digit, maka agar saya tidap perlu melakukan konfigurasi ulang saat saya mencoba pada simulator, saya tetap menggunakan P0 sebagai data segment dan P1 sebagai pengatur digit. Oleh karena itu jika Anda telah terlanjur menggunakan P0 sebagai pengatur digit dan P2 sebagai data segment, maka Anda perlu mengubah konstanta PortDigit dan PortData pada bagian atas program.</p>
<p style="text-align: justify;">Untuk mewujudkan permintaan teman di atas, saya menggunakan cara seperti yang biasa saya lakukan jika ingin menampilkan data pada seven segment, yaitu menempatkan prosedur pengatur seven segment pada interupsi timer. Hal ini menjamin program kita untuk bisa menampilkan data pada seven segment dengan kecerahan yang baik. Ada beberapa contoh program penampil seven segment yang menempatkan proses scanning pada program utama. Padahal kita tahu bahwa seven segment yang dipasang secara multipleks harus secara terus menerus discan untuk bisa menampilkan datanya. Jika program kita kurang jeli dalam melakukan scanning, maka tampilan akan terganggu. Mungkin padam, dan ini adalah yang paling buruk, atau setidaknya intensitas nyala seven segment akan menjadi redup. Dan hal tersebut sangat tidak menyenangkan. Dengan menggunakan timer interupt untuk melakukan scanning, kita bisa melepaskan perhatian kita dari proses scanning, karena hal tersebut telah sepenuhnya kita serahkan pada interupt handler. Jadi cara ini adalah cara yang terbaik (setidaknya menurut saya begitu, Anda boleh memberi komentar jika tidak setuju).</p>
<p style="text-align: justify;">Kemudian karena program yang sedang kita buat ini memang program yang sangat sederhana, maka kita bisa menggunakan seluruh fasilitas yang dimiliki oleh mikrokontroler tanpa harus banyak pertimbangan. Untuk lebih mudah dalam menagani tombol penaik atau tombol penurun hitungan, kita bisa menggunakan interupt external, yaitu ext0 dan ext1. Jadi kita tinggal memasang tombol pada P3.2 (ext0) dan P3.3 (ext1). Tentu saja tombol yang kita pasang harus benar-benar tombol yang bebas bounce (<em>bounceless</em>), sehingga jika kita menekan tombol sekali, maka kita mendapatkan hitungan sekali juga. Untuk menaikkan hitungan, kita menggunakan ext0. Sedangkan untuk menurunkan hitungan, kita menggunakan ext1. Pada program utama bahkan kita tidak melakukan apapun.</p>
<p style="text-align: justify;">Menggunakan interupt untuk menangani tombol memang sangat sederhana dalam hal respons. Akan tatepi kelemahannya adalah bahwa tombol yang harus digunakan adalah tipe bounceless. Disamping itu hanya P3.2 dan P3.3 saja yang bisa digunakan. Oleh karena itu menggunakan teknik debouncing seperti yang pernah saya bahas pada buku <a title="Mudah dan Menyenangkan Belajar Mikrokontroler" href="http://sulhansetiawan.com/buku/mudah-dan-menyenangkan-belajar-mikrokontroler/"><strong>Mudah dan Menyenangkan Belajar Mikrokontroler</strong></a> mungkin akan menjadi solusi yang lebih baik dalam menangani tombol. Untuk itu, saya juga akan menampilkan program yang menagani tombol tidak pada interupsi eksternal, tetapi ditempatkan pada interupsi timer. Dengan demikian interupsi timer selain digunakan untuk melakukan scanning seven segment juga digunakan untuk scanning tombol.</p>
<p style="text-align: justify;">Pada scanning tombol melalui interupsi timer, kita bisa menggunakan sembarang tombol, tidak harus menggunakan tombol bounceless. Kita hanya perlu mengatur seberapa cepat bounce tombol akan ditanggapi. Untuk mencobanya, Anda bisa mengubah nilai MaxWait hingga 255 untuk melambatkan respon dari bounce tombol. Jika Anda menggunakan simulator dan komputer yang digunakan tergolong komputer cepat, mungkin respon tombol akan masih terlalu cepat. Anda cukup mengubah tipe TimeOutUp dan TImeOutDown menjadi <span style="color: #800000;">unsigned int</span> dan mengganti nilai MaxWait dengan angka yang lebih tinggi lagi. Setelah itu cobalah untuk menekan tombol pada Tombol.exe dengan frekuensi yang tinggi. Anda akan menemukan bahwa jika tombol ditekan terlalu cepat, maka penekanan tombol yang terlalu cepat itu akan dianggap sebagai bounce. Dengan demikian kita bisa menggunakan tombol yang tidak benar-benar bebas bounce. Yang perlu Anda lakukan tinggal mengatur seberapa sensitif tombol Anda, yaitu dengan mengatur nilai MaxWait. Dan secara umum, Anda tidak akan menggunakan angka yang lebih tinggi dari 255. Oleh karena itu tipe data yang saya gunakan adalah <span style="color: #800000;">unsigned char</span>.</p>
<p style="text-align: justify;">Ingat, jika Anda menggunakan Tombol.exe sebagai simulasi tombol, maka Anda harus mengatur port yang digunakan (dalam hal ini adalah P3) pada simulator agar dilink secara Link Message. Hal ini perlu dilakukan karena Tombol.exe mengirim sinyal penekanan tombol ke simulator melalui Window Message. Sedangkan untuk program yang menangani tombol melalui interupsi external, maka Anda tidak bisa menggunakan Tombol.exe karena Tombol.exe tidak bisa memberikan sinyal interupsi kepada simulator. Anda harus menggunakan tombol yang ada pada simulator. Cara menampilkannya adalah dengan menampilkan jendela port dari menu <strong>View-Port</strong>. Kemudian dari jendela tersebut, klik ganda pada port yang diinginkan yaitu pada nama port, bukan pada value-nya, karena jika Anda klik ganda pada bagian value, maka akan dimunculkan dialog untuk mengganti value dari port atau register yang bersangkutan.</p>
<p style="text-align: justify;">Seorang teman yang lain bertanya kepada saya,&#8221;Bagaimana caranya membuat program yang terus-menerus mengawasi penekanan tombol, tetapi operasi yang lain tetap berjalan tanpa terganggu oleh pengawasan terhadap tombol tersebut?&#8221;. Nah, dua contoh program di atas, baik yang menggunakan interupsi eksternal maupun yang menggunakan scan tombol pada interupsi timer, telah melakukan pengawasan terhadap penekanan tombol secara terus-menerus sementara pada bagian program utama bahkan tidak melakukan apapun. Jadi, contoh di atas juga merupakan jawaban dari pertanyaan ini. Anda cukup menempatkan operasi-operasi yang lain pada bagian program utama, sementara pengawasan terhadap tombol telah secara terus-menerus terawasi.</p>
<p style="text-align: justify;"><strong><a title="Counter3Digit.zip" href="http://sulhansetiawan.com/microsource/Counter3Digit.zip">Program saya tulis hanya dalam bahasa c dan M51</a></strong>. Jadi jika Anda baru memiliki Micro v5.4, yaitu IDE yang saya sertakan pada buku <strong><a title="Mudah dan Menyenangkan Belajar Mikrokontroler" href="http://sulhansetiawan.com/buku/mudah-dan-menyenangkan-belajar-mikrokontroler/">Mudah dan Menyenangkan Belajar Mikrokontroler</a></strong>, maka sebaiknya Anda mendownload dulu IDE versi terbaru yang mendukung bahasa c, yaitu <strong><a title="Micro_v6.11.1.zip" href="http://sulhansetiawan.com/mikrokontroler/Micro_v6.11.1.zip">Micro v6.11</a></strong>. Disamping itu, pada saat saya mencoba program tersebut pada simulator, saya menemukan bahwa tombol port pada simulator tidak bisa membangkitkan interupsi eksternal. Oleh karena itu saya buru-buru melakukan perbaikan pada SimulatorInDll.dll. Bagi Anda yang sudah terlanjur mendownload Micro v6.11 sebelum artikel ini dimuat, Anda akan memperoleh SimulatorInDll.dll dengan versi 4.2.1.6. Sedangkan versi terbaru yang telah saya perbarui agar bisa mendapatkan interupsi jika tombol P3.2 dan P3.3 ditekan adalah <strong><a title="SimulatorInDll.zip" href="http://sulhansetiawan.com/mikrokontroler/SimulatorInDll.zip">SimulatorInDll.dll versi 4.2.2.8</a></strong>. Downloadlah file tersebut dan tempatkan pada direktori dimana Anda menempatkan Micro.exe untuk mengganti versi yang lama.</p>
<p style="text-align: justify;">Selamat mencoba, semoga bermanfaat.</p>
]]></content:encoded>
			<wfw:commentRss>http://sulhansetiawan.com/counter-3-digit/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Simulasi Seven Segment untuk Program Jam Digital dengan Tampilan Jam-Menit-Detik</title>
		<link>http://sulhansetiawan.com/simulasi-seven-segment-untuk-program-jam-digital-dengan-tampilan-jam-menit-detik</link>
		<comments>http://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[Eksperimen]]></category>
		<category><![CDATA[Belajar Mikrokontroler]]></category>
		<category><![CDATA[Jam Digital]]></category>
		<category><![CDATA[Mikrokontroler]]></category>
		<category><![CDATA[Seven Segment]]></category>
		<category><![CDATA[Simulasi]]></category>

		<guid isPermaLink="false">http://sulhansetiawan.com/?p=222</guid>
		<description><![CDATA[Seven Segment adalah salah satu komponen yang paling sering digunakan terutama untuk menampilkan data dalam bentuk angka. Untuk itu, Microcontroller Project juga menyediakan simulasi untuk seven segment, yaitu SSLED.exe Simulasi seven segment yang disediakan oleh SSLED.exe berukuran delapan digit dengan cara multipleks. Cara multipleks adalah cara yang paling sering digunakan karena pengkabelan yang ringkas dan [...]]]></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="/swf/SSLED.swf" /><embed type="application/x-shockwave-flash" width="339" height="159" src="/swf/SSLED.swf" menu="false" scale="exactfit" quality="high"></embed></object></p>
<p style="text-align: justify;">Seven Segment adalah salah satu komponen yang paling sering digunakan terutama untuk menampilkan data dalam bentuk angka. Untuk itu, <strong><a title="Micro Project Versi Terbaru" href="http://sulhansetiawan.com/microcontroller-project">Microcontroller Project</a></strong> juga menyediakan simulasi untuk seven segment, yaitu SSLED.exe</p>
<p style="text-align: justify;">Simulasi seven segment yang disediakan oleh SSLED.exe berukuran delapan digit dengan cara multipleks. Cara multipleks adalah cara yang paling sering digunakan karena pengkabelan yang ringkas dan hanya membutuhkan sedikit port untuk mengendalikannya. Cara mengendalikan seven segment yang disusun secara multipleks adalah dengan membagi dua macam jalur berupa jalur data dan jalur pengendali digit. Jalur data digunakan untuk menentukan lampu mana yang menyala, sedangkan jalur pengendali digit digunakan untuk mengatur digit mana yang menyala.</p>
<p style="text-align: justify;">Jalur data dan jalur pengendali digit pada SSLED.exe diterima menggunakan window message berupa WM_USER. Jika lParam bernilai 1, maka sinyal yang diterima akan dianggap sebagai sinyal untuk jalur pengendali digit. Sedangkan jika lParam bernilai 2, maka sinyal yang diterima akan dianggap sebagai sinyal untuk jalur data.</p>
<p style="text-align: justify;">Pada jalur data, bit 0 akan digunakan untuk menyalakan lampu a, bit 1 untuk menyalakan lampu b, dan seterusnya hingga bit 6 untuk menyalakan lampu g. Sedangkan bit 7 digunakan untuk menyalakan lampu titik desimal. Jika sebuah bit bernilai 1, maka lampu yang bersangkutan akan menyala. Hal ini akan sesuai dengan penyalaan lampu pada tipe common cathode. Akan tetapi kita juga bisa membalik data sehingga jika data yang dikirim bernilai FF, maka data tersebut justru akan dianggap 00. Kemampuan ini berguna untuk penyesuaian dengan tipe seven segment yang akan digunakan.</p>
<p style="text-align: justify;">SSLED.exe menyediakan dua cara pengendalian digit, yaitu cara paralel dan cara counter. Pada cara paralel, setiap digit bisa diaktifkan secara individual tergantung nilai bit pada jalur pengendali. Bit 0 pada jalur pengendali akan mengendalikan digit paling kanan dan bit 7 akan mengendalikan digit paling kiri. Jika sebuah bit bernilai 1, maka digit yang bersangkutan akan aktif. Dan seperti halnya pada jalur data, maka jalur pengendali digit juga bisa dibalik.</p>
<p style="text-align: justify;">Pada mode counter, hanya bit 0 dan bit 1 pada jalur pengendali digit yang digunakan. Bit 0 digunakan untuk mereset counter, sehingga digit yang aktif menjadi digit yang paling kanan. Sedangkan bit 1 digunakan untuk menggeser digit yang aktif menjadi digit disebelah kirinya, atau sebutlah sebagai menaikkan cacahan counter. Cara menaikkan cacahan counter pun ada dua macam, yaitu transisi L to H atau transisi H to L. Jika kita menggunakan transisi L to H, maka counter akan dinaikkan cacahannya jika bit 1 berubah kondisi dari 0 menuju 1. Sebaliknya jika transisi yang digunakan adalah H to L, maka cacahan justru akan dinaikkan jika bit 1 berubah kondisi dari 1 menjadi 0.</p>
<p style="text-align: justify;">Jika digit yang aktif adalah digit paling kiri dan cacahan dinaikkan, maka digit yang aktif akan kembali menjadi digit paling kanan.</p>
<p style="text-align: justify;">Gambar di atas adalah contoh bagaimana simulasi seven segment jika dioperasikan untuk menampilkan program jam digital. Program di atas sebenarnya merupakan modifikasi dari program pada bab Interupsi dari buku <a title="Mudah dan Menyenangkan Belajar Mikrokontroler" href="http://sulhansetiawan.com/buku/mudah-dan-menyenangkan-belajar-mikrokontroler/"><strong>Mudah dan Menyenangkan Belajar Mikrokontroler</strong></a>, yaitu pada program Timer.A51. Akan tetapi pada buku tersebut kita akan mencoba program pada seven segment yang sebenarnya, jadi kita perlu berhemat hanya dengan menggunakan empat digit saja. Sedangkan pada simulasi ini, kita memiliki simulasi seven segment yang menyediakan delapan digit. Oleh karena itu, kita bisa menampilkan tidak hanya jam dan menit saja, tetapi juga detik. Bahkan kita masih memiliki sisa dua digit. Sisa digit ini kita gunakan untuk memisahkan jam dengan menit dan menit dengan detik, yantu dengan menampilkan tanda (-). Oleh karena itu, kita perlu sedikit modifikasi dari program Timer.A51 agar bisa menampilkan detik dan tanda pemisahan tersebut.</p>
<p style="text-align: justify;"><a title="Jam8Digit.zip" href="http://sulhansetiawan.com/microsource/Jam8Digit.zip"><strong>Kode sumber</strong></a> ditulis dengan format M51 dan c dimana sinyal data dikirim menggunakan P0, dan sinyal kendali digit menggunakan P1. Dengan demikian kita harus mengatur P0 untuk dilink secara Link Message dengan message berupa WM_USER dan lParam bernilai 2 serta mengisi Handle dengan Capture Handle ke SSLED.exe yang sedang berjalan. Demikian juga dengan P1. Hanya bedanya pada P1, nilai lParam adalah 1. Dan ingat, buang tanda cek pada menu <strong>Update Display</strong> pada simulator.</p>
<p style="text-align: justify;">Tapi perlu diingat bahwa program tersebut ditulis untuk berjalan di mikrokontroler dengan kristal 11,592Mhz. Jadi kecepatan perubahan detik pada saat simulasi belum tentu tepat. Dan kecepatannya tergantung kecepatan komputer yang Anda gunakan.</p>
<p style="text-align: justify;">Nah, menarik kan? Selamat mencoba <img src='http://sulhansetiawan.com/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://sulhansetiawan.com/simulasi-seven-segment-untuk-program-jam-digital-dengan-tampilan-jam-menit-detik/feed</wfw:commentRss>
		<slash:comments>54</slash:comments>
		</item>
		<item>
		<title>Simulasi LED Berjalan pada Mikrokontroler</title>
		<link>http://sulhansetiawan.com/simulasi-led</link>
		<comments>http://sulhansetiawan.com/simulasi-led#comments</comments>
		<pubDate>Tue, 09 Sep 2008 23:46:07 +0000</pubDate>
		<dc:creator>Sulhan</dc:creator>
				<category><![CDATA[Eksperimen]]></category>
		<category><![CDATA[Belajar Mikrokontroler]]></category>
		<category><![CDATA[Mikrokontroler]]></category>
		<category><![CDATA[Simulasi]]></category>

		<guid isPermaLink="false">http://sulhansetiawan.com/?p=182</guid>
		<description><![CDATA[Permainan awal yang selalu dilakukan oleh orang yang baru belajar mikrokontroler adalah menyalakan LED. Walaupun pertama kali biasanya kita hanya menyalakan LED yang bergerak ke kanan atau kekiri saja, dan biasanya hal seperti itu akan dianggap membosankan, akan tetapi hal ini sangat penting artinya untuk bisa memahami bagaimana membuat program pada mikrokontroler. Disamping itu, jika [...]]]></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="/swf/VirLED.swf" /><embed type="application/x-shockwave-flash" width="217" height="115" src="/swf/VirLED.swf" menu="false" scale="exactfit" quality="high"></embed></object></p>
<p style="text-align: justify;">Permainan awal yang selalu dilakukan oleh orang yang baru belajar mikrokontroler adalah menyalakan LED. Walaupun pertama kali biasanya kita hanya menyalakan LED yang bergerak ke kanan atau kekiri saja, dan biasanya hal seperti itu akan dianggap membosankan, akan tetapi hal ini sangat penting artinya untuk bisa memahami bagaimana membuat program pada mikrokontroler. Disamping itu, jika kita mau mengembangkan program agar tidak hanya menyalakan LED yang hanya menyala bergeser ke kanan atau ke kiri saja, maka permainan inipun bisa menjadi sangat menarik.</p>
<p style="text-align: justify;">Sebagai contoh, percobaan LED menggunakan tabel seperti pada LED5.A51 pada buku<a title="Mudah dan Menyenangkan Belajar Mikrokontroler" href="http://sulhansetiawan.com/buku/mudah-dan-menyenangkan-belajar-mikrokontroler/"> <strong><span style="color: #000000;">Mudah dan Menyenangkan Belajar Mikrokontroler</span></strong></a>, merupakan permainan LED yang sangat menarik. Gambar di atas menunjukkan bagaimana permainan LED tersebut jika dijalankan pada simulator yang dihubungkan dengan VLED.</p>
<p style="text-align: justify;">Yang perlu Anda lakukan untuk menggunakan VLED.exe dalam menjalankan simulasi untuk LED5.A51 adalah menghubungkan P1 secara Link Message dengan Message yang dikirim = WM_USER (1024), kemudian mengisi Handle dengan cara Capture Handle ke VLED yang sedang berjalan.</p>
<p style="text-align: justify;">Pengaturan link dilakukan dengan klik menu <strong>Option-Port</strong> dari jendela simulator. Setelah itu akan tampak jendela Port Setting. Pada jendela tersebut terdapat empat buah tab, yaitu tab untuk Port 0 hingga Port 3. Isi dari setiap tab adalah sama, yaitu mengatur bagaimana port-port tersebut dihubungkan. Jika Anda tidak ingin menghubungkan port kemanapun, maka pilihlah Link None. Kemudian Link Port dipilih jika port simulasi akan dihubungkan dengan port fisik, misalnya port pararel atau port PPI yang terpasang. Sedangkan Link Message digunakan jika simulator dihubungkan ke program lain melalui Window Message. Dan yang terakhir adalah Link File, yaitu jika port akan dihubungkan ke file.</p>
<p style="text-align: justify;">Jika Link Message yang dipilih, Anda harus menentukan Message yang harus dikirim, lParam yang dikirim, juga Handle dari Window program yang menerima message. Pengisian parameter ini tergantung dari program yang akan di-link. Sebagai contoh, VLED menerima message berupa WM_USER, yaitu 1024. Jadi message yang dikirim juga harus 1024. Sementara lParam tidak diperhitungkan oleh VLED, jadi biarkan saja apa adanya. Dan yang tidak boleh terlupa adalah mengisi Handle Window dari program yang di-link.</p>
<p style="text-align: justify;"> Pengisian Handle ini bisa dilakukan dengan klik pada tombol Capture Handle, kemudian klik lagi pada program yang akan di-link. Ingat! setelah klik pada tombol Capture Handle tidak boleh klik pada apapun selain pada program yang akan di-link. Karena Capture Handle akan mengambil handle dari apapun yang diklik setelah tombol ini diklik. Jika pengisian handle telah dilakukan, maka pada bagian Caption biasanya akan muncul tulisan seperti pada program yang di-link. Misalnya jika yang di-link adalah VLED, maka akan muncul tulisan Virtual LED. Tutuplah jendela Port Setting dan nikmatilah simulasinya.</p>
<p style="text-align: justify;">Anda juga bisa melihat bagaimana LED berjalan pada LED yang sesungguhnya dengan cara melink Port1 secara Link Port, kemudian mengisi Address dengan 378, yaitu alamat untuk port. Dan Anda harus memasang LED pada paralel port seperti pada gambar berikut:</p>
<div class="wp-caption aligncenter" style="width: 212px"><img title="Pemasangan LED pada port paralel" src="img/LEDPortPLL.gif" alt="Pemasangan LED pada port paralel." width="202" height="313" /><p class="wp-caption-text">Pemasangan LED pada port paralel.</p></div>
<p style="text-align: justify;">Untuk mencoba program tersebut, Anda bisa <span style="color: #000000;"><a title="LED5.zip" href="http://sulhansetiawan.com/microsource/LED5.zip"><strong>download kode sumber</strong> </a></span>yang ditulis baik menggunakan bahasa assembly maupun bahasa c. Dan ingat! Anda harus membuang tanda cek pada menu <strong>Option-Update Display</strong> pada simulator agar simulator berjalan lebih cepat. Kecepatan jalannya LED mungkin tidak sama antara komputer Anda dengan gambar di atas. Kecepatan simulasi tergantung dari kecepatan komputer Anda.</p>
<p style="text-align: justify;">Selamat mencoba.</p>
]]></content:encoded>
			<wfw:commentRss>http://sulhansetiawan.com/simulasi-led/feed</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>SimulatorInDLL &#8211; Simulator Mikrokontroler MCS-51</title>
		<link>http://sulhansetiawan.com/simulatorindll-simulator-mikrokontroler-mcs-51</link>
		<comments>http://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[Simulator]]></category>
		<category><![CDATA[Belajar Mikrokontroler]]></category>
		<category><![CDATA[IDE Mikrokontroler]]></category>
		<category><![CDATA[Mikrokontroler]]></category>
		<category><![CDATA[Simulasi]]></category>
		<category><![CDATA[Software GRATIS!]]></category>

		<guid isPermaLink="false">http://sulhansetiawan.com/?p=129</guid>
		<description><![CDATA[Simulator pada versi ini dibuat terpisah dari IDEnya, yaitu dibuat menjadi file “SimulatorInDLL.dll”. Dengan begini Anda bisa mengembangkan simulator tersebut agar bekerja sesuai keinginan Anda. Sebenarnya, simulator ini baru mendukung assembly. Tapi Anda bisa membuat batasan-batasan agar simulator seolah-olah bekerja untuk C. Syaratnya, Anda harus tahu persis bagaimana C membuat programnya. Hal ini mungkin jika [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Simulator pada versi ini dibuat terpisah dari IDEnya, yaitu dibuat menjadi file “SimulatorInDLL.dll”. Dengan begini Anda bisa mengembangkan simulator tersebut agar bekerja sesuai keinginan Anda.</p>
<p style="text-align: justify;">Sebenarnya, simulator ini baru mendukung assembly. Tapi Anda bisa membuat batasan-batasan agar simulator seolah-olah bekerja untuk C. Syaratnya, Anda harus tahu persis bagaimana C membuat programnya. Hal ini mungkin jika Anda seorang multi-programmer, artinya tidak hanya mengerti pemrograman mikrokontroler tapi juga pemrograman yang lain. Anda juga harus cukup mengerti bagaimana SDCC bekerja. Jika tidak, Anda baru bisa menggunakan simulator untuk assembly saja.</p>
<p style="text-align: justify;">Eit, jangan kuatir, meskipun simulator ini baru bisa bekerja dalam bahasa assembly, tapi <a title="Micro v6.11.1" href="http://sulhansetiawan.com/micro-v6111-ide-mikrokontroler">Micro v6.11.1</a> akan mengonversi program yang Anda tulis dengan SDCC menjadi assembly. Jadi program C Anda tetap bisa dicoba dengan simulator. Nah sekarang kita akan bahas penggunaan simulator secara umum.</p>
<div class="wp-caption aligncenter" style="width: 524px"><img title="Menu utama SimulatorInDLL" src="img/SimulatorMainMenu.jpg" alt="Menu Utama SimulatorInDLL" width="514" height="72" /><p class="wp-caption-text">Menu utama SimulatorInDLL.</p></div>
<p style="text-align: justify;">
<p style="text-align: justify;">Tujuh menu utama pada simulator:</p>
<ol style="text-align: justify;" type="1">
<li>Start. Tentu saja menu ini berfungsi untuk menjalankan simulasi. Menu ini akan berubah menjadi Stop jika sedang berjalan, jadi tentu saja berfungsi untuk menghentikan simulasi.</li>
<li>Single Step (F7). Menu ini berfungsi untuk menjalankan hanya satu baris instruksi.</li>
<li>Step Over (F8). Menu ini hampir sama dengan Single Step. Bedanya tampak jika instruksi yang dijalankan adalah instruksi call. Single Step akan melompat ke subprogram yang dipanggil, sedangkan Step Over akan menjalankan subprogram sampai selesai.</li>
<li>Reset. Menu ini berfungsi halnya kita menekan tombol reset pada rangkaian mikrokontroler. Biasanya saat pertama kali simulator dijalankan, Anda belum bisa menjalankan simulasi sampai Anda klik menu ini. Demikian juga setelah Anda melakukan perubahan opsi.</li>
<li>View. Menu ini berfungsi untuk memilih window mana saja yang akan ditampilkan. Yaitu window RAM internal, RAM eksternal, port, SFR, dan register.</li>
<li>Option. Nah, yang ini yang benar-benar harus diperhatikan agar bisa menggunakan simulator secara optimal.
<ul style="text-align: justify;">
<li>Update External. Kalo menu ini diberi tanda cek, maka setiap akses ke ram eksternal akan menyebabkan isi register pada jendela ram eksternal akan langsung diupdate.</li>
<li>Update Display. Kalo menu ini diberi tanda cek, maka setiap eksekusi program akan langsung menyebabkan semua jendela diupdate. Kamu sebaiknya memberi tanda cek pada menu ini jika kamu pengin liat setiap perubahan data pada setiap eksekusi program. Tapi hal ini akan menyebabkan jalannya simulasi menjadi jauh lebih lambat. Jadi kalo kamu hanya pengin liat hasil akhir atau hanya pengin liat kerja yang ditunjukkan pada port, sebaiknya buang saja tanda ceknya.</li>
<li>Separate 4 bit biner. Nah kalo menu ini diberi tanda cek, maka bilangan biner pada jendela port, sfr, register, atau ram eksternal akan dipisah dalam dua nibble.</li>
<li>Com. Nah menu ini termasuk menu yang sangat penting jika kamu lagi coba program untuk komunikasi serial. Kamu bisa pilih Com1 hingga Com4 jika ingin setiap penulisan pada register SBuf benar-benar dikirim ke port serial di komputermu. Selain itu kamu juga bisa menghubungkan SBuf dengan simulator lain melalui window message. Jika kamu pilih link ini, maka data yang diisikan ke SBuf akan dikirim ke window yang dituju dengan data pada wParam. Kamu sebelumnya harus mengatur dulu parameter-parameter yang dibutuhkan. Pertama adalah handle dari window yang dituju. Untuk mengisi nilai ini, kamu cukup klik pada tombol Capture Handle, terus arahkan pointer mouse ke window yang dituju, lalu klik di window tersebut. Berikutnya adalah message yang dikirim. Jika window simulator yang dituju butuh WM_USER, maka kamu cukup klik pada tombolnya untuk mendapatkan konstanta untuk WM_USER. Demikian juga jika window yang dituju meminta WM_CHAR, maka kamu cukup klik pada tombol WM_CHAR. Kamu bisa menggunakan notepad untuk menangkap data karakter yang dikirim melalui SBuf jika messagenya berupa WM_CHAR. Yang terakhir adalah lParam. Parameter yang ini tidak selalu digunakan. Ini mungkin akan penting jika kamu bikin sendiri simulator dan membutuhkan informasi tambahan, misalnya simulator kamu juga pengin berkomunikasi langsung dengan simulator ini. Kamu tinggal kasih tanda cek pada Handle Aplikasi ini untuk mendapatkan handle dari simulator yang sedang berjalan. Tentu saja keterangan ini hanya akan dipahami oleh kamu yang biasa bikin program di Windows.</li>
<li>Prioritas Thread. Nah yang ini kamu harus hati-hati milihnya. Jika kamu milih prioritas paling tinggi maka semua waktu CPU hampir-hampir akan dihabiskan hanya untuk menjalankan simulasi ini. Jadi kadang kamu bahkan akan sulit untuk menggerakkan mouse.</li>
<li>Port. Yang ini berguna untuk mengatur link dari P0 hingga P1. Jika kamu klik pada menu ini, maka kamu akan dibawa ke sebuah jendela untuk mengatur link dari port-port tersebut. Ada empat pilihan link untuk setiap port, yaitu link none, jika kamu pengin port untuk tidak terhubung kemanapun; link port, jika kamu pengin port terhubung ke port fisik, misalnya port paralel, ppi atau port-port fisik lain yang terpasang di komputermu; link message, jika data pada port pengin kamu link ke aplikasi yang sedang berjalan atau ke simulator lain; dan yang terakhir adalah link file, yaitu jika data yang dikirim ke port akan dikirimkan ke file. Pengaturan link message bisa dibilang sama dengan pengaturan link message pada COM.</li>
<li>Reset Port+Com setting on close. Jika menu ini diberi tanda cek, maka pengaturan pada port dan com akan dikembalikan ke keadaan tidak dilink kemanapun setelah simulasi ditutup. Sebaliknya, seting akan disimpan pada registry dan akan digunakan untuk mengatur simulator pada saat simulator dijalankan lagi.</li>
<li>Kecapatan Simulasi. Ini adalah menu terakhir pada menu Option. Ini akan menentukan tundaan setiap eksekusi simulasi. Tentu saja menu ini hanya akan berarti jika menu Update Display diberi tanda cek.</li>
</ul>
</li>
<li>About. Yang ini tidak begitu penting si, cuma kadang kalau kita bikin program, maka kita juga ingin dikenal. Nah kalau Anda klik menu yang ini, Anda bakal lihat logo kebanggaanku.</li>
</ol>
<h5>Break point</h5>
<p style="text-align: justify;">Ada kalanya kita ingin menjalankan simulasi tanpa harus mengawasi setiap langkahnya. Kita hanya ingin tahu keadaan pada baris tertentu saja, misal keadaan register-register tepat sebelum sebuah subprogram hendak kembali (pada perintah RET). Kalau begitu, Anda cukup memberi tanda break point pada baris yang Anda kehendaki sebagai tempat berhentinya simulasi. Caranya, klik ganda pada baris di mana Anda ingin simulasi berhenti. Untuk menghilangkan tanda break point, Anda tinggal klik ganda lagi pada baris tersebut.</p>
<div class="wp-caption aligncenter" style="width: 276px"><img title="Baris dengan break point" src="img/SimulatorBreakPoint.jpg" alt="Baris dengan break point." width="266" height="144" /><p class="wp-caption-text">Baris dengan break point.</p></div>
<p style="text-align: justify;">
<h5>Update Point</h5>
<p style="text-align: justify;">Jika kita pengin simulasi dijalankan dengan cepat, maka kita harus membuang tanda cek pada menu Option-Update Display. Sayangnya jika ini kita lakukan, maka tampilan pada semua jendela hanya akan diupdate setelah kita menghentikan simulasi. Jadi kita tidak bisa mengamati perubahan yang terjadi pada register-registernya. Nah kita bisa membuat agar pada titik-titik tertentu, nilai-nilai register diupdate tanpa harus menghentikan simulasi. Nah jika ini yang kamu kehendaki, maka kamu bisa tambahkan update point pada baris tertentu. Misalnya pada baris setelah sebuah port dimodifikasi sehingga kita bisa mengamati perubahan nilai pada port tersebut. Caranya adalah klik ganda sambil menekan tombol Shift pada baris yang pengin kamu tambah update point.</p>
<div class="wp-caption aligncenter" style="width: 296px"><img title="Baris dengan update point" src="img/SimulatorUpdatePoint.jpg" alt="Baris dengan update point." width="286" height="136" /><p class="wp-caption-text">Baris dengan update point.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://sulhansetiawan.com/simulatorindll-simulator-mikrokontroler-mcs-51/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
