Anda di halaman 1dari 8

IntroductiontoBASCOMAVRCompiler

WrittenbyCholisSafrudin(YD1CHS),midofApril2011
#1kumpulanmateribelajarbarengAVR

BASCOMAVR?

Tulisan berikut ditulis bukan sebagai text book, karena isinya dituangkan berdasarkan pengalaman
penulis selama belajar otodidak tentang mikrokontroler. Hanya cocok untuk diaplikasikan untuk
keperluannonprofesional,eksperimen,danhobby.

Banyaksekalikompilerberbahasaleveltinggi(C,BASIC,PASCAL,dll)yangbertebarandiInternetdan
sebagianditawarkansecaragratis.SalahsatunyaadalahkompilermenggunakanbahasaBASICuntuk
mikrokontroler produk AVR, yaitu BASCOM. Hingga saat tulisan ini ditulis, MCS Electronics
pemroduksi BASCOM hanya dikembangkan untuk mikrokontroler produk ATMEL, yaitu 8051 dan
AVR. Namun disini akan dibahas AVR saja. MSC memberikan kesempatan kepada kita untuk
mendownloadversidemodenganketerbatasanbesarnyafilecodehanyasampaidengan4KBsaja,
danbagiyangberminatsilakanmengikutilinkberikut:
http://www.mcselec.com/index.php?option=com_docman&task=cat_view&gid=99&Itemid=54

Mungkin ada yang bertanya 4KB code itu besar atau kecil. Saya ambil contoh saja AVR ATMEGA8
memilikiprogrammemory(memoritempatmenyimpankodeprogram)sebesar8KB,artinyaadalah
50%daritotalkapasitanya,menurutsayauntukkeperluanbelajardanhobbysudahsangatbesar.
Marikitaambilcontoh:
Sebuah HF Frequency Counter dengan tampilan LCD, dilengkapi dengan fitur Autoranging
Display,IFShiftedDisplaydanmanipulasiEEPROMyangtelahsayabuathanyamembutuhkan
40%daritotalprogrammemoryATMEGA8atauhanya3.2KB.
SebuahFLL(FrequencyLockedLoop),yangdidalamnyaberisiFrequencyCounter,Autoranging
Display,IFShifteddisplay,EEPROMManipulationdanLockingMechanismdenganPWMhanya
membutuhkan48%daritotalprogrammemoryATMEGA8atauhanya3.84KB.
Mudahmudahan ketiga contoh projects diatas bisa memberikan gambaran bahwa 4KB di dalam
pemrogramanmikrokontroleradalahsangatsangatberarti.

MENGGUNAKANBASCOM

Sepertiyangtelahsayasebutkandiatas,bahwaapayangsayasampaikandisinibisajadibukanlah
prosedurpalingtepatsesuairekomendasiBASCOM,namunhanyapraktikyangbiasasayalakukan.
Jadihanyacocokuntukeksperimensajadansegalaresikomohonmaaf,silakanditanggungsendiri.
Hehehe.

Sayatidakmauberteleteleuntukmenjelaskanberbagaihalyangsudahmulaimenyentuhteoriatau
halhal terkait text book, karena tidak cocok dengan metode belajar kita, yang menuntuk instan
sertakonsentrasihalhalyangbiasakitaperlukansajauntukmembangunprojectprojecthobby.

SETTINGENVIRONTMENTBASCOM

Saya hanya asal comot saja penyebutan prosedur ini, silakan anda namakan apa saja yang jelas
prosedurinimemastikanbahwaenvirontmentdarikompilerBASCOMsesuaidenganmikrokontroler
yangsedang kitabuatfirmwarenya. Settingini hanyamelekat kepadasatu filefirmwaresaja,jadi
setiapmembuatfilefirmwareharusdilakukanprosedurini.Berikutlangkahutamanya.
1|P a g e


IlustrasiGrafis

IlustrasiDeskriptif
1. Langkahpertama,bukaaplikasi
BASCOM.
2. Buatfilefirmwareyangbaru,beri
namasesuaidengankeinginan
anda(bacaprosedurpembuatan
firmwaredibawah).

3. PadaMenuBar(Atas),clickOption
>>Compiler>>Chip
4. PadadialogboxOption,pada
menubarclickChip>>Chip:sesuai
denganmikrokontroleryang
sedangdikerjakan,contohdisini
adalahATMEGA8,makapilih
m8def.dat
5. Simpanfiletersebut

Sebenarnyakenapakitaharusmelakukansettingdasarini?

Karena seluruh command atau library yang terkait dengan mikrokontroler tersebut disimpan pada
file m8def.dat (untuk ATMEGA8). Isi file ini diantaranya adalah deklarasi variablevariable default
darimikrokontroler.

Prosedurinisebenarnyaperlukitalakukanuntukmemaksakompileruntukmelakukanaktivitasnya
bagi mikrokontroler tertentu. Prosedur serupa, namun metodenya lain bisa kita lakukan dengan
melakukannyadidalamfirmware.Biasanyakitatuliskan/lakukanpadabaristeratasfirmwarekita,
dengancontohsyntax:

$regfile = m8def.dat
$crystal = 8000000

untuk memaksa environtment compiler ATMEGA-8


memberitahu compiler bahwa Xtal yang dipakai adalah 8MHz

Nah, kebiasaan saya adalah melakukan keduaduanya. Silakan anda yang memilih sesuai kesukaan
anda.

2|P a g e

MEMBUATFIRMWAREBARU

IlustrasiGrafis

IlustrasiDeskriptif
1. BukaBASCOM
2. PadaMenuBar(Atas),click
File>>New

3. PadadialogboxSaveAs,
berinamafilefirmware,
sayaanjurkanuntuk
menyimpan1project/
firmwaredalam1direktori
berbeda,karenasetelah
dikompilenantiakan
munculfilefiletambahan
lainnya,sehinggalebih
mudah
mengorganisasikannya

4. ClickSave
5. PadaMenuBar(Atas),click
Option>>Compiler>>Chip

3|P a g e

IlustrasiGrafis

IlustrasiDeskriptif
6. PadadialogboxOption,
padamenubarclickChip
>>Chip:sesuaidengan
mikrokontroleryang
sedangdikerjakan,contoh
disiniadalahATMEGA8,
makapilihm8def.dat
7. Simpankembalifile
tersebut
8. Sekarangfilefirmwaredan
environmentBASCOM
telahsesuaidengan
ATMEGA8

MENULISFIRMWARE

Gayacaramenulissebuahprogramataufirmwaresangatbervariasidanunikuntukmasingmasing
individu, namun sekali lagi saya akansampaikan disini kebiasaan saya menuliskan, silakan memilih
sendirigayapenulisanyangsesuai.

------------------------------------------------------- 1. Judul Project, deskripsi dan sebagainya


------------------------------------------------------- 2. Environtment untuk kompiler (compiler directives)
------------------------------------------------------- 3. Setup-setup PORT IO, dll
------------------------------------------------------- 4. Deklarasi Variables
------------------------------------------------------- 5. Program Loop Utama
------------------------------------------------------- 6. Kumpulan Function/ Subroutine
--------------------------------------------------------

Berikut contoh gaya penulisan project Digital Voltmeter using AVR yang telah saya buat untuk
ATMEGA16 dengan external Crystal sebesar 8MHz, sekali lagi gaya penulisan tergantung dengan
masingmasingorang,silakanmenyesuaikan.

'---------------------------------------------------------------------------'1. Project title and Description


'

Project: Digital Voltmeter

'

Designed by Cholis Safrudin YD1CHS

'

-----------------------------------

'

Using ADC to sense the voltage variation from the divider circuit

'

Displaying into LCD

'----------------------------------------------------------------------------

4|P a g e

'2. Compiler Directives


'---------------------------------------------------------------------------$regfile = "m16def.dat"

'Atmega-16

$crystal = 8000000

'Xtal 8MHz

'3. Setup Port IO dan Hardware


'---------------------------------------------------------------------------Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , _
Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0

'4 bits mode, Port-C

Config Lcd = 16 * 2

'16x4 Characters LCD

Cls

'Clear Screen

Cursor Off

'Cursor is Off

Waitms 500

'Wait for 500ms

Config Adc = Single , Prescaler = Auto

'ADC Configuration

Start Adc

'Start ADC, not necessary since


'it started automatically

'4. Variable Declaration


'---------------------------------------------------------------------------Dim Bat_pow As Word

'Variable to Store Battery Power


'Word = 6 Bytes, value from 0 to

65535
Dim Bat_fact As Single
Factor

'Variable to Store Correction


'Single = 3 Bytes, value from 1.5

x 10^45 to 3.4 x 10^38


Dim Bat_volt As Single

'Variable to Store Battery Voltage


'Single = 3 Bytes, value from 1.5

x 10^45 to 3.4 x 10^38


Bat_fact = 12 / 508

'Set Battery Scale

'5. Print Welcome Messages & Wait until VCO is Steady state
'---------------------------------------------------------------------------Lcd "AVRLCD Voltmeter"

'Print 1st Message

Waitms 100

'wait

Lowerline

'go to line 2

Lcd "by Cholis YD1CHS"

'Print 2nd Message

Waitms 2000

'wait for 2000ms

Cls

'Clear Screen

'6. Main Program Loop - Battery's Power Testing dan Display Into LCD
'---------------------------------------------------------------------------' Battery is 12V, using external resistors as scaler 18K//4.7K
' Battery is 12V, Vmax = (4.7K // 18K)*12 = 2.484581
' 5V input is indicates by 1024, so that 2.484581 is indicates by 508
' So that, 1 = 12/508 = This is a correction factor

5|P a g e

Do
Bat_pow = Getadc(0)

'Get Batt Power at ADC0

Bat_volt = Bat_pow * Bat_fact

'Get a riil voltage value

If Bat_pow < 430 Then

'Battery is low, warn to user

Lcd "Batt. Power: BAD"

'Print "Batt. Power: BAD"

Lowerline

'go to line 2

Lcd Fusing(bat_volt , "##.##") ; " Volts"

'Print Battery Voltage Value

Waitms 1000

'wait

Else

'Battery is Good

Lcd "Batt. Power: OK"

'Print "Batt. Power: OK"

Lowerline

'go to line 2

Lcd Fusing(bat_volt , "##.##") ; " Volts"

'Print Battery Voltage Value

Waitms 1000

'wait

End If
Cls

'Clear Screen

Loop

'Repeated again

End

'end program

MENGKOMPILEFIRMWARE

Sayayakinsemuatelahmengetahuiprosesapaini,palinggampangnyangomongadalahmengubah
firmwaredaribahasatingkattinggi,melingkingkandenganberbagaihal,kemudianmerubahnyake
bahasa mesin, sehingga siap untuk didownload ke uP. Berikut ilustrasi menarik, hirarki dari
tingkatantingkatanbahasapemrograman.
Ilustrasi disampaing saya ambil dari
http://www.webopedia.com/TERM/H/high_level
_language.html

Menempati puncak piramida atau yang biasa


disebutdenganbahasatingkattinggi(maksudnya
bahasa yang paling dekat dengan bahasa
manusia). Makin ke bawah posisinya di dalam
piramida ini, maka bahasa tersebut makin sulit
dimengerti oleh manusia. Makanya di satu
tingkat sebelum dasar piramida biasa disebut
denganbahasamesin(palingdasarsendiriadalah
hardware, dalam hal ini misalnya adalah
mikrokontrolerAVR,PIC,dll).

OK, kembali ke tangga tertinggi, yaitu bahasa tingkat tinggi, ilustrasi tersebut mencontohkan
beberapadiantaranya:Fortran,C,PascalihikihikBASICnggakdisebutkarenaterlalugampangdan
biasa disebut bahasa anakanak. Kasihan dech hehehe. Dalam topik belajar bareng ini, bahasa
tingkattinggiakandiwakiliolehfiledenganekstensi*.bas(bassingkatandariBASIC).

PadasaatBASCOMmelakukanCompile,makaakandiproduksibeberapafilelangsungyangmewakili
masingmasingtingkatanbahasadiatas.Filedenganekstensi*.asm(asmsingkatandariAssembler)
adalah mewakili tingkatan Assembly Language. Dan satu lagi file dengan ekstensi *.hex (hex
6|P a g e

singkatanhexadecimalsebabisinyafileinihanyalahkodekodehexadecimaldanhanyadikenalioleh
mesin atau mikrokontroler saja) yang mewakili tingkatan Machine Language. Beberapa file lainnya
yang diproduksi oleh BASCOM adalah filefile selama proses linking dan sebagainya, namun kita
palingbanyakakanberkepentinganhanyapadaduamacamfilesaja*.basdan*.hex.

Dengansatukalimatperjalananfirmwaretersebutadalah*.bas*.asm*.hex,prosesiniyang
disebutcompiling.

NahcaramelakukancompilingdiBASCOMditunjukkandenganprosedurberikut:

IlustrasiGrafis

IlustrasiDeskriptif

Gambardisamping
memperlihatkanisifolder
projectLCDVoltmeter,tampak
sepelumdilakukancompiling
hanyaada1file*.bassaja
1. Untukmengcompile,lakukan
savedulufile*.bas,lalupada
topbarmenuProgram>>
Compile.Bisajugadilakukan
denganmenekantombolF7,
ataubisajugadenganclickicon
bergambar

IC.

2. Tunggusebentar,makaakan
munculdialogBOXstatus
compiling,FlashUsed:11%
memperlihatkanjumlah
memoryyangdipakai.Karena
projectinimemakaiATMEGA
16denganFlashMemory16kB,
maka11%*16kB=1.76kB
3. Bilatidakadapesanerror,maka
firmwaretersebuttelahselesai
dicompile
Gambardisamping
memperlihatkanpertambahan
jumlahfilesetelahdilakukan
compiling.
Fileyangterpentinguntuk
prosesberikutnyaadalah*.bas
dan*.hex
Filedengannama
LCD_VM_AT16.hexyangakan
kitaburningkemikrokontroler

7|P a g e

KESIMPULAN

Tulisan sederhana ini berusaha memberikan petunjuk sederhana dalam mengoperasikan aplikasi
BASCOM.

BASCOM juga menyediakan HELP file yang akan memberikan panduan kepada kita dalam upaya
lebihmendalamiaplikasiini.

Semogamaterisederhanainibergunadeyd1chs

8|P a g e

Anda mungkin juga menyukai