Kata-kata:

"Sejelek-jeleknya tulisan/catatan/postingan, adalah sebaik-baiknya ingatan. "(anonim).

Monday, February 14, 2011

Simulator Mikrokontroller

Penasaran dengan berbagai teknologi elektronik yang serba terintegrasi, embeded atau apa istilahnya, Ehh......saya jadi tambah kelihatan banyak ketidak-tahuannya.

Kemarin beli midi organ mini untuk anak, waah..... canggihnya, ada tombol karaoke jika di pencet maka di semua tombol keyboardnya masing-masing sekali pencet langsung memainkan sebuah lagu anak-anak. Dan uniknya juga ketika tombol mode instrumen di pencet maka hanya nada melodi saja yang berubah. Sang anak senyum...dan tertawa gembira sampai terbahak-bahak ketika yang dipencet adalah tombol suara hewan-hewan, ada kodhok, anjing, bebek, burung....dan suara hewan-hewan itupun bisa menyanyi. Harganyapun tidaklah terlalu mahal, kemarin saya beli kurang lebih Rp 70 Ribu

Sayapun kemudian membuka kotak musik ajaib itu, ingin melihat komponennya seperti apa?. Eh ...ternyata seperti lelehan aspal berdiameter tidak lebih dari 1 cm sebagai otaknya.

Kebetulan saya sedang cari referensi bagaimana cara membuat program dan sekaligus cara menanamkannya kedalam IC mikrokontroler, . Eh malah menemukan Aplikasi untuk mensimulasi Rangkaian Mikrokontroler bernama Proteus 7.7..

Sayapun mencoba berbagai sample Simulasi, ada Melodi Bell Pintu, Program Catur dengan LCD Touchhscreen dsb.



Contoh, ketika simulasi saya jalankan....tombol-1 di tekan dan ajaib sebuah lagu mozart di mainkan, begitu pula ketika tombol-2 dipencet, melodi lain yang berbunyi.............
Hiiih.....berapa hari aku bisa jadi Programmer Mikrokontroller.............

=========================================
Ini code DoorBell.asm
==================
LIST p=16F84 ; PIC16F844 is the target processor

#include "P16F84.INC" ; Include header file

CBLOCK 0x10 ; Temporary storage
tempo
tptrl
tptrh
note
length
pitch
temp
dl1
dl2
ENDC


ORG 0
entrypoint goto initialise

ORG 4
intvector goto toggle

initialise ; Register set up:
clrw ; Zero.
movwf PORTA ; Ensure PORTB is zero before we enable it.
movwf PORTB ; Ensure PORTB is zero before we enable it.
bsf STATUS,RP0 ; Select Bank 1
clrf TRISB ; Port B is outputs

; Set up timer 0 for tone generation
movlw 0x02 ; Prescaler on, internal clocking, divide by 4
movwf OPTION_REG
bcf STATUS,RP0 ; Back to bank 0


; Poll for a button
wait clrf PORTB
wloop btfss PORTA,0
goto playtune0
btfss PORTA,1
goto playtune1
goto wloop

;Routines to play the tunes
playtune0 movlw 0x13
movwf PORTB
movlw 0x50
movwf tempo
movlw tune0 / 0x100
movwf tptrh
movlw tune0 % 0x100
movwf tptrl
goto playtune

playtune1 movlw 0x23
movwf PORTB
movlw 0xA0
movwf tempo
movlw tune1 / 0x100
movwf tptrh
movlw tune1 % 0x100
movwf tptrl
goto playtune

;Subroutine to play a tune
playtune call gettunedata ; Lookup note from tune table
movwf note ; Store the note code
btfsc note,7 ; Bit 7 set => end of tune
goto wait ; Back to waiting for a button press
incf tptrl,F ; Increment the tune pointer
call gettunedata ; Get the note length
movwf length ; Store it

; Play the stored note
; The tune table supports two octaves and 8 note lengths.
playnote btfsc note,6 ; Bit 6 set => rest
goto playwait ; Silence ensues...
movf note,W ; Retrieve the note
andlw 0x3F ; Mask off the pitch index
call pitchtable ; and look it up in the pitchtable
movwf pitch ; Transfer the value to Timer 0
movwf TMR0
bcf INTCON,T0IF ; Clear Timer Interrupt
bsf INTCON,T0IE ; Enable interrupts for Timer 0
bsf INTCON,GIE
playwait movf length,W ; Retrieve the note length
movwf dl1 ; and store it in delay counter 1
loop1 movf tempo,W ; This value sets the timing resolution
movwf dl2
loop2 nop ; Inner delay loop delay
nop
decfsz dl2,F
goto loop2
decfsz dl1,F ; Outer delay loop
goto loop1
bcf INTCON,T0IE ; Timer interrupts off

;Fetch next note/length pair:
incf tptrl,F ; Increment tune ptr
btfsc STATUS,Z ; Test for low byte rollover
incf tptrh,F ; Inc high byte
goto playtune ; Loop for next note

; Routine to fetch data from the tune tables
gettunedata movf tptrh,W ; Set up PCLATH for the jump
movwf PCLATH
movf tptrl,W ; Get low address of tptr
movwf PCL ; Jump off to the table entry

; Pitch lookup function
pitchtable clrf PCLATH ; Clear PCLATH for zero page
addwf PCL,F
retlw 0x11 ;C5 // Midi Code 60
retlw 0x1F ;C#
retlw 0x2B ;D
retlw 0x37 ;D#
retlw 0x42 ;E
retlw 0x4D ;F
retlw 0x57 ;F#
retlw 0x61 ;G
retlw 0x6A ;G#
retlw 0x72 ;A (440)
retlw 0x7A ;Bb
retlw 0x81 ;B
retlw 0x89 ;C6 // Midi Code 72
retlw 0x8F ;Db
retlw 0x96 ;D
retlw 0x9C ;Eb
retlw 0xA1 ;E
retlw 0xA7 ;F
retlw 0xAC ;F#
retlw 0xB0 ;G
retlw 0xB5 ;Ab
retlw 0xB9 ;A (880)
retlw 0xBD ;Bb
retlw 0xC1 ;B
retlw 0xC4 ;C7 // Midi Code 84
retlw 0xC8 ;Db
retlw 0xCB ;D
retlw 0xCE ;Eb
retlw 0xD1 ;E
retlw 0xD3 ;F
retlw 0xD6 ;F#
retlw 0xD8 ;G
retlw 0xDA ;Ab
retlw 0xDC ;A (1760)
retlw 0xDE ;Bb
retlw 0xE0 ;
retlw 0xE2 ;C8 // Midi Code 96




;Interrupt service - toggle the drive polarity to the sounder
;Note that this does not preserve the status bits - be careful,
;and that there is an assumption we are addressing bank 0.
toggle movwf temp
movf pitch,W
movwf TMR0
movf PORTB,W
xorlw 0x0F
movwf PORTB
bcf INTCON,T0IF
movf temp,w
retfie

;Tune Tables
;Must be on even byte boundary

org 0x0080

; Tune 0 Data
; Bach 'Badinerie' from Suite No 2
tune0 retlw 0x17 ;B
retlw 0x78 ;240
retlw 0x1A ;D
retlw 0x3C ;120
retlw 0x17 ;B
retlw 0x3C ;120
retlw 0x12 ;F#
retlw 0x78 ;240
retlw 0x17 ;B
retlw 0x3C ;120
retlw 0x12 ;F#
retlw 0x3C ;120
retlw 0x0E ;D
retlw 0x78 ;240
retlw 0x12 ;F#
retlw 0x3C ;120
retlw 0x0E ;D
retlw 0x3C ;120
retlw 0x0B ;B
retlw 0xF0 ;480
retlw 0x06 ;F#
retlw 0x3C ;120
retlw 0x0B ;B
retlw 0x3C ;120
retlw 0x0E ;D
retlw 0x3C ;120
retlw 0x0B ;B
retlw 0x3C ;120
retlw 0x0D ;C#
retlw 0x3C ;120
retlw 0x0B ;B
retlw 0x3C ;120
retlw 0x0D ;C#
retlw 0x3C ;120
retlw 0x0B ;B
retlw 0x3C ;120
retlw 0x0A ;A#
retlw 0x3C ;120
retlw 0x0D ;C#
retlw 0x3C ;120
retlw 0x10 ;E
retlw 0x3C ;120
retlw 0x0D ;C#
retlw 0x3C ;120
retlw 0x0E ;D
retlw 0x78 ;240
retlw 0x0B ;B
retlw 0x78 ;240
retlw 0x17 ;B
retlw 0x78 ;240
retlw 0x1A ;D
retlw 0x3C ;120
retlw 0x17 ;B
retlw 0x3C ;120
retlw 0x12 ;F#
retlw 0x78 ;240
retlw 0x17 ;B
retlw 0x3C ;120
retlw 0x12 ;F#
retlw 0x3C ;120
retlw 0x0E ;D
retlw 0x78 ;240
retlw 0x12 ;F#
retlw 0x3C ;120
retlw 0x0E ;D
retlw 0x3C ;120
retlw 0x0B ;B
retlw 0xF0 ;480
retlw 0x0E ;D
retlw 0x78 ;240
retlw 0x0E ;D
retlw 0x78 ;240
retlw 0x0E ;D
retlw 0x78 ;240
retlw 0x0E ;D
retlw 0x78 ;240
retlw 0x17 ;B
retlw 0x78 ;240
retlw 0x0E ;D
retlw 0x78 ;240
retlw 0x10 ;E
retlw 0x3C ;60
retlw 0x0E ;D
retlw 0x3C ;30
retlw 0x0D ;C#
retlw 0x78 ;240
retlw 0x12 ;F#
retlw 0x78 ;240
retlw 0x12 ;F#
retlw 0x78 ;240
retlw 0x12 ;F#
retlw 0x78 ;240
retlw 0x12 ;F#
retlw 0x78 ;240
retlw 0x1A ;D
retlw 0x78 ;240
retlw 0x12 ;F#
retlw 0x78 ;220
retlw 0x12 ;F#
retlw 0x3C ;30
retlw 0x14 ;G#
retlw 0x3C ;65
retlw 0x11 ;F
retlw 0x78 ;270
retlw 0x0D ;C#
retlw 0x3C ;120
retlw 0x12 ;F#
retlw 0x3C ;120
retlw 0x15 ;A
retlw 0x3C ;120
retlw 0x12 ;F#
retlw 0x3C ;120
retlw 0x14 ;G#
retlw 0x3C ;120
retlw 0x12 ;F#
retlw 0x3C ;120
retlw 0x14 ;G#
retlw 0x3C ;120
retlw 0x12 ;F#
retlw 0x3C ;120
retlw 0x11 ;F
retlw 0x3C ;120
retlw 0x14 ;G#
retlw 0x3C ;120
retlw 0x17 ;B
retlw 0x3C ;120
retlw 0x14 ;G#
retlw 0x3C ;120
retlw 0x15 ;A
retlw 0x3C ;120
retlw 0x14 ;G#
retlw 0x3C ;120
retlw 0x15 ;A
retlw 0x3C ;120
retlw 0x14 ;G#
retlw 0x3C ;120
retlw 0x12 ;F#
retlw 0x3C ;120
retlw 0x15 ;A
retlw 0x3C ;120
retlw 0x12 ;F#
retlw 0x3C ;120
retlw 0x11 ;F
retlw 0x3C ;120
retlw 0x12 ;F#
retlw 0x3C ;120
retlw 0x17 ;B
retlw 0x3C ;120
retlw 0x12 ;F#
retlw 0x3C ;120
retlw 0x11 ;F
retlw 0x39 ;115
retlw 0x12 ;F#
retlw 0x3C ;120
retlw 0x19 ;C#
retlw 0x3E ;125
retlw 0x12 ;F#
retlw 0x3C ;120
retlw 0x11 ;F
retlw 0x3C ;120
retlw 0x12 ;F#
retlw 0x39 ;115
retlw 0x1A ;D
retlw 0x3E ;125
retlw 0x12 ;F#
retlw 0x3C ;120
retlw 0x11 ;F
retlw 0x3C ;120
retlw 0x12 ;F#
retlw 0x3C ;120
retlw 0x1A ;D
retlw 0x3C ;120
retlw 0x19 ;C#
retlw 0x3C ;120
retlw 0x17 ;B
retlw 0x3C ;120
retlw 0x19 ;C#
retlw 0x3C ;120
retlw 0x15 ;A
retlw 0x3C ;120
retlw 0x14 ;G#
retlw 0x3C ;120
retlw 0x12 ;F#
retlw 0x3C ;130
retlw 0x15 ;A
retlw 0x78 ;210
retlw 0x14 ;G#
retlw 0x3C
retlw 0x12 ;F#
retlw 0x3C ;
retlw 0x12 ;F#
retlw 0xE0 ;480
retlw 0xFF
retlw 0

; Tune 1
; Mozart Eine Klein Nachtmusik


tune1

retlw 0x13 ;G
retlw 0x43 ;538
retlw 0x40 ;REST
retlw 0x4D ;617
retlw 0x0E ;D
retlw 0x18 ;193
retlw 0x40 ;REST
retlw 0x1D ;232
retlw 0x13 ;G
retlw 0x3E ;498
retlw 0x40 ;REST
retlw 0x48 ;582
retlw 0x0E ;D
retlw 0x1B ;218
retlw 0x40 ;REST
retlw 0x18 ;192
retlw 0x13 ;G
retlw 0x15 ;168
retlw 0x40 ;REST
retlw 0x19 ;207
retlw 0x0E ;D
retlw 0x15 ;168
retlw 0x40 ;REST
retlw 0x15 ;172
retlw 0x13 ;G
retlw 0x17 ;188
retlw 0x40 ;REST
retlw 0x18 ;197
retlw 0x17 ;B
retlw 0x17 ;188
retlw 0x40 ;REST
retlw 0x1B ;222
retlw 0x1A ;D
retlw 0x3B ;478
retlw 0x40 ;REST
retlw 0x83 ;1052
retlw 0x18 ;C
retlw 0x47 ;568
retlw 0x40 ;REST
retlw 0x4A ;597
retlw 0x15 ;A
retlw 0x15 ;168
retlw 0x40 ;REST
retlw 0x1D ;237
retlw 0x18 ;C
retlw 0x3C ;483
retlw 0x40 ;REST
retlw 0x52 ;657
retlw 0x15 ;A
retlw 0x16 ;183
retlw 0x40 ;REST
retlw 0x16 ;177
retlw 0x18 ;C
retlw 0x1C ;228
retlw 0x40 ;REST
retlw 0x12 ;147
retlw 0x15 ;A
retlw 0x16 ;183
retlw 0x40 ;REST
retlw 0x18 ;197
retlw 0x12 ;F#
retlw 0x18 ;198
retlw 0x40 ;REST
retlw 0x14 ;167
retlw 0x15 ;A
retlw 0x1D ;238
retlw 0x40 ;REST
retlw 0x18 ;192
retlw 0x0E ;D
retlw 0x39 ;458
retlw 0x40 ;REST
retlw 0x82 ;1042
retlw 0x13 ;G
retlw 0x27 ;313
retlw 0x40 ;REST
retlw 0x3E ;497
retlw 0x13 ;G
retlw 0x6B ;858
retlw 0x40 ;REST
retlw 0x1E ;242
retlw 0x17 ;B
retlw 0x31 ;395
retlw 0x15 ;A
retlw 0x21 ;268
retlw 0x40 ;REST
retlw 0x07 ;57
retlw 0x13 ;G
retlw 0x16 ;183
retlw 0x40 ;REST
retlw 0x18 ;197
retlw 0x13 ;G
retlw 0x16 ;180
retlw 0x15 ;A
retlw 0x13 ;155
retlw 0x13 ;G
retlw 0x12 ;145
retlw 0x12 ;F#
retlw 0x10 ;133
retlw 0x40 ;REST
retlw 0x22 ;272
retlw 0x12 ;F#
retlw 0x68 ;833
retlw 0x40 ;REST
retlw 0x1F ;252
retlw 0x15 ;A
retlw 0x2C ;355
retlw 0x18 ;C
retlw 0x1B ;218
retlw 0x40 ;REST
retlw 0x14 ;162
retlw 0x12 ;F#
retlw 0x13 ;158
retlw 0x40 ;REST
retlw 0x19 ;202
retlw 0x15 ;A
retlw 0x2F ;380
retlw 0x13 ;G
retlw 0x13 ;158
retlw 0x40 ;REST
retlw 0x22 ;272
retlw 0x13 ;G
retlw 0x78 ;963
retlw 0x40 ;REST
retlw 0x1D ;237
retlw 0x17 ;B
retlw 0x2A ;343
retlw 0x40 ;REST
retlw 0x03 ;27
retlw 0x15 ;A
retlw 0x22 ;278
retlw 0x40 ;REST
retlw 0x0C ;102
retlw 0x13 ;G
retlw 0x16 ;183
retlw 0x40 ;REST
retlw 0x1A ;212
retlw 0x13 ;G
retlw 0x19 ;205
retlw 0x15 ;A
retlw 0x12 ;150
retlw 0x13 ;G
retlw 0x11 ;140
retlw 0x12 ;F#
retlw 0x12 ;148
retlw 0x40 ;REST
retlw 0x1F ;252
retlw 0x12 ;F#
retlw 0x5B ;728
retlw 0x40 ;REST
retlw 0x27 ;317
retlw 0x15 ;A
retlw 0x2D ;365
retlw 0x18 ;C
retlw 0x1A ;208
retlw 0x40 ;REST
retlw 0x13 ;152
retlw 0x12 ;F#
retlw 0x14 ;163
retlw 0x40 ;REST
retlw 0x19 ;207
retlw 0x13 ;G
retlw 0x14 ;163
retlw 0x40 ;REST
retlw 0x19 ;207
retlw 0x13 ;G
retlw 0x13 ;153
retlw 0x40 ;REST
retlw 0x1A ;212
retlw 0x13 ;G
retlw 0x1C ;225
retlw 0x12 ;F#
retlw 0x15 ;175
retlw 0x10 ;E
retlw 0x1E ;240
retlw 0x12 ;F#
retlw 0x12 ;150
retlw 0x13 ;G
retlw 0x18 ;198
retlw 0x40 ;REST
retlw 0x16 ;177
retlw 0x13 ;G
retlw 0x10 ;128
retlw 0x40 ;REST
retlw 0x23 ;287
retlw 0x17 ;B
retlw 0x17 ;190
retlw 0x15 ;A
retlw 0x0D ;105
retlw 0x13 ;G
retlw 0x1F ;255
retlw 0x15 ;A
retlw 0x0F ;125
retlw 0x17 ;B
retlw 0x18 ;193
retlw 0x40 ;REST
retlw 0x1A ;212
retlw 0x17 ;B
retlw 0x10 ;128
retlw 0x40 ;REST
retlw 0x20 ;257
retlw 0x1A ;D
retlw 0x19 ;200
retlw 0x18 ;C
retlw 0x0F ;125
retlw 0x17 ;B
retlw 0x1F ;250
retlw 0x18 ;C
retlw 0x10 ;135
retlw 0x1A ;D
retlw 0x59 ;713
retlw 0x40 ;REST
retlw 0x7B ;987
retlw 0x0E ;D
retlw 0xBA ;1495
retlw 0x10 ;E
retlw 0x7C ;998
retlw 0x40 ;REST
retlw 0x48 ;577
retlw 0x0E ;D
retlw 0x19 ;205
retlw 0x0C ;C
retlw 0x16 ;183
retlw 0x40 ;REST
retlw 0x31 ;397
retlw 0x0C ;C
retlw 0x14 ;163
retlw 0x40 ;REST
retlw 0x4C ;612
retlw 0x0C ;C
retlw 0x17 ;190
retlw 0x0B ;B
retlw 0x12 ;148
retlw 0x40 ;REST
retlw 0x39 ;457
retlw 0x0B ;B
retlw 0x13 ;153
retlw 0x40 ;REST
retlw 0x43 ;537
retlw 0x0B ;B
retlw 0x17 ;190
retlw 0x09 ;A
retlw 0x13 ;153
retlw 0x40 ;REST
retlw 0x37 ;447
retlw 0x09 ;A
retlw 0x16 ;178
retlw 0x40 ;REST
retlw 0x41 ;522
retlw 0x07 ;G
retlw 0x2E ;375
retlw 0x06 ;F#
retlw 0x33 ;410
retlw 0x04 ;E
retlw 0x2D ;363
retlw 0x40 ;REST
retlw 0x01 ;12
retlw 0x06 ;F#
retlw 0x35 ;428
retlw 0x40 ;REST
retlw 0x02 ;22
retlw 0x07 ;G
retlw 0x16 ;178
retlw 0x40 ;REST
retlw 0x50 ;642
retlw 0x09 ;A
retlw 0x10 ;133
retlw 0x40 ;REST
retlw 0x4C ;612
retlw 0x0B ;B
retlw 0x0E ;113
retlw 0x40 ;REST
retlw 0xB4 ;1442
retlw 0x0E ;D
retlw 0xBA ;1495
retlw 0x10 ;E
retlw 0x82 ;1043
retlw 0x40 ;REST
retlw 0x39 ;462
retlw 0x0E ;D
retlw 0x2D ;360
retlw 0x0C ;C
retlw 0x16 ;178
retlw 0x40 ;REST
retlw 0x1E ;242
retlw 0x0C ;C
retlw 0x10 ;128
retlw 0x40 ;REST
retlw 0x1F ;252
retlw 0x0C ;C
retlw 0x10 ;133
retlw 0x40 ;REST
retlw 0x1C ;227
retlw 0x0C ;C
retlw 0x2C ;355
retlw 0x0B ;B
retlw 0x13 ;153
retlw 0x40 ;REST
retlw 0x1E ;247
retlw 0x0B ;B
retlw 0x0D ;108
retlw 0x40 ;REST
retlw 0x23 ;282
retlw 0x0B ;B
retlw 0x10 ;133
retlw 0x40 ;REST
retlw 0x1E ;247
retlw 0x0B ;B
retlw 0x2F ;380
retlw 0x09 ;A
retlw 0x13 ;158
retlw 0x40 ;REST
retlw 0x1B ;222
retlw 0x09 ;A
retlw 0x13 ;153
retlw 0x40 ;REST
retlw 0x1E ;242
retlw 0x09 ;A
retlw 0x10 ;128
retlw 0x40 ;REST
retlw 0x23 ;282
retlw 0x07 ;G
retlw 0x2B ;350
retlw 0x06 ;F#
retlw 0x2F ;380
retlw 0x04 ;E
retlw 0x31 ;395
retlw 0x06 ;F#
retlw 0x35 ;428
retlw 0x40 ;REST
retlw 0x05 ;47
retlw 0x07 ;G
retlw 0xB4 ;468
retlw 0xFF


END



0 comments: