Social Icons

Pages

Wednesday, December 4, 2013

Edsim51, Simulator 8051 untuk beginer and advance

Ada satu hal yang gw lupa share diblog ini yaitu simulator handal yang satu ini, sebagai manusia yang gemar musing-musingin diri lewat programming dan sirkuit elektronika tentunya sangat mendambakan sebuah aplikasi simulator yang mampuni, memang banyak aplikasi simulator yang muanteb kelas bintang toedjoeh, tapi ini laen, apanya yang laen simak aja deh.

Edsim51 application console
Iseng barusan ngecek edsim51 pengen liat update'an nya secara gw da lama ga pake aplikasi ini, ga taunya uda banyak perubahan disana-sini, bahkan sekarang edsim51 dah bisa simulator pake bahasa C dan HEX file, ini aplikasi gokil yang gw temukan karena ini cinta pertama gw memasuki dunia embedded system.
Sorry ralat bukan cinta pertama karena cinta pertama gw adalah Microchip menggunakan chip PIC 16F89, tapi cinta gw ga mendalam sama chip ini, berarti edsim51 bukan cinta pertama tapi cinta monyet, haha...


Sekarang gw lebih fokus make AVR, begitu juga arduino sama aja chip yang digunakan adalah AVR, emang bedanya gimana sih? Selengkapnya silahkan membaca artikel Mengenal microcontroller dan Embedded System, Mengenal IDE integrated development environtment.

Ada beberapa aplikasi simulator keren bintang toedjoeh seperti LTspice, Proteus, LabView, dll. Nah edsim51 ini awalnya aplikasi simulator untuk chip 8051 dengan menggunakan bahasa assembly yaitu bahasa tingkat rendah, artinya bahasa yang sulit diterjemahkan/dimengerti manusia, tapi justru benih-benih cinta pertama gw jatuh di assembly dan semakin lengket pas nemuin aplikasi ini.

Aplikasi ini ga hanya melulu ngurusin program dan memang bukan compiler atau interpreter, ini aplikasi simulator, jadi lo bisa puas-puasin bikin project disimulator sebelum jatoh ke dunia nyata, parahnya aplikasi ini ngebedah jeroan microcontroler itu sendiri secara transparansi, haha..., setau gw ga ada aplikasi yang sedetail ini, ..ya memang AVRstudio bisa melakukan ini, tapi buat newbie kayanya kurang cocok.

Bermain assembly berarti bermain lebih dalem bisa sampai tingkatan segmen dan offset, bahasa tingkat tinggi meskipun ramah (rajin menjamah) ga akan bisa menjamah sejauh ini, konsekuensinya bikin program pake assembly jadi kaya bikin novel, bisa jadi puanjaaang banget programnya, beda dengan bahasa tingkat tinggi bikin program bisa sependek cerpen, hahaha...

DAC Scope
Aplikasi ini dilengkapi dengan DAC scope, 8051 ga punya DAC secara internal begitu pula ADC internal, tapi kalo belajar langsung ke AVR kita jadi ga paham jeroan microcontroller, tapi setiap orang punya gaya belajar berbeda so yang penting lo tau cara atau gaya belajar lo sendiri, and go head!

Sirkuit yang digunakan simulator edsim51
Simulator ini memiliki sirkuit yang sudah baku, jadi ga bisa diganggu gugat, tapi sirkuit/skematik bisa dibuka per blok rangkaian, yang jelas kita tinggal mengikutinya dan mengendalikannya melalui kode program, perhatikan kendali apa yang bisa dilakukan simulator ini cukup lengkap.
  1. 4x7 segment with decoder (binary to 7 segment)
  2. Keypad matrix 3x4
  3. TX/RX UART
  4. DAC (chip Digital to Analog Converter) with scope!
  5. ADC (chip Analog to Digital Converter) with scope!
  6. Motor DC + motor sensor + H-bridge driver
  7. 8x switch NO (normaly open)
  8. 8x LED
Semua hasil program akan disilmulasikan dengan user friendly, bukan hanya pin IO tapi register-register yang tak kasat mata lo bisa pantau jelas, jadi lo bisa memahami step program yang lo buat, ato lo COPAS kode program dari situs resminya http://www.edsim51.com/examples.html, kemudian mempelajarinya sendiri dengan memperhatikan silmulasinya secara step by step, HACKING and BRAVO!!! Kalo begini belajar bakalan jadi seru, selanjutnya tinggal musing-musingin diri dengan bermain nakal melalui beberapa eksperimen, kalo mau buktiin secara real, cetak PCB sendiri beli komponen-komponennya, solder sendiri, download compiler untuk 8051, beli atau bikin sendiri downloader untuk memprogram chip 8051, and tadaaaa....lo menjadi seorang engineering sekarang, haha....

start:
	DEC P1		; decrement port 1
	JMP start	; kembali ke start 
                        ; dan mengulang alias infinity loop kalo di C

Pake aplikasi ini lo bisa sekali dayung 2 pulau terlampaui, lo paham aliran program sekaligus lo paham sirkuitnya secara elektronika, chip seperti AVR sekarang sudah memiliki ADC built-in, jadi rangkaian bakalan jadi slim and mungil tinggal fokus diprogram aja, and biaya jadi lebih murah, laen kalo beli chip ADC ato DAC terpisah, coba cek dipasaran harga ADC8040, berapa satu biji dan itu hanya 8 bit coy, haha....

Konsol register, memory, HEX, dkk
Ini yang terpenting, apa jadinya kode program yang kita buat bisa kita liat kelakukannya disetiap register, semua yang ghaib-ghaib akan terlihat nyata disini, hahaha...., bisa melihat timer, RAM atau kita membuat flag, lalu pengaruhnya gimanasih, konsol ini memudahkan proses INTROSPEKSI bagi programmer yang GAGAL, hahaha...dan semua bilangan dalam hexa dan binari, temukan sendirilah keistimewaannya, theory is nothing without practise guys!!

Konsol Hardware
Ini bagian konsol hardware, ini tampilan fisik beda sama yang sebelumnya menampilkan nilai-nilai ghaib, haha...4x7 segmen, LCD 16x2, DAC, ossciloscope, 8x switch + 8x LED, UART, 3x4 keypad matrix, ADC + slider adjustable, Motor DC + slider adjustable. Haha...bae banget ni yang bikin software James Rogers, gw doain semoga diberkahkan dan dimudahkan rezeki, usia, dan ilmunya, dilindungi dari segala mara bahaya dan mendapatkan cintanya Tuhan, amiin.

Dengan adanya DAC dan ADC berarti bisa eksperimen dengan suara, misal bikin jingle tukang cakue gitu, hahaha....memang bermain dengan suara kendalanya adalah difile yang besar, biaya rangkaian jadi bengkak karena mungkin saja dibutuhkan EPROM sebagai memori tambahan, tapi hal ini bisa diakalin dengan software tertentu, hingga dihasilkan file yang kecil tanpa mengurangi kualitas sound-nya.

Konsol edsim51
Nah ini tampilan edsim51 tempo doeloe, fiturnya ga bertambah tapi tampilan sekarang lebih baik, aplikasi ini berbasis java, jadi untuk menggunakannya ga perlu instal-instalan yang penting punya java, untuk linux user file *.jar belum bisa running sebelum dirubah menjadi file executable, jadi meskipun punya java blom bisa jalan ni aplikasi, caranya? Seperti biasa buka konsol CLI comment line interface dan ketikan perintah berikut :

  1. $ ls -l /home/user/...direktori_file_*.jar
  2. $ cd ~/direktori_file_*.jar
  3. $ chmod +x ~/file_*.jar
  4. $ ls -l
You can also download the HEX file output which was generated by the uVision3 compiler. Haha...jadi kita bisa menggunakan HEX file (file hexa), kemudian mempelajarinya, OMG...perasaan dulu blom ada fitur ini, jadi begini setiap embedded system ketika proses download (proses memasukan program ke chip microcontroller), file berupa syntax dirubah menjadi file *.obj yaitu file bahasa mesin, yang kalo dibuka isinya angka binari semua, nah file yang kita downloadkan ke microcontroller ini bisa kita kunci demi keamanan hak cipta misalnya, jadi orang ga bisa meniru atau menkloning program dari chip yang kita buat, istilahnya LOCK BIT.

Tapi didunia ini diatas langit masih ada langit jadi hukum tertentu hanya akan berlaku bagi kaum tertentu, hahaha....nah sekarang andaikata kita mau mengkopi file dari sebuah microcontroller untuk di CLONE-kan ke chip yang kita punya, file tersebut akan diterima dalam bentuk HEX file (file hexa), bentuknya kaya begini :

:03000000020A20D1
:100800008F0D7D07120A1192977D06AF0D120A1106
:1008100092967D05AF0D120A1192957D04AF0D12CF
:100820000A119294D293D292C2927D03AF0D120A12
:100830001192977D02AF0D120A1192967D01AF0DB4
:10084000120A119295E4FDAF0D120A119294D29200
:10085000C292020A2C120982D200C2011209A2D24B
:1008600000D201D2021209DE7BFF7A0879F3120965
:10087000577F401208A57BFF7A097911120957208A
:10088000A5051209FA80F820A60C30A709D200C2EB
:10089000011209C180E930A6E620A7E3D200D20107
:1008A0001209C180DA8F08C293D2977D06120A110D
:1008B00092967D05AF08120A1192957D04AF081239
:1008C0000A119294D292C2927D03AF08120A119239
:1008D000977D02AF08120A1192967D01AF08120AA5
:1008E000119295E4FDAF08120A119294D292C2922D
:1008F000020A2C456453696D3531204C4344204D28
:100900006F64756C652053696D756C6174696F6E89
:10091000004261736564206F6E204869746163688A
:1009200069204844343437383000BB010CE5822953
:10093000F582E5833AF583E0225006E92582F8E660
:1009400022BBFE06E92582F8E222E58229F582E54E
:10095000833AF583E493228B088A09890AE4F50B2C
:10096000F50CAB08AA09A90A850C82850B8312092C
:100970002AFF600D120800050CE50C70E5050B80E0
:10098000E122C297C296D295C294C293D292C292E9
:10099000120A2CD292C292D297C296D292C29202DC
:1009A0000A2CC293C297C296C295C294D292C292A6
:1009B000D296A2009295A2019294D292C292020A79
:1009C0002CC293C297C296C295D294D292C292A2DE
:1009D000009297A2019296D292C292020A2CE4F55A
:1009E00090D292C292D297A2009296A2019295A220
:1009F000029294D292C292020A2CC293C297C296D9
:100A0000C295C294D292C292D295D292C292020A56
:100A10002CAE05EFA806088003A2E713D8FB13222B
:100A2000787FE4F6D8FD758120020855E4FF0FBFFA
:030A300032FC2273
:00000001FF

Nah abis itu file ini kita downloadkan ke chip yang sudah kita siapkan, menggunakan software downloader, dan sebuah alat downloader, jadi file ini akan dirubah menjadi file *.obj dan disimpan didalam ROM internal microcontroller, nah masalahnya kalo kita ga hacking kode program ini, bisa jadi embel-embel sang programer akan tampil dikomponen display, misalnya @dragon workshop technology muncul di LCD panel atau dimonitor, hahaha....sementara tulisan @dragon workshop technology ga keliatankan diHEX file, jadi ga bisa dihilangkan atau dirubah, don't you? Sebagian orang aneh (maksudnya cerdas) bisa membaca/memahami HEX file, dan TIDAK termasuk gw, hahaha....

Tapi tenang sebagai pengguna linux urusan begini ga perlu stres, banyak jalan untuk pemecahannya, file ini bisa dikonversi menjadi file assembly menggunakan aplikasi "ht", tapi entar dulu, aplikasi ini berbasis TEXT MODE!!! Salah-salah lo bisa mimisan pake ini software, contoh HEX file diatas pendek, tapi sependek itu kalo dikonversi ke bahasa assembly bisa jadi novel coy, hahaha....bisa jadi panjang banget, itu pernah gw lakukan waktu mempelajari virus kompie, dan gw bengek angkat tangan, otak keburu dehidrasi, karena baru sub-routine nya aja busheettt puanjang coy, hahaha...., padahal ukuran virus paling 300kb, mendingan bedah file microcontroller aja dah dibawah 8kb, and santai dilinux semua file syntax akan berwarna, seperti hidup ini berwarna, jadi ga monoton warnanya monochrome.

Kalo mo musing-musingin diri kudu siap cemilannya coy, jangan dibarengin ngupil sambil coding, soalnya lo ga akan sadar kalo lubang idung lo membesar nanti, hahaha...

Ini salah satu contoh syntax assembly dicopy dari situs resmi edsim51

; put data in RAM
	MOV 30H, #'A'
	MOV 31H, #'B'
	MOV 32H, #'C'
	MOV 33H, #0	; end of data marker


; initialise the display
; see instruction set for details


	CLR P1.3		; clear RS - indicates that instructions are being sent to the module

; function set	
	CLR P1.7		; |
	CLR P1.6		; |
	SETB P1.5		; |
	CLR P1.4		; | high nibble set

	SETB P1.2		; |
	CLR P1.2		; | negative edge on E

	CALL delay		; wait for BF to clear	
				; function set sent for first time - tells module to go into 4-bit mode
; Why is function set high nibble sent twice? See 4-bit operation on pages 39 and 42 of HD44780.pdf.

	SETB P1.2		; |
	CLR P1.2		; | negative edge on E
				; same function set high nibble sent a second time

	SETB P1.7		; low nibble set (only P1.7 needed to be changed)

	SETB P1.2		; |
	CLR P1.2		; | negative edge on E
				; function set low nibble sent
	CALL delay		; wait for BF to clear


; entry mode set
; set to increment with no shift
	CLR P1.7		; |
	CLR P1.6		; |
	CLR P1.5		; |
	CLR P1.4		; | high nibble set

	SETB P1.2		; |
	CLR P1.2		; | negative edge on E

	SETB P1.6		; |
	SETB P1.5		; |low nibble set

	SETB P1.2		; |
	CLR P1.2		; | negative edge on E

	CALL delay		; wait for BF to clear


; display on/off control
; the display is turned on, the cursor is turned on and blinking is turned on
	CLR P1.7		; |
	CLR P1.6		; |
	CLR P1.5		; |
	CLR P1.4		; | high nibble set

	SETB P1.2		; |
	CLR P1.2		; | negative edge on E

	SETB P1.7		; |
	SETB P1.6		; |
	SETB P1.5		; |
	SETB P1.4		; | low nibble set

	SETB P1.2		; |
	CLR P1.2		; | negative edge on E

	CALL delay		; wait for BF to clear


; send data
	SETB P1.3		; clear RS - indicates that data is being sent to module
	MOV R1, #30H		; data to be sent to LCD is stored in 8051 RAM, starting at location 30H
loop:
	MOV A, @R1		; move data pointed to by R1 to A
	JZ finish		; if A is 0, then end of data has been reached - jump out of loop
	CALL sendCharacter	; send data in A to LCD module
	INC R1			; point to next piece of data
	JMP loop		; repeat

finish:
	JMP $


sendCharacter:
	MOV C, ACC.7		; |
	MOV P1.7, C		; |
	MOV C, ACC.6		; |
	MOV P1.6, C		; |
	MOV C, ACC.5		; |
	MOV P1.5, C		; |
	MOV C, ACC.4		; |
	MOV P1.4, C		; | high nibble set

	SETB P1.2		; |
	CLR P1.2		; | negative edge on E

	MOV C, ACC.3		; |
	MOV P1.7, C		; |
	MOV C, ACC.2		; |
	MOV P1.6, C		; |
	MOV C, ACC.1		; |
	MOV P1.5, C		; |
	MOV C, ACC.0		; |
	MOV P1.4, C		; | low nibble set

	SETB P1.2		; |
	CLR P1.2		; | negative edge on E

	CALL delay		; wait for BF to clear

delay:
	MOV R0, #50
	DJNZ R0, $
	RET

Diawal kode program diatas, 

        MOV 30H, #'A'
	MOV 31H, #'B'
	MOV 32H, #'C
 
Program membuat alamat register 30H dan disimpan didalam stack pointer 'A', 31H pada 'B' dan 32H pada 'C', alamat 30H ini berfungsi sebagai tempat penyimpanan sementara, misal untuk menyimpan nilai variable, hasil perhitungan, data input dari sensor misal yang nantinya bisa berpindah dan berubah nilainya, dan disini lo bisa sadar bahwa distribusi program itu seperti apa, otak lo akan mampu memvisualkan seperti apa program berjalan didalam sirkuit elektronika, secara fisika tidak ada binari dipapan PCB, logika 1 dan 0 itu adalah aras logika yang dilakukan oleh komponen semikonduktor.

Ini artinya sudah bermain ditingkatan memory segmentation, menentukan alamat diarea segmen dan offset sebuah memori, dan ini ghaib hanya bisa dibuktikan melalui microscope elektron, karena ga pernah terlihat secara kasat mata, itulah kenapa assembly dan edsim51 membuat lo cerdas, bukan pintar.

Menurut gw yang pertama kali mengenal pemrograman dengan bahasa assembly, assembly itu mudah dimengerti (meskipun klaimnya bahasa tingkat rendah), memang program terlalu panjang karena bersifat sequensial alias berurutan satu persatu, ga kebayang kalo mau ngecek sub-routine, instruksi JMP jadi kejauhan, jangankan JMP, SJMP aja bakalan jauh.

Memang kurang praktis, tapi kegiatan CODING (membuat syntax assembly) akan membantu pemahaman elektronika dipapan sirkuit tanpa pernah membedah/mempelajari langsung papan sirkuitnya, beda dengan bahasa C, atau bahasa tingkat tinggi lainnya, otak kanan dan otak kiri hanya akan memikirkan SOLUSI berupa ALGORITMA, tanpa pernah bisa terbayang kerja sirkuit elektronika dan perubahan fisika yan terjadi dipapan sirkuit, mana tau data a disimpan dimana, dieksekusi dimana, dipindah kemana, dan seperti apa.

Mudah-mudahan review dari seorang yang uneducated ini bisa menstimulan dan membantu permasalahan teman-teman yang newbie dan sedang galau diseputar embedded system :D

EdSim51, developed by James Rogers, is a simulator unlike the many industry-standard simulators that are widely available - this simulator has the student in mind.
Sampai ketemu ditulisan-tulisan saya selanjutnya.
Post a Comment